@@ -99,7 +99,7 @@ def _coffman_graham_ranking(dag):
9999 levels [node ] = level
100100
101101 for layer in layers :
102- layer .reverse ( )
102+ layer .sort ( key = lambda node : node . node_id )
103103 return layers
104104
105105
@@ -346,7 +346,8 @@ def step(self):
346346
347347class _DAGNodeBase (object ):
348348 # pylint: disable=too-few-public-methods
349- def __init__ (self , cmd , * args ):
349+ def __init__ (self , node_id , cmd , * args ):
350+ self .node_id = node_id
350351 self .logical_ids = frozenset (args )
351352 self .cmd = cmd
352353 self .compatible_successor_cmds = []
@@ -368,8 +369,8 @@ class _DAGNodeSingle(_DAGNodeBase):
368369 """
369370
370371 # pylint: disable=too-few-public-methods
371- def __init__ (self , cmd , logical_id ):
372- super (_DAGNodeSingle , self ).__init__ (cmd , logical_id )
372+ def __init__ (self , node_id , cmd , logical_id ):
373+ super (_DAGNodeSingle , self ).__init__ (node_id , cmd , logical_id )
373374 self .logical_id = logical_id
374375
375376
@@ -380,8 +381,9 @@ class _DAGNodeDouble(_DAGNodeBase):
380381 """
381382
382383 # pylint: disable=too-few-public-methods
383- def __init__ (self , cmd , logical_id0 , logical_id1 ):
384- super (_DAGNodeDouble , self ).__init__ (cmd , logical_id0 , logical_id1 )
384+ def __init__ (self , node_id , cmd , logical_id0 , logical_id1 ):
385+ super (_DAGNodeDouble , self ).__init__ (node_id , cmd , logical_id0 ,
386+ logical_id1 )
385387 self .logical_id0 = logical_id0
386388 self .logical_id1 = logical_id1
387389
@@ -393,6 +395,7 @@ class CommandDAG(object):
393395 """
394396 def __init__ (self ):
395397 self ._dag = nx .DiGraph ()
398+ self ._node_id = 0
396399 self ._logical_ids_in_diag = set ()
397400 self .near_term_layer = []
398401
@@ -430,6 +433,7 @@ def clear(self):
430433 Remove all nodes from the DAG and all layers.
431434 """
432435 self ._dag .clear ()
436+ self ._node_id = 0
433437 self ._logical_ids_in_diag = set ()
434438 self .near_term_layer = []
435439
@@ -466,7 +470,8 @@ def add_command(self, cmd):
466470 self ._back_layer [logical_ids [1 ]].append_compatible_cmd (cmd )
467471 return
468472
469- new_node = _DAGNodeDouble (cmd , * logical_ids )
473+ new_node = _DAGNodeDouble (self ._node_id , cmd , * logical_ids )
474+ self ._node_id += 1
470475 self ._dag .add_node (new_node )
471476
472477 if logical_id0_in_dag :
@@ -490,7 +495,8 @@ def add_command(self, cmd):
490495 logical_id_in_dag = logical_id in self ._logical_ids_in_diag
491496
492497 if isinstance (cmd .gate , (AllocateQubitGate , DeallocateQubitGate )):
493- new_node = _DAGNodeSingle (cmd , logical_id )
498+ new_node = _DAGNodeSingle (self ._node_id , cmd , logical_id )
499+ self ._node_id += 1
494500 self ._dag .add_node (new_node )
495501
496502 if logical_id_in_dag :
@@ -502,7 +508,8 @@ def add_command(self, cmd):
502508 self ._layers_up_to_date = False
503509 else :
504510 if not logical_id_in_dag :
505- new_node = _DAGNodeSingle (cmd , logical_id )
511+ new_node = _DAGNodeSingle (self ._node_id , cmd , logical_id )
512+ self ._node_id += 1
506513 self ._dag .add_node (new_node )
507514 self ._logical_ids_in_diag .add (logical_id )
508515
@@ -582,7 +589,7 @@ def calculate_qubit_interaction_subgraphs(self, max_order=2):
582589 break
583590 else :
584591 continue # only executed if the inner loop did NOT break
585- break # only executed if the inner loop DID break
592+ break # only executed if the inner loop DID break
586593
587594 return [
588595 sorted (graph .subgraph (g ),
0 commit comments