Skip to content

Commit d8ba32c

Browse files
author
Niek Wielders
committed
test zeta_from different
1 parent bb49158 commit d8ba32c

1 file changed

Lines changed: 72 additions & 48 deletions

File tree

autogalaxy/profiles/mass/stellar/gaussian.py

Lines changed: 72 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -196,59 +196,83 @@ def axis_ratio(self, xp=np):
196196

197197
def zeta_from(self, grid: aa.type.Grid2DLike, xp=np):
198198

199-
#from scipy.special import wofz
199+
from scipy.special import wofz
200200

201201
q = self.axis_ratio(xp)
202202
q2 = q ** 2.0
203-
ind_pos_y = grid.array[:, 0] >= 0
204-
shape_grid = xp.shape(grid)
205-
output_grid = xp.zeros((shape_grid[0]), dtype=xp.complex128)
206-
scale_factor = q / (self.sigma * xp.sqrt(2.0 * (1.0 - q2)))
207-
208-
xs_0 = grid.array[:, 1][ind_pos_y] * scale_factor
209-
ys_0 = grid.array[:, 0][ind_pos_y] * scale_factor
210-
xs_1 = grid.array[:, 1][~ind_pos_y] * scale_factor
211-
ys_1 = -grid.array[:, 0][~ind_pos_y] * scale_factor
212-
213-
if xp == np:
214-
from scipy.special import wofz
215-
216-
output_grid[ind_pos_y] = -1j * (
217-
wofz(xs_0 + 1j * ys_0)
218-
- np.exp(-(xs_0 ** 2.0) * (1.0 - q2) - ys_0 * ys_0 * (1.0 / q2 - 1.0))
219-
* wofz(q * xs_0 + 1j * ys_0 / q)
220-
)
221-
222-
output_grid[~ind_pos_y] = np.conj(
223-
-1j
224-
* (
225-
wofz(xs_1 + 1j * ys_1)
226-
- np.exp(-(xs_1 ** 2.0) * (1.0 - q2) - ys_1 * ys_1 * (1.0 / q2 - 1.0))
227-
* wofz(q * xs_1 + 1j * ys_1 / q)
228-
)
229-
)
230-
231-
if xp == jnp:
232-
233-
output_grid[ind_pos_y] = -1j * (
234-
self.wofz(xs_0 + 1j * ys_0, xp=xp)
235-
- xp.exp(-(xs_0**2.0) * (1.0 - q2) - ys_0 * ys_0 * (1.0 / q2 - 1.0))
236-
* self.wofz(q * xs_0 + 1j * ys_0 / q, xp=xp)
237-
)
238-
239-
output_grid[~ind_pos_y] = xp.conj(
240-
-1j
241-
* (
242-
self.wofz(xs_1 + 1j * ys_1, xp=xp)
243-
- xp.exp(-(xs_1**2.0) * (1.0 - q2) - ys_1 * ys_1 * (1.0 / q2 - 1.0))
244-
* self.wofz(q * xs_1 + 1j * ys_1 / q, xp=xp)
245-
)
246-
)
247203

248-
return output_grid
204+
y = grid.array[:, 0]
205+
x = grid.array[:, 1]
206+
207+
scale = q / (self.sigma * xp.sqrt(2.0 * (1.0 - q2)))
208+
209+
xs = x * scale
210+
ys = y * scale
211+
212+
z1 = xs + 1j * ys
213+
z2 = q * xs + 1j * ys / q
214+
215+
exp_term = xp.exp(-(xs ** 2) * (1.0 - q2) - ys ** 2 * (1.0 / q2 - 1.0))
216+
217+
core = -1j * (wofz(z1) - exp_term * wofz(z2))
218+
219+
# symmetry: zeta(x, -y) = conj(zeta(x, y))
220+
return xp.where(y >= 0, core, xp.conj(core))
221+
222+
# q = self.axis_ratio(xp)
223+
# q2 = q ** 2.0
224+
# ind_pos_y = grid.array[:, 0] >= 0
225+
# shape_grid = xp.shape(grid)
226+
# output_grid = xp.zeros((shape_grid[0]), dtype=xp.complex128)
227+
# scale_factor = q / (self.sigma * xp.sqrt(2.0 * (1.0 - q2)))
228+
#
229+
# xs_0 = grid.array[:, 1][ind_pos_y] * scale_factor
230+
# ys_0 = grid.array[:, 0][ind_pos_y] * scale_factor
231+
# xs_1 = grid.array[:, 1][~ind_pos_y] * scale_factor
232+
# ys_1 = -grid.array[:, 0][~ind_pos_y] * scale_factor
233+
#
234+
# if xp == np:
235+
# from scipy.special import wofz
236+
#
237+
# output_grid[ind_pos_y] = -1j * (
238+
# wofz(xs_0 + 1j * ys_0)
239+
# - np.exp(-(xs_0 ** 2.0) * (1.0 - q2) - ys_0 * ys_0 * (1.0 / q2 - 1.0))
240+
# * wofz(q * xs_0 + 1j * ys_0 / q)
241+
# )
242+
#
243+
# output_grid[~ind_pos_y] = np.conj(
244+
# -1j
245+
# * (
246+
# wofz(xs_1 + 1j * ys_1)
247+
# - np.exp(-(xs_1 ** 2.0) * (1.0 - q2) - ys_1 * ys_1 * (1.0 / q2 - 1.0))
248+
# * wofz(q * xs_1 + 1j * ys_1 / q)
249+
# )
250+
# )
251+
#
252+
# if xp == jnp:
253+
# z1 = xs_0 + 1j * ys_0
254+
# z2 = q * xs_0 + 1j * ys_0 / q
255+
# output_grid[ind_pos_y] = -1j * (
256+
# xp.exp(- z1 * z1) * jsp.erfc(- 1j * z1)
257+
# - xp.exp(-(xs_0**2.0) * (1.0 - q2) - ys_0 * ys_0 * (1.0 / q2 - 1.0))
258+
# * xp.exp(- z2 * z2) * jsp.erfc(- 1j * z2)
259+
# )
260+
#
261+
# z1 = xs_1 + 1j * ys_1
262+
# z2 = q * xs_1 + 1j * ys_1 / q
263+
# output_grid[~ind_pos_y] = xp.conj(
264+
# -1j
265+
# * (
266+
# xp.exp(- z1 * z1) * jsp.erfc(- 1j * z1)
267+
# - xp.exp(-(xs_1**2.0) * (1.0 - q2) - ys_1 * ys_1 * (1.0 / q2 - 1.0))
268+
# * xp.exp(- z2 * z2) * jsp.erfc(- 1j * z2)
269+
# )
270+
# )
271+
#
272+
# return output_grid
249273

250-
def wofz(self, z, xp=np):
251-
return xp.exp(- z * z) * jsp.erfc(- 1j * z)
274+
# def wofz(self, z, xp=np):
275+
# return xp.exp(- z * z) * jsp.erfc(- 1j * z)
252276

253277
# def wofz(self, z, xp=np):
254278
# """

0 commit comments

Comments
 (0)