code: def _check_targets_input(targets, data):
  
      
  
      if isinstance(targets, np.ndarray) or isinstance(targets, list):
          targets, n_TRs, n_voxels, n_subjects = (
              _check_timeseries_input(targets))
          if data.shape[0] != n_TRs:
              raise ValueError("Targets array must have same number of "
                               "TRs as input data")
          if data.shape[2] != n_subjects:
              raise ValueError("Targets array must have same number of "
                               "subjects as input data")
          symmetric = False
      else:
          targets = data
          n_TRs, n_voxels, n_subjects = data.shape
          symmetric = True
  
      return targets, n_TRs, n_voxels, n_subjects, symmetric
docs: Checks ISFC targets input array
  
      For ISFC analysis, targets input array should either be a list
      of n_TRs by n_targets arrays (where each array corresponds to
      a subject), or an n_TRs by n_targets by n_subjects ndarray. This
      function also checks the shape of the targets array against the
      input data array.
  
      Parameters
      ----------
      data : list or ndarray (n_TRs x n_voxels x n_subjects)
          fMRI data for which to compute ISFC
  
      targets : list or ndarray (n_TRs x n_voxels x n_subjects)
          fMRI data to use as targets for ISFC
  
      Returns
      -------
      targets : ndarray (n_TRs x n_voxels x n_subjects)
          ISFC targets with standadized structure
  
      n_TRs : int
          Number of time points (TRs) for targets array
  
      n_voxels : int
          Number of voxels (or ROIs) for targets array
  
      n_subjects : int
          Number of subjects for targets array
  
      symmetric : bool
          Indicator for symmetric vs. asymmetric