@@ -731,6 +731,8 @@ def fgraph_to_python(
731731 if global_env is None:
732732 global_env = {}
733733
734+ tipifiyed_vars = set()
735+
734736 body_assigns = []
735737 for node in order:
736738 compiled_func = op_conversion_fn(
@@ -742,17 +744,22 @@ def fgraph_to_python(
742744 global_env[local_compiled_func_name] = compiled_func
743745
744746 node_input_names = []
745- for i in node.inputs:
746- local_input_name = unique_name(i)
747+ for inp in node.inputs:
748+ local_input_name = unique_name(inp)
749+ is_constant = isinstance(inp, Constant)
747750 input_storage = storage_map.setdefault(
748- i , [None if not isinstance(i, Constant) else i.data ]
751+ inp , [inp.data if is_constant else None ]
749752 )
750- if input_storage[0] is not None or isinstance(i, Constant):
753+ if (
754+ is_constant or input_storage[0] is not None
755+ ) and inp not in tipifiyed_vars:
751756 # Constants need to be assigned locally and referenced
752757 global_env[local_input_name] = type_conversion_fn(
753- input_storage[0], variable=i , storage=input_storage, **kwargs
758+ input_storage[0], variable=inp , storage=input_storage, **kwargs
754759 )
760+ tipifiyed_vars.add(inp)
755761 # TODO: We could attempt to use the storage arrays directly
762+ # Otherwise we're doubling the memory footprint of constants
756763 # E.g. `local_input_name = f"{local_input_name}[0]"`
757764 node_input_names.append(local_input_name)
758765
0 commit comments