Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_one_with_one_without_parameters(population_strategy:
PopulationStrategy):
n = 10
kernels = []
df_without = pd.DataFrame(index=list(range(n)))
w_without = np.ones(n) / n
kernel_without = MultivariateNormalTransition()
kernel_without.fit(df_without, w_without)
kernels.append(kernel_without)
df_with = pd.DataFrame([{"s": np.random.rand()} for _ in range(n)])
w_with = np.ones(n) / n
kernel_with = MultivariateNormalTransition()
kernel_with.fit(df_with, w_with)
kernels.append(kernel_with)
population_strategy.update(kernels, np.array([.7, .3]), t=0)
assert population_strategy(t=0) > 0
def test_transitions_not_modified(population_strategy: PopulationStrategy):
n = 10
kernels = []
test_points = pd.DataFrame([{"s": np.random.rand()} for _ in range(n)])
for _ in range(2):
df = pd.DataFrame([{"s": np.random.rand()} for _ in range(n)])
w = np.ones(n) / n
kernel = MultivariateNormalTransition()
kernel.fit(df, w)
kernels.append(kernel)
test_weights = [k.pdf(test_points) for k in kernels]
population_strategy.update(kernels, np.array([.7, .2]))
after_adaptation_weights = [k.pdf(test_points) for k in kernels]
same = all((k1 == k2).all()
for k1, k2 in zip(test_weights, after_adaptation_weights))
err_msg = ("Population strategy {}"
" modified the transitions".format(population_strategy))
assert same, err_msg
def test_no_parameters(population_strategy: PopulationStrategy):
n = 10
df = pd.DataFrame(index=list(range(n)))
w = np.ones(n) / n
kernels = []
for _ in range(2):
kernel = MultivariateNormalTransition()
kernel.fit(df, w)
kernels.append(kernel)
population_strategy.update(kernels, np.array([.7, .3]), t=0)
assert population_strategy(t=0) > 0
Defaults to 50.
kde: pyabc.Transition, optional
The kernel density estimator to use for creating a smooth density
from the sample. If None, a multivariate normal kde with
cross-validated scaling is used.
Returns
-------
X, Y, PDF: (np.ndarray, np.ndarray, np.ndarray)
The X, the Y and the densities at these points.
These can be passed for plotting, for example as
plt.pcolormesh(X, Y, PDF)
"""
if kde is None:
kde = MultivariateNormalTransition(scaling=1)
kde.fit(df[[x, y]], w)
if xmin is None:
xmin = df[x].min()
if xmax is None:
xmax = df[x].max()
if ymin is None:
ymin = df[y].min()
if ymax is None:
ymax = df[y].max()
X, Y = np.meshgrid(np.linspace(xmin, xmax, num=numx),
np.linspace(ymin, ymax, num=numy))
test = pd.DataFrame({x: X.flatten(), y: Y.flatten()})
pdf = kde.pdf(test)
PDF = pdf.reshape(X.shape)
return X, Y, PDF
Defaults to 50.
kde: pyabc.Transition, optional
The kernel density estimator to use for creating a smooth density
from the sample. If None, a multivariate normal kde with
cross-validated scaling is used.
Returns
-------
x, pdf: (np.ndarray, np.ndarray)
The x and the densities at these points.
These can be passed for plotting, for example as
plt.plot(x, pdf)
"""
if kde is None:
kde = MultivariateNormalTransition(scaling=1)
kde.fit(df[[x]], w)
if xmin is None:
xmin = df[x].min()
if xmax is None:
xmax = df[x].max()
x_vals = np.linspace(xmin, xmax, num=numx)
test = pd.DataFrame({x: x_vals})
pdf = kde.pdf(test)
return x_vals, pdf
if n_par == 1:
arr_ax = [arr_ax]
# prepare matrices
cis = np.empty((n_par, n_run, 2 * n_confidence))
median = np.empty((n_par, n_run))
if show_mean:
mean = np.empty((n_par, n_run))
if show_kde_max:
kde_max = np.empty((n_par, n_run))
if show_kde_max_1d:
kde_max_1d = np.empty((n_par, n_run))
if kde is None and show_kde_max:
kde = MultivariateNormalTransition()
if kde_1d is None and show_kde_max_1d:
kde_1d = MultivariateNormalTransition()
# fill matrices
# iterate over populations
for i_run, (h, t, m) in enumerate(zip(histories, ts, ms)):
df, w = h.get_distribution(m=m, t=t)
# normalize weights to be sure
w /= w.sum()
# fit kde
if show_kde_max:
_kde_max_pnt = compute_kde_max(kde, df, w)
# iterate over parameters
for i_par, par in enumerate(par_names):
# as numpy array
vals = np.array(df[par])
# median
median[i_par, i_run] = compute_quantile(vals, w, 0.5)
nrows=n_par, ncols=1, sharex=False, sharey=False, figsize=size)
if not isinstance(arr_ax, (list, np.ndarray)):
arr_ax = [arr_ax]
fig = arr_ax[0].get_figure()
# prepare matrices
cis = np.empty((n_par, n_pop, 2 * n_confidence))
median = np.empty((n_par, n_pop))
if show_mean:
mean = np.empty((n_par, n_pop))
if show_kde_max:
kde_max = np.empty((n_par, n_pop))
if show_kde_max_1d:
kde_max_1d = np.empty((n_par, n_pop))
if kde is None and show_kde_max:
kde = MultivariateNormalTransition()
if kde_1d is None and show_kde_max_1d:
kde_1d = MultivariateNormalTransition()
# fill matrices
# iterate over populations
for i_t, t in enumerate(ts):
df, w = history.get_distribution(m=m, t=t)
# normalize weights to be sure
w /= w.sum()
# fit kde
if show_kde_max:
_kde_max_pnt = compute_kde_max(kde, df, w)
# iterate over parameters
for i_par, par in enumerate(par_names):
# as numpy array
vals = np.array(df[par])