code: def make_sens_ic(n_states, n_theta, floatX):
      r"""
      The sensitivity matrix will always have consistent form. (n_states, n_states + n_theta)
  
      If the first n_states entries of the parameters vector in the simulate call
      correspond to initial conditions of the system,
      then the first n_states columns of the sensitivity matrix should form
      an identity matrix.
  
      If the last n_theta entries of the parameters vector in the simulate call
      correspond to ode parameters, then the last n_theta columns in
      the sensitivity matrix will be 0.
  
      Parameters
      ----------
      n_states : int
          Number of state variables in the ODE
      n_theta : int
          Number of ODE parameters
      floatX : str
          dtype to be used for the array
  
      Returns
      -------
      dydp : array
          1D-array of shape (n_states * (n_states + n_theta),), representing the initial condition of the sensitivities
      """
  
      # Initialize the sensitivity matrix to be 0 everywhere
      sens_matrix = np.zeros(
          (n_states, n_states + n_theta), dtype=floatX
      )
  
      # Slip in the identity matrix in the appropriate place
      sens_matrix[:, :n_states] = np.eye(n_states, dtype=floatX)
  
      # We need the sensitivity matrix to be a vector (see augmented_function)
      # Ravel and return
      dydp = sens_matrix.ravel()
      return dydp
  
imports: import numpy
  import pytensor
  import pytensor.tensor
label_desc: Use image node_id 1 for calling a global function with example usage: make_sens_ic(n_states, n_theta, floatX) and returns: dydp