def image2source(self, x, y, kwargs_lens, idex_source):
        """
        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
        """
        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