code: def eval_jacobian(self, *args, **kwargs):
          
          eval_jac_dict = self.jacobian_model(*args, **kwargs)._asdict()
          # Take zero for component which are not present, happens for Constraints
          jac = [[np.broadcast_to(eval_jac_dict.get(D(var, param), 0),
                                  eval_jac_dict[var].shape)
                  for param in self.params]
              for var in self
          ]
  
          # Use numpy to broadcast these arrays together and then stack them along
          # the parameter dimension. We do not include the component direction in
          # this, because the components can have independent shapes.
          for idx, comp in enumerate(jac):
              jac[idx] = np.stack(np.broadcast_arrays(*comp))
  
          Ans = variabletuple('Ans', self.keys())
          return Ans(*jac)
docs: :return: Jacobian evaluated at the specified point.