Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
with model:
# Set up the default priors for parameters with defaults
# Note: we have to do it this way (as opposed to with .get(..., default)
# because this can only get executed if the param is not already
# defined, otherwise variables are defined twice in the model
if 'e' not in pars:
out_pars['e'] = xu.with_unit(Kipping13Global('e'),
u.one)
# If either omega or M0 is specified by user, default to U(0,2π)
if 'omega' not in pars:
out_pars['omega'] = xu.with_unit(Angle('omega'), u.rad)
if 'M0' not in pars:
out_pars['M0'] = xu.with_unit(Angle('M0'), u.rad)
if 's' not in pars:
out_pars['s'] = xu.with_unit(pm.Deterministic('s',
tt.constant(s.value)),
s.unit)
if 'P' not in pars:
if P_min is None or P_max is None:
raise ValueError("If you are using the default period prior, "
"you must pass in both P_min and P_max to set "
"the period prior domain.")
out_pars['P'] = xu.with_unit(UniformLog('P',
P_min.value,
P_max.to_value(P_min.unit)),
P_min.unit)
# Wide log-normal prior for semi-amplitude
logK = pm.Normal("logK", mu=np.log(Ks), sd=10.0, shape=N_pl)
# This is a sanity check that restricts the semiamplitude to reasonable
# values because things can get ugly as K -> 0
pm.Potential("logK_bound", tt.switch(logK < -2.0, -np.inf, 0.0))
# The amlitudes should be sorted
pm.Potential("logK_order", tt.switch(logK[1:] > logK[:-1], -np.inf, 0.0))
# We also want to keep period physical but this probably won't be hit
pm.Potential("P_bound", tt.switch(P <= 0, -np.inf, 0.0))
# Eccentricity & argument of periasteron
ecc = pm.Uniform("ecc", lower=0, upper=0.99, shape=N_pl, testval=eccs)
omega = xo.distributions.Angle("omega", shape=N_pl, testval=omegas)
# Jitter & a quadratic RV trend
# logs = pm.Normal("logs", mu=np.log(np.median(yerr)), sd=5.0)
trend = pm.Normal("trend", mu=0, sd=10.0 ** -np.arange(3)[::-1], shape=3)
# Set up the orbit
orbit = xo.orbits.KeplerianOrbit(period=P, t0=t0, ecc=ecc, omega=omega)
# Set up the RV model and save it as a deterministic
# for plotting purposes later
vrad = orbit.get_radial_velocity(x, K=tt.exp(logK))
if N_pl == 1:
vrad = vrad[:, None]
# Define the background model
A = np.vander(x - 0.5 * (x.min() + x.max()), 3)
# dictionary of parameters to return
out_pars = dict()
with model:
# Set up the default priors for parameters with defaults
# Note: we have to do it this way (as opposed to with .get(..., default)
# because this can only get executed if the param is not already
# defined, otherwise variables are defined twice in the model
if 'e' not in pars:
out_pars['e'] = xu.with_unit(Kipping13Global('e'),
u.one)
# If either omega or M0 is specified by user, default to U(0,2π)
if 'omega' not in pars:
out_pars['omega'] = xu.with_unit(Angle('omega'), u.rad)
if 'M0' not in pars:
out_pars['M0'] = xu.with_unit(Angle('M0'), u.rad)
if 's' not in pars:
out_pars['s'] = xu.with_unit(pm.Deterministic('s',
tt.constant(s.value)),
s.unit)
if 'P' not in pars:
if P_min is None or P_max is None:
raise ValueError("If you are using the default period prior, "
"you must pass in both P_min and P_max to set "
"the period prior domain.")
out_pars['P'] = xu.with_unit(UniformLog('P',
P_min.value,
if transform is None:
if "regularized" in kwargs:
transform = tr.AngleTransform(
regularized=kwargs.pop("regularized")
)
else:
transform = tr.angle
kwargs["transform"] = transform
shape = kwargs.get("shape", None)
if shape is None:
testval = 0.0
else:
testval = np.zeros(shape)
kwargs["testval"] = kwargs.pop("testval", testval)
super(Angle, self).__init__(*args, **kwargs)