class_docstr: A wrapper of ode for complex systems.
  
  This functions similarly as `ode`, but re-maps a complex-valued
  equation system to a real-valued one before using the integrators.
  
  Parameters
  ----------
  f : callable ``f(t, y, *f_args)``
      Rhs of the equation. t is a scalar, ``y.shape == (n,)``.
      ``f_args`` is set by calling ``set_f_params(*args)``.
  jac : callable ``jac(t, y, *jac_args)``
      Jacobian of the rhs, ``jac[i,j] = d f[i] / d y[j]``.
      ``jac_args`` is set by calling ``set_f_params(*args)``.
  
  Attributes
  ----------
  t : float
      Current time.
  y : ndarray
      Current variable values.
  
  Examples
  --------
  For usage examples, see `ode`.
class_docstr_tok: ["A","wrapper","of","ode","for","complex","systems",".","This","functions","similarly","as","`","ode","`",",","but","re-maps","a","complex-valued","equation","system","to","a","real-valued","one","before","using","the","integrators",".","Parameters","--","--","--","--","--","f",":","callable","``","f","(","t",",","y",",","*","f_args",")","``","Rhs","of","the","equation",".","t","is","a","scalar",",","``","y.shape","==","(","n",",",")","``",".","``","f_args","``","is","set","by","calling","``","set_f_params","(","*","args",")","``",".","jac",":","callable","``","jac","(","t",",","y",",","*","jac_args",")","``","Jacobian","of","the","rhs",",","``","jac","[","i",",","j","]","=","d","f","[","i","]","\/","d","y","[","j","]","``",".","``","jac_args","``","is","set","by","calling","``","set_f_params","(","*","args",")","``",".","Attributes","--","--","--","--","--","t",":","float","Current","time",".","y",":","ndarray","Current","variable","values",".","Examples","--","--","--","--","For","usage","examples",",","see","`","ode","`","."]
code: def _wrap_jac(self, t, y, *jac_args):
      # jac is the complex Jacobian computed by the user-defined function.
      jac = self.cjac(*((t, y[::2] + 1j * y[1::2]) + jac_args))
  
      # jac_tmp is the real version of the complex Jacobian.  Each complex
      # entry in jac, say 2+3j, becomes a 2x2 block of the form
      #     [2 -3]
      #     [3  2]
      jac_tmp = zeros((2 * jac.shape[0], 2 * jac.shape[1]))
      jac_tmp[1::2, 1::2] = jac_tmp[::2, ::2] = real(jac)
      jac_tmp[1::2, ::2] = imag(jac)
      jac_tmp[::2, 1::2] = -jac_tmp[1::2, ::2]
  
      ml = getattr(self._integrator, "ml", None)
      mu = getattr(self._integrator, "mu", None)
      if ml is not None or mu is not None:
          # Jacobian is banded.  The user's Jacobian function has computed
          # the complex Jacobian in packed format.  The corresponding
          # real-valued version has every other column shifted up.
          jac_tmp = _transform_banded_jac(jac_tmp)
  
      return jac_tmp
  
imports: import re
  import warnings
  from numpy import asarray, array, zeros, isscalar, real, imag, vstack
  from .None import vode
  from .None import _dop
  from .None import lsoda
label_desc: Use image node_id 3 for calling the complex_ode obj's underlying member method code with example usage: obj._wrap_jac(t, y) and returns: jac_tmp