@@ -95,7 +95,8 @@ def export_node(self, node: Node) -> Optional[model.Node]:
95
95
)
96
96
97
97
case FuncDefn () as op :
98
- symbol = self .export_symbol (op .f_name , op .signature .params , op .signature .body )
98
+ name = _mangle_name (node , op .f_name )
99
+ symbol = self .export_symbol (name , op .signature .params , op .signature .body )
99
100
region = self .export_region_dfg (node )
100
101
101
102
return model .Node (
@@ -104,7 +105,8 @@ def export_node(self, node: Node) -> Optional[model.Node]:
104
105
)
105
106
106
107
case FuncDecl () as op :
107
- symbol = self .export_symbol (op .f_name , op .signature .params , op .signature .body )
108
+ name = _mangle_name (node , op .f_name )
109
+ symbol = self .export_symbol (name , op .signature .params , op .signature .body )
108
110
return model .Node (
109
111
operation = model .DeclareFunc (symbol ),
110
112
)
@@ -399,16 +401,16 @@ def export_symbol(
399
401
params = []
400
402
401
403
for i , param_type in enumerate (param_types ):
402
- name = str (i )
404
+ param_name = str (i )
403
405
404
406
params .append (model .Param (
405
- name = name ,
407
+ name = param_name ,
406
408
type = param_type .to_model ()
407
409
))
408
410
409
411
match param_type :
410
412
case TypeTypeParam (bound = TypeBound .Copyable ):
411
- constraints .append (model .Apply ("core.nonlinear" , [model .Var (name )]))
413
+ constraints .append (model .Apply ("core.nonlinear" , [model .Var (param_name )]))
412
414
case _:
413
415
pass
414
416
@@ -432,12 +434,14 @@ def find_func_input(self, node: Node) -> Optional[str]:
432
434
433
435
match self .hugr [func_node ].op :
434
436
case FuncDecl () as func_op :
435
- return func_op .f_name
437
+ name = func_op .f_name
436
438
case FuncDefn () as func_op :
437
- return func_op .f_name
439
+ name = func_op .f_name
438
440
case _:
439
441
return None
440
442
443
+ return _mangle_name (node , name )
444
+
441
445
def find_const_input (self , node : Node ) -> Optional [model .Term ]:
442
446
try :
443
447
const_node = next (
@@ -455,6 +459,11 @@ def find_const_input(self, node: Node) -> Optional[model.Term]:
455
459
case op :
456
460
return None
457
461
462
+ def _mangle_name (node : Node , name : str ) -> str :
463
+ # Until we come to an agreement on the uniqueness of names, we mangle the names
464
+ # by adding the node id.
465
+ return f"_{ name } _{ node .idx } "
466
+
458
467
class UnionFind [T ]:
459
468
def __init__ (self ):
460
469
self .parents : dict [T , T ] = {}
@@ -486,8 +495,3 @@ def union(self, a: T, b: T):
486
495
487
496
self .parents [b ] = a
488
497
self .sizes [a ] += self .sizes [b ]
489
-
490
-
491
- # def find_static_input(hugr: Hugr, node: Node) -> Optional[Node]:
492
- # for (in_port, out_ports) in hugr.incoming_links(node):
493
- # if hugr.port_kind(in_port) == Function
0 commit comments