Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
)
# Rotate to the sky frame
# TODO: Do this in a single compound rotation
MT = self.dotR(
self.dotR(
self.dotR(
MT,
math.to_tensor(1.0),
math.to_tensor(0.0),
math.to_tensor(0.0),
0.5 * np.pi,
),
math.to_tensor(0.0),
math.to_tensor(0.0),
math.to_tensor(1.0),
-obl,
),
-tt.cos(obl),
-tt.sin(obl),
math.to_tensor(0.0),
(0.5 * np.pi - inc),
)
return tt.transpose(MT)
if self.ydeg == 0:
return M
# Rotate to the sky frame
# TODO: Do this in a single compound rotation
M = self.dotR(
self.dotR(
self.dotR(
M,
-tt.cos(obl),
-tt.sin(obl),
math.to_tensor(0.0),
-(0.5 * np.pi - inc),
),
math.to_tensor(0.0),
math.to_tensor(0.0),
math.to_tensor(1.0),
obl,
),
math.to_tensor(1.0),
math.to_tensor(0.0),
math.to_tensor(0.0),
-0.5 * np.pi,
)
# Rotate to the correct phase
if theta.ndim > 0:
M = self.tensordotRz(M, theta)
else:
M = self.dotR(
M,
math.to_tensor(0.0),
# TODO: Do this in a single compound rotation
M = self.dotR(
self.dotR(
self.dotR(
M,
-tt.cos(obl),
-tt.sin(obl),
math.to_tensor(0.0),
-(0.5 * np.pi - inc),
),
math.to_tensor(0.0),
math.to_tensor(0.0),
math.to_tensor(1.0),
obl,
),
math.to_tensor(1.0),
math.to_tensor(0.0),
math.to_tensor(0.0),
-0.5 * np.pi,
)
# Rotate to the correct phase
if theta.ndim > 0:
M = self.tensordotRz(M, theta)
else:
M = self.dotR(
M,
math.to_tensor(0.0),
math.to_tensor(0.0),
math.to_tensor(1.0),
theta,
)
obl,
),
math.to_tensor(1.0),
math.to_tensor(0.0),
math.to_tensor(0.0),
-0.5 * np.pi,
)
# Rotate to the correct phase
if theta.ndim > 0:
M = self.tensordotRz(M, theta)
else:
M = self.dotR(
M,
math.to_tensor(0.0),
math.to_tensor(0.0),
math.to_tensor(1.0),
theta,
)
# Rotate to the polar frame
M = self.dotR(
M,
math.to_tensor(1.0),
math.to_tensor(0.0),
math.to_tensor(0.0),
0.5 * np.pi,
)
# Apply the differential rotation
if self.diffrot:
if theta.ndim > 0:
),
math.to_tensor(1.0),
math.to_tensor(0.0),
math.to_tensor(0.0),
-0.5 * np.pi,
)
# Rotate to the correct phase
if theta.ndim > 0:
M = self.tensordotRz(M, theta)
else:
M = self.dotR(
M,
math.to_tensor(0.0),
math.to_tensor(0.0),
math.to_tensor(1.0),
theta,
)
# Rotate to the polar frame
M = self.dotR(
M,
math.to_tensor(1.0),
math.to_tensor(0.0),
math.to_tensor(0.0),
0.5 * np.pi,
)
# Apply the differential rotation
if self.diffrot:
if theta.ndim > 0:
M = self.tensordotD(M, -theta * alpha)
t, light_delay=self.light_delay
)
except TypeError:
if self.light_delay:
logger.warn(
"This version of `exoplanet` does not model light delays."
)
x, y, z = orbit.get_relative_position(t)
# Get all rotational phases
pri_prot = ifelse(
tt.eq(pri_prot, 0.0), math.to_tensor(np.inf), pri_prot
)
theta_pri = (2 * np.pi) / pri_prot * (t - pri_t0) + pri_theta0
sec_prot = tt.switch(
tt.eq(sec_prot, 0.0), math.to_tensor(np.inf), sec_prot
)
theta_sec = (2 * np.pi) / tt.shape_padright(sec_prot) * (
tt.shape_padleft(t) - tt.shape_padright(sec_t0)
) + tt.shape_padright(sec_theta0)
# Compute all the phase curves
phase_pri = pri_amp * self.primary.map.ops.X(
theta_pri,
tt.zeros_like(t),
tt.zeros_like(t),
tt.zeros_like(t),
math.to_tensor(0.0),
pri_inc,
pri_obl,
pri_u,
pri_f,
MT,
math.to_tensor(0.0),
math.to_tensor(0.0),
math.to_tensor(1.0),
-theta,
)
# Rotate to the sky frame
# TODO: Do this in a single compound rotation
MT = self.dotR(
self.dotR(
self.dotR(
MT,
math.to_tensor(1.0),
math.to_tensor(0.0),
math.to_tensor(0.0),
0.5 * np.pi,
),
math.to_tensor(0.0),
math.to_tensor(0.0),
math.to_tensor(1.0),
-obl,
),
-tt.cos(obl),
-tt.sin(obl),
math.to_tensor(0.0),
(0.5 * np.pi - inc),
)
return tt.transpose(MT)
math.to_tensor(1.0),
-theta,
)
# Rotate to the sky frame
# TODO: Do this in a single compound rotation
MT = self.dotR(
self.dotR(
self.dotR(
MT,
math.to_tensor(1.0),
math.to_tensor(0.0),
math.to_tensor(0.0),
0.5 * np.pi,
),
math.to_tensor(0.0),
math.to_tensor(0.0),
math.to_tensor(1.0),
-obl,
),
-tt.cos(obl),
-tt.sin(obl),
math.to_tensor(0.0),
(0.5 * np.pi - inc),
)
return tt.transpose(MT)
pri_alpha,
)
if self._reflected:
phase_sec = [
pri_amp
* sec_amp[i]
* sec.map.ops.X(
theta_sec[i],
-x[:, i] / sec_r[i],
-y[:, i] / sec_r[i],
-z[:, i] / sec_r[i],
pri_r / sec_r[i], # scaled source radius
tt.zeros_like(x[:, i]),
tt.zeros_like(x[:, i]),
tt.zeros_like(x[:, i]),
math.to_tensor(0.0), # occultor of zero radius
sec_inc[i],
sec_obl[i],
sec_u[i],
sec_f[i],
sec_alpha[i],
sec_sigr[i],
)
for i, sec in enumerate(self.secondaries)
]
else:
phase_sec = [
sec_amp[i]
* sec.map.ops.X(
theta_sec[i],
-x[:, i],
-y[:, i],
# Rotate to the correct phase
if theta.ndim > 0:
M = self.tensordotRz(M, theta)
else:
M = self.dotR(
M,
math.to_tensor(0.0),
math.to_tensor(0.0),
math.to_tensor(1.0),
theta,
)
# Rotate to the polar frame
M = self.dotR(
M,
math.to_tensor(1.0),
math.to_tensor(0.0),
math.to_tensor(0.0),
0.5 * np.pi,
)
# Apply the differential rotation
if self.diffrot:
if theta.ndim > 0:
M = self.tensordotD(M, -theta * alpha)
else:
M = RaiseValueErrorOp(
"Code this branch up if needed.", M.shape
)
return M