@@ -184,81 +184,3 @@ def ifelse(condition, true_expr, false_expr):
184184 TernaryOperator .IfThenElse , condition , true_expr , false_expr
185185 )
186186 return new_expression
187-
188-
189- class DynamicTable :
190- def __init__ (self ):
191- self ._data = {}
192-
193- def __getattr__ (self , name ):
194- if name not in self ._data :
195- self ._data [name ] = self ._create ()
196- return self ._data [name ]
197-
198- def __len__ (self ):
199- return len (self ._data )
200-
201- def _names (self ):
202- return list (self ._data .keys ())
203-
204- def _create (self ):
205- pass
206-
207-
208- class VariableTable (DynamicTable ):
209- def _create (self ):
210- graph = ExpressionGraphContext .current_graph ()
211- variable = graph .add_variable (len (self ))
212- return variable
213-
214-
215- class ParameterTable (DynamicTable ):
216- def _create (self ):
217- graph = ExpressionGraphContext .current_graph ()
218- parameter = graph .add_parameter (len (self ))
219- return parameter
220-
221-
222- class FunctionTracingResult :
223- def __init__ (self , graph , results , variable_names , parameter_names ):
224- self .graph = graph
225- self .results = results
226- self .variable_names = variable_names
227- self .parameter_names = parameter_names
228-
229- # record the inverse mapping from name to index
230- self .variable_indices_map = {name : i for i , name in enumerate (variable_names )}
231- self .parameter_indices_map = {name : i for i , name in enumerate (parameter_names )}
232-
233- def n_variables (self ):
234- return len (self .variable_names )
235-
236- def n_parameters (self ):
237- return len (self .parameter_names )
238-
239- def n_outputs (self ):
240- return len (self .results )
241-
242-
243- def trace_function (f ):
244- with ExpressionGraphContext () as graph :
245- vars = VariableTable ()
246- params = ParameterTable ()
247-
248- # detect the number of arguments f receives
249- # 1: f(vars)
250- # 2: f(vars, params)
251- # >2: error
252- n_args = len (inspect .signature (f ).parameters )
253- if n_args == 1 :
254- results = f (vars )
255- elif n_args == 2 :
256- results = f (vars , params )
257- else :
258- raise ValueError ("Function to trace must receive either 1 or 2 arguments" )
259-
260- # The results might be a scalar expressions or a list of scalar expressions
261- if isinstance (results , ExpressionHandle ):
262- results = [results ]
263-
264- return FunctionTracingResult (graph , results , vars ._names (), params ._names ())
0 commit comments