@@ -53,14 +53,22 @@ def load_pde_variant(variant_name, generators_path=None):
5353 print (f"Warning: PDE variant file not found: { file_path } " )
5454 return None
5555
56- # Dynamic import — use fully-qualified module name so PyG's inspector resolves correctly
56+ # Use standard import machinery — required for PyG's JIT propagate compilation.
5757 module_name = f"ParticleGraph.generators.PDE_Diffusiophoresis_{ variant_suffix } "
58- spec = importlib .util .spec_from_file_location (module_name , file_path )
59- module = importlib .util .module_from_spec (spec )
60- # Register in sys.modules BEFORE exec_module so PyG's inspector can find it
6158 import sys
62- sys .modules [module_name ] = module
63- spec .loader .exec_module (module )
59+ import importlib
60+ importlib .invalidate_caches ()
61+
62+ if module_name in sys .modules :
63+ module = importlib .reload (sys .modules [module_name ])
64+ else :
65+ try :
66+ module = importlib .import_module (module_name )
67+ except ImportError :
68+ spec = importlib .util .spec_from_file_location (module_name , file_path )
69+ module = importlib .util .module_from_spec (spec )
70+ sys .modules [module_name ] = module
71+ spec .loader .exec_module (module )
6472
6573 # Get the PDE class (expected name: PDE_Diffusiophoresis_{suffix})
6674 class_name = f"PDE_Diffusiophoresis_{ variant_suffix } "
@@ -115,14 +123,26 @@ def load_pde_d_variant(variant_name, generators_path=None):
115123 print (f"Warning: PDE_D variant file not found: { file_path } " )
116124 return None
117125
118- # Dynamic import — use fully-qualified module name so PyG's inspector resolves correctly
126+ # Use standard import machinery — required for PyG's JIT propagate compilation.
127+ # spec_from_file_location creates an incomplete module spec that breaks PyG's
128+ # Jinja-based propagate module generation (AttributeError on _propagate).
119129 module_name = f"ParticleGraph.generators.PDE_D_{ variant_suffix } "
120- spec = importlib .util .spec_from_file_location (module_name , file_path )
121- module = importlib .util .module_from_spec (spec )
122- # Register in sys.modules BEFORE exec_module so PyG's inspector can find it
123130 import sys
124- sys .modules [module_name ] = module
125- spec .loader .exec_module (module )
131+ import importlib
132+ importlib .invalidate_caches () # Handle recently-created files
133+
134+ if module_name in sys .modules :
135+ # Reload to pick up any modifications (e.g., LLM-edited files)
136+ module = importlib .reload (sys .modules [module_name ])
137+ else :
138+ try :
139+ module = importlib .import_module (module_name )
140+ except ImportError :
141+ # Fallback: file-based import for files outside standard package structure
142+ spec = importlib .util .spec_from_file_location (module_name , file_path )
143+ module = importlib .util .module_from_spec (spec )
144+ sys .modules [module_name ] = module
145+ spec .loader .exec_module (module )
126146
127147 # Get the PDE_D class (expected name: PDE_D_{suffix})
128148 class_name = f"PDE_D_{ variant_suffix } "
0 commit comments