@@ -121,14 +121,25 @@ class PyFunctionPool(PyDifferentiableFunction):
121121 def __init__ (self , callback , functions , name = "" ):
122122 self ._callback = callback
123123 self ._functions = functions
124- self ._function = FunctionPool (callback ._function ,
125- [f ._function for f in functions ],
126- self ._formatName (name ))
124+ inSize = callback .inputSize ()
125+ outSize = sum ([f .outputSize () for f in functions ])
126+ self ._function = DifferentiableFunction (inSize , outSize ,
127+ self ._formatName (name ))
127128 bindCompute (self ._function ,
128129 lambda result , x : self .impl_compute (result , x ))
129130
131+ bindJacobian (self ._function ,
132+ lambda result , x : self .impl_jacobian (result , x ))
133+
130134 def impl_compute (self , result , x ):
131- compute (self ._function , result , x )
135+ # Run callback
136+ self ._callback (x )
137+ # Fill result
138+ pos = 0
139+ for f in self ._functions :
140+ size = f .outputSize ()
141+ result [pos :pos + size ] = f (x )
142+ pos += size
132143
133144 def impl_gradient (self , result , x , functionId ):
134145 raise NotImplementedError
0 commit comments