code: def image2source(self, x, y, kwargs_lens, idex_source):
          
          if self._multi_source_plane is False:
              x_source, y_source = self._lensModel.ray_shooting(x, y, kwargs_lens)
          else:
              if self._multi_lens_plane is False:
                  x_alpha, y_alpha = self._lensModel.alpha(x, y, kwargs_lens)
                  scale_factor = self._deflection_scaling_list[idex_source]
                  x_source = x - x_alpha * scale_factor
                  y_source = y - y_alpha * scale_factor
              else:
                  z_stop = self._source_redshift_list[idex_source]
                  x_comov, y_comov, alpha_x, alpha_y = self._lensModel.lens_model.ray_shooting_partial(0, 0, x, y,
                                                                                                       0, z_stop,
                                                                                                       kwargs_lens,
                                                                                                       keep_range=False,
                                                                                                       include_z_start=False)
  
                  T_z = self._bkg_cosmo.T_xy(0, z_stop)
                  x_source = x_comov / T_z
                  y_source = y_comov / T_z
          return x_source, y_source
docs: mapping of image plane to source plane coordinates
          WARNING: for multi lens plane computations and multi source planes, this computation can be slow and should be
          used as rarely as possible.
  
          :param x: image plane coordinate
          :param y: image plane coordinate
          :param kwargs_lens: lens model kwargs list
          :param idex_source: int, index of source model
          :return: source plane coordinate corresponding to the source model of index idex_source