code: def arrival_time(self, theta_x, theta_y, kwargs_lens, k=None):
          
          dt_grav = np.zeros_like(theta_x)
          dt_geo = np.zeros_like(theta_x)
          x = np.zeros_like(theta_x)
          y = np.zeros_like(theta_y)
          alpha_x = theta_x
          alpha_y = theta_y
          i = 0
          for i, idex in enumerate(self._sorted_redshift_index):
              z_lens = self._redshift_list[idex]
              delta_T = self._T_ij_list[i]
              dt_geo_new = self._geometrical_delay(alpha_x, alpha_y, delta_T)
              x, y = self._ray_step(x, y, alpha_x, alpha_y, delta_T)
              dt_grav_new = self._gravitational_delay(x, y, kwargs_lens, i, z_lens)
              alpha_x, alpha_y = self._add_deflection(x, y, alpha_x, alpha_y, kwargs_lens, i)
              dt_geo = dt_geo + dt_geo_new
              dt_grav = dt_grav + dt_grav_new
          delta_T = self._T_ij_list[i + 1]
          dt_geo += self._geometrical_delay(alpha_x, alpha_y, delta_T)
          x, y = self._ray_step(x, y, alpha_x, alpha_y, delta_T)
          beta_x, beta_y = self._co_moving2angle_source(x, y)
          dt_geo -= self._geometrical_delay(beta_x, beta_y, self._T_z_source)
          return dt_grav + dt_geo
docs: light travel time relative to a straight path through the coordinate (0,0)
          Negative sign means earlier arrival time
  
          :param theta_x: angle in x-direction on the image
          :param theta_y: angle in y-direction on the image
          :param kwargs_lens:
          :return: travel time in unit of days