From bb63b997372f5ba0fe93e871cb669e31f5c2eb72 Mon Sep 17 00:00:00 2001 From: antelk Date: Wed, 16 Jun 2021 13:20:57 +0200 Subject: [PATCH 001/121] fix tqdm import and add some stylistic improvements --- brian2modelfitting/utils.py | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/brian2modelfitting/utils.py b/brian2modelfitting/utils.py index 984e0a6..4b46a31 100644 --- a/brian2modelfitting/utils.py +++ b/brian2modelfitting/utils.py @@ -2,7 +2,7 @@ from brian2 import have_same_dimensions from brian2.units.fundamentalunits import Quantity -from tqdm.autonotebook import tqdm +from tqdm import tqdm def _format_quantity(v, precision=3): @@ -12,7 +12,8 @@ def _format_quantity(v, precision=3): return f'{v:.{precision}g}' -def callback_text(params, errors, best_params, best_error, index, additional_info): +def callback_text(params, errors, best_params, best_error, index, + additional_info): """Default callback print-out for Fitters""" params = [] for p, v in sorted(best_params.items()): @@ -25,14 +26,11 @@ def callback_text(params, errors, best_params, best_error, index, additional_inf for error, normed_error, varname in zip(additional_info['objective_errors'], additional_info['objective_errors_normalized'], additional_info['output_var']): - if not have_same_dimensions(error, normed_error) or error != normed_error: raw_error_str = f', unnormalized error: {_format_quantity(error)}' else: raw_error_str = '' - errors.append(f'{_format_quantity(normed_error)} ({varname}{raw_error_str})') - error_sum = ' + '.join(errors) print(f"{round}Best parameters {param_str}\n" f"{' '*len(round)}Best error: {best_error_str} = {error_sum}") @@ -53,8 +51,8 @@ def callback_text(params, errors, best_params, best_error, index, additional_inf print(f"{' ' * len(round)}Best error: {best_error_str} ({additional_info['output_var'][0]})") - -def callback_none(params, errors, best_params, best_error, index, additional_info): +def callback_none(params, errors, best_params, best_error, index, + additional_info): """Non-verbose callback""" pass @@ -83,14 +81,12 @@ def callback_setup(set_type, n_rounds): elif type(set_type) is FunctionType: callback = set_type else: - raise TypeError("callback has to be a str ('text' or 'progressbar'), " - "callable or None") - + raise TypeError('callback has to be a str (`text` or `progressbar`), ' + 'allable or None') return callback def make_dic(names, values): """Create dictionary based on list of strings and 2D array""" result_dict = {name: value for name, value in zip(names, values)} - return result_dict From 76ea512e296bcf886f6349eafaf5b937bca6917d Mon Sep 17 00:00:00 2001 From: antelk Date: Wed, 16 Jun 2021 13:21:41 +0200 Subject: [PATCH 002/121] add Inferencer class to __all__ --- brian2modelfitting/__init__.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/brian2modelfitting/__init__.py b/brian2modelfitting/__init__.py index c3c8bbc..e1994f6 100644 --- a/brian2modelfitting/__init__.py +++ b/brian2modelfitting/__init__.py @@ -6,6 +6,7 @@ from .tests import run as run_test from .fitter import * +from .inferencer import Inferencer from .optimizer import * from .metric import * from .simulator import * @@ -16,4 +17,5 @@ 'Simulator', 'RuntimeSimulator', 'CPPStandaloneSimulator', 'MSEMetric', 'Metric', 'GammaFactor', 'FeatureMetric', 'SpikeMetric', 'TraceMetric', 'get_gamma_factor', 'firing_rate', - 'Fitter', 'SpikeFitter', 'TraceFitter', 'OnlineTraceFitter'] + 'Fitter', 'SpikeFitter', 'TraceFitter', 'OnlineTraceFitter', + 'Inferencer'] From b05f789f6e3460ada465192cb135d4108e55299b Mon Sep 17 00:00:00 2001 From: antelk Date: Wed, 16 Jun 2021 13:22:07 +0200 Subject: [PATCH 003/121] add sbi in requirements --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index 83b5aee..2d05504 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,3 +5,4 @@ scikit-learn!=0.23.0 lmfit tqdm efel +sbi From bf739ae64b9a1c32301a95f3a213f2c5b25942f9 Mon Sep 17 00:00:00 2001 From: antelk Date: Wed, 16 Jun 2021 13:22:54 +0200 Subject: [PATCH 004/121] add sbi as optional dependency --- setup.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/setup.py b/setup.py index bd9d745..d3fc2e9 100644 --- a/setup.py +++ b/setup.py @@ -32,8 +32,7 @@ def readme(): provides=['brian2modelfitting'], extras_require={'test': ['pytest'], 'docs': ['sphinx>=1.8'], - 'full': ['efel', - 'lmfit']}, + 'full': ['efel', 'lmfit', 'sbi']}, python_requires='>=3.6', use_2to3=False, zip_safe=False, From ad3e8caf0fc9fbbf99c2a98a3b4efb24657c0235 Mon Sep 17 00:00:00 2001 From: antelk Date: Wed, 16 Jun 2021 13:29:18 +0200 Subject: [PATCH 005/121] add minor stylistic changes --- setup.py | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/setup.py b/setup.py index d3fc2e9..98ac0bb 100644 --- a/setup.py +++ b/setup.py @@ -1,27 +1,22 @@ #! /usr/bin/env python -''' -brian2modelfitting setup script -''' +"""brian2modelfitting setup script""" + import os -import sys from setuptools import setup, find_packages -def readme(): - with open('README.md') as f: - return f.read() version = {} with open(os.path.join('brian2modelfitting', 'version.py')) as fp: exec(fp.read(), version) -# Note that this does not set a version number explicitly, but automatically -# figures out a version based on git tags +with open('README.md') as f: + long_description = f.read() + setup(name='brian2modelfitting', url='https://github.com/brian-team/brian2modelfitting', version=version['version'], packages=find_packages(), - # package_data={}, install_requires=['numpy', 'brian2>=2.2', 'setuptools', @@ -32,24 +27,25 @@ def readme(): provides=['brian2modelfitting'], extras_require={'test': ['pytest'], 'docs': ['sphinx>=1.8'], - 'full': ['efel', 'lmfit', 'sbi']}, + 'full': ['efel', 'lmfit', 'sbi'], + }, python_requires='>=3.6', use_2to3=False, zip_safe=False, description='Modelfitting Toolbox for the Brian 2 simulator', - long_description=readme(), + long_description=long_description, author='Aleksandra Teska, Marcel Stimberg, Romain Brette, Dan Goodman', author_email='team@briansimulator.org', license='CeCILL-2.1', classifiers=[ 'Development Status :: 4 - Beta', 'Intended Audience :: Science/Research', - 'License :: OSI Approved :: CEA CNRS Inria Logiciel Libre License, version 2.1 (CeCILL-2.1)', + 'License :: OSI Approved :: CEA CNRS Inria Logiciel Libre License, ' + 'version 2.1 (CeCILL-2.1)', 'Natural Language :: English', 'Operating System :: OS Independent', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Topic :: Scientific/Engineering :: Bio-Informatics' - ], - keywords='model fitting computational neuroscience' + 'Topic :: Scientific/Engineering :: Bio-Informatics'], + keywords='model fitting computational neuroscience', ) From 0e9de9e744be7fbdbdb8cdb6b8f685f76ca1e9fa Mon Sep 17 00:00:00 2001 From: antelk Date: Wed, 16 Jun 2021 13:48:36 +0200 Subject: [PATCH 006/121] first steps into the development of sbi wrapper class --- brian2modelfitting/inferencer.py | 297 +++++++++++++++++++++++++++++++ 1 file changed, 297 insertions(+) create mode 100644 brian2modelfitting/inferencer.py diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py new file mode 100644 index 0000000..bf46c4c --- /dev/null +++ b/brian2modelfitting/inferencer.py @@ -0,0 +1,297 @@ +from numbers import Number +from typing import Mapping + +from brian2.core.functions import Function +from brian2.core.namespace import get_local_namespace +from brian2.core.network import Network +from brian2.devices.cpp_standalone.device import CPPStandaloneDevice +from brian2.devices.device import get_device, device +from brian2.equations.equations import Equations +from brian2.groups.neurongroup import NeuronGroup +from brian2.input.timedarray import TimedArray +from brian2.monitors.spikemonitor import SpikeMonitor +from brian2.monitors.statemonitor import StateMonitor +from brian2.units.allunits import * # all physical units +from brian2.units.fundamentalunits import (DIMENSIONLESS, get_dimensions, + Quantity) +import matplotlib.pyplot as plt +import numpy as np +from sbi.utils.get_nn_models import posterior_nn +from sbi.utils.torchutils import BoxUniform +import sbi.analysis +import sbi.inference +import torch + +from .simulator import RuntimeSimulator, CPPStandaloneSimulator + + +def setup_simulator(): + """Return the configured simulator, which can be either + `RuntimeSimulator`, object for use with `RuntimeDevice`, or + `CPPStandaloneSimulator`, object for use with `CPPStandaloneDevice. + + Parameters + ---------- + None + + Returns + ------- + brian2modelfitting.simulator.Simulator + Either `RuntimeSimulator` or `CPPStandaloneSimulator` depending + on the currently active `Device` object describing the + available computational engine. + """ + simulators = {'CPPStandaloneDevice': CPPStandaloneSimulator(), + 'RuntimeDevice': RuntimeSimulator()} + if isinstance(get_device(), CPPStandaloneDevice): + if device.has_been_run is True: + build_options = dict(device.build_options) + get_device().reinit() + get_device().activate(**build_options) + return simulators[get_device().__class__.__name__] + + +def get_full_namespace(additional_namespace, level=0): + """Return the namespace with added `additional_namespace`, in which + references to external parameters or functions are stored. + + Parameters + ---------- + additional_namespace : dict + References to external parameters or functions, where key is + the name and value is the value of the external param/func. + level : int, optional + How far to go back to get the locals/globals. + + Returns + ------- + dict + Namespace with additional references to external parameters or + functions. + """ + namespace = {key: value + for key, value in get_local_namespace(level=level + 1).items() + if isinstance(value, (Number, Quantity, Function))} + namespace.update(additional_namespace) + return namespace + + +def get_param_dict(param_values, param_names, n_samples): + """Return a dictionary compiled of parameter names and values. + + Parameters + ---------- + param_values : iterable + Iterable of size (`n_samples`, `len(param_names)` containing + parameter values. + param_names : iterable + Iterable containing parameter names + n_samples : int + Total number of given values for a single parameter. + + Returns + ------- + dict + Dictionary containing key-value pairs thet correspond to a + parameter name and value(s) + """ + param_values = np.array(param_values) + param_dict = dict() + for name, value in zip(param_names, param_values.T): + param_dict[name] = (np.ones((n_samples, )) * value) + return param_dict + + +def calc_prior(param_names, **params): + """Return prior distribution over given parameters. Note that the + only available prior distribution currently supported is + multidimensional uniform distribution defined on a box. + + Parameters + ---------- + param_names : iterable + Iterable containing parameter names. + params : dict + Dictionary with keys that correspond to parameter names, and + values should be a single dimensional lists or arrays + + Return + ------ + sbi.utils.torchutils.BoxUniform + `sbi` compatible object that contains a uniform prior + distribution over a given set of parameter + """ + for param_name in param_names: + if param_name not in params: + raise TypeError(f'"Bounds must be set for parameter {param_name}') + prior_min = [] + prior_max = [] + for param_name in param_names: + prior_min.append(min(params[param_name]).item()) + prior_max.append(max(params[param_name]).item()) + prior = BoxUniform(low=torch.as_tensor(prior_min), + high=torch.as_tensor(prior_max)) + return prior + + +class Inferencer(object): + """Class for simulation-based inference. + + It offers an interface similar to that of `Fitter` class but + instead of fitting, neural density estimator is trained using a + generative model. This class serves as a wrapper for `sbi` library + for inferencing posterior over unknown parameters of a given model. + + Parameters + ---------- + dt : brian2.units.fundamentalunits.Quantity + Integration time step. + model : str or brian2.equations.equations.Equations + Single cell model equations. + input : dict + Input traces in dictionary format, where key corresponds to the + name of the input variable as defined in `model` and value + corresponds to a single dimensional array of data traces. + output : dict + Dictionary of recorded (or simulated) output data traces, where + key corresponds to the name of the output variable as defined + in `model` and value corresponds to a single dimensional array + of recorded data traces. + method : str, optional + Integration method. + threshold : str, optional + The condition which produces spikes. Should be a single line + boolean expression. + reset : str, optional + The (possibly multi-line) string with the code to execute on + reset. + refractory : str, optional + Either the length of the refractory period (e.g., `2*ms`), a + string expression that evaluates to the length of the + refractory period after each spike (e.g., `'(1 + rand())*ms'`), + or a string expression evaluating to a boolean value, given the + condition under which the neuron stays refractory after a spike + (e.g., `'v > -20*mV'`). + param_init : dict, optional + Dictionary of state variables to be initialized with respective + values. + """ + def __init__(self, dt, model, input, output, method=None, threshold=None, + reset=None, refractory=None, param_init=None): + self.dt = dt + if isinstance(model, str): + self.model = Equations(model) + else: + raise TypeError('Equations must be appropriately formatted.') + if not isinstance(input, Mapping): + raise TypeError('`input` argument must be a dictionary mapping' + ' the name of the input variable and `input`.') + if len(input) > 1: + raise NotImplementedError('Only a single input is supported.') + self.input_var = list(input.keys())[0] + self.input = input[self.input_var] + if not isinstance(output, Mapping): + raise TypeError('`output` argument must be a dictionary mapping' + ' the name of the output variable and `output`') + if len(output) > 1: + raise NotImplementedError('Only a single output is supported') + self.output_var = list(output.keys())[0] + self.output = output[self.output_var] + input_dim = get_dimensions(self.input) + input_dim = '1' if input_dim is DIMENSIONLESS else repr(input_dim) + input_eqs = f'{self.input_var} = input_var(t) : {input_dim}' + self.model += input_eqs + self.input_traces = TimedArray(self.input.transpose(), dt=self.dt) + n_steps = self.input.size + self.sim_time = self.dt * n_steps + if not param_init: + param_init = {} + for param, val in param_init.items(): + if not (param in self.model.diff_eq_names or + param in self.model.parameter_names): + raise ValueError(f'{param} is not a model variable or a' + ' parameter in the model') + self.param_init = param_init + self.param_names = self.model.parameter_names + self.method = method + self.threshold = threshold + self.reset = reset + self.refractory = refractory + + def setup_simulator(self, n_samples, output_var, param_init, level=1): + simulator = setup_simulator() + namespace = get_full_namespace({'input_var': self.input_traces}, + level=level+1) + namespace['output_var'] = TimedArray(self.output.transpose(), + dt=self.dt) + kwargs = {} + if self.method is not None: + kwargs['method'] = self.method + model = (self.model + + Equations('iteration : integer (constant, shared)')) + neurons = NeuronGroup(N=n_samples, + model=model, + threshold=self.threshold, + reset=self.reset, + refractory=self.refractory, + dt=self.dt, + namespace=namespace, + name='neurons', + **kwargs) + network = Network(neurons) + network.add(StateMonitor(source=neurons, variables=output_var, + record=True, dt=self.dt, name='statemonitor')) + simulator.initialize(network, param_init) + return simulator + + def generate(self, n_samples, level=0, **params): + try: + n_samples = int(n_samples) + except ValueError as e: + print(e) + for param in params: + if param not in self.param_names: + raise ValueError(f'Parameter {param} must be defined as a' + ' model\'s parameter') + self.prior = calc_prior(self.param_names, **params) + self.theta = self.prior.sample((n_samples, )) + theta = np.atleast_2d(self.theta.numpy()) + self.simulator = self.setup_simulator(n_samples=n_samples, + output_var=self.output_var, + param_init=self.param_init, + level=1) + d_param = get_param_dict(theta, self.param_names, n_samples) + self.simulator.run(self.sim_time, d_param, self.param_names, 0) + + def _create_sum_stats(self, obs, obs_dim): + obs_mean = obs.mean(axis=0) + obs_std = obs.std(axis=0) + obs_ptp = obs.ptp(axis=0) + obs_mean = obs_mean / Quantity(np.ones_like(obs_mean), obs_dim) + obs_std = obs_std / Quantity(np.ones_like(obs_std), obs_dim) + obs_ptp = obs_ptp / Quantity(np.ones_like(obs_ptp), obs_dim) + return np.hstack((np.asarray(obs_mean).reshape(-1, 1), + np.asarray(obs_std).reshape(-1, 1), + np.asarray(obs_ptp).reshape(-1, 1))) + + def train(self): + obs_val = self.simulator.statemonitor.recorded_variables + obs = obs_val[self.output_var].get_value_with_unit() + obs_dim = self.simulator.statemonitor.recorded_variables + dim = get_dimensions(obs_dim[self.output_var]) + x = torch.tensor(self._create_sum_stats(obs, dim), dtype=torch.float32) + density_esimator = posterior_nn(model='maf') + self.inference = sbi.inference.SNPE(self.prior, density_esimator) + self.inference.append_simulations(self.theta, x).train() + self.posterior = self.inference.build_posterior() + + def sample(self, size, viz=False, **kwargs): + dim = get_dimensions(self.output) + x_o = torch.tensor(self._create_sum_stats(self.output.ravel(), dim), + dtype=torch.float32) + samples = self.posterior.sample((size, ), x_o) + if viz: + sbi.analysis.pairplot(samples, **kwargs) + plt.tight_layout() + plt.show() + return samples From e8f91fd251765c56964dd1853692070bab3e56b7 Mon Sep 17 00:00:00 2001 From: antelk Date: Thu, 17 Jun 2021 16:46:08 +0200 Subject: [PATCH 007/121] update gitignore with sbi-logs directory --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index fe292b6..9b35b69 100644 --- a/.gitignore +++ b/.gitignore @@ -80,3 +80,6 @@ target/ # Installation and auto-generated files brian2modelfitting.egg-info + +# sbi logs +brian2modelfitting/examples/sbi-logs/ From b7afcddee5efc39a3f2c271194989d2ea142178e Mon Sep 17 00:00:00 2001 From: antelk Date: Fri, 18 Jun 2021 16:27:07 +0200 Subject: [PATCH 008/121] Fix the location of sbi_logs in gitignore --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 9b35b69..6b47837 100644 --- a/.gitignore +++ b/.gitignore @@ -82,4 +82,4 @@ target/ brian2modelfitting.egg-info # sbi logs -brian2modelfitting/examples/sbi-logs/ +examples/sbi-logs/ From fc9a87ff3f1456e3d0f0d98f51209aaf55f1d937 Mon Sep 17 00:00:00 2001 From: antelk Date: Fri, 18 Jun 2021 16:27:29 +0200 Subject: [PATCH 009/121] Add example for simulation-based inference --- examples/hh_sbi.py | 55 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 examples/hh_sbi.py diff --git a/examples/hh_sbi.py b/examples/hh_sbi.py new file mode 100644 index 0000000..e070725 --- /dev/null +++ b/examples/hh_sbi.py @@ -0,0 +1,55 @@ +from brian2 import um, cm, ms, mV, amp, siemens, uF +from brian2modelfitting import Inferencer +import pandas as pd + + +# Load input and output data traces +df_inp_traces = pd.read_csv('input_traces_hh.csv') +df_out_traces = pd.read_csv('output_traces_hh.csv') +inp_traces = df_inp_traces.to_numpy() +inp_traces = inp_traces[:3, 1:] +out_traces = df_out_traces.to_numpy() +out_traces = out_traces[:3, 1:] + +# Model and its parameters +area = 20_000 * um ** 2 +El = -65 * mV +EK = -90 * mV +ENa = 50 * mV +VT = -63 * mV +dt = 0.01 * ms +eqs = ''' + dv/dt = (gl*(El-v) - g_na*(m*m*m)*h*(v-ENa) - g_kd*(n*n*n*n)*(v-EK) + I)/Cm : volt + dm/dt = 0.32*(mV**-1)*(13.*mV-v+VT)/ + (exp((13.*mV-v+VT)/(4.*mV))-1.)/ms*(1-m)-0.28*(mV**-1)*(v-VT-40.*mV)/ + (exp((v-VT-40.*mV)/(5.*mV))-1.)/ms*m : 1 + dn/dt = 0.032*(mV**-1)*(15.*mV-v+VT)/ + (exp((15.*mV-v+VT)/(5.*mV))-1.)/ms*(1.-n)-.5*exp((10.*mV-v+VT)/(40.*mV))/ms*n : 1 + dh/dt = 0.128*exp((17.*mV-v+VT)/(18.*mV))/ms*(1.-h)-4./(1+exp((40.*mV-v+VT)/(5.*mV)))/ms*h : 1 + g_na : siemens (constant) + g_kd : siemens (constant) + gl : siemens (constant) + Cm : farad (constant) +''' + +# Simulation-based inference object instantiation +inferencer = Inferencer(dt=dt, model=eqs, + input={'I': inp_traces * amp}, + output={'v': out_traces * mV}, + method='exponential_euler', + threshold='m > 0.5', + refractory='m > 0.5', + param_init={'v': 'VT'}) + +# Generate prior and train the neural density estimator +inferencer.train(n_samples=100, + gl=[1e-09 * siemens, 1e-07 * siemens], + g_na=[2e-06 * siemens, 2e-04 * siemens], + g_kd=[6e-07 * siemens, 6e-05 * siemens], + Cm=[0.1 * uF * cm ** -2 * area, 2 * uF * cm ** -2 * area]) + +# # Draw samples from posterior and visualize the results +# labels_params = [r'$\overline{g}_{l}$', r'$\overline{g}_{Na}$', +# r'$\overline{g}_{K}$', r'$\overline{C}_{m}$'] +# samples = inferencer.sample(1000, viz=True, +# labels=labels_params, figsize=(10, 10)) From c72c0d2995f464c27de293f7fa182a69e7f7275e Mon Sep 17 00:00:00 2001 From: antelk Date: Fri, 18 Jun 2021 16:28:01 +0200 Subject: [PATCH 010/121] [WIP] Add multi-trace support --- brian2modelfitting/inferencer.py | 277 +++++++++++++++++++++++++------ 1 file changed, 228 insertions(+), 49 deletions(-) diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py index bf46c4c..5860ab4 100644 --- a/brian2modelfitting/inferencer.py +++ b/brian2modelfitting/inferencer.py @@ -9,10 +9,11 @@ from brian2.equations.equations import Equations from brian2.groups.neurongroup import NeuronGroup from brian2.input.timedarray import TimedArray -from brian2.monitors.spikemonitor import SpikeMonitor from brian2.monitors.statemonitor import StateMonitor from brian2.units.allunits import * # all physical units -from brian2.units.fundamentalunits import (DIMENSIONLESS, get_dimensions, +from brian2.units.fundamentalunits import (DIMENSIONLESS, + fail_for_dimension_mismatch, + get_dimensions, Quantity) import matplotlib.pyplot as plt import numpy as np @@ -25,7 +26,7 @@ from .simulator import RuntimeSimulator, CPPStandaloneSimulator -def setup_simulator(): +def configure_simulator(): """Return the configured simulator, which can be either `RuntimeSimulator`, object for use with `RuntimeDevice`, or `CPPStandaloneSimulator`, object for use with `CPPStandaloneDevice. @@ -76,7 +77,7 @@ def get_full_namespace(additional_namespace, level=0): return namespace -def get_param_dict(param_values, param_names, n_samples): +def get_param_dict(param_values, param_names, n_values): """Return a dictionary compiled of parameter names and values. Parameters @@ -86,7 +87,7 @@ def get_param_dict(param_values, param_names, n_samples): parameter values. param_names : iterable Iterable containing parameter names - n_samples : int + n_values : int Total number of given values for a single parameter. Returns @@ -98,12 +99,12 @@ def get_param_dict(param_values, param_names, n_samples): param_values = np.array(param_values) param_dict = dict() for name, value in zip(param_names, param_values.T): - param_dict[name] = (np.ones((n_samples, )) * value) + param_dict[name] = (np.ones((n_values, )) * value) return param_dict def calc_prior(param_names, **params): - """Return prior distribution over given parameters. Note that the + """Return prior distributparion over given parameters. Note that the only available prior distribution currently supported is multidimensional uniform distribution defined on a box. @@ -178,58 +179,160 @@ class Inferencer(object): """ def __init__(self, dt, model, input, output, method=None, threshold=None, reset=None, refractory=None, param_init=None): + # time scale self.dt = dt + + # model equations if isinstance(model, str): - self.model = Equations(model) + model = Equations(model) else: raise TypeError('Equations must be appropriately formatted.') + + # input data traces if not isinstance(input, Mapping): raise TypeError('`input` argument must be a dictionary mapping' ' the name of the input variable and `input`.') if len(input) > 1: raise NotImplementedError('Only a single input is supported.') - self.input_var = list(input.keys())[0] - self.input = input[self.input_var] + input_var = list(input.keys())[0] + input = input[input_var] + if input_var not in model.identifiers: + raise NameError(f'{input_var} is not an identifier in the model.') + + # output data traces if not isinstance(output, Mapping): raise TypeError('`output` argument must be a dictionary mapping' ' the name of the output variable and `output`') - if len(output) > 1: - raise NotImplementedError('Only a single output is supported') - self.output_var = list(output.keys())[0] - self.output = output[self.output_var] - input_dim = get_dimensions(self.input) + output_var = list(output.keys()) + output = list(output.values()) + for o_var in output_var: + if o_var not in model.names: + raise NameError(f'{o_var} is not a model variable') + self.output_var = output_var + self.output = output + + # create variable for parameter names + self.param_names = model.parameter_names + + # set the simulation time for a given time scale + self.n_traces, n_steps = input.shape + self.sim_time = dt * n_steps + + # handle multiple output variables + self.output_dim = [] + for o_var, out in zip(self.output_var, self.output): + self.output_dim.append(model[o_var].dim) + fail_for_dimension_mismatch(out, self.output_dim[-1], + 'The provided target values must have' + ' the same units as the variable' + f' {o_var}') + + # add input to equations + self.model = model + input_dim = get_dimensions(input) input_dim = '1' if input_dim is DIMENSIONLESS else repr(input_dim) - input_eqs = f'{self.input_var} = input_var(t) : {input_dim}' + input_eqs = f'{input_var} = input_var(t, i % n_traces) : {input_dim}' self.model += input_eqs - self.input_traces = TimedArray(self.input.transpose(), dt=self.dt) - n_steps = self.input.size - self.sim_time = self.dt * n_steps + + # add output to equations + counter = 0 + for o_var, o_dim in zip(self.output_var, self.output_dim): + counter += 1 + output_expr = f'output_var_{counter}(t, i % n_traces)' + output_dim = ('1' if o_dim is DIMENSIONLESS else repr(o_dim)) + output_eqs = f'{o_var}_target = {output_expr} : {output_dim}' + self.model += output_eqs + + # create the `TimedArray` object for input w.r.t. a given time scale + self.input_traces = TimedArray(input.transpose(), dt=self.dt) + + # handle initial values for the ODE system if not param_init: param_init = {} - for param, val in param_init.items(): + for param in param_init.keys(): if not (param in self.model.diff_eq_names or param in self.model.parameter_names): raise ValueError(f'{param} is not a model variable or a' ' parameter in the model') self.param_init = param_init - self.param_names = self.model.parameter_names + + # handle the rest of optional parameters for the `NeuronGroup` class self.method = method self.threshold = threshold self.reset = reset self.refractory = refractory - def setup_simulator(self, n_samples, output_var, param_init, level=1): - simulator = setup_simulator() - namespace = get_full_namespace({'input_var': self.input_traces}, + # placeholder for the number of samples + self.n_samples = None + + @property + def n_neurons(self): + """Return the number of neurons that are used in `NeuronGroup` + class while generating data for training the neural density + estimator. + + Unlike the `Fitter` class, `Inferencer` does not take the total + number of samples in the constructor. Thus, this property + becomes available only after the simulation is performed. + + Parameters + ---------- + None + + Returns + ------- + int + The total number of neurons. + """ + if self.n_samples is None: + raise ValueError('Number of samples is not yet defined.' + 'Call `initialize_prior` method first.') + return self.n_traces * self.n_samples + + def setup_simulator(self, network_name, n_neurons, output_var, param_init, + level=1): + """Return configured simulator. + + Parameters + ---------- + network_name : str + Network name. + n_neurons : int + Number of neurons which equals to the number of samples + times the number of input/output traces. + output_var : str + Name of the output variable. + param_init : dict + Dictionary of state variables to be initialized with + respective values. + level : int, optional + How far to go back to get the locals/globals. + + Returns + ------- + brian2modelfitting.simulator.Simulator + Configured simulator w.r.t. to the available device. + """ + # configure the simulator + simulator = configure_simulator() + + # update the local namespace + namespace = get_full_namespace({'input_var': self.input_traces, + 'n_traces': self.n_traces}, level=level+1) - namespace['output_var'] = TimedArray(self.output.transpose(), - dt=self.dt) - kwargs = {} + counter = 0 + for out in self.output: + counter += 1 + namespace[f'output_var_{counter}'] = TimedArray(out.transpose(), + dt=self.dt) + + # setup neuron group + kwds = {} if self.method is not None: - kwargs['method'] = self.method + kwds['method'] = self.method model = (self.model + Equations('iteration : integer (constant, shared)')) - neurons = NeuronGroup(N=n_samples, + neurons = NeuronGroup(N=n_neurons, model=model, threshold=self.threshold, reset=self.reset, @@ -237,16 +340,35 @@ def setup_simulator(self, n_samples, output_var, param_init, level=1): dt=self.dt, namespace=namespace, name='neurons', - **kwargs) + **kwds) network = Network(neurons) network.add(StateMonitor(source=neurons, variables=output_var, record=True, dt=self.dt, name='statemonitor')) - simulator.initialize(network, param_init) + + # initialize the simulator + simulator.initialize(network, param_init, name=network_name) return simulator - def generate(self, n_samples, level=0, **params): + def initialize_prior(self, n_samples, **params): + """Return the dictionary in which the keys correspond to the + unknown parameter names and values to their respective + uniformly sampled values. + + Parameters + ---------- + n_samples : int + The number of samples. + params : dict + Bounds for each parameter. + + Returns + ------- + dict + Dictionary with the parameter names and uniformly + distributed prior distribution. + """ try: - n_samples = int(n_samples) + self.n_samples = int(n_samples) except ValueError as e: print(e) for param in params: @@ -256,17 +378,43 @@ def generate(self, n_samples, level=0, **params): self.prior = calc_prior(self.param_names, **params) self.theta = self.prior.sample((n_samples, )) theta = np.atleast_2d(self.theta.numpy()) - self.simulator = self.setup_simulator(n_samples=n_samples, - output_var=self.output_var, - param_init=self.param_init, - level=1) - d_param = get_param_dict(theta, self.param_names, n_samples) - self.simulator.run(self.sim_time, d_param, self.param_names, 0) + # theta = np.vstack(tuple([theta for _ in range(self.n_traces)])) + theta = np.repeat(theta, repeats=self.n_traces, axis=0) + return get_param_dict(theta, self.param_names, self.n_neurons) + + def generate_training_data(self, n_samples, level=0, **params): + """Return executed simulator containing recorded variables to + be used for training the neural density estimator. + + Parameter + --------- + n_samples : int + The number of samples. + level : int, optional + How far to go back to get the locals/globals. + params : dict + Bounds for each parameter. + + Returns + ------- + brian2modelfitting.simulator.Simulator + Executed simulator. + """ + network_name = 'infere' + d_param = self.initialize_prior(n_samples, **params) + simulator = self.setup_simulator(network_name=network_name, + n_neurons=self.n_neurons, + output_var=self.output_var, + param_init=self.param_init, + level=level+1) + simulator.run(self.sim_time, d_param, self.param_names, iteration=0, + name=network_name) + return simulator def _create_sum_stats(self, obs, obs_dim): - obs_mean = obs.mean(axis=0) - obs_std = obs.std(axis=0) - obs_ptp = obs.ptp(axis=0) + obs_mean = obs.mean(axis=1) + obs_std = obs.std(axis=1) + obs_ptp = obs.ptp(axis=1) obs_mean = obs_mean / Quantity(np.ones_like(obs_mean), obs_dim) obs_std = obs_std / Quantity(np.ones_like(obs_std), obs_dim) obs_ptp = obs_ptp / Quantity(np.ones_like(obs_ptp), obs_dim) @@ -274,16 +422,47 @@ def _create_sum_stats(self, obs, obs_dim): np.asarray(obs_std).reshape(-1, 1), np.asarray(obs_ptp).reshape(-1, 1))) - def train(self): - obs_val = self.simulator.statemonitor.recorded_variables + def train(self, n_samples, n_rounds=1, **params): + """Return the trained neural density estimator. + + Currently only sequential neural posterior estimator is + supported. + + Parameter + --------- + n_samples : int + The number of samples. + n_round : int or str, optional + If `n_rounds`is set to 1, amortized inference will be + performed. Otherwise, if `n_rounds` is integer larger than + 1, multi-round inference will be performed. + params : dict + Bounds for each parameter. + + Returns + ------- + sbi.inference.posteriors.direct_posterior.DirectPosterior + Trained posterior. + """ + if not isinstance(n_rounds, int): + raise ValueError('Number of rounds must be a positive integer.') + if n_rounds != 1: + raise NotImplementedError('Only amortized inference is supported.') + simulator = self.generate_training_data(n_samples, **params) + obs_val = simulator.statemonitor.recorded_variables obs = obs_val[self.output_var].get_value_with_unit() - obs_dim = self.simulator.statemonitor.recorded_variables + obs_dim = simulator.statemonitor.recorded_variables dim = get_dimensions(obs_dim[self.output_var]) - x = torch.tensor(self._create_sum_stats(obs, dim), dtype=torch.float32) + x = torch.tensor(self._create_sum_stats(obs, dim), + dtype=torch.float32) + x = x.reshape(self.n_samples, self.n_traces) density_esimator = posterior_nn(model='maf') - self.inference = sbi.inference.SNPE(self.prior, density_esimator) - self.inference.append_simulations(self.theta, x).train() - self.posterior = self.inference.build_posterior() + inference = sbi.inference.SNPE(proposal, density_esimator) + inference.append_simulations(self.theta, x, proposal).train() + posterior = self.inference.build_posterior() + posteriors.append(posterior) + self.posterior = posterior + return posterior def sample(self, size, viz=False, **kwargs): dim = get_dimensions(self.output) From 2346e0124ebe65eb6df37f3856e5f973c675a041 Mon Sep 17 00:00:00 2001 From: antelk Date: Sat, 19 Jun 2021 11:49:58 +0200 Subject: [PATCH 011/121] Further progress of train method --- examples/hh_sbi.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/examples/hh_sbi.py b/examples/hh_sbi.py index e070725..33539c5 100644 --- a/examples/hh_sbi.py +++ b/examples/hh_sbi.py @@ -43,13 +43,15 @@ # Generate prior and train the neural density estimator inferencer.train(n_samples=100, + n_rounds=2, + density_estimator_model='made', gl=[1e-09 * siemens, 1e-07 * siemens], g_na=[2e-06 * siemens, 2e-04 * siemens], g_kd=[6e-07 * siemens, 6e-05 * siemens], Cm=[0.1 * uF * cm ** -2 * area, 2 * uF * cm ** -2 * area]) -# # Draw samples from posterior and visualize the results -# labels_params = [r'$\overline{g}_{l}$', r'$\overline{g}_{Na}$', -# r'$\overline{g}_{K}$', r'$\overline{C}_{m}$'] -# samples = inferencer.sample(1000, viz=True, -# labels=labels_params, figsize=(10, 10)) +# Draw samples from posterior and visualize the results +labels_params = [r'$\overline{g}_{l}$', r'$\overline{g}_{Na}$', + r'$\overline{g}_{K}$', r'$\overline{C}_{m}$'] +samples = inferencer.sample(1000, viz=True, + labels=labels_params, figsize=(10, 10)) From 5d0917d1b7db664f45117b55994160e099c184d8 Mon Sep 17 00:00:00 2001 From: antelk Date: Sat, 19 Jun 2021 11:50:38 +0200 Subject: [PATCH 012/121] add multi-round inference support --- brian2modelfitting/inferencer.py | 156 +++++++++++++++++++------------ 1 file changed, 95 insertions(+), 61 deletions(-) diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py index 5860ab4..0294135 100644 --- a/brian2modelfitting/inferencer.py +++ b/brian2modelfitting/inferencer.py @@ -282,11 +282,11 @@ class while generating data for training the neural density Returns ------- int - The total number of neurons. + Total number of neurons. """ if self.n_samples is None: raise ValueError('Number of samples is not yet defined.' - 'Call `initialize_prior` method first.') + 'Call `generate_training_data` method first.') return self.n_traces * self.n_samples def setup_simulator(self, network_name, n_neurons, output_var, param_init, @@ -344,64 +344,67 @@ def setup_simulator(self, network_name, n_neurons, output_var, param_init, network = Network(neurons) network.add(StateMonitor(source=neurons, variables=output_var, record=True, dt=self.dt, name='statemonitor')) - + # initialize the simulator simulator.initialize(network, param_init, name=network_name) return simulator - def initialize_prior(self, n_samples, **params): - """Return the dictionary in which the keys correspond to the - unknown parameter names and values to their respective - uniformly sampled values. + def initialize_prior(self, **params): + """Return the prior uniform distribution over parameters. Parameters ---------- - n_samples : int - The number of samples. params : dict Bounds for each parameter. Returns ------- - dict - Dictionary with the parameter names and uniformly - distributed prior distribution. + sbi.utils.BoxUniform + Uniformly distributed prior over given parameters. """ - try: - self.n_samples = int(n_samples) - except ValueError as e: - print(e) for param in params: if param not in self.param_names: raise ValueError(f'Parameter {param} must be defined as a' ' model\'s parameter') - self.prior = calc_prior(self.param_names, **params) - self.theta = self.prior.sample((n_samples, )) - theta = np.atleast_2d(self.theta.numpy()) - # theta = np.vstack(tuple([theta for _ in range(self.n_traces)])) - theta = np.repeat(theta, repeats=self.n_traces, axis=0) - return get_param_dict(theta, self.param_names, self.n_neurons) + prior = calc_prior(self.param_names, **params) + return prior - def generate_training_data(self, n_samples, level=0, **params): - """Return executed simulator containing recorded variables to - be used for training the neural density estimator. + def generate_training_data(self, n_samples, prior, level=1): + """Return sampled prior and executed simulator containing + recorded variables to be used for training the neural density + estimator. Parameter --------- n_samples : int The number of samples. + prior : sbi.utils.BoxUniform + Uniformly distributed prior over given parameters. level : int, optional How far to go back to get the locals/globals. - params : dict - Bounds for each parameter. Returns ------- + numpy.ndarray + Sampled prior of shape (`n_samples`, -1) brian2modelfitting.simulator.Simulator Executed simulator. """ + # set n_samples to class variable to be able to call self.n_neurons + self.n_samples = n_samples + + # sample from prior + theta = prior.sample((n_samples, )) + theta = np.atleast_2d(theta.numpy()) + + # repeat each row for how many input/output different trace are there + _theta = np.repeat(theta, repeats=self.n_traces, axis=0) + + # create a dictionary with repeated sampled prior + d_param = get_param_dict(_theta, self.param_names, self.n_neurons) + + # setup and run the simulator network_name = 'infere' - d_param = self.initialize_prior(n_samples, **params) simulator = self.setup_simulator(network_name=network_name, n_neurons=self.n_neurons, output_var=self.output_var, @@ -409,20 +412,10 @@ def generate_training_data(self, n_samples, level=0, **params): level=level+1) simulator.run(self.sim_time, d_param, self.param_names, iteration=0, name=network_name) - return simulator - - def _create_sum_stats(self, obs, obs_dim): - obs_mean = obs.mean(axis=1) - obs_std = obs.std(axis=1) - obs_ptp = obs.ptp(axis=1) - obs_mean = obs_mean / Quantity(np.ones_like(obs_mean), obs_dim) - obs_std = obs_std / Quantity(np.ones_like(obs_std), obs_dim) - obs_ptp = obs_ptp / Quantity(np.ones_like(obs_ptp), obs_dim) - return np.hstack((np.asarray(obs_mean).reshape(-1, 1), - np.asarray(obs_std).reshape(-1, 1), - np.asarray(obs_ptp).reshape(-1, 1))) + return (theta, simulator) - def train(self, n_samples, n_rounds=1, **params): + def train(self, n_samples, n_rounds=1, estimation_method='SNPE', + density_estimator_model='maf', **params): """Return the trained neural density estimator. Currently only sequential neural posterior estimator is @@ -432,10 +425,16 @@ def train(self, n_samples, n_rounds=1, **params): --------- n_samples : int The number of samples. - n_round : int or str, optional + n_rounds : int or str, optional If `n_rounds`is set to 1, amortized inference will be performed. Otherwise, if `n_rounds` is integer larger than 1, multi-round inference will be performed. + estimation_method : str + Inference method. Either of SNPE, SNLE or SNRE. Currently, + only SNPE is supported. + density_estimator_model : str + The type of density estimator to be created. Either `mdn`, + `made`, `maf` or `nsf`. params : dict Bounds for each parameter. @@ -446,29 +445,64 @@ def train(self, n_samples, n_rounds=1, **params): """ if not isinstance(n_rounds, int): raise ValueError('Number of rounds must be a positive integer.') - if n_rounds != 1: - raise NotImplementedError('Only amortized inference is supported.') - simulator = self.generate_training_data(n_samples, **params) - obs_val = simulator.statemonitor.recorded_variables - obs = obs_val[self.output_var].get_value_with_unit() - obs_dim = simulator.statemonitor.recorded_variables - dim = get_dimensions(obs_dim[self.output_var]) - x = torch.tensor(self._create_sum_stats(obs, dim), - dtype=torch.float32) - x = x.reshape(self.n_samples, self.n_traces) - density_esimator = posterior_nn(model='maf') - inference = sbi.inference.SNPE(proposal, density_esimator) - inference.append_simulations(self.theta, x, proposal).train() - posterior = self.inference.build_posterior() - posteriors.append(posterior) + if str.upper(estimation_method) != 'SNPE': + raise NotImplementedError('Only SNPE estimator is supported.') + + # observation the focus is on + x_o = [] + for o in self.output: + o_dim = get_dimensions(o) + o_obs = self.extract_features(o.transpose(), o_dim) + x_o.append(o_obs.flatten()) + x_o = torch.tensor(x_o, dtype=torch.float32) + self.x_o = x_o + + # initialize prior, density estimator and inference method + prior = self.initialize_prior(**params) + density_esimator = posterior_nn(density_estimator_model) + inference = sbi.inference.SNPE(prior, density_esimator) + + # allocate empty list of posteriors, for multi-round inference only + posteriors = [] + proposal = prior + for _ in range(n_rounds): + # extract the data and make adjustments for `sbi` + theta, simulator = self.generate_training_data(n_samples, proposal) + theta = torch.tensor(theta, dtype=torch.float32) + obs = simulator.statemonitor.recorded_variables + x_val = obs[self.output_var[0]].get_value_with_unit() + x_dim = get_dimensions(obs[self.output_var[0]]) + x = torch.tensor(self.extract_features(x_val, x_dim), + dtype=torch.float32) + x = x.reshape(self.n_samples, -1) + + # pass the simulated data to the inference object and train it + de = inference.append_simulations(theta, x, proposal).train() + + # use the density estimator to build the posterior + posterior = inference.build_posterior(de) + + # append the current posterior to the list of posteriors + posteriors.append(posterior) + + # update the proposal given the observation + proposal = posterior.set_default_x(x_o) self.posterior = posterior return posterior + def extract_features(self, obs, obs_dim): + obs_mean = obs.mean(axis=0) + obs_std = obs.std(axis=0) + obs_ptp = obs.ptp(axis=0) + obs_mean = obs_mean / Quantity(np.ones_like(obs_mean), obs_dim) + obs_std = obs_std / Quantity(np.ones_like(obs_std), obs_dim) + obs_ptp = obs_ptp / Quantity(np.ones_like(obs_ptp), obs_dim) + return np.hstack((np.array(obs_mean).reshape(-1, 1), + np.array(obs_std).reshape(-1, 1), + np.array(obs_ptp).reshape(-1, 1))) + def sample(self, size, viz=False, **kwargs): - dim = get_dimensions(self.output) - x_o = torch.tensor(self._create_sum_stats(self.output.ravel(), dim), - dtype=torch.float32) - samples = self.posterior.sample((size, ), x_o) + samples = self.posterior.sample((size, )) if viz: sbi.analysis.pairplot(samples, **kwargs) plt.tight_layout() From b57b0e235f069a747efd7ac33e9eff2a261f9942 Mon Sep 17 00:00:00 2001 From: antelk Date: Sat, 19 Jun 2021 12:53:08 +0200 Subject: [PATCH 013/121] add support for multiple output variables --- brian2modelfitting/inferencer.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py index 0294135..38ddb36 100644 --- a/brian2modelfitting/inferencer.py +++ b/brian2modelfitting/inferencer.py @@ -470,10 +470,13 @@ def train(self, n_samples, n_rounds=1, estimation_method='SNPE', theta, simulator = self.generate_training_data(n_samples, proposal) theta = torch.tensor(theta, dtype=torch.float32) obs = simulator.statemonitor.recorded_variables - x_val = obs[self.output_var[0]].get_value_with_unit() - x_dim = get_dimensions(obs[self.output_var[0]]) - x = torch.tensor(self.extract_features(x_val, x_dim), - dtype=torch.float32) + x = [] + for ov in self.output_var: + x_val = obs[ov].get_value_with_unit() + x_dim = get_dimensions(obs[ov]) + features = self.extract_features(x_val, x_dim) + x.append(features) + x = torch.tensor(x, dtype=torch.float32) x = x.reshape(self.n_samples, -1) # pass the simulated data to the inference object and train it From 6550855e06b5776776c466432dd5faa7655a8559 Mon Sep 17 00:00:00 2001 From: antelk Date: Thu, 24 Jun 2021 09:05:46 +0200 Subject: [PATCH 014/121] use tqdm.auto.trange instead of tqdm.trange --- brian2modelfitting/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/brian2modelfitting/utils.py b/brian2modelfitting/utils.py index 4b46a31..534c696 100644 --- a/brian2modelfitting/utils.py +++ b/brian2modelfitting/utils.py @@ -2,7 +2,7 @@ from brian2 import have_same_dimensions from brian2.units.fundamentalunits import Quantity -from tqdm import tqdm +from tqdm.auto import tqdm def _format_quantity(v, precision=3): From 620aa2a2390b45f9784488ad458376c2a5f4d5de Mon Sep 17 00:00:00 2001 From: antelk Date: Thu, 24 Jun 2021 09:17:36 +0200 Subject: [PATCH 015/121] add double backticks instead of single backticks in docstrings --- brian2modelfitting/inferencer.py | 74 ++++++++++++++++---------------- 1 file changed, 38 insertions(+), 36 deletions(-) diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py index 38ddb36..7344523 100644 --- a/brian2modelfitting/inferencer.py +++ b/brian2modelfitting/inferencer.py @@ -28,8 +28,9 @@ def configure_simulator(): """Return the configured simulator, which can be either - `RuntimeSimulator`, object for use with `RuntimeDevice`, or - `CPPStandaloneSimulator`, object for use with `CPPStandaloneDevice. + ``RuntimeSimulator``, object for use with ``RuntimeDevice``, or + ``CPPStandaloneSimulator``, object for use with + ``CPPStandaloneDevice``. Parameters ---------- @@ -38,9 +39,9 @@ def configure_simulator(): Returns ------- brian2modelfitting.simulator.Simulator - Either `RuntimeSimulator` or `CPPStandaloneSimulator` depending - on the currently active `Device` object describing the - available computational engine. + Either ``RuntimeSimulator`` or ``CPPStandaloneSimulator`` + depending on the currently active ``Device`` object describing + the available computational engine. """ simulators = {'CPPStandaloneDevice': CPPStandaloneSimulator(), 'RuntimeDevice': RuntimeSimulator()} @@ -53,8 +54,8 @@ def configure_simulator(): def get_full_namespace(additional_namespace, level=0): - """Return the namespace with added `additional_namespace`, in which - references to external parameters or functions are stored. + """Return the namespace with added ``additional_namespace``, in + which references to external parameters or functions are stored. Parameters ---------- @@ -83,8 +84,8 @@ def get_param_dict(param_values, param_names, n_values): Parameters ---------- param_values : iterable - Iterable of size (`n_samples`, `len(param_names)` containing - parameter values. + Iterable of size (``n_samples``, ``len(param_names)`` + containing parameter values. param_names : iterable Iterable containing parameter names n_values : int @@ -119,7 +120,7 @@ def calc_prior(param_names, **params): Return ------ sbi.utils.torchutils.BoxUniform - `sbi` compatible object that contains a uniform prior + ``sbi`` compatible object that contains a uniform prior distribution over a given set of parameter """ for param_name in param_names: @@ -138,10 +139,11 @@ def calc_prior(param_names, **params): class Inferencer(object): """Class for simulation-based inference. - It offers an interface similar to that of `Fitter` class but + It offers an interface similar to that of ``Fitter`` class but instead of fitting, neural density estimator is trained using a - generative model. This class serves as a wrapper for `sbi` library - for inferencing posterior over unknown parameters of a given model. + generative model. This class serves as a wrapper for ``sbi`` + library for inferencing posterior over unknown parameters of a + given model. Parameters ---------- @@ -151,13 +153,13 @@ class Inferencer(object): Single cell model equations. input : dict Input traces in dictionary format, where key corresponds to the - name of the input variable as defined in `model` and value + name of the input variable as defined in ``model`` and value corresponds to a single dimensional array of data traces. output : dict Dictionary of recorded (or simulated) output data traces, where key corresponds to the name of the output variable as defined - in `model` and value corresponds to a single dimensional array - of recorded data traces. + in ``model`` and value corresponds to a single dimensional + array of recorded data traces. method : str, optional Integration method. threshold : str, optional @@ -167,12 +169,12 @@ class Inferencer(object): The (possibly multi-line) string with the code to execute on reset. refractory : str, optional - Either the length of the refractory period (e.g., `2*ms`), a + Either the length of the refractory period (e.g., ``2*ms``), a string expression that evaluates to the length of the - refractory period after each spike (e.g., `'(1 + rand())*ms'`), + refractory period after each spike, e.g., ``'(1 + rand())*ms'``, or a string expression evaluating to a boolean value, given the - condition under which the neuron stays refractory after a spike - (e.g., `'v > -20*mV'`). + condition under which the neuron stays refractory after a spike, + e.g., ``'v > -20*mV'``. param_init : dict, optional Dictionary of state variables to be initialized with respective values. @@ -190,8 +192,8 @@ def __init__(self, dt, model, input, output, method=None, threshold=None, # input data traces if not isinstance(input, Mapping): - raise TypeError('`input` argument must be a dictionary mapping' - ' the name of the input variable and `input`.') + raise TypeError('``input`` argument must be a dictionary mapping' + ' the name of the input variable and ``input``.') if len(input) > 1: raise NotImplementedError('Only a single input is supported.') input_var = list(input.keys())[0] @@ -201,8 +203,8 @@ def __init__(self, dt, model, input, output, method=None, threshold=None, # output data traces if not isinstance(output, Mapping): - raise TypeError('`output` argument must be a dictionary mapping' - ' the name of the output variable and `output`') + raise TypeError('``output`` argument must be a dictionary mapping' + ' the name of the output variable and ``output``') output_var = list(output.keys()) output = list(output.values()) for o_var in output_var: @@ -243,7 +245,7 @@ def __init__(self, dt, model, input, output, method=None, threshold=None, output_eqs = f'{o_var}_target = {output_expr} : {output_dim}' self.model += output_eqs - # create the `TimedArray` object for input w.r.t. a given time scale + # create ``TimedArray`` object for input w.r.t. a given time scale self.input_traces = TimedArray(input.transpose(), dt=self.dt) # handle initial values for the ODE system @@ -256,7 +258,7 @@ def __init__(self, dt, model, input, output, method=None, threshold=None, ' parameter in the model') self.param_init = param_init - # handle the rest of optional parameters for the `NeuronGroup` class + # handle the rest of optional parameters for the ``NeuronGroup`` class self.method = method self.threshold = threshold self.reset = reset @@ -267,12 +269,12 @@ def __init__(self, dt, model, input, output, method=None, threshold=None, @property def n_neurons(self): - """Return the number of neurons that are used in `NeuronGroup` + """Return the number of neurons that are used in ``NeuronGroup`` class while generating data for training the neural density estimator. - Unlike the `Fitter` class, `Inferencer` does not take the total - number of samples in the constructor. Thus, this property + Unlike the ``Fitter`` class, ``Inferencer`` does not take the + total number of samples in the constructor. Thus, this property becomes available only after the simulation is performed. Parameters @@ -286,7 +288,7 @@ class while generating data for training the neural density """ if self.n_samples is None: raise ValueError('Number of samples is not yet defined.' - 'Call `generate_training_data` method first.') + 'Call ``generate_training_data`` method first.') return self.n_traces * self.n_samples def setup_simulator(self, network_name, n_neurons, output_var, param_init, @@ -386,7 +388,7 @@ def generate_training_data(self, n_samples, prior, level=1): Returns ------- numpy.ndarray - Sampled prior of shape (`n_samples`, -1) + Sampled prior of shape (``n_samples``, -1) brian2modelfitting.simulator.Simulator Executed simulator. """ @@ -426,15 +428,15 @@ def train(self, n_samples, n_rounds=1, estimation_method='SNPE', n_samples : int The number of samples. n_rounds : int or str, optional - If `n_rounds`is set to 1, amortized inference will be - performed. Otherwise, if `n_rounds` is integer larger than - 1, multi-round inference will be performed. + If ``n_rounds`` is set to 1, amortized inference will be + performed. Otherwise, if ``n_rounds`` is integer larger + than 1, multi-round inference will be performed. estimation_method : str Inference method. Either of SNPE, SNLE or SNRE. Currently, only SNPE is supported. density_estimator_model : str - The type of density estimator to be created. Either `mdn`, - `made`, `maf` or `nsf`. + The type of density estimator to be created. Either + ``mdn``, ``made``, ``maf`` or ``nsf``. params : dict Bounds for each parameter. From 948088f27b8e784aa8607412fcb5ec430f1525e1 Mon Sep 17 00:00:00 2001 From: antelk Date: Thu, 24 Jun 2021 09:34:14 +0200 Subject: [PATCH 016/121] add cleaner extraction of recorded values --- brian2modelfitting/inferencer.py | 38 +++++++++++++++----------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py index 7344523..7c4a047 100644 --- a/brian2modelfitting/inferencer.py +++ b/brian2modelfitting/inferencer.py @@ -453,10 +453,11 @@ def train(self, n_samples, n_rounds=1, estimation_method='SNPE', # observation the focus is on x_o = [] for o in self.output: - o_dim = get_dimensions(o) - o_obs = self.extract_features(o.transpose(), o_dim) - x_o.append(o_obs.flatten()) + o = np.array(o) + obs = extract_features(o.transpose()) + x_o.append(obs.flatten()) x_o = torch.tensor(x_o, dtype=torch.float32) + print(x_o.shape) self.x_o = x_o # initialize prior, density estimator and inference method @@ -468,18 +469,17 @@ def train(self, n_samples, n_rounds=1, estimation_method='SNPE', posteriors = [] proposal = prior for _ in range(n_rounds): - # extract the data and make adjustments for `sbi` + # extract the data and make adjustments for ``sbi`` theta, simulator = self.generate_training_data(n_samples, proposal) theta = torch.tensor(theta, dtype=torch.float32) obs = simulator.statemonitor.recorded_variables x = [] for ov in self.output_var: - x_val = obs[ov].get_value_with_unit() - x_dim = get_dimensions(obs[ov]) - features = self.extract_features(x_val, x_dim) + x_val = obs[ov].get_value() + features = extract_features(x_val) x.append(features) - x = torch.tensor(x, dtype=torch.float32) - x = x.reshape(self.n_samples, -1) + x = torch.tensor(x, dtype=torch.float32).reshape(self.n_samples, -1) + print(x.shape) # pass the simulated data to the inference object and train it de = inference.append_simulations(theta, x, proposal).train() @@ -495,17 +495,6 @@ def train(self, n_samples, n_rounds=1, estimation_method='SNPE', self.posterior = posterior return posterior - def extract_features(self, obs, obs_dim): - obs_mean = obs.mean(axis=0) - obs_std = obs.std(axis=0) - obs_ptp = obs.ptp(axis=0) - obs_mean = obs_mean / Quantity(np.ones_like(obs_mean), obs_dim) - obs_std = obs_std / Quantity(np.ones_like(obs_std), obs_dim) - obs_ptp = obs_ptp / Quantity(np.ones_like(obs_ptp), obs_dim) - return np.hstack((np.array(obs_mean).reshape(-1, 1), - np.array(obs_std).reshape(-1, 1), - np.array(obs_ptp).reshape(-1, 1))) - def sample(self, size, viz=False, **kwargs): samples = self.posterior.sample((size, )) if viz: @@ -513,3 +502,12 @@ def sample(self, size, viz=False, **kwargs): plt.tight_layout() plt.show() return samples + + +def extract_features(obs): + obs_mean = obs.mean(axis=0) + obs_std = obs.std(axis=0) + obs_ptp = obs.ptp(axis=0) + return np.hstack((np.array(obs_mean).reshape(-1, 1), + np.array(obs_std).reshape(-1, 1), + np.array(obs_ptp).reshape(-1, 1))) \ No newline at end of file From 8580e42d257747d5d765d13e567cec8cd7c6a252 Mon Sep 17 00:00:00 2001 From: antelk Date: Thu, 24 Jun 2021 11:47:20 +0200 Subject: [PATCH 017/121] add seperate method for visualization and add method for generating fitted traces --- brian2modelfitting/inferencer.py | 136 ++++++++++++++++++++++++++++--- 1 file changed, 126 insertions(+), 10 deletions(-) diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py index 7c4a047..0f07f59 100644 --- a/brian2modelfitting/inferencer.py +++ b/brian2modelfitting/inferencer.py @@ -442,7 +442,7 @@ def train(self, n_samples, n_rounds=1, estimation_method='SNPE', Returns ------- - sbi.inference.posteriors.direct_posterior.DirectPosterior + sbi.inference.posteriors.DirectPosterior Trained posterior. """ if not isinstance(n_rounds, int): @@ -457,7 +457,6 @@ def train(self, n_samples, n_rounds=1, estimation_method='SNPE', obs = extract_features(o.transpose()) x_o.append(obs.flatten()) x_o = torch.tensor(x_o, dtype=torch.float32) - print(x_o.shape) self.x_o = x_o # initialize prior, density estimator and inference method @@ -478,8 +477,8 @@ def train(self, n_samples, n_rounds=1, estimation_method='SNPE', x_val = obs[ov].get_value() features = extract_features(x_val) x.append(features) - x = torch.tensor(x, dtype=torch.float32).reshape(self.n_samples, -1) - print(x.shape) + x = torch.tensor(x, dtype=torch.float32) + x = x.view((self.n_samples, -1)) # pass the simulated data to the inference object and train it de = inference.append_simulations(theta, x, proposal).train() @@ -495,14 +494,131 @@ def train(self, n_samples, n_rounds=1, estimation_method='SNPE', self.posterior = posterior return posterior - def sample(self, size, viz=False, **kwargs): - samples = self.posterior.sample((size, )) - if viz: - sbi.analysis.pairplot(samples, **kwargs) - plt.tight_layout() - plt.show() + def sample(self, shape, posterior=None, **kwargs): + """Return samples from posterior distribution. + + Parameters + ---------- + shape : tuple + Desired shape of samples that are drawn from posterior. + posterior : sbi.inference.posteriors.DirectPosterior, optional + Posterior distribution. + **kwargs : dict, optional + Additional keyword arguments for ``sample`` method in + ``sbi.inference.posteriors.DirectPosterior`` class + Returns + ------- + torch.tensor + Samples from posterior of the shape as given in ``shape``. + """ + if posterior: + p = posterior + else: + try: + p = self.posterior + except NameError as e: + print(e, 'Posterior object is not found.') + samples = p.sample(shape) + self.samples = samples return samples + def pairplot(self, samples=None, **kwargs): + """Plot samples in a 2-D grid with marginals and pairwise + marginals. + + Check ``sbi.analysis.plot.pairplot`` for more details. + + Parameters + ---------- + samples : iterable, optional + Samples used to build the pairplot. + **kwargs : dict, optional + Additional keyword arguments for the + ``sbi.analysis.plot.pairplot`` function. + + Returns + ------- + tuple + Figure and axis of posterior distribution plot. + """ + if samples is not None: + s = samples + else: + try: + s = self.samples + except AttributeError as e: + print(e, '\nProvide samples or call ``sample`` method first.') + raise + fig, axes = sbi.analysis.pairplot(s, **kwargs) + plt.show() + return (fig, axes) + + def generate_traces(self, posterior=None, output_var=None, param_init=None, + level=0): + """Generates traces for a single drawn sample from the trained + posterior and all inputs. + + Parameters + ---------- + posterior : sbi.inference.posteriors.DirectPosterior, optional + Posterior distribution. + output_var: str or sequence of str + Name of the output variable to be monitored, it can also be + a sequence of names to record multiple variables. + param_init : dict + Dictionary of initial values for the model. + level : int, optional + How far to go back to get the locals/globals. + + Returns + ------- + brian2.units.fundamentalunits.Quantity or dict + If a single output variable is observed, 2-D array of + traces generated by using a set of parameters sampled from + the trained posterior distribution of shape + (``n.traces``, number of time steps). Otherwise, a + dictionary with keys set to names of output variables, and + values to generated traces of respective output variables. + """ + # sample a single set of parameters from posterior distribution + if posterior: + p = posterior + else: + try: + p = self.posterior + except NameError as e: + print(e, 'Posterior object is not found.') + params = p.sample((1, )) + + # set up initial values + if param_init is None: + param_init = self.param_init + else: + param_init = dict(self.param_init) + self.param_init.update(param_init) + + # create a dictionary with repeated sampled prior + d_param = get_param_dict(params, self.param_names, self.n_traces) + + # set up and run the simulator + network_name = 'generate_traces' + simulator = self.setup_simulator('generate_traces', + self.n_traces, + output_var=self.output_var, + param_init=param_init, + level=level+1) + simulator.run(self.sim_time, d_param, self.param_names, iteration=0, + name=network_name) + + # create dictionary of traces for multiple observed output variables + if self.output_var > 1: + for ov in self.output_var: + trace = getattr(simulator.statemonitor, ov)[:] + traces = {ov: trace} + else: + traces = getattr(simulator.statemonitor, self.output_var[0])[:] + return traces + def extract_features(obs): obs_mean = obs.mean(axis=0) From d7195439df91bfa3e20419b3c6ac2e9253ff388f Mon Sep 17 00:00:00 2001 From: antelk Date: Thu, 24 Jun 2021 11:59:07 +0200 Subject: [PATCH 018/121] enable train to take a list of functions for summary feature extraction --- brian2modelfitting/inferencer.py | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py index 0f07f59..b2d8ffa 100644 --- a/brian2modelfitting/inferencer.py +++ b/brian2modelfitting/inferencer.py @@ -416,7 +416,7 @@ def generate_training_data(self, n_samples, prior, level=1): name=network_name) return (theta, simulator) - def train(self, n_samples, n_rounds=1, estimation_method='SNPE', + def train(self, n_samples, features, n_rounds=1, estimation_method='SNPE', density_estimator_model='maf', **params): """Return the trained neural density estimator. @@ -427,6 +427,9 @@ def train(self, n_samples, n_rounds=1, estimation_method='SNPE', --------- n_samples : int The number of samples. + features : list + List of callables that take the voltage trace and output + summary statistics stored in `numpy.array`. n_rounds : int or str, optional If ``n_rounds`` is set to 1, amortized inference will be performed. Otherwise, if ``n_rounds`` is integer larger @@ -454,8 +457,10 @@ def train(self, n_samples, n_rounds=1, estimation_method='SNPE', x_o = [] for o in self.output: o = np.array(o) - obs = extract_features(o.transpose()) - x_o.append(obs.flatten()) + obs = [] + for feature in features: + obs.extend(feature(o.transpose())) + x_o.append(obs) x_o = torch.tensor(x_o, dtype=torch.float32) self.x_o = x_o @@ -475,8 +480,10 @@ def train(self, n_samples, n_rounds=1, estimation_method='SNPE', x = [] for ov in self.output_var: x_val = obs[ov].get_value() - features = extract_features(x_val) - x.append(features) + summary_statistics = [] + for feature in features: + summary_statistics.append(feature(x_val)) + x.append(summary_statistics) x = torch.tensor(x, dtype=torch.float32) x = x.view((self.n_samples, -1)) @@ -611,19 +618,10 @@ def generate_traces(self, posterior=None, output_var=None, param_init=None, name=network_name) # create dictionary of traces for multiple observed output variables - if self.output_var > 1: + if len(self.output_var) > 1: for ov in self.output_var: trace = getattr(simulator.statemonitor, ov)[:] traces = {ov: trace} else: traces = getattr(simulator.statemonitor, self.output_var[0])[:] return traces - - -def extract_features(obs): - obs_mean = obs.mean(axis=0) - obs_std = obs.std(axis=0) - obs_ptp = obs.ptp(axis=0) - return np.hstack((np.array(obs_mean).reshape(-1, 1), - np.array(obs_std).reshape(-1, 1), - np.array(obs_ptp).reshape(-1, 1))) \ No newline at end of file From eb1e5124e73b23a057b661ed41e152eb01f95c25 Mon Sep 17 00:00:00 2001 From: antelk Date: Thu, 24 Jun 2021 11:59:32 +0200 Subject: [PATCH 019/121] update according to changes in Inferencer class --- examples/hh_sbi.py | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/examples/hh_sbi.py b/examples/hh_sbi.py index 33539c5..939e2c8 100644 --- a/examples/hh_sbi.py +++ b/examples/hh_sbi.py @@ -42,8 +42,12 @@ param_init={'v': 'VT'}) # Generate prior and train the neural density estimator -inferencer.train(n_samples=100, - n_rounds=2, +inferencer.train(n_samples=15, + features=[ + lambda x: x.mean(axis=0), + lambda x: x.std(axis=0), + lambda x: x.ptp(axis=0)], + n_rounds=1, density_estimator_model='made', gl=[1e-09 * siemens, 1e-07 * siemens], g_na=[2e-06 * siemens, 2e-04 * siemens], @@ -53,5 +57,10 @@ # Draw samples from posterior and visualize the results labels_params = [r'$\overline{g}_{l}$', r'$\overline{g}_{Na}$', r'$\overline{g}_{K}$', r'$\overline{C}_{m}$'] -samples = inferencer.sample(1000, viz=True, - labels=labels_params, figsize=(10, 10)) +inferencer.sample((1000,)) + +# Create pairplot from samples +inferencer.pairplot() + +# Generate traces by using a single sample from the trained posterior +fits = inferencer.generate_traces() From ba37935801e895409d51b134ab9ed241026092a6 Mon Sep 17 00:00:00 2001 From: antelk Date: Thu, 24 Jun 2021 17:13:59 +0200 Subject: [PATCH 020/121] add visualization of fitted traces --- examples/hh_sbi.py | 37 +++++++++++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/examples/hh_sbi.py b/examples/hh_sbi.py index 939e2c8..a50255e 100644 --- a/examples/hh_sbi.py +++ b/examples/hh_sbi.py @@ -1,5 +1,5 @@ -from brian2 import um, cm, ms, mV, amp, siemens, uF -from brian2modelfitting import Inferencer +from brian2 import * +from brian2modelfitting import * import pandas as pd @@ -42,7 +42,7 @@ param_init={'v': 'VT'}) # Generate prior and train the neural density estimator -inferencer.train(n_samples=15, +inferencer.train(n_samples=1000, features=[ lambda x: x.mean(axis=0), lambda x: x.std(axis=0), @@ -54,13 +54,34 @@ g_kd=[6e-07 * siemens, 6e-05 * siemens], Cm=[0.1 * uF * cm ** -2 * area, 2 * uF * cm ** -2 * area]) -# Draw samples from posterior and visualize the results -labels_params = [r'$\overline{g}_{l}$', r'$\overline{g}_{Na}$', - r'$\overline{g}_{K}$', r'$\overline{C}_{m}$'] +# Draw samples from posterior inferencer.sample((1000,)) # Create pairplot from samples -inferencer.pairplot() +labels_params = [r'$\overline{g}_{l}$', r'$\overline{g}_{Na}$', + r'$\overline{g}_{K}$', r'$\overline{C}_{m}$'] +inferencer.pairplot(labels=labels_params) # Generate traces by using a single sample from the trained posterior -fits = inferencer.generate_traces() +inf_traces = inferencer.generate_traces() + +# Visualize traces +t = arange(0, out_traces.shape[1] * dt / ms, dt / ms) +nrows = 2 +ncols = out_traces.shape[0] +fig, axs = subplots(nrows, ncols, sharex=True, + gridspec_kw={'height_ratios': [3, 1]}, figsize=(15, 4)) +for idx in range(ncols): + axs[0, idx].plot(out_traces[idx, :].T, label='measurements') + axs[0, idx].plot(inf_traces[idx, :].T / mV, label='fits') + axs[1, idx].plot(inp_traces[idx, :].T / amp, 'k-', label='stimulus') + axs[1, idx].set_xlabel('t, ms') + if idx == 0: + axs[0, idx].set_ylabel('$v$, mV') + axs[1, idx].set_ylabel('$I$, nA') +handles, labels = [(h + l) for h, l + in zip(axs[0, idx].get_legend_handles_labels(), + axs[1, idx].get_legend_handles_labels())] +fig.legend(handles, labels) +tight_layout() +show() \ No newline at end of file From 32085fe112d018167aff487c3cc88e5d57abc3d1 Mon Sep 17 00:00:00 2001 From: antelk Date: Thu, 24 Jun 2021 17:15:00 +0200 Subject: [PATCH 021/121] fix docstrings to work well with sphinx --- brian2modelfitting/inferencer.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py index b2d8ffa..f401993 100644 --- a/brian2modelfitting/inferencer.py +++ b/brian2modelfitting/inferencer.py @@ -28,9 +28,9 @@ def configure_simulator(): """Return the configured simulator, which can be either - ``RuntimeSimulator``, object for use with ``RuntimeDevice``, or - ``CPPStandaloneSimulator``, object for use with - ``CPPStandaloneDevice``. + `.RuntimeSimulator`, object for use with `.RuntimeDevice`, or + `.CPPStandaloneSimulator`, object for use with + `.CPPStandaloneDevice`. Parameters ---------- @@ -39,7 +39,7 @@ def configure_simulator(): Returns ------- brian2modelfitting.simulator.Simulator - Either ``RuntimeSimulator`` or ``CPPStandaloneSimulator`` + Either `.RuntimeSimulator` or `.CPPStandaloneSimulator` depending on the currently active ``Device`` object describing the available computational engine. """ @@ -84,7 +84,7 @@ def get_param_dict(param_values, param_names, n_values): Parameters ---------- param_values : iterable - Iterable of size (``n_samples``, ``len(param_names)`` + Iterable of size (``n_samples``, ``len(param_names)``) containing parameter values. param_names : iterable Iterable containing parameter names From 5763c475e959cb17b7903e7ebf113ddb840af645 Mon Sep 17 00:00:00 2001 From: antelk Date: Fri, 25 Jun 2021 11:39:28 +0200 Subject: [PATCH 022/121] rename train to infere and additional refactoring --- brian2modelfitting/inferencer.py | 240 +++++++++++++++++++++++++------ 1 file changed, 200 insertions(+), 40 deletions(-) diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py index f401993..01ef5d0 100644 --- a/brian2modelfitting/inferencer.py +++ b/brian2modelfitting/inferencer.py @@ -17,7 +17,9 @@ Quantity) import matplotlib.pyplot as plt import numpy as np -from sbi.utils.get_nn_models import posterior_nn +from sbi.utils.get_nn_models import (posterior_nn, + likelihood_nn, + classifier_nn) from sbi.utils.torchutils import BoxUniform import sbi.analysis import sbi.inference @@ -139,7 +141,7 @@ def calc_prior(param_names, **params): class Inferencer(object): """Class for simulation-based inference. - It offers an interface similar to that of ``Fitter`` class but + It offers an interface similar to that of `.Fitter` class but instead of fitting, neural density estimator is trained using a generative model. This class serves as a wrapper for ``sbi`` library for inferencing posterior over unknown parameters of a @@ -269,11 +271,11 @@ def __init__(self, dt, model, input, output, method=None, threshold=None, @property def n_neurons(self): - """Return the number of neurons that are used in ``NeuronGroup`` + """Return the number of neurons that are used in `.NeuronGroup` class while generating data for training the neural density estimator. - Unlike the ``Fitter`` class, ``Inferencer`` does not take the + Unlike the `.Fitter` class, `.Inferencer` does not take the total number of samples in the constructor. Thus, this property becomes available only after the simulation is performed. @@ -371,7 +373,7 @@ def initialize_prior(self, **params): prior = calc_prior(self.param_names, **params) return prior - def generate_training_data(self, n_samples, prior, level=1): + def generate_training_data(self, n_samples, prior): """Return sampled prior and executed simulator containing recorded variables to be used for training the neural density estimator. @@ -382,15 +384,11 @@ def generate_training_data(self, n_samples, prior, level=1): The number of samples. prior : sbi.utils.BoxUniform Uniformly distributed prior over given parameters. - level : int, optional - How far to go back to get the locals/globals. Returns ------- numpy.ndarray - Sampled prior of shape (``n_samples``, -1) - brian2modelfitting.simulator.Simulator - Executed simulator. + Sampled prior of shape (``n_samples``, -1). """ # set n_samples to class variable to be able to call self.n_neurons self.n_samples = n_samples @@ -398,14 +396,34 @@ def generate_training_data(self, n_samples, prior, level=1): # sample from prior theta = prior.sample((n_samples, )) theta = np.atleast_2d(theta.numpy()) + return theta + + def extract_summary_statistics(self, theta, features, level=1): + """Return summary statistics to be used for training the neural + density estimator. + + Parameters + ---------- + theta : numpy.ndarray + Sampled prior of shape (``n_samples``, -1). + features : list + List of callables that take the voltage trace and output + summary statistics stored in `numpy.array`. + level : int, optional + How far to go back to get the locals/globals. + Returns + ------- + numpy.ndarray + Summary statistics. + """ # repeat each row for how many input/output different trace are there _theta = np.repeat(theta, repeats=self.n_traces, axis=0) # create a dictionary with repeated sampled prior d_param = get_param_dict(_theta, self.param_names, self.n_neurons) - # setup and run the simulator + # set up and run the simulator network_name = 'infere' simulator = self.setup_simulator(network_name=network_name, n_neurons=self.n_neurons, @@ -414,10 +432,131 @@ def generate_training_data(self, n_samples, prior, level=1): level=level+1) simulator.run(self.sim_time, d_param, self.param_names, iteration=0, name=network_name) - return (theta, simulator) - def train(self, n_samples, features, n_rounds=1, estimation_method='SNPE', - density_estimator_model='maf', **params): + # extract features + obs = simulator.statemonitor.recorded_variables + x = [] + for ov in self.output_var: + x_val = obs[ov].get_value() + summary_statistics = [] + for feature in features: + summary_statistics.append(feature(x_val)) + x.append(summary_statistics) + x = np.array(x, dtype=np.float32) + x = x.reshape((self.n_samples, -1)) + return x + + def init_inference(self, inference_method, density_estimator_model, prior, + **inference_kwargs): + """Return instantiated inference object. + + Parameters + ---------- + inference_method : str + Inference method. Either of SNPE, SNLE or SNRE. + density_estimator_model : str + The type of density estimator to be created. Either + ``mdn``, ``made``, ``maf``, ``nsf`` for SNPE and SNLE, or + ``linear``, ``mlp``, ``resnet`` for SNRE. + prior : sbi.utils.BoxUniform + Uniformly distributed prior over given parameters. + inference_kwargs : dict, optional + Additional keyword arguments for + ``sbi.utils.get_nn_models.posterior_nn`` method. + + Returns + ------- + sbi.inference.NeuralInference + Instantiated inference object. + """ + try: + inference_method = str.upper(inference_method) + inference_method_fun = getattr(sbi.inference, inference_method) + except AttributeError: + raise NameError(f'Inference method {inference_method} is not ' + 'supported. Choose between SNPE, SNLE or SNRE.') + finally: + if inference_method == 'SNPE': + density_estimator_builder = posterior_nn( + model=density_estimator_model, **inference_kwargs) + elif inference_method == 'SNLE': + density_estimator_builder = likelihood_nn( + model=density_estimator_model, **inference_kwargs) + else: + density_estimator_builder = classifier_nn( + model=density_estimator_model, **inference_kwargs) + inference = inference_method_fun(prior, density_estimator_builder, + device='cpu', + show_progress_bars=True) + return inference + + def train(self, inference, theta, x, *args, **train_kwargs): + """Return inference object with stored training data and + trained density estimator. + + Parameters + ---------- + inference : sbi.inference.NeuralInference + Instantiated inference object with stored paramaters and + simulation outputs prepared for training. + theta : torch.tensor + Sampled prior. + x : torch.tensor + Summary statistics. + args : list, optional + Contains a uniformly distributed sbi.utils.BoxUniform + prior/proposal. Used only for SNPE, for SNLE and SNRE, + ``proposal`` should not be passed to ``append_simulations`` + method, thus ``args`` should not be passed. + train_kwargs : dict, optional + Additional keyword arguments for ``train`` method of + ``sbi.inference.NeuralInference`` object. + + Returns + ------- + tuple + ``sbi.inference.NeuralInference`` object with stored + paramaters and simulation outputs prepared for training and + trained neural density estimator object. + """ + inference = inference.append_simulations(theta, x, *args) + density_estimator = inference.train(**train_kwargs) + return (inference, density_estimator) + + def build_posterior(self, inference, density_estimator): + """Return instantiated inference object. + + Parameters + ---------- + inference : sbi.inference.NeuralInference + Instantiated inference object with stored paramaters and + simulation outputs prepared for training. + theta : torch.tensor + Sampled prior. + x : torch.tensor + Summary statistics. + args : list, optional + Contains a uniformly distributed sbi.utils.BoxUniform + prior/proposal. Used only for SNPE, for SNLE and SNRE, + ``proposal`` should not be passed to ``append_simulations`` + method, thus ``args`` should not be passed. + train_kwargs : dict, optional + Additional keyword arguments for ``train`` method of + ``sbi.inference.NeuralInference`` object. + + Returns + ------- + tuple + ``sbi.inference.NeuralInference`` object with stored + paramaters and simulation outputs prepared for training and + ``sbi.inference.NeuralInference`` object from which. + """ + posterior = inference.build_posterior(density_estimator) + return (inference, posterior) + + def infere(self, n_samples, features, n_rounds=1, inference_method='SNPE', + density_estimator_model='maf', inference_kwargs={}, + train_kwargs={}, posterior_kwargs={}, **params): """Return the trained neural density estimator. Currently only sequential neural posterior estimator is @@ -434,12 +573,14 @@ def train(self, n_samples, features, n_rounds=1, estimation_method='SNPE', If ``n_rounds`` is set to 1, amortized inference will be performed. Otherwise, if ``n_rounds`` is integer larger than 1, multi-round inference will be performed. - estimation_method : str + inference_method : str Inference method. Either of SNPE, SNLE or SNRE. Currently, only SNPE is supported. density_estimator_model : str The type of density estimator to be created. Either ``mdn``, ``made``, ``maf`` or ``nsf``. + train_kwargs : dict, optional + Dictionary of arguments for training the posterior estimator. params : dict Bounds for each parameter. @@ -450,8 +591,13 @@ def train(self, n_samples, features, n_rounds=1, estimation_method='SNPE', """ if not isinstance(n_rounds, int): raise ValueError('Number of rounds must be a positive integer.') - if str.upper(estimation_method) != 'SNPE': - raise NotImplementedError('Only SNPE estimator is supported.') + try: + inference_method = str.upper(inference_method) + except ValueError as e: + print(e, '\nInvalid inference method.') + if inference_method not in ['SNPE', 'SNLE', 'SNRE']: + raise ValueError(f'Inference method {inference_method} is not ' + 'supported. Choose between SNPE, SNLE or SNRE.') # observation the focus is on x_o = [] @@ -464,34 +610,44 @@ def train(self, n_samples, features, n_rounds=1, estimation_method='SNPE', x_o = torch.tensor(x_o, dtype=torch.float32) self.x_o = x_o - # initialize prior, density estimator and inference method + # initialize prior prior = self.initialize_prior(**params) - density_esimator = posterior_nn(density_estimator_model) - inference = sbi.inference.SNPE(prior, density_esimator) - # allocate empty list of posteriors, for multi-round inference only + # initialize inference object + inference = self.init_inference(inference_method, + density_estimator_model, + prior, + **inference_kwargs) + + # allocate empty list of posteriors posteriors = [] proposal = prior - for _ in range(n_rounds): - # extract the data and make adjustments for ``sbi`` - theta, simulator = self.generate_training_data(n_samples, proposal) + if inference_method == 'SNPE': + args = [proposal] + else: + args = [] + for round in range(n_rounds): + print(f'Round {round + 1} of inference.') + + # extract the training data and make adjustments for ``sbi`` + print('Generating training data...') + theta = self.generate_training_data(n_samples, proposal) theta = torch.tensor(theta, dtype=torch.float32) - obs = simulator.statemonitor.recorded_variables - x = [] - for ov in self.output_var: - x_val = obs[ov].get_value() - summary_statistics = [] - for feature in features: - summary_statistics.append(feature(x_val)) - x.append(summary_statistics) - x = torch.tensor(x, dtype=torch.float32) - x = x.view((self.n_samples, -1)) + + # extract the summary statistics and make adjustments for ``sbi`` + x = self.extract_summary_statistics(theta, features) + x = torch.tensor(x) # pass the simulated data to the inference object and train it - de = inference.append_simulations(theta, x, proposal).train() + print('Training the neural density estimator...') + inference, density_estimator = self.train(inference, + theta, x, + *args, **train_kwargs) # use the density estimator to build the posterior - posterior = inference.build_posterior(de) + inference, posterior = self.build_posterior(inference, + density_estimator, + **posterior_kwargs) # append the current posterior to the list of posteriors posteriors.append(posterior) @@ -597,6 +753,10 @@ def generate_traces(self, posterior=None, output_var=None, param_init=None, print(e, 'Posterior object is not found.') params = p.sample((1, )) + # set output variable that is monitored + if output_var is None: + output_var = self.output_var + # set up initial values if param_init is None: param_init = self.param_init @@ -611,17 +771,17 @@ def generate_traces(self, posterior=None, output_var=None, param_init=None, network_name = 'generate_traces' simulator = self.setup_simulator('generate_traces', self.n_traces, - output_var=self.output_var, + output_var=output_var, param_init=param_init, level=level+1) simulator.run(self.sim_time, d_param, self.param_names, iteration=0, name=network_name) # create dictionary of traces for multiple observed output variables - if len(self.output_var) > 1: - for ov in self.output_var: + if len(output_var) > 1: + for ov in output_var: trace = getattr(simulator.statemonitor, ov)[:] traces = {ov: trace} else: - traces = getattr(simulator.statemonitor, self.output_var[0])[:] + traces = getattr(simulator.statemonitor, output_var[0])[:] return traces From 49f673e67341e0f7e092b9febcc21ca85af883a2 Mon Sep 17 00:00:00 2001 From: Marcel Stimberg Date: Fri, 25 Jun 2021 17:31:43 +0200 Subject: [PATCH 023/121] Remove plt.show from pairplot --- brian2modelfitting/inferencer.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py index 01ef5d0..bb00878 100644 --- a/brian2modelfitting/inferencer.py +++ b/brian2modelfitting/inferencer.py @@ -713,8 +713,7 @@ def pairplot(self, samples=None, **kwargs): print(e, '\nProvide samples or call ``sample`` method first.') raise fig, axes = sbi.analysis.pairplot(s, **kwargs) - plt.show() - return (fig, axes) + return fig, axes def generate_traces(self, posterior=None, output_var=None, param_init=None, level=0): From 1d79aaf602c22d6db8ce8619f87058fcb1a97734 Mon Sep 17 00:00:00 2001 From: Marcel Stimberg Date: Fri, 25 Jun 2021 17:31:57 +0200 Subject: [PATCH 024/121] =?UTF-8?q?Adapt=20example=20to=20train=E2=86=92in?= =?UTF-8?q?fere=20rename?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- examples/hh_sbi.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/examples/hh_sbi.py b/examples/hh_sbi.py index a50255e..4ca1c00 100644 --- a/examples/hh_sbi.py +++ b/examples/hh_sbi.py @@ -42,17 +42,17 @@ param_init={'v': 'VT'}) # Generate prior and train the neural density estimator -inferencer.train(n_samples=1000, - features=[ - lambda x: x.mean(axis=0), - lambda x: x.std(axis=0), - lambda x: x.ptp(axis=0)], - n_rounds=1, - density_estimator_model='made', - gl=[1e-09 * siemens, 1e-07 * siemens], - g_na=[2e-06 * siemens, 2e-04 * siemens], - g_kd=[6e-07 * siemens, 6e-05 * siemens], - Cm=[0.1 * uF * cm ** -2 * area, 2 * uF * cm ** -2 * area]) +inferencer.infere(n_samples=1000, + features=[ + lambda x: x.mean(axis=0), + lambda x: x.std(axis=0), + lambda x: x.ptp(axis=0)], + n_rounds=2, + density_estimator_model='made', + gl=[1e-09 * siemens, 1e-07 * siemens], + g_na=[2e-06 * siemens, 2e-04 * siemens], + g_kd=[6e-07 * siemens, 6e-05 * siemens], + Cm=[0.1 * uF * cm ** -2 * area, 2 * uF * cm ** -2 * area]) # Draw samples from posterior inferencer.sample((1000,)) @@ -84,4 +84,4 @@ axs[1, idx].get_legend_handles_labels())] fig.legend(handles, labels) tight_layout() -show() \ No newline at end of file +show() From ceb7348accbb82359cb3db98678b061c18d6acb7 Mon Sep 17 00:00:00 2001 From: Marcel Stimberg Date: Fri, 25 Jun 2021 17:40:09 +0200 Subject: [PATCH 025/121] Moving attributes into Inferencer.__init__ --- brian2modelfitting/inferencer.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py index bb00878..02601ff 100644 --- a/brian2modelfitting/inferencer.py +++ b/brian2modelfitting/inferencer.py @@ -266,8 +266,11 @@ def __init__(self, dt, model, input, output, method=None, threshold=None, self.reset = reset self.refractory = refractory - # placeholder for the number of samples + # placeholder for samples self.n_samples = None + self.samples = None + # placeholder for the posterior + self.posterior = None @property def n_neurons(self): @@ -677,10 +680,11 @@ def sample(self, shape, posterior=None, **kwargs): if posterior: p = posterior else: - try: - p = self.posterior - except NameError as e: - print(e, 'Posterior object is not found.') + p = self.posterior + if not p: + raise ValueError("Need to provide posterior argument if no " + "posterior has been calculated by the 'infere' " + "method.") samples = p.sample(shape) self.samples = samples return samples From f6916c4ab0885b2396885d4c15f363e31df85ce5 Mon Sep 17 00:00:00 2001 From: antelk Date: Sun, 27 Jun 2021 13:56:39 +0200 Subject: [PATCH 026/121] add pt and pth files --- .gitignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index 6b47837..0ad66b4 100644 --- a/.gitignore +++ b/.gitignore @@ -83,3 +83,7 @@ brian2modelfitting.egg-info # sbi logs examples/sbi-logs/ + +# other sbi and torch stuff +examples/*.pt +examples/*.pth From ae627e11e0adba0d08d6c4262cae4f86e8040447 Mon Sep 17 00:00:00 2001 From: antelk Date: Sun, 27 Jun 2021 13:57:20 +0200 Subject: [PATCH 027/121] add slight changes in API and load/store functionality --- brian2modelfitting/inferencer.py | 105 +++++++++++++++++++++++-------- 1 file changed, 78 insertions(+), 27 deletions(-) diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py index 02601ff..c67605d 100644 --- a/brian2modelfitting/inferencer.py +++ b/brian2modelfitting/inferencer.py @@ -15,7 +15,6 @@ fail_for_dimension_mismatch, get_dimensions, Quantity) -import matplotlib.pyplot as plt import numpy as np from sbi.utils.get_nn_models import (posterior_nn, likelihood_nn, @@ -162,6 +161,9 @@ class Inferencer(object): key corresponds to the name of the output variable as defined in ``model`` and value corresponds to a single dimensional array of recorded data traces. + features : list + List of callables that take the voltage trace and output + summary statistics stored in `numpy.array`. method : str, optional Integration method. threshold : str, optional @@ -181,8 +183,8 @@ class Inferencer(object): Dictionary of state variables to be initialized with respective values. """ - def __init__(self, dt, model, input, output, method=None, threshold=None, - reset=None, refractory=None, param_init=None): + def __init__(self, dt, model, input, output, features, method=None, + threshold=None, reset=None, refractory=None, param_init=None): # time scale self.dt = dt @@ -271,6 +273,17 @@ def __init__(self, dt, model, input, output, method=None, threshold=None, self.samples = None # placeholder for the posterior self.posterior = None + # observation the focus is on + x_o = [] + for o in self.output: + o = np.array(o) + obs = [] + for feature in features: + obs.extend(feature(o.transpose())) + x_o.append(obs) + x_o = torch.tensor(x_o, dtype=torch.float32) + self.x_o = x_o + self.features = features @property def n_neurons(self): @@ -526,7 +539,8 @@ def train(self, inference, theta, x, *args, **train_kwargs): density_estimator = inference.train(**train_kwargs) return (inference, density_estimator) - def build_posterior(self, inference, density_estimator): + def build_posterior(self, inference, density_estimator, + **posterior_kwargs): """Return instantiated inference object. Parameters @@ -543,9 +557,9 @@ def build_posterior(self, inference, density_estimator): prior/proposal. Used only for SNPE, for SNLE and SNRE, ``proposal`` should not be passed to ``append_simulations`` method, thus ``args`` should not be passed. - train_kwargs : dict, optional - Additional keyword arguments for ``train`` method of - ``sbi.inference.NeuralInference`` object. + posterior_kwargs : dict, optional + Additional keyword arguments for ``build_posterior`` method + of ``sbi.inference.NeuralInference`` object. Returns ------- @@ -554,10 +568,11 @@ def build_posterior(self, inference, density_estimator): paramaters and simulation outputs prepared for training and ``sbi.inference.NeuralInference`` object from which. """ - posterior = inference.build_posterior(density_estimator) + posterior = inference.build_posterior(density_estimator, + **posterior_kwargs) return (inference, posterior) - def infere(self, n_samples, features, n_rounds=1, inference_method='SNPE', + def infere(self, n_samples, n_rounds=1, inference_method='SNPE', density_estimator_model='maf', inference_kwargs={}, train_kwargs={}, posterior_kwargs={}, **params): """Return the trained neural density estimator. @@ -569,9 +584,6 @@ def infere(self, n_samples, features, n_rounds=1, inference_method='SNPE', --------- n_samples : int The number of samples. - features : list - List of callables that take the voltage trace and output - summary statistics stored in `numpy.array`. n_rounds : int or str, optional If ``n_rounds`` is set to 1, amortized inference will be performed. Otherwise, if ``n_rounds`` is integer larger @@ -582,14 +594,19 @@ def infere(self, n_samples, features, n_rounds=1, inference_method='SNPE', density_estimator_model : str The type of density estimator to be created. Either ``mdn``, ``made``, ``maf`` or ``nsf``. + inference_kwargs : dict, optional + Additional keyword arguments for + ``sbi.utils.get_nn_models.posterior_nn`` method. train_kwargs : dict, optional Dictionary of arguments for training the posterior estimator. + posterior_kwargs : dict, optional + Dictionary of arguments for `.build_posterior` method. params : dict Bounds for each parameter. Returns ------- - sbi.inference.posteriors.DirectPosterior + sbi.inference.NeuralPosterior Trained posterior. """ if not isinstance(n_rounds, int): @@ -602,17 +619,6 @@ def infere(self, n_samples, features, n_rounds=1, inference_method='SNPE', raise ValueError(f'Inference method {inference_method} is not ' 'supported. Choose between SNPE, SNLE or SNRE.') - # observation the focus is on - x_o = [] - for o in self.output: - o = np.array(o) - obs = [] - for feature in features: - obs.extend(feature(o.transpose())) - x_o.append(obs) - x_o = torch.tensor(x_o, dtype=torch.float32) - self.x_o = x_o - # initialize prior prior = self.initialize_prior(**params) @@ -638,7 +644,7 @@ def infere(self, n_samples, features, n_rounds=1, inference_method='SNPE', theta = torch.tensor(theta, dtype=torch.float32) # extract the summary statistics and make adjustments for ``sbi`` - x = self.extract_summary_statistics(theta, features) + x = self.extract_summary_statistics(theta, self.features) x = torch.tensor(x) # pass the simulated data to the inference object and train it @@ -656,7 +662,7 @@ def infere(self, n_samples, features, n_rounds=1, inference_method='SNPE', posteriors.append(posterior) # update the proposal given the observation - proposal = posterior.set_default_x(x_o) + proposal = posterior.set_default_x(self.x_o) self.posterior = posterior return posterior @@ -685,7 +691,7 @@ def sample(self, shape, posterior=None, **kwargs): raise ValueError("Need to provide posterior argument if no " "posterior has been calculated by the 'infere' " "method.") - samples = p.sample(shape) + samples = p.sample(shape, **kwargs) self.samples = samples return samples @@ -788,3 +794,48 @@ def generate_traces(self, posterior=None, output_var=None, param_init=None, else: traces = getattr(simulator.statemonitor, output_var[0])[:] return traces + + def save(self, f, posterior=None): + """Saves the density estimator state dictionary to a disk file. + + Parameters + ---------- + posterior : sbi.inference.posteriors.DirectPosterior, optional + Posterior distribution. + f : str or os.PathLike + Path to file either as string or ``os.PathLike`` object + that contains file name. + + Returns + ------- + None + """ + if posterior: + p = posterior + else: + p = self.posterior + if not p: + raise ValueError("Need to provide posterior argument if no " + "posterior has been calculated by the 'infere' " + "method.") + torch.save(p, f) + + def load_posterior(self, f): + """Loads the density estimator state dictionary from a disk file. + + Parameters + ---------- + f : str or os.PathLike + Path to file either as string or ``os.PathLike`` object + that contains file name. + + Returns + ------- + sbi.inference.NeuralPosterior + Loaded neural posterior with defined method family, density + estimator state dictionary, prior over parameters and + output shape of the simulator. + """ + p = torch.load(f) + self.posterior = p + return p From f843194cbec57d176a96e59ce51c8cd13c7f2c47 Mon Sep 17 00:00:00 2001 From: antelk Date: Sun, 27 Jun 2021 13:58:33 +0200 Subject: [PATCH 028/121] add changes w.r.t. changes in Inferencer API --- examples/hh_sbi.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/examples/hh_sbi.py b/examples/hh_sbi.py index 4ca1c00..a500990 100644 --- a/examples/hh_sbi.py +++ b/examples/hh_sbi.py @@ -36,6 +36,10 @@ inferencer = Inferencer(dt=dt, model=eqs, input={'I': inp_traces * amp}, output={'v': out_traces * mV}, + features=[ + lambda x: x.mean(axis=0), + lambda x: x.std(axis=0), + lambda x: x.ptp(axis=0)], method='exponential_euler', threshold='m > 0.5', refractory='m > 0.5', @@ -43,12 +47,7 @@ # Generate prior and train the neural density estimator inferencer.infere(n_samples=1000, - features=[ - lambda x: x.mean(axis=0), - lambda x: x.std(axis=0), - lambda x: x.ptp(axis=0)], - n_rounds=2, - density_estimator_model='made', + n_rounds=1, gl=[1e-09 * siemens, 1e-07 * siemens], g_na=[2e-06 * siemens, 2e-04 * siemens], g_kd=[6e-07 * siemens, 6e-05 * siemens], From f6913c45ef0aee6a2a6f4654cfa15a0d88cd822e Mon Sep 17 00:00:00 2001 From: antelk Date: Mon, 28 Jun 2021 22:53:33 +0200 Subject: [PATCH 029/121] add saved numpy arrays --- .gitignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index 0ad66b4..09ffcc7 100644 --- a/.gitignore +++ b/.gitignore @@ -87,3 +87,7 @@ examples/sbi-logs/ # other sbi and torch stuff examples/*.pt examples/*.pth + +# numpy files +examples/*.npy +examples/*.npz \ No newline at end of file From 6fa9eeddb39d89a25572492f4ccb5413e96583cb Mon Sep 17 00:00:00 2001 From: antelk Date: Mon, 28 Jun 2021 22:54:15 +0200 Subject: [PATCH 030/121] add storing functionality for theta and x --- brian2modelfitting/inferencer.py | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py index c67605d..b0ecf30 100644 --- a/brian2modelfitting/inferencer.py +++ b/brian2modelfitting/inferencer.py @@ -389,7 +389,7 @@ def initialize_prior(self, **params): prior = calc_prior(self.param_names, **params) return prior - def generate_training_data(self, n_samples, prior): + def generate_training_data(self, n_samples, prior, save=False): """Return sampled prior and executed simulator containing recorded variables to be used for training the neural density estimator. @@ -400,6 +400,11 @@ def generate_training_data(self, n_samples, prior): The number of samples. prior : sbi.utils.BoxUniform Uniformly distributed prior over given parameters. + save : bool or str, optional + Save training data for later use into ``.npz`` file. If set + to True, sampled prior over parameters will be stored to a + ``theta.npz`` file. Otherwise, if set to a string the name + of the file will be forwarded string value. Returns ------- @@ -412,9 +417,16 @@ def generate_training_data(self, n_samples, prior): # sample from prior theta = prior.sample((n_samples, )) theta = np.atleast_2d(theta.numpy()) + + if save: + if isinstance(save, (str, )): + fn = save + '.npz' + else: + fn = 'theta.npz' + np.savez(fn, theta) return theta - def extract_summary_statistics(self, theta, features, level=1): + def extract_summary_statistics(self, theta, features, save=False, level=1): """Return summary statistics to be used for training the neural density estimator. @@ -425,6 +437,11 @@ def extract_summary_statistics(self, theta, features, level=1): features : list List of callables that take the voltage trace and output summary statistics stored in `numpy.array`. + save : bool or str, optional + Save training data for later use into ``.npz`` file. If set + to True, extracted features will be stored to a ``x.npz`` + file. Otherwise, if set to a string the name of the file + will be forwarded string value. level : int, optional How far to go back to get the locals/globals. @@ -460,6 +477,12 @@ def extract_summary_statistics(self, theta, features, level=1): x.append(summary_statistics) x = np.array(x, dtype=np.float32) x = x.reshape((self.n_samples, -1)) + if save: + if isinstance(save, (str, )): + fn = save + '.npz' + else: + fn = 'x.npz' + np.savez(fn, theta) return x def init_inference(self, inference_method, density_estimator_model, prior, From 97f5307593c0782648b61b13648a5b00e8569c07 Mon Sep 17 00:00:00 2001 From: antelk Date: Tue, 29 Jun 2021 13:44:32 +0200 Subject: [PATCH 031/121] fix minor issues --- brian2modelfitting/inferencer.py | 6 +++--- examples/hh_sbi.py | 35 ++++++++++++++++++++++---------- 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py index b0ecf30..25e6942 100644 --- a/brian2modelfitting/inferencer.py +++ b/brian2modelfitting/inferencer.py @@ -162,8 +162,8 @@ class Inferencer(object): in ``model`` and value corresponds to a single dimensional array of recorded data traces. features : list - List of callables that take the voltage trace and output - summary statistics stored in `numpy.array`. + List of callables that take the voltage trace and output + summary statistics. method : str, optional Integration method. threshold : str, optional @@ -659,7 +659,7 @@ def infere(self, n_samples, n_rounds=1, inference_method='SNPE', else: args = [] for round in range(n_rounds): - print(f'Round {round + 1} of inference.') + print(f'Round {round + 1}/{n_rounds}.') # extract the training data and make adjustments for ``sbi`` print('Generating training data...') diff --git a/examples/hh_sbi.py b/examples/hh_sbi.py index a500990..f25a266 100644 --- a/examples/hh_sbi.py +++ b/examples/hh_sbi.py @@ -1,15 +1,17 @@ from brian2 import * from brian2modelfitting import * import pandas as pd +import numpy as np +from scipy.signal import find_peaks # Load input and output data traces df_inp_traces = pd.read_csv('input_traces_hh.csv') df_out_traces = pd.read_csv('output_traces_hh.csv') inp_traces = df_inp_traces.to_numpy() -inp_traces = inp_traces[:3, 1:] +inp_traces = inp_traces[:2, 1:] out_traces = df_out_traces.to_numpy() -out_traces = out_traces[:3, 1:] +out_traces = out_traces[:2, 1:] # Model and its parameters area = 20_000 * um ** 2 @@ -32,14 +34,26 @@ Cm : farad (constant) ''' +# Time domain +t = arange(0, out_traces.shape[1] * dt / ms, dt / ms) + + +def n_peaks(x): + n_p = [] + for _x in x.transpose(): + p_i = find_peaks(_x, height=0)[0] + n_p.append(p_i.size - sum(np.diff(t[p_i]) < 4)) + return n_p + + # Simulation-based inference object instantiation inferencer = Inferencer(dt=dt, model=eqs, input={'I': inp_traces * amp}, output={'v': out_traces * mV}, - features=[ - lambda x: x.mean(axis=0), - lambda x: x.std(axis=0), - lambda x: x.ptp(axis=0)], + features=[n_peaks, + lambda x: x[(t > 5) & (t < 10), :].mean(axis=0), + lambda x: x[(t > 5) & (t < 10), :].std(axis=0), + lambda x: x.ptp(axis=0)], method='exponential_euler', threshold='m > 0.5', refractory='m > 0.5', @@ -54,7 +68,7 @@ Cm=[0.1 * uF * cm ** -2 * area, 2 * uF * cm ** -2 * area]) # Draw samples from posterior -inferencer.sample((1000,)) +inferencer.sample((10000,)) # Create pairplot from samples labels_params = [r'$\overline{g}_{l}$', r'$\overline{g}_{Na}$', @@ -65,15 +79,14 @@ inf_traces = inferencer.generate_traces() # Visualize traces -t = arange(0, out_traces.shape[1] * dt / ms, dt / ms) nrows = 2 ncols = out_traces.shape[0] fig, axs = subplots(nrows, ncols, sharex=True, gridspec_kw={'height_ratios': [3, 1]}, figsize=(15, 4)) for idx in range(ncols): - axs[0, idx].plot(out_traces[idx, :].T, label='measurements') - axs[0, idx].plot(inf_traces[idx, :].T / mV, label='fits') - axs[1, idx].plot(inp_traces[idx, :].T / amp, 'k-', label='stimulus') + axs[0, idx].plot(t, out_traces[idx, :].T, label='measurements') + axs[0, idx].plot(t, inf_traces[idx, :].T / mV, label='fits') + axs[1, idx].plot(t, inp_traces[idx, :].T / amp, 'k-', label='stimulus') axs[1, idx].set_xlabel('t, ms') if idx == 0: axs[0, idx].set_ylabel('$v$, mV') From b6a394d820c320bc89d7567c05d15fe81502247e Mon Sep 17 00:00:00 2001 From: antelk Date: Wed, 7 Jul 2021 10:34:40 +0200 Subject: [PATCH 032/121] fix refactory variable default value --- brian2modelfitting/inferencer.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py index 25e6942..8f2a0ed 100644 --- a/brian2modelfitting/inferencer.py +++ b/brian2modelfitting/inferencer.py @@ -172,7 +172,7 @@ class Inferencer(object): reset : str, optional The (possibly multi-line) string with the code to execute on reset. - refractory : str, optional + refractory : bool or str, optional Either the length of the refractory period (e.g., ``2*ms``), a string expression that evaluates to the length of the refractory period after each spike, e.g., ``'(1 + rand())*ms'``, @@ -184,7 +184,7 @@ class Inferencer(object): values. """ def __init__(self, dt, model, input, output, features, method=None, - threshold=None, reset=None, refractory=None, param_init=None): + threshold=None, reset=None, refractory=False, param_init=None): # time scale self.dt = dt From c250909073856849d90a2fcbdfe971746483ec74 Mon Sep 17 00:00:00 2001 From: antelk Date: Thu, 8 Jul 2021 17:27:48 +0200 Subject: [PATCH 033/121] added separate methods for storing and loading data + additional refactoring --- brian2modelfitting/inferencer.py | 337 ++++++++++++++++++++----------- 1 file changed, 220 insertions(+), 117 deletions(-) diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py index 8f2a0ed..237d2a3 100644 --- a/brian2modelfitting/inferencer.py +++ b/brian2modelfitting/inferencer.py @@ -126,7 +126,7 @@ def calc_prior(param_names, **params): """ for param_name in param_names: if param_name not in params: - raise TypeError(f'"Bounds must be set for parameter {param_name}') + raise TypeError(f'Bounds must be set for parameter {param_name}') prior_min = [] prior_max = [] for param_name in param_names: @@ -184,7 +184,8 @@ class Inferencer(object): values. """ def __init__(self, dt, model, input, output, features, method=None, - threshold=None, reset=None, refractory=False, param_init=None): + threshold=None, reset=None, refractory=False, + param_init=None): # time scale self.dt = dt @@ -284,6 +285,8 @@ def __init__(self, dt, model, input, output, features, method=None, x_o = torch.tensor(x_o, dtype=torch.float32) self.x_o = x_o self.features = features + self.theta = None + self.x = None @property def n_neurons(self): @@ -369,7 +372,7 @@ def setup_simulator(self, network_name, n_neurons, output_var, param_init, simulator.initialize(network, param_init, name=network_name) return simulator - def initialize_prior(self, **params): + def init_prior(self, **params): """Return the prior uniform distribution over parameters. Parameters @@ -389,7 +392,7 @@ def initialize_prior(self, **params): prior = calc_prior(self.param_names, **params) return prior - def generate_training_data(self, n_samples, prior, save=False): + def generate_training_data(self, n_samples, prior): """Return sampled prior and executed simulator containing recorded variables to be used for training the neural density estimator. @@ -400,11 +403,6 @@ def generate_training_data(self, n_samples, prior, save=False): The number of samples. prior : sbi.utils.BoxUniform Uniformly distributed prior over given parameters. - save : bool or str, optional - Save training data for later use into ``.npz`` file. If set - to True, sampled prior over parameters will be stored to a - ``theta.npz`` file. Otherwise, if set to a string the name - of the file will be forwarded string value. Returns ------- @@ -418,15 +416,9 @@ def generate_training_data(self, n_samples, prior, save=False): theta = prior.sample((n_samples, )) theta = np.atleast_2d(theta.numpy()) - if save: - if isinstance(save, (str, )): - fn = save + '.npz' - else: - fn = 'theta.npz' - np.savez(fn, theta) return theta - def extract_summary_statistics(self, theta, features, save=False, level=1): + def extract_summary_statistics(self, theta, level=1): """Return summary statistics to be used for training the neural density estimator. @@ -434,14 +426,6 @@ def extract_summary_statistics(self, theta, features, save=False, level=1): ---------- theta : numpy.ndarray Sampled prior of shape (``n_samples``, -1). - features : list - List of callables that take the voltage trace and output - summary statistics stored in `numpy.array`. - save : bool or str, optional - Save training data for later use into ``.npz`` file. If set - to True, extracted features will be stored to a ``x.npz`` - file. Otherwise, if set to a string the name of the file - will be forwarded string value. level : int, optional How far to go back to get the locals/globals. @@ -472,19 +456,77 @@ def extract_summary_statistics(self, theta, features, save=False, level=1): for ov in self.output_var: x_val = obs[ov].get_value() summary_statistics = [] - for feature in features: + for feature in self.features: summary_statistics.append(feature(x_val)) x.append(summary_statistics) x = np.array(x, dtype=np.float32) x = x.reshape((self.n_samples, -1)) - if save: - if isinstance(save, (str, )): - fn = save + '.npz' - else: - fn = 'x.npz' - np.savez(fn, theta) return x + def save_summary_statistics(self, f, theta=None, x=None): + """Save sampled prior data, theta, and extracted summary + statistics, x, into a single file in compressed ``.pz`` format. + + Parameters + ---------- + f : str or os.PathLike + Path to file either as string or ``os.PathLike`` object + that contains file name. + theta : numpy.ndarray, optional + Sampled prior. + x : numpy.ndarray, optional + Summary statistics. + + Returns + ------- + None + """ + if theta is not None: + t = theta + elif self.theta is not None: + t = self.theta + else: + raise AttributeError('Provide sampled prior or call ' + '``infere_step``method first.') + if x is not None: + pass + elif self.x is not None: + x = self.x + else: + raise AttributeError('Provide summary feautures or call ' + '``infere_step``method first.') + np.savez_compressed(f, theta=t, x=x) + + def load_summary_statistics(self, f, **kwargs): + """Load sampled prior data, theta, and extracted summary + statistics, x, from a compressed ``.npz`` format. Arrays should + be named either `arr_0` and `arr_1` or `theta` and `x` for + sampled priors and extracted features, respectively. + + Parameters + ---------- + f : str or os.PathLike + Path to file either as string or ``os.PathLike`` object + that contains file name. + kwargs : dict, optional + Additional keyword arguments for ``numpy.load`` method. + + Returns + ------- + tuple + Consisting of sampled prior and summary statistics arrays. + """ + loaded = np.load(f, allow_pickle=True) + if loaded.files == ['theta', 'x'] or loaded.files == ['x', 'theta']: + theta = loaded['theta'] + x = loaded['x'] + elif loaded.files == ['arr_0', 'arr_1']: + theta = loaded['arr_0'] + x = loaded['arr_1'] + self.theta = theta + self.x = x + return (theta, x) + def init_inference(self, inference_method, density_estimator_model, prior, **inference_kwargs): """Return instantiated inference object. @@ -595,25 +637,89 @@ def build_posterior(self, inference, density_estimator, **posterior_kwargs) return (inference, posterior) - def infere(self, n_samples, n_rounds=1, inference_method='SNPE', - density_estimator_model='maf', inference_kwargs={}, - train_kwargs={}, posterior_kwargs={}, **params): + def infere_step(self, proposal, inference, + n_samples=None, theta=None, x=None, level=1, + train_kwargs={}, posterior_kwargs={}, *args): """Return the trained neural density estimator. - Currently only sequential neural posterior estimator is - supported. - Parameter --------- - n_samples : int + proposal : ``sbi.utils.torchutils.BoxUniform`` + Prior over parameters for current inference round. + inference : ``sbi.inference.NeuralInference`` + Inference object obtained via `.init_inference` method. + n_samples : int, optional The number of samples. + theta : torch.tensor, optional + Sampled prior. + x : torch.tensor, optional + Summary statistics. + level : int, optional + train_kwargs : dict, optional + Dictionary of arguments for training a posterior estimator. + posterior_kwargs : dict, optional + Dictionary of arguments for `.build_posterior` method. + args : list, optional + Additional arguments for train method if SNPE is used as + an inference method. + + Returns + ------- + sbi.inference.NeuralPosterior + Trained posterior. + """ + # extract the training data and make adjustments for ``sbi`` + if theta is None: + if n_samples is None: + raise ValueError('Either provide ``theta`` or ``n_samples``.') + else: + theta = self.generate_training_data(n_samples, proposal) + self.theta = theta + theta = torch.tensor(theta, dtype=torch.float32) + + # extract the summary statistics and make adjustments for ``sbi`` + if x is None: + if n_samples is None: + raise ValueError('Either provide ``x`` or ``n_samples``.') + else: + x = self.extract_summary_statistics(theta, level=level+1) + self.x = x + x = torch.tensor(x) + + # pass the simulated data to the inference object and train it + print('Training the neural density estimator...') + inference, density_estimator = self.train(inference, + theta, x, + *args, **train_kwargs) + + # use the density estimator to build the posterior + inference, posterior = self.build_posterior(inference, + density_estimator, + **posterior_kwargs) + self.posterior = posterior + return posterior + + def infere(self, n_rounds=1, + n_samples=None, theta=None, x=None, + inference_method='SNPE', density_estimator_model='maf', + inference_kwargs={}, train_kwargs={}, posterior_kwargs={}, + **params): + """Return the trained neural density estimator. + + Parameter + --------- n_rounds : int or str, optional If ``n_rounds`` is set to 1, amortized inference will be performed. Otherwise, if ``n_rounds`` is integer larger than 1, multi-round inference will be performed. + n_samples : int + The number of samples. + theta : torch.tensor + Sampled prior. + x : torch.tensor + Summary statistics. inference_method : str - Inference method. Either of SNPE, SNLE or SNRE. Currently, - only SNPE is supported. + Inference method. Either of SNPE, SNLE or SNRE. density_estimator_model : str The type of density estimator to be created. Either ``mdn``, ``made``, ``maf`` or ``nsf``. @@ -643,7 +749,26 @@ def infere(self, n_samples, n_rounds=1, inference_method='SNPE', 'supported. Choose between SNPE, SNLE or SNRE.') # initialize prior - prior = self.initialize_prior(**params) + if self.posterior is None: + prior = self.init_prior(**params) + else: + prior = self.posterior.set_default_x(self.x_o) + + # extract the training data and make adjustments for ``sbi`` + if theta is None: + if n_samples is None: + raise ValueError('Either provide ``theta`` or ``n_samples``.') + else: + theta = self.generate_training_data(n_samples, prior) + self.theta = theta + + # extract the summary statistics and make adjustments for ``sbi`` + if x is None: + if n_samples is None: + raise ValueError('Either provide ``x`` or ``n_samples``.') + else: + x = self.extract_summary_statistics(theta) + self.x = x # initialize inference object inference = self.init_inference(inference_method, @@ -661,34 +786,56 @@ def infere(self, n_samples, n_rounds=1, inference_method='SNPE', for round in range(n_rounds): print(f'Round {round + 1}/{n_rounds}.') - # extract the training data and make adjustments for ``sbi`` - print('Generating training data...') - theta = self.generate_training_data(n_samples, proposal) - theta = torch.tensor(theta, dtype=torch.float32) - - # extract the summary statistics and make adjustments for ``sbi`` - x = self.extract_summary_statistics(theta, self.features) - x = torch.tensor(x) - - # pass the simulated data to the inference object and train it - print('Training the neural density estimator...') - inference, density_estimator = self.train(inference, - theta, x, - *args, **train_kwargs) - - # use the density estimator to build the posterior - inference, posterior = self.build_posterior(inference, - density_estimator, - **posterior_kwargs) + posterior = self.infere_step(proposal, inference, + n_samples, self.theta, self.x, 1, + train_kwargs, posterior_kwargs, *args) # append the current posterior to the list of posteriors posteriors.append(posterior) # update the proposal given the observation - proposal = posterior.set_default_x(self.x_o) + if n_rounds > 1: + proposal = posterior.set_default_x(self.x_o) self.posterior = posterior return posterior + def save_posterior(self, f): + """Saves the density estimator state dictionary to a disk file. + + Parameters + ---------- + posterior : sbi.inference.posteriors.DirectPosterior, optional + Posterior distribution. + f : str or os.PathLike + Path to file either as string or ``os.PathLike`` object + that contains file name. + + Returns + ------- + None + """ + torch.save(self.posterior, f) + + def load_posterior(self, f): + """Loads the density estimator state dictionary from a disk file. + + Parameters + ---------- + f : str or os.PathLike + Path to file either as string or ``os.PathLike`` object + that contains file name. + + Returns + ------- + sbi.inference.NeuralPosterior + Loaded neural posterior with defined method family, density + estimator state dictionary, prior over parameters and + output shape of the simulator. + """ + p = torch.load(f) + self.posterior = p + return p + def sample(self, shape, posterior=None, **kwargs): """Return samples from posterior distribution. @@ -708,13 +855,13 @@ def sample(self, shape, posterior=None, **kwargs): """ if posterior: p = posterior - else: + elif posterior is None and self.posterior: p = self.posterior - if not p: - raise ValueError("Need to provide posterior argument if no " - "posterior has been calculated by the 'infere' " - "method.") - samples = p.sample(shape, **kwargs) + else: + raise ValueError('Need to provide posterior argument if no ' + 'posterior has been calculated by the ``infere`` ' + 'method.') + samples = p.sample(shape, x=self.x_o, **kwargs) self.samples = samples return samples @@ -778,12 +925,13 @@ def generate_traces(self, posterior=None, output_var=None, param_init=None, # sample a single set of parameters from posterior distribution if posterior: p = posterior + elif posterior is None and self.posterior: + p = self.posterior else: - try: - p = self.posterior - except NameError as e: - print(e, 'Posterior object is not found.') - params = p.sample((1, )) + raise ValueError('Need to provide posterior argument if no ' + 'posterior has been calculated by the ``infere`` ' + 'method.') + params = p.sample((1, ), x=self.x_o) # set output variable that is monitored if output_var is None: @@ -817,48 +965,3 @@ def generate_traces(self, posterior=None, output_var=None, param_init=None, else: traces = getattr(simulator.statemonitor, output_var[0])[:] return traces - - def save(self, f, posterior=None): - """Saves the density estimator state dictionary to a disk file. - - Parameters - ---------- - posterior : sbi.inference.posteriors.DirectPosterior, optional - Posterior distribution. - f : str or os.PathLike - Path to file either as string or ``os.PathLike`` object - that contains file name. - - Returns - ------- - None - """ - if posterior: - p = posterior - else: - p = self.posterior - if not p: - raise ValueError("Need to provide posterior argument if no " - "posterior has been calculated by the 'infere' " - "method.") - torch.save(p, f) - - def load_posterior(self, f): - """Loads the density estimator state dictionary from a disk file. - - Parameters - ---------- - f : str or os.PathLike - Path to file either as string or ``os.PathLike`` object - that contains file name. - - Returns - ------- - sbi.inference.NeuralPosterior - Loaded neural posterior with defined method family, density - estimator state dictionary, prior over parameters and - output shape of the simulator. - """ - p = torch.load(f) - self.posterior = p - return p From 88a1a39164d25c63a0668956ad41d35dd952c5a3 Mon Sep 17 00:00:00 2001 From: antelk Date: Thu, 8 Jul 2021 17:28:30 +0200 Subject: [PATCH 034/121] add small changes due to changes in Inferencer class --- examples/hh_sbi.py | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/examples/hh_sbi.py b/examples/hh_sbi.py index f25a266..280808c 100644 --- a/examples/hh_sbi.py +++ b/examples/hh_sbi.py @@ -14,19 +14,19 @@ out_traces = out_traces[:2, 1:] # Model and its parameters -area = 20_000 * um ** 2 -El = -65 * mV -EK = -90 * mV -ENa = 50 * mV -VT = -63 * mV -dt = 0.01 * ms +area = 20_000*um**2 +El = -65*mV +EK = -90*mV +ENa = 50*mV +VT = -63*mV +dt = 0.01*ms eqs = ''' dv/dt = (gl*(El-v) - g_na*(m*m*m)*h*(v-ENa) - g_kd*(n*n*n*n)*(v-EK) + I)/Cm : volt dm/dt = 0.32*(mV**-1)*(13.*mV-v+VT)/ - (exp((13.*mV-v+VT)/(4.*mV))-1.)/ms*(1-m)-0.28*(mV**-1)*(v-VT-40.*mV)/ - (exp((v-VT-40.*mV)/(5.*mV))-1.)/ms*m : 1 + (exp((13.*mV-v+VT)/(4.*mV))-1.)/ms*(1-m)-0.28*(mV**-1)*(v-VT-40.*mV)/ + (exp((v-VT-40.*mV)/(5.*mV))-1.)/ms*m : 1 dn/dt = 0.032*(mV**-1)*(15.*mV-v+VT)/ - (exp((15.*mV-v+VT)/(5.*mV))-1.)/ms*(1.-n)-.5*exp((10.*mV-v+VT)/(40.*mV))/ms*n : 1 + (exp((15.*mV-v+VT)/(5.*mV))-1.)/ms*(1.-n)-.5*exp((10.*mV-v+VT)/(40.*mV))/ms*n : 1 dh/dt = 0.128*exp((17.*mV-v+VT)/(18.*mV))/ms*(1.-h)-4./(1+exp((40.*mV-v+VT)/(5.*mV)))/ms*h : 1 g_na : siemens (constant) g_kd : siemens (constant) @@ -35,7 +35,7 @@ ''' # Time domain -t = arange(0, out_traces.shape[1] * dt / ms, dt / ms) +t = arange(0, out_traces.shape[1]*dt/ms, dt/ms) def n_peaks(x): @@ -48,8 +48,8 @@ def n_peaks(x): # Simulation-based inference object instantiation inferencer = Inferencer(dt=dt, model=eqs, - input={'I': inp_traces * amp}, - output={'v': out_traces * mV}, + input={'I': inp_traces*amp}, + output={'v': out_traces*mV}, features=[n_peaks, lambda x: x[(t > 5) & (t < 10), :].mean(axis=0), lambda x: x[(t > 5) & (t < 10), :].std(axis=0), @@ -60,12 +60,12 @@ def n_peaks(x): param_init={'v': 'VT'}) # Generate prior and train the neural density estimator -inferencer.infere(n_samples=1000, - n_rounds=1, - gl=[1e-09 * siemens, 1e-07 * siemens], - g_na=[2e-06 * siemens, 2e-04 * siemens], - g_kd=[6e-07 * siemens, 6e-05 * siemens], - Cm=[0.1 * uF * cm ** -2 * area, 2 * uF * cm ** -2 * area]) +inferencer.infere(n_rounds=2, + n_samples=1000, + gl=[1e-09*siemens, 1e-07*siemens], + g_na=[2e-06*siemens, 2e-04*siemens], + g_kd=[6e-07*siemens, 6e-05*siemens], + Cm=[0.1*uF*cm**-2*area, 2*uF*cm**-2*area]) # Draw samples from posterior inferencer.sample((10000,)) @@ -85,8 +85,8 @@ def n_peaks(x): gridspec_kw={'height_ratios': [3, 1]}, figsize=(15, 4)) for idx in range(ncols): axs[0, idx].plot(t, out_traces[idx, :].T, label='measurements') - axs[0, idx].plot(t, inf_traces[idx, :].T / mV, label='fits') - axs[1, idx].plot(t, inp_traces[idx, :].T / amp, 'k-', label='stimulus') + axs[0, idx].plot(t, inf_traces[idx, :].T/mV, label='fits') + axs[1, idx].plot(t, inp_traces[idx, :].T/nA, 'k-', label='stimulus') axs[1, idx].set_xlabel('t, ms') if idx == 0: axs[0, idx].set_ylabel('$v$, mV') From a1eb97adc1888e3fbc7592b7ae32d4a8b4eb2beb Mon Sep 17 00:00:00 2001 From: antelk Date: Thu, 8 Jul 2021 17:28:47 +0200 Subject: [PATCH 035/121] add integrate-and-fire neuron example --- examples/IF_sbi.py | 77 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 examples/IF_sbi.py diff --git a/examples/IF_sbi.py b/examples/IF_sbi.py new file mode 100644 index 0000000..17ecbdb --- /dev/null +++ b/examples/IF_sbi.py @@ -0,0 +1,77 @@ +from brian2 import * +from brian2modelfitting import * +from scipy.signal import find_peaks +from scipy.stats import kurtosis, skew + + +# Generate input and output data traces +dt = 0.1 * ms +defaultclock.dt = dt +inp_trace = hstack([zeros(int(round(5*ms/dt))), + ones(int(round(25*ms/dt))), + zeros(int(round(30*ms/dt)))]) * 10 * nA +I = TimedArray(inp_trace, dt=dt) +El = -70 * mV +VT = -50 * mV +DeltaT = 2 * mV +eqs = ''' + dv/dt = (gl*(El - v) + gl*DeltaT*exp((v - VT) / DeltaT) + I(t)) / C : volt + gl : siemens (constant) + C : farad (constant) +''' + +neurons = NeuronGroup(1, eqs, + threshold='v > -50 * mV', + reset='v = -70 * mV', + method='exponential_euler') +neurons.v = -70 * mV +neurons.set_states({'gl': 30 * nS, + 'C': 1 * nF}) +monitor = StateMonitor(neurons, 'v', record=True) +run(60 * ms) +out_trace = monitor.v + +# Inference +start_scope() +El = -70 * mV +VT = -50 * mV +DeltaT = 2 * mV +eqs_inf = ''' + dv/dt = (gl*(El - v) + gl*DeltaT*exp((v - VT) / DeltaT) + I_syn) / C : volt + gl : siemens (constant) + C : farad (constant) +''' + +t = arange(0, out_trace.shape[1] * dt / ms, dt / ms) +start_syn = t[min(where(inp_trace != 0)[0])] +end_syn = t[max(where(inp_trace != 0)[0])] + +def n_peaks(x): + n_p = [] + for _x in x.transpose(): + p_i = find_peaks(_x, height=-60)[0] + n_p.append(p_i.size) + return n_p + + +inferencer = Inferencer(dt=dt, model=eqs_inf, + input={'I_syn': inp_trace.reshape(1, -1)}, + output={'v': out_trace}, + features=[lambda x: x[(t > start_syn) & (t < end_syn), :].mean(axis=0), + lambda x: x[(t > start_syn) & (t < end_syn), :].std(axis=0), + lambda x: x[(t > start_syn) & (t < end_syn), :].ptp(axis=0), + n_peaks], + method='exponential_euler', + threshold='v > -50 * mV', + reset='v = -70 * mV', + param_init={'v': -70 * mV}) + +inferencer.infere(n_samples=10_000, + inference_method='SNPE', + density_estimator_model='mdn', + gl=[10*nS, 100*nS], + C=[0.1*nF, 10*nF]) + +samples = inferencer.sample((10_000, )) +inferencer.pairplot(samples) +show() From 7ea20988a514cdb9ec68409fd5040900a52dd5af Mon Sep 17 00:00:00 2001 From: antelk Date: Thu, 8 Jul 2021 17:29:01 +0200 Subject: [PATCH 036/121] add advanced example --- examples/hh_sbi_advanced.py | 134 ++++++++++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 examples/hh_sbi_advanced.py diff --git a/examples/hh_sbi_advanced.py b/examples/hh_sbi_advanced.py new file mode 100644 index 0000000..5de50a6 --- /dev/null +++ b/examples/hh_sbi_advanced.py @@ -0,0 +1,134 @@ +from brian2 import * +from brian2modelfitting import * +import pandas as pd +import numpy as np +from scipy.signal import find_peaks + + +# Load input and output data traces +df_inp_traces = pd.read_csv('input_traces_hh.csv') +df_out_traces = pd.read_csv('output_traces_hh.csv') +inp_traces = df_inp_traces.to_numpy() +inp_traces = inp_traces[:2, 1:] +out_traces = df_out_traces.to_numpy() +out_traces = out_traces[:2, 1:] + +# Model and its parameters +area = 20_000*um**2 +El = -65*mV +EK = -90*mV +ENa = 50*mV +VT = -63*mV +dt = 0.01*ms +eqs = ''' + dv/dt = (gl*(El-v) - g_na*(m*m*m)*h*(v-ENa) - g_kd*(n*n*n*n)*(v-EK) + I)/Cm : volt + dm/dt = 0.32*(mV**-1)*(13.*mV-v+VT)/ + (exp((13.*mV-v+VT)/(4.*mV))-1.)/ms*(1-m)-0.28*(mV**-1)*(v-VT-40.*mV)/ + (exp((v-VT-40.*mV)/(5.*mV))-1.)/ms*m : 1 + dn/dt = 0.032*(mV**-1)*(15.*mV-v+VT)/ + (exp((15.*mV-v+VT)/(5.*mV))-1.)/ms*(1.-n)-.5*exp((10.*mV-v+VT)/(40.*mV))/ms*n : 1 + dh/dt = 0.128*exp((17.*mV-v+VT)/(18.*mV))/ms*(1.-h)-4./(1+exp((40.*mV-v+VT)/(5.*mV)))/ms*h : 1 + g_na : siemens (constant) + g_kd : siemens (constant) + gl : siemens (constant) + Cm : farad (constant) +''' + +# Time domain +t = arange(0, out_traces.shape[1]*dt/ms, dt/ms) + + +def n_peaks(x): + n_p = [] + for _x in x.transpose(): + p_i = find_peaks(_x, height=0)[0] + n_p.append(p_i.size - sum(np.diff(t[p_i]) < 4)) + return n_p + + +# Step-by-step inference +# Start with the regular instatiation of the class +inferencer = Inferencer(dt=dt, model=eqs, + input={'I': inp_traces*amp}, + output={'v': out_traces*mV}, + features=[n_peaks, + lambda x: x[(t > 5) & (t < 10), :].mean(axis=0), + lambda x: x[(t > 5) & (t < 10), :].std(axis=0), + lambda x: x.ptp(axis=0)], + method='exponential_euler', + threshold='m > 0.5', + refractory='m > 0.5', + param_init={'v': 'VT'}) + +# Data generation +# Initializing of the prior +prior = inferencer.init_prior(gl=[1e-09*siemens, 1e-07*siemens], + g_na=[2e-06*siemens, 2e-04*siemens], + g_kd=[6e-07*siemens, 6e-05*siemens], + Cm=[0.1*uF*cm**-2*area, 2*uF*cm**-2*area]) +# Generate training data +theta = inferencer.generate_training_data(n_samples=1000, + prior=prior) +# Extract summary stats +x = inferencer.extract_summary_statistics(theta=theta, level=0) + +# Loading and storing of the data +# For large training data, you can store it into .npz and reuse it later +path_to_data = __file__[:-3] + '_data.npz' +inferencer.save_summary_statistics(path_to_data, theta, x) +# Training data will be directly set to class variables once they are loaded +theta_loaded, x_loaded = inferencer.load_summary_statistics(path_to_data) + +# Amortized inference +# Training the neural density estimator +inference = inferencer.init_inference(inference_method='SNPE', + density_estimator_model='maf', + prior=prior, + hidden_features=50, + num_transforms=10, + num_bins=20, + num_components=10) +# First round of inference where no observation data is set to posterior +posterior = inferencer.infere_step(proposal=prior, + inference=inference, + theta=theta_loaded, x=x_loaded, + train_kwargs={'learning_rate': 1e-4}) +# Storing the trained posterior without a default observation +path_to_posterior = __file__[:-3] + '_posterior.pth' +inferencer.save_posterior(path_to_posterior) +# Loading the trained posterior directly to Inferencer class +posterior_loaded = inferencer.load_posterior(path_to_posterior) + +# Sampling from the posterior given observations, ... +inferencer.sample((10000, ), posterior=posterior_loaded) +# ...visualize the samples, ... +inferencer.pairplot(labels=[r'$\overline{g}_{l}$', + r'$\overline{g}_{Na}$', + r'$\overline{g}_{K}$', + r'$\overline{C}_{m}$']) +# ... and generate traces from a single sample of parameters +inf_traces = inferencer.generate_traces(posterior=posterior_loaded) +nrows = 2 +ncols = out_traces.shape[0] +fig, axs = subplots(nrows, ncols, sharex=True, + gridspec_kw={'height_ratios': [3, 1]}, figsize=(15, 4)) +for idx in range(ncols): + axs[0, idx].plot(t, out_traces[idx, :].T, label='measurements') + axs[0, idx].plot(t, inf_traces[idx, :].T/mV, label='fits') + axs[1, idx].plot(t, inp_traces[idx, :].T/nA, 'k-', label='stimulus') + axs[1, idx].set_xlabel('t, ms') + if idx == 0: + axs[0, idx].set_ylabel('$v$, mV') + axs[1, idx].set_ylabel('$I$, nA') +handles, labels = [(h + l) for h, l + in zip(axs[0, idx].get_legend_handles_labels(), + axs[1, idx].get_legend_handles_labels())] +fig.legend(handles, labels) +tight_layout() +show() + +# Optionally, continue the multiround inference using the ``infere`` method +posterior_multi_round = inferencer.infere(n_rounds=2, + theta=theta_loaded, x=x_loaded, + inference_method='SNPE', + density_estimator_model='maf') From 19a3cba9e88de235753d3592b60192cb14d85fbb Mon Sep 17 00:00:00 2001 From: antelk Date: Fri, 9 Jul 2021 11:57:51 +0200 Subject: [PATCH 037/121] clean up --- brian2modelfitting/inferencer.py | 60 ++++++++++++++++++++------------ 1 file changed, 37 insertions(+), 23 deletions(-) diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py index 237d2a3..e7e8a4f 100644 --- a/brian2modelfitting/inferencer.py +++ b/brian2modelfitting/inferencer.py @@ -638,7 +638,7 @@ def build_posterior(self, inference, density_estimator, return (inference, posterior) def infere_step(self, proposal, inference, - n_samples=None, theta=None, x=None, level=1, + n_samples=None, theta=None, x=None, train_kwargs={}, posterior_kwargs={}, *args): """Return the trained neural density estimator. @@ -650,17 +650,17 @@ def infere_step(self, proposal, inference, Inference object obtained via `.init_inference` method. n_samples : int, optional The number of samples. - theta : torch.tensor, optional + theta : numpy.ndarray, optional Sampled prior. - x : torch.tensor, optional + x : numpy.ndarray, optional Summary statistics. - level : int, optional train_kwargs : dict, optional - Dictionary of arguments for training a posterior estimator. + Additional keyword arguments for training the posterior + estimator. posterior_kwargs : dict, optional Dictionary of arguments for `.build_posterior` method. args : list, optional - Additional arguments for train method if SNPE is used as + Additional arguments for `.train` method if SNPE is used as an inference method. Returns @@ -682,12 +682,11 @@ def infere_step(self, proposal, inference, if n_samples is None: raise ValueError('Either provide ``x`` or ``n_samples``.') else: - x = self.extract_summary_statistics(theta, level=level+1) + x = self.extract_summary_statistics(theta, level=2) self.x = x x = torch.tensor(x) # pass the simulated data to the inference object and train it - print('Training the neural density estimator...') inference, density_estimator = self.train(inference, theta, x, *args, **train_kwargs) @@ -699,35 +698,40 @@ def infere_step(self, proposal, inference, self.posterior = posterior return posterior - def infere(self, n_rounds=1, - n_samples=None, theta=None, x=None, + def infere(self, n_samples=None, theta=None, x=None, n_rounds=1, inference_method='SNPE', density_estimator_model='maf', inference_kwargs={}, train_kwargs={}, posterior_kwargs={}, **params): - """Return the trained neural density estimator. + """Return the trained posterior. + + If ``theta`` and ``x`` are not provided, ``n_samples`` has to + be defined. Otherwise, if ``n_samples`` is provided, neither + ``theta`` nor ``x`` needs to be provided. Parameter --------- - n_rounds : int or str, optional - If ``n_rounds`` is set to 1, amortized inference will be - performed. Otherwise, if ``n_rounds`` is integer larger - than 1, multi-round inference will be performed. - n_samples : int + n_samples : int, optional The number of samples. - theta : torch.tensor + theta : numpy.ndarray, optional Sampled prior. - x : torch.tensor + x : numpy.ndarray, optional Summary statistics. - inference_method : str + n_rounds : int, optional + If ``n_rounds`` is set to 1, amortized inference will be + performed. Otherwise, if ``n_rounds`` is integer larger + than 1, multi-round inference will be performed. This is + only valid if posterior has not been defined manually. + inference_method : str, optional Inference method. Either of SNPE, SNLE or SNRE. - density_estimator_model : str + density_estimator_model : str, optional The type of density estimator to be created. Either ``mdn``, ``made``, ``maf`` or ``nsf``. inference_kwargs : dict, optional Additional keyword arguments for ``sbi.utils.get_nn_models.posterior_nn`` method. train_kwargs : dict, optional - Dictionary of arguments for training the posterior estimator. + Additional keyword arguments for training the posterior + estimator. posterior_kwargs : dict, optional Dictionary of arguments for `.build_posterior` method. params : dict @@ -738,8 +742,11 @@ def infere(self, n_rounds=1, sbi.inference.NeuralPosterior Trained posterior. """ + # handle the number of rounds if not isinstance(n_rounds, int): raise ValueError('Number of rounds must be a positive integer.') + + # handle inference methods try: inference_method = str.upper(inference_method) except ValueError as e: @@ -776,18 +783,25 @@ def infere(self, n_rounds=1, prior, **inference_kwargs) - # allocate empty list of posteriors + # allocate empty list of posterior posteriors = [] + + # set a proposal proposal = prior + + # additional arguments for `.train` method are needed only for SNPE if inference_method == 'SNPE': args = [proposal] else: args = [] + + # main inference loop for round in range(n_rounds): print(f'Round {round + 1}/{n_rounds}.') + # inference step posterior = self.infere_step(proposal, inference, - n_samples, self.theta, self.x, 1, + n_samples, self.theta, self.x, train_kwargs, posterior_kwargs, *args) # append the current posterior to the list of posteriors From be02ef3bfab8b4cf4996c4fd68e17885f448df86 Mon Sep 17 00:00:00 2001 From: antelk Date: Fri, 9 Jul 2021 11:58:18 +0200 Subject: [PATCH 038/121] add better pairplotting --- examples/IF_sbi.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/examples/IF_sbi.py b/examples/IF_sbi.py index 17ecbdb..199fad4 100644 --- a/examples/IF_sbi.py +++ b/examples/IF_sbi.py @@ -1,7 +1,6 @@ from brian2 import * from brian2modelfitting import * from scipy.signal import find_peaks -from scipy.stats import kurtosis, skew # Generate input and output data traces @@ -46,6 +45,7 @@ start_syn = t[min(where(inp_trace != 0)[0])] end_syn = t[max(where(inp_trace != 0)[0])] + def n_peaks(x): n_p = [] for _x in x.transpose(): @@ -59,19 +59,21 @@ def n_peaks(x): output={'v': out_trace}, features=[lambda x: x[(t > start_syn) & (t < end_syn), :].mean(axis=0), lambda x: x[(t > start_syn) & (t < end_syn), :].std(axis=0), - lambda x: x[(t > start_syn) & (t < end_syn), :].ptp(axis=0), + lambda x: x[(t > start_syn) & (t < end_syn), :].max(axis=0), n_peaks], method='exponential_euler', threshold='v > -50 * mV', reset='v = -70 * mV', param_init={'v': -70 * mV}) -inferencer.infere(n_samples=10_000, - inference_method='SNPE', - density_estimator_model='mdn', +inferencer.infere(n_samples=1000, + inference_method='SNLE', gl=[10*nS, 100*nS], C=[0.1*nF, 10*nF]) -samples = inferencer.sample((10_000, )) -inferencer.pairplot(samples) +inferencer.sample((10000, )) +inferencer.pairplot(labels=[r'$\overline{g}_{l}$', r'$C$'], + points=[[1e-9, 30e-9]], + points_offdiag={'markersize': 9}, + points_colors=['r']) show() From 728ad0e9581d854fac4146727611325c80ce588a Mon Sep 17 00:00:00 2001 From: antelk Date: Fri, 9 Jul 2021 11:58:43 +0200 Subject: [PATCH 039/121] clean up --- examples/hh_sbi.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/examples/hh_sbi.py b/examples/hh_sbi.py index 280808c..6c3a67f 100644 --- a/examples/hh_sbi.py +++ b/examples/hh_sbi.py @@ -53,27 +53,28 @@ def n_peaks(x): features=[n_peaks, lambda x: x[(t > 5) & (t < 10), :].mean(axis=0), lambda x: x[(t > 5) & (t < 10), :].std(axis=0), - lambda x: x.ptp(axis=0)], + lambda x: x.max(axis=0)], method='exponential_euler', threshold='m > 0.5', refractory='m > 0.5', param_init={'v': 'VT'}) # Generate prior and train the neural density estimator -inferencer.infere(n_rounds=2, - n_samples=1000, +inferencer.infere(n_samples=1000, + n_rounds=2, gl=[1e-09*siemens, 1e-07*siemens], g_na=[2e-06*siemens, 2e-04*siemens], g_kd=[6e-07*siemens, 6e-05*siemens], Cm=[0.1*uF*cm**-2*area, 2*uF*cm**-2*area]) # Draw samples from posterior -inferencer.sample((10000,)) +inferencer.sample((10000, )) # Create pairplot from samples -labels_params = [r'$\overline{g}_{l}$', r'$\overline{g}_{Na}$', - r'$\overline{g}_{K}$', r'$\overline{C}_{m}$'] -inferencer.pairplot(labels=labels_params) +inferencer.pairplot(labels=[r'$\overline{g}_{l}$', + r'$\overline{g}_{Na}$', + r'$\overline{g}_{K}$', + r'$\overline{C}_{m}$']) # Generate traces by using a single sample from the trained posterior inf_traces = inferencer.generate_traces() From 88fc065ced5272cde613c6b062d36db0e8518beb Mon Sep 17 00:00:00 2001 From: antelk Date: Fri, 9 Jul 2021 11:59:35 +0200 Subject: [PATCH 040/121] add better handling of keyword arguments --- examples/hh_sbi_advanced.py | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/examples/hh_sbi_advanced.py b/examples/hh_sbi_advanced.py index 5de50a6..ada4e35 100644 --- a/examples/hh_sbi_advanced.py +++ b/examples/hh_sbi_advanced.py @@ -85,14 +85,14 @@ def n_peaks(x): density_estimator_model='maf', prior=prior, hidden_features=50, - num_transforms=10, - num_bins=20, num_components=10) # First round of inference where no observation data is set to posterior posterior = inferencer.infere_step(proposal=prior, inference=inference, theta=theta_loaded, x=x_loaded, - train_kwargs={'learning_rate': 1e-4}) + train_kwargs={'num_atoms': 10, + 'learning_rate': 0.0005, + 'show_train_summary': True}) # Storing the trained posterior without a default observation path_to_posterior = __file__[:-3] + '_posterior.pth' inferencer.save_posterior(path_to_posterior) @@ -106,8 +106,19 @@ def n_peaks(x): r'$\overline{g}_{Na}$', r'$\overline{g}_{K}$', r'$\overline{C}_{m}$']) -# ... and generate traces from a single sample of parameters -inf_traces = inferencer.generate_traces(posterior=posterior_loaded) +# ...and optionally, continue the multiround inference via ``infere`` method +posterior_multi_round = inferencer.infere(n_rounds=2, + theta=theta_loaded, x=x_loaded, + inference_method='SNPE', + density_estimator_model='maf') +inferencer.sample((10000, )) +inferencer.pairplot(labels=[r'$\overline{g}_{l}$', + r'$\overline{g}_{Na}$', + r'$\overline{g}_{K}$', + r'$\overline{C}_{m}$']) + +# Generate traces from a single sample of parameters +inf_traces = inferencer.generate_traces() nrows = 2 ncols = out_traces.shape[0] fig, axs = subplots(nrows, ncols, sharex=True, @@ -125,10 +136,4 @@ def n_peaks(x): axs[1, idx].get_legend_handles_labels())] fig.legend(handles, labels) tight_layout() -show() - -# Optionally, continue the multiround inference using the ``infere`` method -posterior_multi_round = inferencer.infere(n_rounds=2, - theta=theta_loaded, x=x_loaded, - inference_method='SNPE', - density_estimator_model='maf') +show() \ No newline at end of file From 7461b39798e61d9dd08b7c1a0898962823603a6b Mon Sep 17 00:00:00 2001 From: antelk Date: Sat, 10 Jul 2021 18:00:59 +0200 Subject: [PATCH 041/121] minor updates --- brian2modelfitting/inferencer.py | 132 ++++++++++++++++--------------- examples/IF_sbi.py | 10 +-- examples/hh_sbi_advanced.py | 31 ++++---- 3 files changed, 87 insertions(+), 86 deletions(-) diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py index e7e8a4f..e4e42fb 100644 --- a/brian2modelfitting/inferencer.py +++ b/brian2modelfitting/inferencer.py @@ -197,8 +197,8 @@ def __init__(self, dt, model, input, output, features, method=None, # input data traces if not isinstance(input, Mapping): - raise TypeError('``input`` argument must be a dictionary mapping' - ' the name of the input variable and ``input``.') + raise TypeError('`input` argument must be a dictionary mapping' + ' the name of the input variable and `input`.') if len(input) > 1: raise NotImplementedError('Only a single input is supported.') input_var = list(input.keys())[0] @@ -208,8 +208,8 @@ def __init__(self, dt, model, input, output, features, method=None, # output data traces if not isinstance(output, Mapping): - raise TypeError('``output`` argument must be a dictionary mapping' - ' the name of the output variable and ``output``') + raise TypeError('`output` argument must be a dictionary mapping' + ' the name of the output variable and `output`.') output_var = list(output.keys()) output = list(output.values()) for o_var in output_var: @@ -309,7 +309,7 @@ class while generating data for training the neural density """ if self.n_samples is None: raise ValueError('Number of samples is not yet defined.' - 'Call ``generate_training_data`` method first.') + 'Call `generate_training_data` method first.') return self.n_traces * self.n_samples def setup_simulator(self, network_name, n_neurons, output_var, param_init, @@ -486,15 +486,15 @@ def save_summary_statistics(self, f, theta=None, x=None): elif self.theta is not None: t = self.theta else: - raise AttributeError('Provide sampled prior or call ' - '``infere_step``method first.') + raise AttributeError('Provide sampled prior or call' + ' `infere_step` method first.') if x is not None: pass elif self.x is not None: x = self.x else: raise AttributeError('Provide summary feautures or call ' - '``infere_step``method first.') + ' `infere_step` method first.') np.savez_compressed(f, theta=t, x=x) def load_summary_statistics(self, f, **kwargs): @@ -517,12 +517,9 @@ def load_summary_statistics(self, f, **kwargs): Consisting of sampled prior and summary statistics arrays. """ loaded = np.load(f, allow_pickle=True) - if loaded.files == ['theta', 'x'] or loaded.files == ['x', 'theta']: + if set(loaded.files) == {'theta', 'x'}: theta = loaded['theta'] x = loaded['x'] - elif loaded.files == ['arr_0', 'arr_1']: - theta = loaded['arr_0'] - x = loaded['arr_1'] self.theta = theta self.x = x return (theta, x) @@ -554,8 +551,8 @@ def init_inference(self, inference_method, density_estimator_model, prior, inference_method = str.upper(inference_method) inference_method_fun = getattr(sbi.inference, inference_method) except AttributeError: - raise NameError(f'Inference method {inference_method} is not ' - 'supported. Choose between SNPE, SNLE or SNRE.') + raise NameError(f'Inference method {inference_method} is not' + ' supported. Choose between SNPE, SNLE or SNRE.') finally: if inference_method == 'SNPE': density_estimator_builder = posterior_nn( @@ -671,7 +668,7 @@ def infere_step(self, proposal, inference, # extract the training data and make adjustments for ``sbi`` if theta is None: if n_samples is None: - raise ValueError('Either provide ``theta`` or ``n_samples``.') + raise ValueError('Either provide `theta` or `n_samples`.') else: theta = self.generate_training_data(n_samples, proposal) self.theta = theta @@ -680,7 +677,7 @@ def infere_step(self, proposal, inference, # extract the summary statistics and make adjustments for ``sbi`` if x is None: if n_samples is None: - raise ValueError('Either provide ``x`` or ``n_samples``.') + raise ValueError('Either provide `x` or `n_samples`.') else: x = self.extract_summary_statistics(theta, level=2) self.x = x @@ -695,6 +692,7 @@ def infere_step(self, proposal, inference, inference, posterior = self.build_posterior(inference, density_estimator, **posterior_kwargs) + self.inference = inference self.posterior = posterior return posterior @@ -742,46 +740,56 @@ def infere(self, n_samples=None, theta=None, x=None, n_rounds=1, sbi.inference.NeuralPosterior Trained posterior. """ - # handle the number of rounds - if not isinstance(n_rounds, int): - raise ValueError('Number of rounds must be a positive integer.') + if self.posterior is None: # `.infere_step` has not been called + # handle the number of rounds + if not isinstance(n_rounds, int): + raise ValueError('`n_rounds` has to be a positive integer.') - # handle inference methods - try: - inference_method = str.upper(inference_method) - except ValueError as e: - print(e, '\nInvalid inference method.') - if inference_method not in ['SNPE', 'SNLE', 'SNRE']: - raise ValueError(f'Inference method {inference_method} is not ' - 'supported. Choose between SNPE, SNLE or SNRE.') - - # initialize prior - if self.posterior is None: + # handle inference methods + try: + inference_method = str.upper(inference_method) + except ValueError as e: + print(e, '\nInvalid inference method.') + if inference_method not in ['SNPE', 'SNLE', 'SNRE']: + raise ValueError(f'Inference method {inference_method} is not' + ' supported.') + + # initialize prior prior = self.init_prior(**params) - else: - prior = self.posterior.set_default_x(self.x_o) - # extract the training data and make adjustments for ``sbi`` - if theta is None: - if n_samples is None: - raise ValueError('Either provide ``theta`` or ``n_samples``.') + # extract the training data and make adjustments for ``sbi`` + if theta is None: + if n_samples is None: + raise ValueError('Either provide `theta` or `n_samples`.') + else: + theta = self.generate_training_data(n_samples, prior) + self.theta = theta + + # extract the summary statistics and make adjustments for ``sbi`` + if x is None: + if n_samples is None: + raise ValueError('Either provide `x` or `n_samples`.') + else: + x = self.extract_summary_statistics(theta) + self.x = x + + # initialize inference object + self.inference = self.init_inference(inference_method, + density_estimator_model, + prior, + **inference_kwargs) + + # additional args for `.train` method are needed only for SNPE + if inference_method == 'SNPE': + args = [prior] else: - theta = self.generate_training_data(n_samples, prior) - self.theta = theta - - # extract the summary statistics and make adjustments for ``sbi`` - if x is None: - if n_samples is None: - raise ValueError('Either provide ``x`` or ``n_samples``.') + args = [] + else: # `.infere_step` has been called manually + prior = self.posterior.set_default_x(self.x_o) + if self.posterior._method_family == 'snpe': + args = [prior] else: - x = self.extract_summary_statistics(theta) - self.x = x - - # initialize inference object - inference = self.init_inference(inference_method, - density_estimator_model, - prior, - **inference_kwargs) + args = [] # allocate empty list of posterior posteriors = [] @@ -789,18 +797,12 @@ def infere(self, n_samples=None, theta=None, x=None, n_rounds=1, # set a proposal proposal = prior - # additional arguments for `.train` method are needed only for SNPE - if inference_method == 'SNPE': - args = [proposal] - else: - args = [] - # main inference loop for round in range(n_rounds): print(f'Round {round + 1}/{n_rounds}.') # inference step - posterior = self.infere_step(proposal, inference, + posterior = self.infere_step(proposal, self.inference, n_samples, self.theta, self.x, train_kwargs, posterior_kwargs, *args) @@ -872,9 +874,9 @@ def sample(self, shape, posterior=None, **kwargs): elif posterior is None and self.posterior: p = self.posterior else: - raise ValueError('Need to provide posterior argument if no ' - 'posterior has been calculated by the ``infere`` ' - 'method.') + raise ValueError('Need to provide posterior argument if no' + ' posterior has been calculated by the `infere`' + ' method.') samples = p.sample(shape, x=self.x_o, **kwargs) self.samples = samples return samples @@ -904,7 +906,7 @@ def pairplot(self, samples=None, **kwargs): try: s = self.samples except AttributeError as e: - print(e, '\nProvide samples or call ``sample`` method first.') + print(e, '\nProvide samples or call `sample` method first.') raise fig, axes = sbi.analysis.pairplot(s, **kwargs) return fig, axes @@ -942,9 +944,9 @@ def generate_traces(self, posterior=None, output_var=None, param_init=None, elif posterior is None and self.posterior: p = self.posterior else: - raise ValueError('Need to provide posterior argument if no ' - 'posterior has been calculated by the ``infere`` ' - 'method.') + raise ValueError('Need to provide posterior argument if no' + ' posterior has been calculated by the `infere`' + ' method.') params = p.sample((1, ), x=self.x_o) # set output variable that is monitored diff --git a/examples/IF_sbi.py b/examples/IF_sbi.py index 199fad4..b7b8ec0 100644 --- a/examples/IF_sbi.py +++ b/examples/IF_sbi.py @@ -49,7 +49,7 @@ def n_peaks(x): n_p = [] for _x in x.transpose(): - p_i = find_peaks(_x, height=-60)[0] + p_i = find_peaks(_x)[0] n_p.append(p_i.size) return n_p @@ -57,9 +57,9 @@ def n_peaks(x): inferencer = Inferencer(dt=dt, model=eqs_inf, input={'I_syn': inp_trace.reshape(1, -1)}, output={'v': out_trace}, - features=[lambda x: x[(t > start_syn) & (t < end_syn), :].mean(axis=0), - lambda x: x[(t > start_syn) & (t < end_syn), :].std(axis=0), - lambda x: x[(t > start_syn) & (t < end_syn), :].max(axis=0), + features=[lambda x: x[(t > start_syn) & (t < end_syn), :].mean(axis=1), + lambda x: x[(t > start_syn) & (t < end_syn), :].std(axis=1), + lambda x: x[(t > start_syn) & (t < end_syn), :].max(axis=1), n_peaks], method='exponential_euler', threshold='v > -50 * mV', @@ -67,7 +67,7 @@ def n_peaks(x): param_init={'v': -70 * mV}) inferencer.infere(n_samples=1000, - inference_method='SNLE', + inference_method='SNPE', gl=[10*nS, 100*nS], C=[0.1*nF, 10*nF]) diff --git a/examples/hh_sbi_advanced.py b/examples/hh_sbi_advanced.py index ada4e35..67bba5e 100644 --- a/examples/hh_sbi_advanced.py +++ b/examples/hh_sbi_advanced.py @@ -1,3 +1,5 @@ +import os + from brian2 import * from brian2modelfitting import * import pandas as pd @@ -66,18 +68,18 @@ def n_peaks(x): g_na=[2e-06*siemens, 2e-04*siemens], g_kd=[6e-07*siemens, 6e-05*siemens], Cm=[0.1*uF*cm**-2*area, 2*uF*cm**-2*area]) -# Generate training data -theta = inferencer.generate_training_data(n_samples=1000, - prior=prior) -# Extract summary stats -x = inferencer.extract_summary_statistics(theta=theta, level=0) - -# Loading and storing of the data -# For large training data, you can store it into .npz and reuse it later +# Prepare training data path_to_data = __file__[:-3] + '_data.npz' -inferencer.save_summary_statistics(path_to_data, theta, x) -# Training data will be directly set to class variables once they are loaded -theta_loaded, x_loaded = inferencer.load_summary_statistics(path_to_data) +if os.path.exists(path_to_data): + theta, x = inferencer.load_summary_statistics(path_to_data) +else: + # Generate training data + theta = inferencer.generate_training_data(n_samples=1000, + prior=prior) + # Extract summary stats + x = inferencer.extract_summary_statistics(theta=theta, level=0) + # Save the data for later use + inferencer.save_summary_statistics(path_to_data, theta, x) # Amortized inference # Training the neural density estimator @@ -89,7 +91,7 @@ def n_peaks(x): # First round of inference where no observation data is set to posterior posterior = inferencer.infere_step(proposal=prior, inference=inference, - theta=theta_loaded, x=x_loaded, + theta=theta, x=x, train_kwargs={'num_atoms': 10, 'learning_rate': 0.0005, 'show_train_summary': True}) @@ -107,10 +109,7 @@ def n_peaks(x): r'$\overline{g}_{K}$', r'$\overline{C}_{m}$']) # ...and optionally, continue the multiround inference via ``infere`` method -posterior_multi_round = inferencer.infere(n_rounds=2, - theta=theta_loaded, x=x_loaded, - inference_method='SNPE', - density_estimator_model='maf') +posterior_multi_round = inferencer.infere(n_rounds=2) inferencer.sample((10000, )) inferencer.pairplot(labels=[r'$\overline{g}_{l}$', r'$\overline{g}_{Na}$', From 9545887a882183e3283260a3ee0c51748a0a7b95 Mon Sep 17 00:00:00 2001 From: Marcel Stimberg Date: Tue, 13 Jul 2021 15:59:15 +0200 Subject: [PATCH 042/121] Revert testing change that broke example --- examples/IF_sbi.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/IF_sbi.py b/examples/IF_sbi.py index b7b8ec0..8de5adc 100644 --- a/examples/IF_sbi.py +++ b/examples/IF_sbi.py @@ -57,9 +57,9 @@ def n_peaks(x): inferencer = Inferencer(dt=dt, model=eqs_inf, input={'I_syn': inp_trace.reshape(1, -1)}, output={'v': out_trace}, - features=[lambda x: x[(t > start_syn) & (t < end_syn), :].mean(axis=1), - lambda x: x[(t > start_syn) & (t < end_syn), :].std(axis=1), - lambda x: x[(t > start_syn) & (t < end_syn), :].max(axis=1), + features=[lambda x: x[(t > start_syn) & (t < end_syn), :].mean(axis=0), + lambda x: x[(t > start_syn) & (t < end_syn), :].std(axis=0), + lambda x: x[(t > start_syn) & (t < end_syn), :].max(axis=0), n_peaks], method='exponential_euler', threshold='v > -50 * mV', From c85ce9786400f92070aec6ad29f88164a20379d6 Mon Sep 17 00:00:00 2001 From: antelk Date: Sat, 17 Jul 2021 17:28:59 +0200 Subject: [PATCH 043/121] implement wrapper funcs for sbi's conditional_pairplot and conditional_corrcoeff --- brian2modelfitting/inferencer.py | 76 ++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py index e4e42fb..c4ec83a 100644 --- a/brian2modelfitting/inferencer.py +++ b/brian2modelfitting/inferencer.py @@ -911,6 +911,82 @@ def pairplot(self, samples=None, **kwargs): fig, axes = sbi.analysis.pairplot(s, **kwargs) return fig, axes + def conditional_pairplot(self, condition, limits, density=None, **kwargs): + """Plot conditional distribution given all other parameters. + + Check ``sbi.analysis.plot.conditional_pairplot`` for more + details. + + Parameters + ---------- + condition : torch.tensor + Condition that all but the one/two regarded parameters are + fixed to. + limits : list or torch.tensor + Limits in between which each parameter will be evaulated. + density : sbi.inference.NeuralPosterior, optional + Posterior probability density. + **kwargs : dict, optional + Additional keyword arguments for the + ``sbi.analysis.plot.pairplot`` function. + + Returns + ------- + tuple + Figure and axis of posterior distribution plot. + """ + if density is not None: + d = density + else: + try: + d = self.posterior + except AttributeError as e: + print(e, '\nDensity is not available.') + raise + fig, axes = sbi.analysis.conditional_pairplot(density=d, + condition=condition, + limits=limits, + *kwargs) + return fig, axes + + def conditional_corrcoeff(self, condition, limits, density=None, **kwargs): + """Plot conditional distribution given all other parameters. + + Check ``sbi.analysis.conditional_density.conditional_corrcoeff`` + for more details. + + Parameters + ---------- + condition : torch.tensor + Condition that all but the one/two regarded parameters are + fixed to. + limits : list or torch.tensor + Limits in between which each parameter will be evaulated. + density : sbi.inference.NeuralPosterior, optional + Posterior probability density. + **kwargs : dict, optional + Additional keyword arguments for the + ``sbi.analysis.plot.pairplot`` function. + + Returns + ------- + tuple + Figure and axis of posterior distribution plot. + """ + if density is not None: + d = density + else: + try: + d = self.posterior + except AttributeError as e: + print(e, '\nDensity is not available.') + raise + fig, axes = sbi.analysis.conditional_corrcoeff(density=d, + condition=condition, + limits=limits, + *kwargs) + return fig, axes + def generate_traces(self, posterior=None, output_var=None, param_init=None, level=0): """Generates traces for a single drawn sample from the trained From 6ab9a4bcd558891bd19316494c0725f47b0adaa3 Mon Sep 17 00:00:00 2001 From: antelk Date: Sat, 17 Jul 2021 17:36:44 +0200 Subject: [PATCH 044/121] fix minor issues in cond_corrcoeff --- brian2modelfitting/inferencer.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py index c4ec83a..048df89 100644 --- a/brian2modelfitting/inferencer.py +++ b/brian2modelfitting/inferencer.py @@ -933,7 +933,7 @@ def conditional_pairplot(self, condition, limits, density=None, **kwargs): Returns ------- tuple - Figure and axis of posterior distribution plot. + Figure and axis of conditional pairplot. """ if density is not None: d = density @@ -970,8 +970,8 @@ def conditional_corrcoeff(self, condition, limits, density=None, **kwargs): Returns ------- - tuple - Figure and axis of posterior distribution plot. + torch.tensor + Average conditional correlation matrix. """ if density is not None: d = density @@ -981,11 +981,11 @@ def conditional_corrcoeff(self, condition, limits, density=None, **kwargs): except AttributeError as e: print(e, '\nDensity is not available.') raise - fig, axes = sbi.analysis.conditional_corrcoeff(density=d, - condition=condition, - limits=limits, - *kwargs) - return fig, axes + cond_coeff = sbi.analysis.conditional_corrcoeff(density=d, + condition=condition, + limits=limits, + *kwargs) + return cond_coeff def generate_traces(self, posterior=None, output_var=None, param_init=None, level=0): From dd278dc3047c69cd02850fa4f045539fbbc576de Mon Sep 17 00:00:00 2001 From: antelk Date: Tue, 20 Jul 2021 17:03:13 +0200 Subject: [PATCH 045/121] fix docstrings + change features argument to be optional --- brian2modelfitting/inferencer.py | 41 +++++++++++++++++++------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py index 048df89..f30e054 100644 --- a/brian2modelfitting/inferencer.py +++ b/brian2modelfitting/inferencer.py @@ -161,7 +161,7 @@ class Inferencer(object): key corresponds to the name of the output variable as defined in ``model`` and value corresponds to a single dimensional array of recorded data traces. - features : list + features : list, optional List of callables that take the voltage trace and output summary statistics. method : str, optional @@ -183,7 +183,7 @@ class Inferencer(object): Dictionary of state variables to be initialized with respective values. """ - def __init__(self, dt, model, input, output, features, method=None, + def __init__(self, dt, model, input, output, features=None, method=None, threshold=None, reset=None, refractory=False, param_init=None): # time scale @@ -275,13 +275,16 @@ def __init__(self, dt, model, input, output, features, method=None, # placeholder for the posterior self.posterior = None # observation the focus is on - x_o = [] - for o in self.output: - o = np.array(o) - obs = [] - for feature in features: - obs.extend(feature(o.transpose())) - x_o.append(obs) + if features: + x_o = [] + for o in self.output: + o = np.array(o) + obs = [] + for feature in features: + obs.extend(feature(o.transpose())) + x_o.append(obs) + else: + x_o = np.vstack(self.output) x_o = torch.tensor(x_o, dtype=torch.float32) self.x_o = x_o self.features = features @@ -455,11 +458,15 @@ def extract_summary_statistics(self, theta, level=1): x = [] for ov in self.output_var: x_val = obs[ov].get_value() - summary_statistics = [] - for feature in self.features: - summary_statistics.append(feature(x_val)) - x.append(summary_statistics) - x = np.array(x, dtype=np.float32) + if self.features: + summary_statistics = [] + for feature in self.features: + summary_statistics.append(feature(x_val)) + x.append(summary_statistics) + x = np.array(x, dtype=np.float32) + else: + x.append(x_val) + x = np.vstack(x).astype(np.float32) x = x.reshape((self.n_samples, -1)) return x @@ -893,7 +900,7 @@ def pairplot(self, samples=None, **kwargs): Samples used to build the pairplot. **kwargs : dict, optional Additional keyword arguments for the - ``sbi.analysis.plot.pairplot`` function. + ``sbi.analysis.pairplot`` function. Returns ------- @@ -928,7 +935,7 @@ def conditional_pairplot(self, condition, limits, density=None, **kwargs): Posterior probability density. **kwargs : dict, optional Additional keyword arguments for the - ``sbi.analysis.plot.pairplot`` function. + ``sbi.analysis.conditional_pairplot`` function. Returns ------- @@ -966,7 +973,7 @@ def conditional_corrcoeff(self, condition, limits, density=None, **kwargs): Posterior probability density. **kwargs : dict, optional Additional keyword arguments for the - ``sbi.analysis.plot.pairplot`` function. + ``sbi.analysis.conditional_corrcoeff`` function. Returns ------- From c5eb245ff7c8e7c862b69f9009376f7c5cdf4099 Mon Sep 17 00:00:00 2001 From: antelk Date: Mon, 2 Aug 2021 23:37:04 +0200 Subject: [PATCH 046/121] better handling of plotting parameters + additional fixes --- brian2modelfitting/inferencer.py | 228 +++++++++++++++++++++++++------ 1 file changed, 189 insertions(+), 39 deletions(-) diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py index f30e054..9e89cfa 100644 --- a/brian2modelfitting/inferencer.py +++ b/brian2modelfitting/inferencer.py @@ -219,7 +219,7 @@ def __init__(self, dt, model, input, output, features=None, method=None, self.output = output # create variable for parameter names - self.param_names = model.parameter_names + self.param_names = sorted(model.parameter_names) # set the simulation time for a given time scale self.n_traces, n_steps = input.shape @@ -269,11 +269,13 @@ def __init__(self, dt, model, input, output, features=None, method=None, self.reset = reset self.refractory = refractory - # placeholder for samples + self.params = None self.n_samples = None self.samples = None - # placeholder for the posterior self.posterior = None + self.theta = None + self.x = None + # observation the focus is on if features: x_o = [] @@ -284,12 +286,10 @@ def __init__(self, dt, model, input, output, features=None, method=None, obs.extend(feature(o.transpose())) x_o.append(obs) else: - x_o = np.vstack(self.output) + x_o = np.vstack(self.output).reshape(self.n_traces, -1) x_o = torch.tensor(x_o, dtype=torch.float32) self.x_o = x_o self.features = features - self.theta = None - self.x = None @property def n_neurons(self): @@ -337,7 +337,7 @@ def setup_simulator(self, network_name, n_neurons, output_var, param_init, Returns ------- brian2modelfitting.simulator.Simulator - Configured simulator w.r.t. to the available device. + Configured simulator w.r.t. the available device. """ # configure the simulator simulator = configure_simulator() @@ -393,6 +393,7 @@ def init_prior(self, **params): raise ValueError(f'Parameter {param} must be defined as a' ' model\'s parameter') prior = calc_prior(self.param_names, **params) + self.params = params return prior def generate_training_data(self, n_samples, prior): @@ -504,7 +505,7 @@ def save_summary_statistics(self, f, theta=None, x=None): ' `infere_step` method first.') np.savez_compressed(f, theta=t, x=x) - def load_summary_statistics(self, f, **kwargs): + def load_summary_statistics(self, f): """Load sampled prior data, theta, and extracted summary statistics, x, from a compressed ``.npz`` format. Arrays should be named either `arr_0` and `arr_1` or `theta` and `x` for @@ -515,8 +516,6 @@ def load_summary_statistics(self, f, **kwargs): f : str or os.PathLike Path to file either as string or ``os.PathLike`` object that contains file name. - kwargs : dict, optional - Additional keyword arguments for ``numpy.load`` method. Returns ------- @@ -873,7 +872,7 @@ def sample(self, shape, posterior=None, **kwargs): ``sbi.inference.posteriors.DirectPosterior`` class Returns ------- - torch.tensor + numpy.ndarray Samples from posterior of the shape as given in ``shape``. """ if posterior: @@ -886,9 +885,10 @@ def sample(self, shape, posterior=None, **kwargs): ' method.') samples = p.sample(shape, x=self.x_o, **kwargs) self.samples = samples - return samples + return samples.numpy() - def pairplot(self, samples=None, **kwargs): + def pairplot(self, samples=None, points=None, limits=None, subset=None, + labels=None, ticks=None, **kwargs): """Plot samples in a 2-D grid with marginals and pairwise marginals. @@ -898,6 +898,19 @@ def pairplot(self, samples=None, **kwargs): ---------- samples : iterable, optional Samples used to build the pairplot. + points : dict, optional + Additional points to scatter, e.g., true parameter values, + if known. + limits : dict, optional + Limits for each parameter. If None, min and max of the + given samples will be used. + subset : list, optional + Which parameters to plot. + labels : dict, optional + Names for each parameter. + ticks : dict, optional + Position of the ticks. If None, default ticks positions + will be used. **kwargs : dict, optional Additional keyword arguments for the ``sbi.analysis.pairplot`` function. @@ -910,15 +923,61 @@ def pairplot(self, samples=None, **kwargs): if samples is not None: s = samples else: - try: + if self.samples is not None: s = self.samples - except AttributeError as e: - print(e, '\nProvide samples or call `sample` method first.') - raise - fig, axes = sbi.analysis.pairplot(s, **kwargs) + else: + raise ValueError('Samples are not available.') + if points: + for param_name in points.keys(): + if param_name not in self.param_names: + raise AttributeError(f'Invalid parameter: {param_name}') + points = np.array([[points[param_name].item() + for param_name in self.param_names]]) + if limits: + for param_name, lim_vals in limits.items(): + if param_name not in self.param_names: + raise AttributeError(f'Invalid parameter: {param_name}') + if len(lim_vals) != 2: + raise ValueError('Invalid limits for parameter: ' + f'{param_name}') + limits = [[limits[param_name][0].item(), + limits[param_name][1].item()] + for param_name in self.param_names] + if subset: + for param_name in subset: + if param_name not in self.param_names: + raise AttributeError(f'Invalid parameter: {param_name}') + subset = [self.param_names.index(param_name) + for param_name in subset] + if ticks: + for param_name, lim_vals in ticks.items(): + if param_name not in self.param_names: + raise AttributeError(f'Invalid parameter: {param_name}') + if len(lim_vals) != 2: + raise ValueError('Invalid limits for parameter: ' + f'{param_name}') + ticks = [[ticks[param_name][0].item(), + ticks[param_name][1].item()] + for param_name in self.param_names] + else: + ticks = [] + if labels: + for param_name in labels.keys(): + if param_name not in self.param_names: + raise AttributeError(f'Invalid parameter: {param_name}') + labels = [labels[param_name] for param_name in self.param_names] + fig, axes = sbi.analysis.pairplot(samples=s, + points=points, + limits=limits, + subset=subset, + labels=labels, + ticks=ticks, + **kwargs) return fig, axes - def conditional_pairplot(self, condition, limits, density=None, **kwargs): + def conditional_pairplot(self, condition, density=None, points=None, + limits=None, subset=None, labels=None, + ticks=None, **kwargs): """Plot conditional distribution given all other parameters. Check ``sbi.analysis.plot.conditional_pairplot`` for more @@ -926,13 +985,24 @@ def conditional_pairplot(self, condition, limits, density=None, **kwargs): Parameters ---------- - condition : torch.tensor + condition : numpy.ndarray Condition that all but the one/two regarded parameters are fixed to. - limits : list or torch.tensor - Limits in between which each parameter will be evaulated. density : sbi.inference.NeuralPosterior, optional Posterior probability density. + points : dict, optional + Additional points to scatter, e.g., true parameter values, + if known. + limits : dict, optional + Limits for each parameter. If None, min and max of the + given samples will be used. + subset : list, optional + Which parameters to plot. + labels : dict, optional + Names for each parameter. + ticks : dict, optional + Position of the ticks. If None, default ticks positions + will be used. **kwargs : dict, optional Additional keyword arguments for the ``sbi.analysis.conditional_pairplot`` function. @@ -942,21 +1012,72 @@ def conditional_pairplot(self, condition, limits, density=None, **kwargs): tuple Figure and axis of conditional pairplot. """ + condition = torch.from_numpy(condition) if density is not None: d = density else: - try: - d = self.posterior - except AttributeError as e: - print(e, '\nDensity is not available.') - raise + if self.posterior is not None: + if self.posterior.default_x is None: + d = self.posterior.set_default_x(self.x_o) + else: + d = self.posterior + else: + raise ValueError('Density is not available.') + if points: + for param_name in points.keys(): + if param_name not in self.param_names: + raise AttributeError(f'Invalid parameter: {param_name}') + points = np.array([[points[param_name].item() + for param_name in self.param_names]]) + if limits: + for param_name, lim_vals in limits.items(): + if param_name not in self.param_names: + raise AttributeError(f'Invalid parameter: {param_name}') + if len(lim_vals) != 2: + raise ValueError('Invalid limits for parameter: ' + f'{param_name}') + limits = [[limits[param_name][0].item(), + limits[param_name][1].item()] + for param_name in self.param_names] + else: + limits = [[self.params[param_name][0].item(), + self.params[param_name][1].item()] + for param_name in self.param_names] + if subset: + for param_name in subset: + if param_name not in self.param_names: + raise AttributeError(f'Invalid parameter: {param_name}') + subset = [self.param_names.index(param_name) + for param_name in subset] + if ticks: + for param_name, lim_vals in ticks.items(): + if param_name not in self.param_names: + raise AttributeError(f'Invalid parameter: {param_name}') + if len(lim_vals) != 2: + raise ValueError('Invalid limits for parameter: ' + f'{param_name}') + ticks = [[ticks[param_name][0].item(), + ticks[param_name][1].item()] + for param_name in self.param_names] + else: + ticks = [] + if labels: + for param_name in labels.keys(): + if param_name not in self.param_names: + raise AttributeError(f'Invalid parameter: {param_name}') + labels = [labels[param_name] for param_name in self.param_names] fig, axes = sbi.analysis.conditional_pairplot(density=d, condition=condition, limits=limits, + points=points, + subset=subset, + labels=labels, + ticks=ticks, *kwargs) return fig, axes - def conditional_corrcoeff(self, condition, limits, density=None, **kwargs): + def conditional_corrcoeff(self, condition, density=None, limits=None, + subset=None, **kwargs): """Plot conditional distribution given all other parameters. Check ``sbi.analysis.conditional_density.conditional_corrcoeff`` @@ -964,35 +1085,64 @@ def conditional_corrcoeff(self, condition, limits, density=None, **kwargs): Parameters ---------- - condition : torch.tensor + condition : numpy.ndarray Condition that all but the one/two regarded parameters are fixed to. - limits : list or torch.tensor - Limits in between which each parameter will be evaulated. density : sbi.inference.NeuralPosterior, optional Posterior probability density. + limits : dict, optional + Limits for each parameter. If None, min and max of the + given samples will be used. + subset : list, optional + Parameters that are taken for conditional distribution, if + None all parameters are considered. **kwargs : dict, optional Additional keyword arguments for the ``sbi.analysis.conditional_corrcoeff`` function. Returns ------- - torch.tensor + numpy.ndarray Average conditional correlation matrix. """ + condition = torch.from_numpy(condition) if density is not None: d = density else: - try: - d = self.posterior - except AttributeError as e: - print(e, '\nDensity is not available.') - raise + if self.posterior is not None: + if self.posterior.default_x is None: + d = self.posterior.set_default_x(self.x_o) + else: + d = self.posterior + else: + raise ValueError('Density is not available.') + if limits: + for param_name, lim_vals in limits.items(): + if param_name not in self.param_names: + raise AttributeError(f'Invalid parameter: {param_name}') + if len(lim_vals) != 2: + raise ValueError('Invalid limits for parameter: ' + f'{param_name}') + limits = [[limits[param_name][0].item(), + limits[param_name][1].item()] + for param_name in self.param_names] + else: + limits = [[self.params[param_name][0].item(), + self.params[param_name][1].item()] + for param_name in self.param_names] + limits = torch.tensor(limits) + if subset: + for param_name in subset: + if param_name not in self.param_names: + raise AttributeError(f'Invalid parameter: {param_name}') + subset = [self.param_names.index(param_name) + for param_name in subset] cond_coeff = sbi.analysis.conditional_corrcoeff(density=d, - condition=condition, limits=limits, + condition=condition, + subset=subset, *kwargs) - return cond_coeff + return cond_coeff.numpy() def generate_traces(self, posterior=None, output_var=None, param_init=None, level=0): From 70279b606afc6a1e0aaf19b1031ac95d24819378 Mon Sep 17 00:00:00 2001 From: antelk Date: Tue, 3 Aug 2021 11:22:26 +0200 Subject: [PATCH 047/121] x and x_0 shapes fixed --- brian2modelfitting/inferencer.py | 61 +++++++++++++------------------- 1 file changed, 25 insertions(+), 36 deletions(-) diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py index 9e89cfa..838de1d 100644 --- a/brian2modelfitting/inferencer.py +++ b/brian2modelfitting/inferencer.py @@ -287,7 +287,6 @@ def __init__(self, dt, model, input, output, features=None, method=None, x_o.append(obs) else: x_o = np.vstack(self.output).reshape(self.n_traces, -1) - x_o = torch.tensor(x_o, dtype=torch.float32) self.x_o = x_o self.features = features @@ -419,7 +418,6 @@ def generate_training_data(self, n_samples, prior): # sample from prior theta = prior.sample((n_samples, )) theta = np.atleast_2d(theta.numpy()) - return theta def extract_summary_statistics(self, theta, level=1): @@ -466,9 +464,9 @@ def extract_summary_statistics(self, theta, level=1): x.append(summary_statistics) x = np.array(x, dtype=np.float32) else: - x.append(x_val) - x = np.vstack(x).astype(np.float32) - x = x.reshape((self.n_samples, -1)) + x.append(x_val.T) + x = np.hstack(x).astype(np.float32) + # x = x.reshape((self.n_samples, -1)) return x def save_summary_statistics(self, f, theta=None, x=None): @@ -598,17 +596,15 @@ def train(self, inference, theta, x, *args, **train_kwargs): Returns ------- - tuple - ``sbi.inference.NeuralInference`` object with stored - paramaters and simulation outputs prepared for training and - trained neural density estimator object. + ``sbi.inference.NeuralInference`` + trained inference object. """ - inference = inference.append_simulations(theta, x, *args) - density_estimator = inference.train(**train_kwargs) - return (inference, density_estimator) + # inference = inference.append_simulations(theta, x, *args) + inference = inference.append_simulations(theta, x) + _ = inference.train(**train_kwargs) + return inference - def build_posterior(self, inference, density_estimator, - **posterior_kwargs): + def build_posterior(self, inference, **posterior_kwargs): """Return instantiated inference object. Parameters @@ -616,15 +612,6 @@ def build_posterior(self, inference, density_estimator, inference : sbi.inference.NeuralInference Instantiated inference object with stored paramaters and simulation outputs prepared for training. - theta : torch.tensor - Sampled prior. - x : torch.tensor - Summary statistics. - args : list, optional - Contains a uniformly distributed sbi.utils.BoxUniform - prior/proposal. Used only for SNPE, for SNLE and SNRE, - ``proposal`` should not be passed to ``append_simulations`` - method, thus ``args`` should not be passed. posterior_kwargs : dict, optional Additional keyword arguments for ``build_posterior`` method of ``sbi.inference.NeuralInference`` object. @@ -634,10 +621,9 @@ def build_posterior(self, inference, density_estimator, tuple ``sbi.inference.NeuralInference`` object with stored paramaters and simulation outputs prepared for training and - ``sbi.inference.NeuralInference`` object from which. + ``sbi.inference.NeuralPosterior`` object. """ - posterior = inference.build_posterior(density_estimator, - **posterior_kwargs) + posterior = inference.build_posterior(**posterior_kwargs) return (inference, posterior) def infere_step(self, proposal, inference, @@ -690,13 +676,10 @@ def infere_step(self, proposal, inference, x = torch.tensor(x) # pass the simulated data to the inference object and train it - inference, density_estimator = self.train(inference, - theta, x, - *args, **train_kwargs) + inference = self.train(inference, theta, x, *args, **train_kwargs) # use the density estimator to build the posterior inference, posterior = self.build_posterior(inference, - density_estimator, **posterior_kwargs) self.inference = inference self.posterior = posterior @@ -791,7 +774,8 @@ def infere(self, n_samples=None, theta=None, x=None, n_rounds=1, else: args = [] else: # `.infere_step` has been called manually - prior = self.posterior.set_default_x(self.x_o) + x_o = torch.tensor(self.x_o, dtype=torch.float32) + prior = self.posterior.set_default_x(x_o) if self.posterior._method_family == 'snpe': args = [prior] else: @@ -817,7 +801,8 @@ def infere(self, n_samples=None, theta=None, x=None, n_rounds=1, # update the proposal given the observation if n_rounds > 1: - proposal = posterior.set_default_x(self.x_o) + x_o = torch.tensor(self.x_o, dtype=torch.float32) + proposal = posterior.set_default_x(x_o) self.posterior = posterior return posterior @@ -883,7 +868,8 @@ def sample(self, shape, posterior=None, **kwargs): raise ValueError('Need to provide posterior argument if no' ' posterior has been calculated by the `infere`' ' method.') - samples = p.sample(shape, x=self.x_o, **kwargs) + x_o = torch.tensor(self.x_o, dtype=torch.float32) + samples = p.sample(shape, x=x_o, **kwargs) self.samples = samples return samples.numpy() @@ -1018,7 +1004,8 @@ def conditional_pairplot(self, condition, density=None, points=None, else: if self.posterior is not None: if self.posterior.default_x is None: - d = self.posterior.set_default_x(self.x_o) + x_o = torch.tensor(self.x_o, dtype=torch.float32) + d = self.posterior.set_default_x(x_o) else: d = self.posterior else: @@ -1111,7 +1098,8 @@ def conditional_corrcoeff(self, condition, density=None, limits=None, else: if self.posterior is not None: if self.posterior.default_x is None: - d = self.posterior.set_default_x(self.x_o) + x_o = torch.tensor(self.x_o, dtype=torch.float32) + d = self.posterior.set_default_x(x_o) else: d = self.posterior else: @@ -1180,7 +1168,8 @@ def generate_traces(self, posterior=None, output_var=None, param_init=None, raise ValueError('Need to provide posterior argument if no' ' posterior has been calculated by the `infere`' ' method.') - params = p.sample((1, ), x=self.x_o) + x_o = torch.tensor(self.x_o, dtype=torch.float32) + params = p.sample((1, ), x=x_o) # set output variable that is monitored if output_var is None: From 0d89a8e3f6cb530c346a4c25c5f8323c15d93d4b Mon Sep 17 00:00:00 2001 From: antelk Date: Tue, 3 Aug 2021 18:19:55 +0200 Subject: [PATCH 048/121] fix kwargs forwarding --- brian2modelfitting/inferencer.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py index 838de1d..3ee89b4 100644 --- a/brian2modelfitting/inferencer.py +++ b/brian2modelfitting/inferencer.py @@ -599,8 +599,8 @@ def train(self, inference, theta, x, *args, **train_kwargs): ``sbi.inference.NeuralInference`` trained inference object. """ - # inference = inference.append_simulations(theta, x, *args) - inference = inference.append_simulations(theta, x) + inference = inference.append_simulations(theta, x, *args) + #inference = inference.append_simulations(theta, x) _ = inference.train(**train_kwargs) return inference @@ -852,7 +852,7 @@ def sample(self, shape, posterior=None, **kwargs): Desired shape of samples that are drawn from posterior. posterior : sbi.inference.posteriors.DirectPosterior, optional Posterior distribution. - **kwargs : dict, optional + kwargs : dict, optional Additional keyword arguments for ``sample`` method in ``sbi.inference.posteriors.DirectPosterior`` class Returns @@ -897,7 +897,7 @@ def pairplot(self, samples=None, points=None, limits=None, subset=None, ticks : dict, optional Position of the ticks. If None, default ticks positions will be used. - **kwargs : dict, optional + kwargs : dict, optional Additional keyword arguments for the ``sbi.analysis.pairplot`` function. @@ -989,7 +989,7 @@ def conditional_pairplot(self, condition, density=None, points=None, ticks : dict, optional Position of the ticks. If None, default ticks positions will be used. - **kwargs : dict, optional + kwargs : dict, optional Additional keyword arguments for the ``sbi.analysis.conditional_pairplot`` function. @@ -1060,7 +1060,7 @@ def conditional_pairplot(self, condition, density=None, points=None, subset=subset, labels=labels, ticks=ticks, - *kwargs) + **kwargs) return fig, axes def conditional_corrcoeff(self, condition, density=None, limits=None, @@ -1083,7 +1083,7 @@ def conditional_corrcoeff(self, condition, density=None, limits=None, subset : list, optional Parameters that are taken for conditional distribution, if None all parameters are considered. - **kwargs : dict, optional + kwargs : dict, optional Additional keyword arguments for the ``sbi.analysis.conditional_corrcoeff`` function. @@ -1129,7 +1129,7 @@ def conditional_corrcoeff(self, condition, density=None, limits=None, limits=limits, condition=condition, subset=subset, - *kwargs) + **kwargs) return cond_coeff.numpy() def generate_traces(self, posterior=None, output_var=None, param_init=None, From 4fb82bec15469f2b6221a477c7c28a63a957573e Mon Sep 17 00:00:00 2001 From: antelk Date: Tue, 3 Aug 2021 20:23:03 +0200 Subject: [PATCH 049/121] adjust for the changes in api --- examples/IF_sbi.py | 55 +++++++++++++++++++--------------------------- 1 file changed, 22 insertions(+), 33 deletions(-) diff --git a/examples/IF_sbi.py b/examples/IF_sbi.py index 8de5adc..bbb4e5e 100644 --- a/examples/IF_sbi.py +++ b/examples/IF_sbi.py @@ -4,76 +4,65 @@ # Generate input and output data traces -dt = 0.1 * ms +dt = 0.1*ms defaultclock.dt = dt inp_trace = hstack([zeros(int(round(5*ms/dt))), ones(int(round(25*ms/dt))), - zeros(int(round(30*ms/dt)))]) * 10 * nA + zeros(int(round(30*ms/dt)))]) * 10*nA I = TimedArray(inp_trace, dt=dt) -El = -70 * mV -VT = -50 * mV -DeltaT = 2 * mV +El = -70*mV +VT = -50*mV +DeltaT = 2*mV eqs = ''' dv/dt = (gl*(El - v) + gl*DeltaT*exp((v - VT) / DeltaT) + I(t)) / C : volt gl : siemens (constant) C : farad (constant) -''' + ''' neurons = NeuronGroup(1, eqs, threshold='v > -50 * mV', reset='v = -70 * mV', method='exponential_euler') neurons.v = -70 * mV -neurons.set_states({'gl': 30 * nS, - 'C': 1 * nF}) +neurons.set_states({'gl': 30*nS, + 'C': 1*nF}) monitor = StateMonitor(neurons, 'v', record=True) -run(60 * ms) +run(60*ms) out_trace = monitor.v # Inference start_scope() -El = -70 * mV -VT = -50 * mV -DeltaT = 2 * mV +El = -70*mV +VT = -50*mV +DeltaT = 2*mV eqs_inf = ''' dv/dt = (gl*(El - v) + gl*DeltaT*exp((v - VT) / DeltaT) + I_syn) / C : volt gl : siemens (constant) C : farad (constant) -''' - -t = arange(0, out_trace.shape[1] * dt / ms, dt / ms) -start_syn = t[min(where(inp_trace != 0)[0])] -end_syn = t[max(where(inp_trace != 0)[0])] - - -def n_peaks(x): - n_p = [] - for _x in x.transpose(): - p_i = find_peaks(_x)[0] - n_p.append(p_i.size) - return n_p - + ''' inferencer = Inferencer(dt=dt, model=eqs_inf, input={'I_syn': inp_trace.reshape(1, -1)}, output={'v': out_trace}, - features=[lambda x: x[(t > start_syn) & (t < end_syn), :].mean(axis=0), - lambda x: x[(t > start_syn) & (t < end_syn), :].std(axis=0), - lambda x: x[(t > start_syn) & (t < end_syn), :].max(axis=0), - n_peaks], method='exponential_euler', threshold='v > -50 * mV', reset='v = -70 * mV', param_init={'v': -70 * mV}) -inferencer.infere(n_samples=1000, +inferencer.infere(n_samples=10000, inference_method='SNPE', gl=[10*nS, 100*nS], C=[0.1*nF, 10*nF]) inferencer.sample((10000, )) -inferencer.pairplot(labels=[r'$\overline{g}_{l}$', r'$C$'], - points=[[1e-9, 30e-9]], +inferencer.pairplot(labels={'gl': r'$\overline{g}_{l}$', + 'C': r'$C$'}, + points={'gl': 30*nS, + 'C': 1*nF}, + limits={'gl': [10*nS, 100*nS], + 'C': [0.1*nF, 10*nF]}, + ticks={'gl': [10*nS, 100*nS], + 'C': [0.1*nF, 10*nF]}, points_offdiag={'markersize': 9}, points_colors=['r']) show() From 3031d73cf9f5d080e2b898e581fca6adc2804ec8 Mon Sep 17 00:00:00 2001 From: antelk Date: Tue, 3 Aug 2021 20:52:47 +0200 Subject: [PATCH 050/121] adjust to changes made in api --- examples/hh_sim_sbi.py | 107 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 examples/hh_sim_sbi.py diff --git a/examples/hh_sim_sbi.py b/examples/hh_sim_sbi.py new file mode 100644 index 0000000..64dea1f --- /dev/null +++ b/examples/hh_sim_sbi.py @@ -0,0 +1,107 @@ +from brian2modelfitting import * +from brian2 import * + + +# Input and output data traces simulation +dt = 0.05*ms +defaultclock.dt = dt +t_on = 50*ms +t_total = 350*ms +t_off = t_total - t_on +I = 1*nA +gleak = 10*nS +Eleak = -70*mV +VT = -60*mV +C = 200*pF +gNa = 32*uS +ENa = 53*mV +gK = 1*uS +EK = -107*mV +eqs = ''' + dVm/dt = -(gNa*m**3*h*(Vm - ENa) + gK*n**4*(Vm - EK) + gleak*(Vm - Eleak) - I_inj) / C : volt + I_inj = int(t >= t_on and t < t_off)*I : amp (shared) + dm/dt = alpham*(1-m) - betam*m : 1 + dn/dt = alphan*(1-n) - betan*n : 1 + dh/dt = alphah*(1-h) - betah*h : 1 + alpham = (-0.32/mV) * (Vm - VT - 13.*mV) / (exp((-(Vm - VT - 13.*mV))/(4.*mV)) - 1)/ms : Hz + betam = (0.28/mV) * (Vm - VT - 40.*mV) / (exp((Vm - VT - 40.*mV)/(5.*mV)) - 1)/ms : Hz + alphah = 0.128 * exp(-(Vm - VT - 17.*mV) / (18.*mV))/ms : Hz + betah = 4/(1 + exp((-(Vm - VT - 40.*mV)) / (5.*mV)))/ms : Hz + alphan = (-0.032/mV) * (Vm - VT - 15.*mV) / (exp((-(Vm - VT - 15.*mV)) / (5.*mV)) - 1)/ms : Hz + betan = 0.5*exp(-(Vm - VT - 10.*mV) / (40.*mV))/ms : Hz + ''' +neurons = NeuronGroup(1, eqs, dt=dt, + threshold='m>0.5', refractory='m>0.5', + method='exponential_euler') +state_monitor = StateMonitor(neurons, 'Vm', record=True) +spike_monitor = SpikeMonitor(neurons, record=False) +neurons.Vm = 'Eleak' +neurons.m = '1/(1 + betam/alpham)' +neurons.h = '1/(1 + betah/alphah)' +neurons.n = '1/(1 + betan/alphan)' +run(t_total) +I_inj = ((state_monitor.t >= t_on) & (state_monitor.t < t_off)) * I +t = state_monitor.t +out_trace = state_monitor.Vm + +# Inference +start_scope() +eqs = ''' + dVm/dt = -(gNa*m**3*h*(Vm - ENa) + gK*n**4*(Vm - EK) + gleak*(Vm - Eleak) - I_inj) / C : volt + dm/dt = alpham*(1-m) - betam*m : 1 + dn/dt = alphan*(1-n) - betan*n : 1 + dh/dt = alphah*(1-h) - betah*h : 1 + alpham = (-0.32/mV) * (Vm - VT - 13.*mV) / (exp((-(Vm - VT - 13.*mV))/(4.*mV)) - 1)/ms : Hz + betam = (0.28/mV) * (Vm - VT - 40.*mV) / (exp((Vm - VT - 40.*mV)/(5.*mV)) - 1)/ms : Hz + alphah = 0.128 * exp(-(Vm - VT - 17.*mV) / (18.*mV))/ms : Hz + betah = 4/(1 + exp((-(Vm - VT - 40.*mV)) / (5.*mV)))/ms : Hz + alphan = (-0.032/mV) * (Vm - VT - 15.*mV) / (exp((-(Vm - VT - 15.*mV)) / (5.*mV)) - 1)/ms : Hz + betan = 0.5*exp(-(Vm - VT - 10.*mV) / (40.*mV))/ms : Hz + + # The parameters to fit + gNa : siemens (constant) + gK : siemens (constant) + ''' +inferencer = Inferencer(dt=dt, model=eqs, + input={'I_inj': I_inj.reshape(1, -1)}, + output={'Vm': out_trace}, + method='exponential_euler', + threshold='m>0.5', refractory='m>0.5', + param_init={'Vm': 'Eleak', + 'm': '1/(1 + betam/alpham)', + 'h': '1/(1 + betah/alphah)', + 'n': '1/(1 + betan/alphan)'}) +inferencer.infere(n_samples=10_000, + inference_method='SNPE', + density_estimator_model='mdn', + gNa=[.5*uS, 80.*uS], + gK=[1e-4*uS, 15.*uS]) +inferencer.sample((10_000, )) + +# Visualize estimated posterior distribution +inferencer.pairplot(limits={'gNa': [.5*uS, 80.*uS], + 'gK': [1e-4*uS, 15.*uS]}, + ticks={'gNa': [.5*uS, 80.*uS], + 'gK': [1e-4*uS, 15.*uS]}, + labels={'gNa': r'$\overline{g}_{Na}$', + 'gK': r'$\overline{g}_{K}$'}, + points={'gNa': 32*uS, + 'gK': 1*uS}, + points_offdiag={'markersize': 6}, + points_colors=['r'], + figsize=(6, 6)) + +# Visualize traces for a single sample from posterior +inf_trace = inferencer.generate_traces() +fig, axs = subplots(2, 1, sharex=True, + gridspec_kw={'height_ratios': [3, 1]}, + figsize=(6, 4)) +axs[0].plot(t, out_trace.ravel()/mV, label='simulated recordings') +axs[0].plot(t, inf_trace.ravel()/mV, '--', label='posterior sample') +axs[0].set(ylabel='Vm, mV') +axs[0].legend() +axs[1].plot(t, I_inj.ravel()/nA, 'k-', label='stimulus') +axs[1].set(xlabel='t, ms', ylabel='I, nA') +axs[1].legend() + +show() From 03140698729567d5acb14bd2a611502ae47a1f7b Mon Sep 17 00:00:00 2001 From: antelk Date: Thu, 5 Aug 2021 22:11:34 +0200 Subject: [PATCH 051/121] enable multitrace support with or without given list of features --- brian2modelfitting/inferencer.py | 38 ++++++++++++++++---------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py index 3ee89b4..595e1c7 100644 --- a/brian2modelfitting/inferencer.py +++ b/brian2modelfitting/inferencer.py @@ -277,16 +277,16 @@ def __init__(self, dt, model, input, output, features=None, method=None, self.x = None # observation the focus is on - if features: - x_o = [] - for o in self.output: - o = np.array(o) + for o in self.output: + o = np.array(o) + if features: obs = [] - for feature in features: - obs.extend(feature(o.transpose())) - x_o.append(obs) - else: - x_o = np.vstack(self.output).reshape(self.n_traces, -1) + for _o in o: + for feature in features: + obs.append(feature(_o)) + x_o = np.array(obs, dtype=np.float32) + else: + x_o = o.ravel().astype(np.float32) self.x_o = x_o self.features = features @@ -454,19 +454,19 @@ def extract_summary_statistics(self, theta, level=1): # extract features obs = simulator.statemonitor.recorded_variables - x = [] for ov in self.output_var: - x_val = obs[ov].get_value() + o = obs[ov].get_value() + o = o.T if self.features: summary_statistics = [] - for feature in self.features: - summary_statistics.append(feature(x_val)) - x.append(summary_statistics) - x = np.array(x, dtype=np.float32) + # TODO: should be vectorized + for _o in o: + for feature in self.features: + summary_statistics.append(feature(_o)) + x = np.array(summary_statistics, dtype=np.float32) + x = x.reshape(self.n_samples, -1) else: - x.append(x_val.T) - x = np.hstack(x).astype(np.float32) - # x = x.reshape((self.n_samples, -1)) + x = o.reshape(self.n_samples, -1).astype(np.float32) return x def save_summary_statistics(self, f, theta=None, x=None): @@ -600,7 +600,7 @@ def train(self, inference, theta, x, *args, **train_kwargs): trained inference object. """ inference = inference.append_simulations(theta, x, *args) - #inference = inference.append_simulations(theta, x) + # inference = inference.append_simulations(theta, x) _ = inference.train(**train_kwargs) return inference From e09f17535f7357651519496b79509783712966d2 Mon Sep 17 00:00:00 2001 From: antelk Date: Thu, 5 Aug 2021 22:35:56 +0200 Subject: [PATCH 052/121] adjust to changes in api --- examples/hh_sbi.py | 44 ++++++++++++++++++-------------------------- 1 file changed, 18 insertions(+), 26 deletions(-) diff --git a/examples/hh_sbi.py b/examples/hh_sbi.py index 6c3a67f..47f718e 100644 --- a/examples/hh_sbi.py +++ b/examples/hh_sbi.py @@ -1,17 +1,15 @@ from brian2 import * from brian2modelfitting import * import pandas as pd -import numpy as np -from scipy.signal import find_peaks # Load input and output data traces df_inp_traces = pd.read_csv('input_traces_hh.csv') df_out_traces = pd.read_csv('output_traces_hh.csv') inp_traces = df_inp_traces.to_numpy() -inp_traces = inp_traces[:2, 1:] +inp_traces = inp_traces[:3, 1:] out_traces = df_out_traces.to_numpy() -out_traces = out_traces[:2, 1:] +out_traces = out_traces[:3, 1:] # Model and its parameters area = 20_000*um**2 @@ -37,31 +35,21 @@ # Time domain t = arange(0, out_traces.shape[1]*dt/ms, dt/ms) - -def n_peaks(x): - n_p = [] - for _x in x.transpose(): - p_i = find_peaks(_x, height=0)[0] - n_p.append(p_i.size - sum(np.diff(t[p_i]) < 4)) - return n_p - - # Simulation-based inference object instantiation inferencer = Inferencer(dt=dt, model=eqs, input={'I': inp_traces*amp}, output={'v': out_traces*mV}, - features=[n_peaks, - lambda x: x[(t > 5) & (t < 10), :].mean(axis=0), - lambda x: x[(t > 5) & (t < 10), :].std(axis=0), - lambda x: x.max(axis=0)], + features=[lambda x: x[(t > 5) & (t < 10)].mean(), + lambda x: x[(t > 5) & (t < 10)].std(), + lambda x: x.max()], method='exponential_euler', threshold='m > 0.5', refractory='m > 0.5', param_init={'v': 'VT'}) # Generate prior and train the neural density estimator -inferencer.infere(n_samples=1000, - n_rounds=2, +inferencer.infere(n_samples=10000, + n_rounds=1, gl=[1e-09*siemens, 1e-07*siemens], g_na=[2e-06*siemens, 2e-04*siemens], g_kd=[6e-07*siemens, 6e-05*siemens], @@ -71,10 +59,14 @@ def n_peaks(x): inferencer.sample((10000, )) # Create pairplot from samples -inferencer.pairplot(labels=[r'$\overline{g}_{l}$', - r'$\overline{g}_{Na}$', - r'$\overline{g}_{K}$', - r'$\overline{C}_{m}$']) +inferencer.pairplot(limits={'gl': [1e-09*siemens, 1e-07*siemens], + 'g_na': [2e-06*siemens, 2e-04*siemens], + 'g_kd': [6e-07*siemens, 6e-05*siemens], + 'Cm': [0.1*uF*cm**-2*area, 2*uF*cm**-2*area]}, + labels={'gl': r'$\overline{g}_{l}$', + 'g_na': r'$\overline{g}_{Na}$', + 'g_kd': r'$\overline{g}_{K}$', + 'Cm': r'$\overline{C}_{m}$'}) # Generate traces by using a single sample from the trained posterior inf_traces = inferencer.generate_traces() @@ -85,9 +77,9 @@ def n_peaks(x): fig, axs = subplots(nrows, ncols, sharex=True, gridspec_kw={'height_ratios': [3, 1]}, figsize=(15, 4)) for idx in range(ncols): - axs[0, idx].plot(t, out_traces[idx, :].T, label='measurements') - axs[0, idx].plot(t, inf_traces[idx, :].T/mV, label='fits') - axs[1, idx].plot(t, inp_traces[idx, :].T/nA, 'k-', label='stimulus') + axs[0, idx].plot(t, out_traces[idx, :], lw=3, label='measurements') + axs[0, idx].plot(t, inf_traces[idx, :]/mV, '--', lw=3,label='fits') + axs[1, idx].plot(t, inp_traces[idx, :]/nA, 'k-', label='stimulus') axs[1, idx].set_xlabel('t, ms') if idx == 0: axs[0, idx].set_ylabel('$v$, mV') From 516714396a245c0e02b086a9262554d8d1ec0d0b Mon Sep 17 00:00:00 2001 From: antelk Date: Fri, 6 Aug 2021 11:29:16 +0200 Subject: [PATCH 053/121] change features type to dict instead of list to enable multi output inference support --- brian2modelfitting/inferencer.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py index 595e1c7..816be2b 100644 --- a/brian2modelfitting/inferencer.py +++ b/brian2modelfitting/inferencer.py @@ -277,12 +277,12 @@ def __init__(self, dt, model, input, output, features=None, method=None, self.x = None # observation the focus is on - for o in self.output: + for ov, o in zip(self.output_var, self.output): o = np.array(o) if features: obs = [] for _o in o: - for feature in features: + for feature in features[ov]: obs.append(feature(_o)) x_o = np.array(obs, dtype=np.float32) else: @@ -461,7 +461,7 @@ def extract_summary_statistics(self, theta, level=1): summary_statistics = [] # TODO: should be vectorized for _o in o: - for feature in self.features: + for feature in self.features[ov]: summary_statistics.append(feature(_o)) x = np.array(summary_statistics, dtype=np.float32) x = x.reshape(self.n_samples, -1) From 487612e6e8c413f34a22f81d86e295a04ed66c21 Mon Sep 17 00:00:00 2001 From: antelk Date: Fri, 6 Aug 2021 14:06:17 +0200 Subject: [PATCH 054/121] fix docstrings + small updates --- brian2modelfitting/inferencer.py | 193 +++++++++++++++++-------------- 1 file changed, 106 insertions(+), 87 deletions(-) diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py index 816be2b..e0185ed 100644 --- a/brian2modelfitting/inferencer.py +++ b/brian2modelfitting/inferencer.py @@ -10,7 +10,6 @@ from brian2.groups.neurongroup import NeuronGroup from brian2.input.timedarray import TimedArray from brian2.monitors.statemonitor import StateMonitor -from brian2.units.allunits import * # all physical units from brian2.units.fundamentalunits import (DIMENSIONLESS, fail_for_dimension_mismatch, get_dimensions, @@ -29,8 +28,8 @@ def configure_simulator(): """Return the configured simulator, which can be either - `.RuntimeSimulator`, object for use with `.RuntimeDevice`, or - `.CPPStandaloneSimulator`, object for use with + `.RuntimeSimulator`, object for the use with `.RuntimeDevice`, or + `.CPPStandaloneSimulator`, object for the use with `.CPPStandaloneDevice`. Parameters @@ -62,15 +61,16 @@ def get_full_namespace(additional_namespace, level=0): ---------- additional_namespace : dict References to external parameters or functions, where key is - the name and value is the value of the external param/func. + the name and value is the value of the external parameter or + function. level : int, optional How far to go back to get the locals/globals. Returns ------- dict - Namespace with additional references to external parameters or - functions. + Namespace with additional references to the external parameters + or functions. """ namespace = {key: value for key, value in get_local_namespace(level=level + 1).items() @@ -95,8 +95,8 @@ def get_param_dict(param_values, param_names, n_values): Returns ------- dict - Dictionary containing key-value pairs thet correspond to a - parameter name and value(s) + Dictionary containing key-value pairs that correspond to a + parameter name and value(s). """ param_values = np.array(param_values) param_dict = dict() @@ -106,23 +106,24 @@ def get_param_dict(param_values, param_names, n_values): def calc_prior(param_names, **params): - """Return prior distributparion over given parameters. Note that the - only available prior distribution currently supported is - multidimensional uniform distribution defined on a box. + """Return the prior distribution over given parameters. + + N.B. The only currently supported prior distribution is + the multi-dimensional uniform distribution defined on a box. Parameters ---------- param_names : iterable Iterable containing parameter names. params : dict - Dictionary with keys that correspond to parameter names, and - values should be a single dimensional lists or arrays + Dictionary with keys that correspond to parameter names, values + are a single dimensional lists or arrays. Return ------ sbi.utils.torchutils.BoxUniform ``sbi`` compatible object that contains a uniform prior - distribution over a given set of parameter + distribution over a given set of parameters. """ for param_name in param_names: if param_name not in params: @@ -140,11 +141,12 @@ def calc_prior(param_names, **params): class Inferencer(object): """Class for simulation-based inference. - It offers an interface similar to that of `.Fitter` class but + It offers an interface similar to that of the `.Fitter` class but instead of fitting, neural density estimator is trained using a - generative model. This class serves as a wrapper for ``sbi`` - library for inferencing posterior over unknown parameters of a - given model. + generative model which ultimately provides the posterior + distribution over free parameters. + This class serves as a wrapper for ``sbi`` library for inferencing + posterior over unknown parameters of a given model. Parameters ---------- @@ -153,17 +155,21 @@ class Inferencer(object): model : str or brian2.equations.equations.Equations Single cell model equations. input : dict - Input traces in dictionary format, where key corresponds to the + Input traces in dictionary format where key corresponds to the name of the input variable as defined in ``model`` and value - corresponds to a single dimensional array of data traces. + corresponds to an array of input traces. output : dict Dictionary of recorded (or simulated) output data traces, where key corresponds to the name of the output variable as defined - in ``model`` and value corresponds to a single dimensional - array of recorded data traces. - features : list, optional - List of callables that take the voltage trace and output - summary statistics. + in ``model`` and value corresponds to a an array of recorded + traces. + features : dict, optional + Dictionary of callables that take the 1-dimensional voltage + trace and output summary statistics. Keys correspond to output + variable names, while values are lists of callables. + If features are not provided, automatic feature extraction will + be performed either by using the default multi-layer perceptron + or by using the user-provided embedding network. method : str, optional Integration method. threshold : str, optional @@ -269,13 +275,6 @@ def __init__(self, dt, model, input, output, features=None, method=None, self.reset = reset self.refractory = refractory - self.params = None - self.n_samples = None - self.samples = None - self.posterior = None - self.theta = None - self.x = None - # observation the focus is on for ov, o in zip(self.output_var, self.output): o = np.array(o) @@ -290,6 +289,14 @@ def __init__(self, dt, model, input, output, features=None, method=None, self.x_o = x_o self.features = features + # additional placeholders + self.params = None + self.n_samples = None + self.samples = None + self.posterior = None + self.theta = None + self.x = None + @property def n_neurons(self): """Return the number of neurons that are used in `.NeuronGroup` @@ -310,7 +317,7 @@ class while generating data for training the neural density Total number of neurons. """ if self.n_samples is None: - raise ValueError('Number of samples is not yet defined.' + raise ValueError('Number of samples have not been yet defined.' 'Call `generate_training_data` method first.') return self.n_traces * self.n_samples @@ -396,9 +403,7 @@ def init_prior(self, **params): return prior def generate_training_data(self, n_samples, prior): - """Return sampled prior and executed simulator containing - recorded variables to be used for training the neural density - estimator. + """Return sampled prior given the total number of samples. Parameter --------- @@ -415,19 +420,20 @@ def generate_training_data(self, n_samples, prior): # set n_samples to class variable to be able to call self.n_neurons self.n_samples = n_samples - # sample from prior + # sample from the prior distribution theta = prior.sample((n_samples, )) theta = np.atleast_2d(theta.numpy()) return theta def extract_summary_statistics(self, theta, level=1): - """Return summary statistics to be used for training the neural - density estimator. + """Return summary statistics for training the neural density + estimator. Parameters ---------- theta : numpy.ndarray - Sampled prior of shape (``n_samples``, -1). + Sampled prior with ``n_samples`` rows, while then umber of + columns is equal to the number of free parameters. level : int, optional How far to go back to get the locals/globals. @@ -452,7 +458,7 @@ def extract_summary_statistics(self, theta, level=1): simulator.run(self.sim_time, d_param, self.param_names, iteration=0, name=network_name) - # extract features + # extract features for each output variable and each trace obs = simulator.statemonitor.recorded_variables for ov in self.output_var: o = obs[ov].get_value() @@ -470,13 +476,13 @@ def extract_summary_statistics(self, theta, level=1): return x def save_summary_statistics(self, f, theta=None, x=None): - """Save sampled prior data, theta, and extracted summary - statistics, x, into a single file in compressed ``.pz`` format. + """Save sampled prior, and extracted summary statistics into a + single file in compressed ``.npz`` format. Parameters ---------- f : str or os.PathLike - Path to file either as string or ``os.PathLike`` object + Path to a file either as string or ``os.PathLike`` object that contains file name. theta : numpy.ndarray, optional Sampled prior. @@ -493,21 +499,19 @@ def save_summary_statistics(self, f, theta=None, x=None): t = self.theta else: raise AttributeError('Provide sampled prior or call' - ' `infere_step` method first.') + ' `infer_step` method first.') if x is not None: pass elif self.x is not None: x = self.x else: raise AttributeError('Provide summary feautures or call ' - ' `infere_step` method first.') + ' `infer_step` method first.') np.savez_compressed(f, theta=t, x=x) def load_summary_statistics(self, f): - """Load sampled prior data, theta, and extracted summary - statistics, x, from a compressed ``.npz`` format. Arrays should - be named either `arr_0` and `arr_1` or `theta` and `x` for - sampled priors and extracted features, respectively. + """Load samples from a prior and extracted summary statistics + from a compressed ``.npz`` file. Parameters ---------- @@ -518,7 +522,7 @@ def load_summary_statistics(self, f): Returns ------- tuple - Consisting of sampled prior and summary statistics arrays. + Sampled prior and summary statistics arrays. """ loaded = np.load(f, allow_pickle=True) if set(loaded.files) == {'theta', 'x'}: @@ -544,7 +548,11 @@ def init_inference(self, inference_method, density_estimator_model, prior, Uniformly distributed prior over given parameters. inference_kwargs : dict, optional Additional keyword arguments for - ``sbi.utils.get_nn_models.posterior_nn`` method. + ``sbi.utils.get_nn_models.posterior_nn`` method. The user + is free to provide own embedding network to learn features + from potentially high-dimensional simulation outputs. By + default multi-layer perceptron is used if no user defined + embedding network is provided. Returns ------- @@ -573,8 +581,7 @@ def init_inference(self, inference_method, density_estimator_model, prior, return inference def train(self, inference, theta, x, *args, **train_kwargs): - """Return inference object with stored training data and - trained density estimator. + """Return trained neural inference object. Parameters ---------- @@ -587,25 +594,30 @@ def train(self, inference, theta, x, *args, **train_kwargs): Summary statistics. args : list, optional Contains a uniformly distributed sbi.utils.BoxUniform - prior/proposal. Used only for SNPE, for SNLE and SNRE, + proposal. Used only for SNPE, for SNLE and SNRE, ``proposal`` should not be passed to ``append_simulations`` - method, thus ``args`` should not be passed. + method, thus ``args`` should not be passed. The args should + be provided only if the parameters were not sampled from + the prior, e.g., during the multi-round inference. + For SNLE and SNRE, args can hold the number of round from + which the data is stemmed from. Round 0 means from prior. + This is used only if the `discard_prior_samples` are set to + True inside the `train_kwargs`. train_kwargs : dict, optional Additional keyword arguments for ``train`` method of ``sbi.inference.NeuralInference`` object. Returns ------- - ``sbi.inference.NeuralInference`` - trained inference object. + sbi.inference.NeuralInference + Trained inference object. """ inference = inference.append_simulations(theta, x, *args) - # inference = inference.append_simulations(theta, x) _ = inference.train(**train_kwargs) return inference def build_posterior(self, inference, **posterior_kwargs): - """Return instantiated inference object. + """Return inference and neural posterior objects. Parameters ---------- @@ -626,9 +638,9 @@ def build_posterior(self, inference, **posterior_kwargs): posterior = inference.build_posterior(**posterior_kwargs) return (inference, posterior) - def infere_step(self, proposal, inference, - n_samples=None, theta=None, x=None, - train_kwargs={}, posterior_kwargs={}, *args): + def infer_step(self, proposal, inference, + n_samples=None, theta=None, x=None, + train_kwargs={}, posterior_kwargs={}, *args): """Return the trained neural density estimator. Parameter @@ -685,10 +697,10 @@ def infere_step(self, proposal, inference, self.posterior = posterior return posterior - def infere(self, n_samples=None, theta=None, x=None, n_rounds=1, - inference_method='SNPE', density_estimator_model='maf', - inference_kwargs={}, train_kwargs={}, posterior_kwargs={}, - **params): + def infer(self, n_samples=None, theta=None, x=None, n_rounds=1, + inference_method='SNPE', density_estimator_model='maf', + inference_kwargs={}, train_kwargs={}, posterior_kwargs={}, + **params): """Return the trained posterior. If ``theta`` and ``x`` are not provided, ``n_samples`` has to @@ -708,28 +720,33 @@ def infere(self, n_samples=None, theta=None, x=None, n_rounds=1, performed. Otherwise, if ``n_rounds`` is integer larger than 1, multi-round inference will be performed. This is only valid if posterior has not been defined manually. + Otherwise, if this method is called after posterior has + already been built, multi-round inference is performed. inference_method : str, optional Inference method. Either of SNPE, SNLE or SNRE. density_estimator_model : str, optional The type of density estimator to be created. Either ``mdn``, ``made``, ``maf`` or ``nsf``. inference_kwargs : dict, optional - Additional keyword arguments for - ``sbi.utils.get_nn_models.posterior_nn`` method. + Additional keyword arguments for the inferencer method + definition. train_kwargs : dict, optional Additional keyword arguments for training the posterior estimator. posterior_kwargs : dict, optional - Dictionary of arguments for `.build_posterior` method. + Additional keyword arguments for builing the posterior. params : dict - Bounds for each parameter. + Bounds for each parameter. Keys should correspond to names + of parameters as defined in the model equaions, values + are lists with lower and upper bounds with quantities of + respective parameter. Returns ------- sbi.inference.NeuralPosterior - Trained posterior. + Approximated posterior distribution over parameters. """ - if self.posterior is None: # `.infere_step` has not been called + if self.posterior is None: # handle the number of rounds if not isinstance(n_rounds, int): raise ValueError('`n_rounds` has to be a positive integer.') @@ -738,7 +755,7 @@ def infere(self, n_samples=None, theta=None, x=None, n_rounds=1, try: inference_method = str.upper(inference_method) except ValueError as e: - print(e, '\nInvalid inference method.') + print(e, '\nInference method should be defined as string.') if inference_method not in ['SNPE', 'SNLE', 'SNRE']: raise ValueError(f'Inference method {inference_method} is not' ' supported.') @@ -768,12 +785,15 @@ def infere(self, n_samples=None, theta=None, x=None, n_rounds=1, prior, **inference_kwargs) - # additional args for `.train` method are needed only for SNPE + # args for SNPE in `.train` + # args for SNRE and SNLE are not supported here, if needed the user + # could provide them by using more flexible inferface via + # `.infer_step` method if inference_method == 'SNPE': args = [prior] else: args = [] - else: # `.infere_step` has been called manually + else: # `.infer_step` has been called manually x_o = torch.tensor(self.x_o, dtype=torch.float32) prior = self.posterior.set_default_x(x_o) if self.posterior._method_family == 'snpe': @@ -781,7 +801,7 @@ def infere(self, n_samples=None, theta=None, x=None, n_rounds=1, else: args = [] - # allocate empty list of posterior + # allocate empty list of posteriors posteriors = [] # set a proposal @@ -792,9 +812,9 @@ def infere(self, n_samples=None, theta=None, x=None, n_rounds=1, print(f'Round {round + 1}/{n_rounds}.') # inference step - posterior = self.infere_step(proposal, self.inference, - n_samples, self.theta, self.x, - train_kwargs, posterior_kwargs, *args) + posterior = self.infer_step(proposal, self.inference, + n_samples, self.theta, self.x, + train_kwargs, posterior_kwargs, *args) # append the current posterior to the list of posteriors posteriors.append(posterior) @@ -811,7 +831,7 @@ def save_posterior(self, f): Parameters ---------- - posterior : sbi.inference.posteriors.DirectPosterior, optional + posterior : sbi.inference.NeuralPosterior, optional Posterior distribution. f : str or os.PathLike Path to file either as string or ``os.PathLike`` object @@ -850,11 +870,11 @@ def sample(self, shape, posterior=None, **kwargs): ---------- shape : tuple Desired shape of samples that are drawn from posterior. - posterior : sbi.inference.posteriors.DirectPosterior, optional + posterior : sbi.inference.NeuralPosterior, optional Posterior distribution. kwargs : dict, optional - Additional keyword arguments for ``sample`` method in - ``sbi.inference.posteriors.DirectPosterior`` class + Additional keyword arguments for ``sample`` method of + ``sbi.inference.NeuralPosterior`` object. Returns ------- numpy.ndarray @@ -866,8 +886,7 @@ def sample(self, shape, posterior=None, **kwargs): p = self.posterior else: raise ValueError('Need to provide posterior argument if no' - ' posterior has been calculated by the `infere`' - ' method.') + ' posterior has computed built yet.') x_o = torch.tensor(self.x_o, dtype=torch.float32) samples = p.sample(shape, x=x_o, **kwargs) self.samples = samples @@ -1139,7 +1158,7 @@ def generate_traces(self, posterior=None, output_var=None, param_init=None, Parameters ---------- - posterior : sbi.inference.posteriors.DirectPosterior, optional + posterior : sbi.inference.NeuralPosterior, optional Posterior distribution. output_var: str or sequence of str Name of the output variable to be monitored, it can also be From 040407609cd408e03cac261b139eac5f06430522 Mon Sep 17 00:00:00 2001 From: antelk Date: Fri, 6 Aug 2021 17:52:26 +0200 Subject: [PATCH 055/121] adjust to changes in inferencer class --- examples/IF_sbi.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/examples/IF_sbi.py b/examples/IF_sbi.py index bbb4e5e..a6284f7 100644 --- a/examples/IF_sbi.py +++ b/examples/IF_sbi.py @@ -1,6 +1,5 @@ from brian2 import * from brian2modelfitting import * -from scipy.signal import find_peaks # Generate input and output data traces @@ -23,7 +22,7 @@ threshold='v > -50 * mV', reset='v = -70 * mV', method='exponential_euler') -neurons.v = -70 * mV +neurons.v = -70*mV neurons.set_states({'gl': 30*nS, 'C': 1*nF}) monitor = StateMonitor(neurons, 'v', record=True) @@ -49,10 +48,9 @@ reset='v = -70 * mV', param_init={'v': -70 * mV}) -inferencer.infere(n_samples=10000, - inference_method='SNPE', - gl=[10*nS, 100*nS], - C=[0.1*nF, 10*nF]) +inferencer.infer(n_samples=10_000, + gl=[10*nS, 100*nS], + C=[0.1*nF, 10*nF]) inferencer.sample((10000, )) inferencer.pairplot(labels={'gl': r'$\overline{g}_{l}$', From 6de7ada2ab55d3865271a4ab57c9429e01c83cea Mon Sep 17 00:00:00 2001 From: antelk Date: Fri, 6 Aug 2021 17:53:03 +0200 Subject: [PATCH 056/121] rename file and adjust due to changes in inferencer class --- .../{hh_sbi.py => hh_sbi_simple_interface.py} | 63 ++++++++++++------- 1 file changed, 40 insertions(+), 23 deletions(-) rename examples/{hh_sbi.py => hh_sbi_simple_interface.py} (56%) diff --git a/examples/hh_sbi.py b/examples/hh_sbi_simple_interface.py similarity index 56% rename from examples/hh_sbi.py rename to examples/hh_sbi_simple_interface.py index 47f718e..4bb4b62 100644 --- a/examples/hh_sbi.py +++ b/examples/hh_sbi_simple_interface.py @@ -7,11 +7,11 @@ df_inp_traces = pd.read_csv('input_traces_hh.csv') df_out_traces = pd.read_csv('output_traces_hh.csv') inp_traces = df_inp_traces.to_numpy() -inp_traces = inp_traces[:3, 1:] +inp_traces = inp_traces[[0, 1, 3], 1:] out_traces = df_out_traces.to_numpy() -out_traces = out_traces[:3, 1:] +out_traces = out_traces[[0, 1, 3], 1:] -# Model and its parameters +# Define model and its parameters area = 20_000*um**2 El = -65*mV EK = -90*mV @@ -39,36 +39,53 @@ inferencer = Inferencer(dt=dt, model=eqs, input={'I': inp_traces*amp}, output={'v': out_traces*mV}, - features=[lambda x: x[(t > 5) & (t < 10)].mean(), - lambda x: x[(t > 5) & (t < 10)].std(), - lambda x: x.max()], + features={'v': [lambda x: x[(t > 5) & (t < 10)].mean(), + lambda x: x[(t > 5) & (t < 10)].std(), + lambda x: x.max()]}, method='exponential_euler', threshold='m > 0.5', refractory='m > 0.5', param_init={'v': 'VT'}) # Generate prior and train the neural density estimator -inferencer.infere(n_samples=10000, - n_rounds=1, - gl=[1e-09*siemens, 1e-07*siemens], - g_na=[2e-06*siemens, 2e-04*siemens], - g_kd=[6e-07*siemens, 6e-05*siemens], - Cm=[0.1*uF*cm**-2*area, 2*uF*cm**-2*area]) +inferencer.infer(n_samples=10_000, + n_rounds=1, + gl=[1e-09*siemens, 1e-07*siemens], + g_na=[2e-06*siemens, 2e-04*siemens], + g_kd=[6e-07*siemens, 6e-05*siemens], + Cm=[0.1*uF*cm**-2*area, 2*uF*cm**-2*area]) # Draw samples from posterior -inferencer.sample((10000, )) +inferencer.sample((10_000, )) -# Create pairplot from samples -inferencer.pairplot(limits={'gl': [1e-09*siemens, 1e-07*siemens], - 'g_na': [2e-06*siemens, 2e-04*siemens], - 'g_kd': [6e-07*siemens, 6e-05*siemens], - 'Cm': [0.1*uF*cm**-2*area, 2*uF*cm**-2*area]}, - labels={'gl': r'$\overline{g}_{l}$', - 'g_na': r'$\overline{g}_{Na}$', - 'g_kd': r'$\overline{g}_{K}$', - 'Cm': r'$\overline{C}_{m}$'}) +# Visualize pairplot and conditional pairplot +limits = {'gl': [1e-09*siemens, 1e-07*siemens], + 'g_na': [2e-06*siemens, 2e-04*siemens], + 'g_kd': [6e-07*siemens, 6e-05*siemens], + 'Cm': [0.1*uF*cm**-2*area, 2*uF*cm**-2*area]} +labels = {'gl': r'$\overline{g}_\mathrm{l}$', + 'g_na': r'$\overline{g}_\mathrm{Na}$', + 'g_kd': r'$\overline{g}_\mathrm{K}$', + 'Cm': r'$\overline{C}_{m}$'} +inferencer.pairplot(limits=limits, + ticks=limits, + labels=labels, + figsize=(6, 6)) +condition = inferencer.sample((1, )) +inferencer.conditional_pairplot(condition=condition, + limits=limits, + labels=labels, + ticks=limits, + figsize=(6, 6)) -# Generate traces by using a single sample from the trained posterior +# Construct and visualize conditional coefficient matrix +cond_coeff_mat = inferencer.conditional_corrcoeff(condition=condition, + limits=limits) +fig, ax = subplots(1,1, figsize=(6, 6)) +im = imshow(cond_coeff_mat, clim=[-1, 1]) +_ = fig.colorbar(im) + +# Generate and visualize traces by sampling posterior inf_traces = inferencer.generate_traces() # Visualize traces From a4be2b1d72f0b6125993b1b2b43bdab9c82206a0 Mon Sep 17 00:00:00 2001 From: antelk Date: Fri, 6 Aug 2021 17:54:19 +0200 Subject: [PATCH 057/121] rename and adjust to new changes in inferencer class --- ..._sim_sbi.py => hh_sbi_synthetic_traces.py} | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) rename examples/{hh_sim_sbi.py => hh_sbi_synthetic_traces.py} (89%) diff --git a/examples/hh_sim_sbi.py b/examples/hh_sbi_synthetic_traces.py similarity index 89% rename from examples/hh_sim_sbi.py rename to examples/hh_sbi_synthetic_traces.py index 64dea1f..94116b5 100644 --- a/examples/hh_sim_sbi.py +++ b/examples/hh_sbi_synthetic_traces.py @@ -51,8 +51,8 @@ dm/dt = alpham*(1-m) - betam*m : 1 dn/dt = alphan*(1-n) - betan*n : 1 dh/dt = alphah*(1-h) - betah*h : 1 - alpham = (-0.32/mV) * (Vm - VT - 13.*mV) / (exp((-(Vm - VT - 13.*mV))/(4.*mV)) - 1)/ms : Hz - betam = (0.28/mV) * (Vm - VT - 40.*mV) / (exp((Vm - VT - 40.*mV)/(5.*mV)) - 1)/ms : Hz + alpham = (-0.32/mV) * (Vm - VT - 13.*mV) / (exp((-(Vm - VT - 13.*mV)) / (4.*mV)) - 1)/ms : Hz + betam = (0.28/mV) * (Vm - VT - 40.*mV) / (exp((Vm - VT - 40.*mV) / (5.*mV)) - 1)/ms : Hz alphah = 0.128 * exp(-(Vm - VT - 17.*mV) / (18.*mV))/ms : Hz betah = 4/(1 + exp((-(Vm - VT - 40.*mV)) / (5.*mV)))/ms : Hz alphan = (-0.032/mV) * (Vm - VT - 15.*mV) / (exp((-(Vm - VT - 15.*mV)) / (5.*mV)) - 1)/ms : Hz @@ -71,11 +71,15 @@ 'm': '1/(1 + betam/alpham)', 'h': '1/(1 + betah/alphah)', 'n': '1/(1 + betan/alphan)'}) -inferencer.infere(n_samples=10_000, - inference_method='SNPE', - density_estimator_model='mdn', - gNa=[.5*uS, 80.*uS], - gK=[1e-4*uS, 15.*uS]) + +# Amortized inference +inferencer.infer(n_samples=10_000, + inference_method='SNPE', + density_estimator_model='mdn', + gNa=[.5*uS, 80.*uS], + gK=[1e-4*uS, 15.*uS]) + +# Sample from posterior inferencer.sample((10_000, )) # Visualize estimated posterior distribution @@ -83,8 +87,8 @@ 'gK': [1e-4*uS, 15.*uS]}, ticks={'gNa': [.5*uS, 80.*uS], 'gK': [1e-4*uS, 15.*uS]}, - labels={'gNa': r'$\overline{g}_{Na}$', - 'gK': r'$\overline{g}_{K}$'}, + labels={'gNa': r'$\overline{g}_\mathrm{Na}$', + 'gK': r'$\overline{g}_\mathrm{K}$'}, points={'gNa': 32*uS, 'gK': 1*uS}, points_offdiag={'markersize': 6}, @@ -103,5 +107,4 @@ axs[1].plot(t, I_inj.ravel()/nA, 'k-', label='stimulus') axs[1].set(xlabel='t, ms', ylabel='I, nA') axs[1].legend() - show() From 291edbdbe5c8aca1d8d9eb1091d76347a1d55441 Mon Sep 17 00:00:00 2001 From: antelk Date: Fri, 6 Aug 2021 17:54:59 +0200 Subject: [PATCH 058/121] fix docstrings --- brian2modelfitting/inferencer.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py index e0185ed..65e9a37 100644 --- a/brian2modelfitting/inferencer.py +++ b/brian2modelfitting/inferencer.py @@ -726,7 +726,8 @@ def infer(self, n_samples=None, theta=None, x=None, n_rounds=1, Inference method. Either of SNPE, SNLE or SNRE. density_estimator_model : str, optional The type of density estimator to be created. Either - ``mdn``, ``made``, ``maf`` or ``nsf``. + ``mdn``, ``made``, ``maf``, ``nsf`` for SNPE and SNLE, or + ``linear``, ``mlp``, ``resnet`` for SNRE. inference_kwargs : dict, optional Additional keyword arguments for the inferencer method definition. From a00c63f5b9d27c7d65443b952c76bb4f98a6c13c Mon Sep 17 00:00:00 2001 From: antelk Date: Fri, 6 Aug 2021 21:27:48 +0200 Subject: [PATCH 059/121] rename file and adjust to changes in backend --- ...vanced.py => hh_sbi_flexible_interface.py} | 71 +++++++------------ 1 file changed, 27 insertions(+), 44 deletions(-) rename examples/{hh_sbi_advanced.py => hh_sbi_flexible_interface.py} (65%) diff --git a/examples/hh_sbi_advanced.py b/examples/hh_sbi_flexible_interface.py similarity index 65% rename from examples/hh_sbi_advanced.py rename to examples/hh_sbi_flexible_interface.py index 67bba5e..20cd339 100644 --- a/examples/hh_sbi_advanced.py +++ b/examples/hh_sbi_flexible_interface.py @@ -3,17 +3,15 @@ from brian2 import * from brian2modelfitting import * import pandas as pd -import numpy as np -from scipy.signal import find_peaks # Load input and output data traces df_inp_traces = pd.read_csv('input_traces_hh.csv') df_out_traces = pd.read_csv('output_traces_hh.csv') inp_traces = df_inp_traces.to_numpy() -inp_traces = inp_traces[:2, 1:] +inp_traces = inp_traces[[0, 1, 3], 1:] out_traces = df_out_traces.to_numpy() -out_traces = out_traces[:2, 1:] +out_traces = out_traces[[0, 1, 3], 1:] # Model and its parameters area = 20_000*um**2 @@ -39,31 +37,22 @@ # Time domain t = arange(0, out_traces.shape[1]*dt/ms, dt/ms) - -def n_peaks(x): - n_p = [] - for _x in x.transpose(): - p_i = find_peaks(_x, height=0)[0] - n_p.append(p_i.size - sum(np.diff(t[p_i]) < 4)) - return n_p - - # Step-by-step inference # Start with the regular instatiation of the class inferencer = Inferencer(dt=dt, model=eqs, input={'I': inp_traces*amp}, output={'v': out_traces*mV}, - features=[n_peaks, - lambda x: x[(t > 5) & (t < 10), :].mean(axis=0), - lambda x: x[(t > 5) & (t < 10), :].std(axis=0), - lambda x: x.ptp(axis=0)], + features={'v': [lambda x: x.mean(), + lambda x: x[(t > 5) & (t < 10)].mean(), + lambda x: x[(t > 5) & (t < 10)].std(), + lambda x: x.ptp()]}, method='exponential_euler', threshold='m > 0.5', refractory='m > 0.5', param_init={'v': 'VT'}) # Data generation -# Initializing of the prior +# Initializing the prior prior = inferencer.init_prior(gl=[1e-09*siemens, 1e-07*siemens], g_na=[2e-06*siemens, 2e-04*siemens], g_kd=[6e-07*siemens, 6e-05*siemens], @@ -74,47 +63,41 @@ def n_peaks(x): theta, x = inferencer.load_summary_statistics(path_to_data) else: # Generate training data - theta = inferencer.generate_training_data(n_samples=1000, + theta = inferencer.generate_training_data(n_samples=10_000, prior=prior) # Extract summary stats - x = inferencer.extract_summary_statistics(theta=theta, level=0) + x = inferencer.extract_summary_statistics(theta) # Save the data for later use inferencer.save_summary_statistics(path_to_data, theta, x) # Amortized inference # Training the neural density estimator inference = inferencer.init_inference(inference_method='SNPE', - density_estimator_model='maf', + density_estimator_model='mdn', prior=prior, hidden_features=50, num_components=10) # First round of inference where no observation data is set to posterior -posterior = inferencer.infere_step(proposal=prior, - inference=inference, - theta=theta, x=x, - train_kwargs={'num_atoms': 10, - 'learning_rate': 0.0005, - 'show_train_summary': True}) +posterior_amortized = inferencer.infer_step(proposal=prior, + inference=inference, + theta=theta, x=x, + train_kwargs={'num_atoms': 10}) # Storing the trained posterior without a default observation path_to_posterior = __file__[:-3] + '_posterior.pth' inferencer.save_posterior(path_to_posterior) -# Loading the trained posterior directly to Inferencer class -posterior_loaded = inferencer.load_posterior(path_to_posterior) # Sampling from the posterior given observations, ... -inferencer.sample((10000, ), posterior=posterior_loaded) +inferencer.sample((10_000, )) # ...visualize the samples, ... -inferencer.pairplot(labels=[r'$\overline{g}_{l}$', - r'$\overline{g}_{Na}$', - r'$\overline{g}_{K}$', - r'$\overline{C}_{m}$']) -# ...and optionally, continue the multiround inference via ``infere`` method -posterior_multi_round = inferencer.infere(n_rounds=2) -inferencer.sample((10000, )) -inferencer.pairplot(labels=[r'$\overline{g}_{l}$', - r'$\overline{g}_{Na}$', - r'$\overline{g}_{K}$', - r'$\overline{C}_{m}$']) +labels = {'gl': r'$\overline{g}_\mathrm{l}$', + 'g_na': r'$\overline{g}_\mathrm{Na}$', + 'g_kd': r'$\overline{g}_\mathrm{K}$', + 'Cm': r'$\overline{C}_{m}$'} +inferencer.pairplot(labels=labels) +# ...and optionally, continue the multiround inference using ``infer`` method +posterior_multiround = inferencer.infer(n_rounds=2) +inferencer.sample((10_000, )) +inferencer.pairplot(labels=labels) # Generate traces from a single sample of parameters inf_traces = inferencer.generate_traces() @@ -126,13 +109,13 @@ def n_peaks(x): axs[0, idx].plot(t, out_traces[idx, :].T, label='measurements') axs[0, idx].plot(t, inf_traces[idx, :].T/mV, label='fits') axs[1, idx].plot(t, inp_traces[idx, :].T/nA, 'k-', label='stimulus') - axs[1, idx].set_xlabel('t, ms') + axs[1, idx].set_xlabel('$t$, ms') if idx == 0: - axs[0, idx].set_ylabel('$v$, mV') + axs[0, idx].set_ylabel('$V$, mV') axs[1, idx].set_ylabel('$I$, nA') handles, labels = [(h + l) for h, l in zip(axs[0, idx].get_legend_handles_labels(), axs[1, idx].get_legend_handles_labels())] fig.legend(handles, labels) tight_layout() -show() \ No newline at end of file +show() From 7cd1c0a9c8b94752886a32bb6a00edac43b8ab09 Mon Sep 17 00:00:00 2001 From: antelk Date: Fri, 6 Aug 2021 21:28:23 +0200 Subject: [PATCH 060/121] small updates in visualization --- examples/hh_sbi_simple_interface.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/hh_sbi_simple_interface.py b/examples/hh_sbi_simple_interface.py index 4bb4b62..42b2a5c 100644 --- a/examples/hh_sbi_simple_interface.py +++ b/examples/hh_sbi_simple_interface.py @@ -81,7 +81,7 @@ # Construct and visualize conditional coefficient matrix cond_coeff_mat = inferencer.conditional_corrcoeff(condition=condition, limits=limits) -fig, ax = subplots(1,1, figsize=(6, 6)) +fig, ax = subplots(1, 1, figsize=(6, 6)) im = imshow(cond_coeff_mat, clim=[-1, 1]) _ = fig.colorbar(im) @@ -97,7 +97,7 @@ axs[0, idx].plot(t, out_traces[idx, :], lw=3, label='measurements') axs[0, idx].plot(t, inf_traces[idx, :]/mV, '--', lw=3,label='fits') axs[1, idx].plot(t, inp_traces[idx, :]/nA, 'k-', label='stimulus') - axs[1, idx].set_xlabel('t, ms') + axs[1, idx].set_xlabel('$t$, ms') if idx == 0: axs[0, idx].set_ylabel('$v$, mV') axs[1, idx].set_ylabel('$I$, nA') From a9d7047190c636b25f22ca5e73f4f7fceacbafee Mon Sep 17 00:00:00 2001 From: antelk Date: Fri, 6 Aug 2021 21:28:50 +0200 Subject: [PATCH 061/121] adjust level values for simulator --- brian2modelfitting/inferencer.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py index 65e9a37..77ae541 100644 --- a/brian2modelfitting/inferencer.py +++ b/brian2modelfitting/inferencer.py @@ -425,7 +425,7 @@ def generate_training_data(self, n_samples, prior): theta = np.atleast_2d(theta.numpy()) return theta - def extract_summary_statistics(self, theta, level=1): + def extract_summary_statistics(self, theta, level=0): """Return summary statistics for training the neural density estimator. @@ -777,7 +777,7 @@ def infer(self, n_samples=None, theta=None, x=None, n_rounds=1, if n_samples is None: raise ValueError('Either provide `x` or `n_samples`.') else: - x = self.extract_summary_statistics(theta) + x = self.extract_summary_statistics(theta, level=1) self.x = x # initialize inference object From c3e6c6fac2a012faf38e40066ea6bf001ac65a8a Mon Sep 17 00:00:00 2001 From: antelk Date: Sat, 7 Aug 2021 11:54:26 +0200 Subject: [PATCH 062/121] rerun --- examples/hh_sbi_flexible_interface.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/hh_sbi_flexible_interface.py b/examples/hh_sbi_flexible_interface.py index 20cd339..55dec84 100644 --- a/examples/hh_sbi_flexible_interface.py +++ b/examples/hh_sbi_flexible_interface.py @@ -63,12 +63,12 @@ theta, x = inferencer.load_summary_statistics(path_to_data) else: # Generate training data - theta = inferencer.generate_training_data(n_samples=10_000, + theta = inferencer.generate_training_data(n_samples=1000, prior=prior) # Extract summary stats x = inferencer.extract_summary_statistics(theta) # Save the data for later use - inferencer.save_summary_statistics(path_to_data, theta, x) + #inferencer.save_summary_statistics(path_to_data, theta, x) # Amortized inference # Training the neural density estimator From 9f9e29b971078e102abf8da1f66ffae0f549cb33 Mon Sep 17 00:00:00 2001 From: antelk Date: Sat, 7 Aug 2021 11:55:15 +0200 Subject: [PATCH 063/121] fix handling args for multiround inference with snpe --- brian2modelfitting/inferencer.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py index 77ae541..e552721 100644 --- a/brian2modelfitting/inferencer.py +++ b/brian2modelfitting/inferencer.py @@ -592,7 +592,7 @@ def train(self, inference, theta, x, *args, **train_kwargs): Sampled prior. x : torch.tensor Summary statistics. - args : list, optional + args : tuple, optional Contains a uniformly distributed sbi.utils.BoxUniform proposal. Used only for SNPE, for SNLE and SNRE, ``proposal`` should not be passed to ``append_simulations`` @@ -791,16 +791,16 @@ def infer(self, n_samples=None, theta=None, x=None, n_rounds=1, # could provide them by using more flexible inferface via # `.infer_step` method if inference_method == 'SNPE': - args = [prior] + args = [prior, ] else: - args = [] + args = [None, ] else: # `.infer_step` has been called manually x_o = torch.tensor(self.x_o, dtype=torch.float32) prior = self.posterior.set_default_x(x_o) if self.posterior._method_family == 'snpe': - args = [prior] + args = [prior, ] else: - args = [] + args = [None, ] # allocate empty list of posteriors posteriors = [] From 3b6a82a55f6608c84929e94befb9b5d97892bc63 Mon Sep 17 00:00:00 2001 From: antelk Date: Mon, 9 Aug 2021 11:58:02 +0200 Subject: [PATCH 064/121] add restart parameter that enables amortized inference in case of a repeated function call --- brian2modelfitting/inferencer.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py index e552721..83c07e6 100644 --- a/brian2modelfitting/inferencer.py +++ b/brian2modelfitting/inferencer.py @@ -700,7 +700,7 @@ def infer_step(self, proposal, inference, def infer(self, n_samples=None, theta=None, x=None, n_rounds=1, inference_method='SNPE', density_estimator_model='maf', inference_kwargs={}, train_kwargs={}, posterior_kwargs={}, - **params): + restart=False, **params): """Return the trained posterior. If ``theta`` and ``x`` are not provided, ``n_samples`` has to @@ -736,6 +736,11 @@ def infer(self, n_samples=None, theta=None, x=None, n_rounds=1, estimator. posterior_kwargs : dict, optional Additional keyword arguments for builing the posterior. + restart : bool, optional + When the method is called for a second time, set to True if + amortized inference should be performed. If False, + multi-round inference with the existing posterior will be + performed. params : dict Bounds for each parameter. Keys should correspond to names of parameters as defined in the model equaions, values @@ -747,6 +752,8 @@ def infer(self, n_samples=None, theta=None, x=None, n_rounds=1, sbi.inference.NeuralPosterior Approximated posterior distribution over parameters. """ + if restart: + self.posterior = None if self.posterior is None: # handle the number of rounds if not isinstance(n_rounds, int): From 0465a21b87991b28a619b3cb8d285633efdade6f Mon Sep 17 00:00:00 2001 From: antelk Date: Mon, 9 Aug 2021 15:25:00 +0200 Subject: [PATCH 065/121] use tqdm instead of manually printing each round number --- brian2modelfitting/inferencer.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py index 83c07e6..0b79d29 100644 --- a/brian2modelfitting/inferencer.py +++ b/brian2modelfitting/inferencer.py @@ -24,6 +24,7 @@ import torch from .simulator import RuntimeSimulator, CPPStandaloneSimulator +from .utils import tqdm def configure_simulator(): @@ -816,8 +817,7 @@ def infer(self, n_samples=None, theta=None, x=None, n_rounds=1, proposal = prior # main inference loop - for round in range(n_rounds): - print(f'Round {round + 1}/{n_rounds}.') + for _ in tqdm(range(n_rounds)): # inference step posterior = self.infer_step(proposal, self.inference, @@ -831,6 +831,7 @@ def infer(self, n_samples=None, theta=None, x=None, n_rounds=1, if n_rounds > 1: x_o = torch.tensor(self.x_o, dtype=torch.float32) proposal = posterior.set_default_x(x_o) + self.posterior = posterior return posterior From 92c6703809741d0e8a3015dc0785024410a1609e Mon Sep 17 00:00:00 2001 From: antelk Date: Tue, 10 Aug 2021 14:39:02 +0200 Subject: [PATCH 066/121] fix handling of features for different output variables --- brian2modelfitting/inferencer.py | 40 +++++++++++++++++++------------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py index 0b79d29..59974d8 100644 --- a/brian2modelfitting/inferencer.py +++ b/brian2modelfitting/inferencer.py @@ -277,16 +277,19 @@ def __init__(self, dt, model, input, output, features=None, method=None, self.refractory = refractory # observation the focus is on - for ov, o in zip(self.output_var, self.output): - o = np.array(o) - if features: - obs = [] + obs = [] + if features: + for ov, o in zip(self.output_var, self.output): + o = np.array(o) for _o in o: for feature in features[ov]: obs.append(feature(_o)) - x_o = np.array(obs, dtype=np.float32) - else: - x_o = o.ravel().astype(np.float32) + x_o = np.array(obs, dtype=np.float32) + else: + for o in self.output: + o = np.array(o) + obs.append(o.ravel().astype(np.float32)) + x_o = np.concatenate(obs) self.x_o = x_o self.features = features @@ -461,19 +464,24 @@ def extract_summary_statistics(self, theta, level=0): # extract features for each output variable and each trace obs = simulator.statemonitor.recorded_variables - for ov in self.output_var: - o = obs[ov].get_value() - o = o.T - if self.features: + x = [] + if self.features: + for ov in self.output_var: summary_statistics = [] + o = obs[ov].get_value() # TODO: should be vectorized - for _o in o: + for _o in o.T: for feature in self.features[ov]: summary_statistics.append(feature(_o)) - x = np.array(summary_statistics, dtype=np.float32) - x = x.reshape(self.n_samples, -1) - else: - x = o.reshape(self.n_samples, -1).astype(np.float32) + _x = np.array(summary_statistics, dtype=np.float32) + _x = _x.reshape(self.n_samples, -1) + x.append(_x) + x = np.hstack(x) + else: + for ov in self.output_var: + o = obs[ov].get_value().T + x.append(o.reshape(self.n_samples, -1).astype(np.float32)) + x = np.hstack(x) return x def save_summary_statistics(self, f, theta=None, x=None): From 4e8533abc9393cc7ea65d5a62a7962d43193e8f8 Mon Sep 17 00:00:00 2001 From: antelk Date: Tue, 10 Aug 2021 15:27:04 +0200 Subject: [PATCH 067/121] add tqdm to feature extraction loops --- brian2modelfitting/inferencer.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py index 59974d8..2ac3c10 100644 --- a/brian2modelfitting/inferencer.py +++ b/brian2modelfitting/inferencer.py @@ -466,7 +466,8 @@ def extract_summary_statistics(self, theta, level=0): obs = simulator.statemonitor.recorded_variables x = [] if self.features: - for ov in self.output_var: + for ov in tqdm(self.output_var, desc='Extracting features', + total=len(self.output), leave=True): summary_statistics = [] o = obs[ov].get_value() # TODO: should be vectorized @@ -478,7 +479,8 @@ def extract_summary_statistics(self, theta, level=0): x.append(_x) x = np.hstack(x) else: - for ov in self.output_var: + for ov in tqdm(self.output_var, desc='Aranging output traces', + total=len(self.output)): o = obs[ov].get_value().T x.append(o.reshape(self.n_samples, -1).astype(np.float32)) x = np.hstack(x) @@ -825,7 +827,11 @@ def infer(self, n_samples=None, theta=None, x=None, n_rounds=1, proposal = prior # main inference loop - for _ in tqdm(range(n_rounds)): + if self.posterior or n_rounds > 1: + tqdm_desc = f'{n_rounds}-round focused inference' + else: + tqdm_desc = 'Amortized inference' + for _ in tqdm(range(n_rounds), desc=tqdm_desc): # inference step posterior = self.infer_step(proposal, self.inference, From 385bf88be8294ff66f81c578cae0eb5c84179ccc Mon Sep 17 00:00:00 2001 From: antelk Date: Tue, 10 Aug 2021 18:44:32 +0200 Subject: [PATCH 068/121] add spike support --- brian2modelfitting/inferencer.py | 90 +++++++++++++++++++++++--------- 1 file changed, 66 insertions(+), 24 deletions(-) diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py index 2ac3c10..2a12c15 100644 --- a/brian2modelfitting/inferencer.py +++ b/brian2modelfitting/inferencer.py @@ -9,6 +9,7 @@ from brian2.equations.equations import Equations from brian2.groups.neurongroup import NeuronGroup from brian2.input.timedarray import TimedArray +from brian2.monitors.spikemonitor import SpikeMonitor from brian2.monitors.statemonitor import StateMonitor from brian2.units.fundamentalunits import (DIMENSIONLESS, fail_for_dimension_mismatch, @@ -220,7 +221,7 @@ def __init__(self, dt, model, input, output, features=None, method=None, output_var = list(output.keys()) output = list(output.values()) for o_var in output_var: - if o_var not in model.names: + if o_var != 'spikes' and o_var not in model.names: raise NameError(f'{o_var} is not a model variable') self.output_var = output_var self.output = output @@ -235,11 +236,14 @@ def __init__(self, dt, model, input, output, features=None, method=None, # handle multiple output variables self.output_dim = [] for o_var, out in zip(self.output_var, self.output): - self.output_dim.append(model[o_var].dim) - fail_for_dimension_mismatch(out, self.output_dim[-1], - 'The provided target values must have' - ' the same units as the variable' - f' {o_var}') + if o_var == 'spikes': + self.output_dim.append(DIMENSIONLESS) + else: + self.output_dim.append(model[o_var].dim) + fail_for_dimension_mismatch(out, self.output_dim[-1], + 'The provided target values must' + ' have the same units as the' + f' variable {o_var}') # add input to equations self.model = model @@ -251,11 +255,12 @@ def __init__(self, dt, model, input, output, features=None, method=None, # add output to equations counter = 0 for o_var, o_dim in zip(self.output_var, self.output_dim): - counter += 1 - output_expr = f'output_var_{counter}(t, i % n_traces)' - output_dim = ('1' if o_dim is DIMENSIONLESS else repr(o_dim)) - output_eqs = f'{o_var}_target = {output_expr} : {output_dim}' - self.model += output_eqs + if o_var != 'spikes': + counter += 1 + output_expr = f'output_var_{counter}(t, i % n_traces)' + output_dim = ('1' if o_dim is DIMENSIONLESS else repr(o_dim)) + output_eqs = f'{o_var}_target = {output_expr} : {output_dim}' + self.model += output_eqs # create ``TimedArray`` object for input w.r.t. a given time scale self.input_traces = TimedArray(input.transpose(), dt=self.dt) @@ -281,9 +286,18 @@ def __init__(self, dt, model, input, output, features=None, method=None, if features: for ov, o in zip(self.output_var, self.output): o = np.array(o) - for _o in o: - for feature in features[ov]: - obs.append(feature(_o)) + if ov == 'spikes': + obs.extend(o.ravel()) + else: + for _o in o: + for feature in features[ov]: + obs.append(feature(_o)) + x_o = np.array(obs, dtype=np.float32) + elif features is None and 'spikes' in self.output_var: + for ov, o in zip(self.output_var, self.output): + o = np.array(o) + if ov == 'spikes': + obs.extend(o.ravel()) x_o = np.array(obs, dtype=np.float32) else: for o in self.output: @@ -357,10 +371,11 @@ def setup_simulator(self, network_name, n_neurons, output_var, param_init, 'n_traces': self.n_traces}, level=level+1) counter = 0 - for out in self.output: - counter += 1 - namespace[f'output_var_{counter}'] = TimedArray(out.transpose(), - dt=self.dt) + for o_var, out in zip(self.output_var, self.output): + if o_var != 'spikes': + counter += 1 + namespace[f'output_var_{counter}'] = TimedArray(out.T, + dt=self.dt) # setup neuron group kwds = {} @@ -377,9 +392,18 @@ def setup_simulator(self, network_name, n_neurons, output_var, param_init, namespace=namespace, name='neurons', **kwds) + + # create a network of neurons network = Network(neurons) - network.add(StateMonitor(source=neurons, variables=output_var, - record=True, dt=self.dt, name='statemonitor')) + if isinstance(output_var, str): + output_var = [output_var] + if 'spikes' in output_var: + network.add(SpikeMonitor(neurons, name='spikemonitor')) + record_vars = [v for v in output_var if v != 'spikes'] + if len(record_vars): + network.add(StateMonitor(source=neurons, variables=record_vars, + record=True, dt=self.dt, + name='statemonitor')) # initialize the simulator simulator.initialize(network, param_init, name=network_name) @@ -464,16 +488,34 @@ def extract_summary_statistics(self, theta, level=0): # extract features for each output variable and each trace obs = simulator.statemonitor.recorded_variables + if 'spikes' in self.output_var: + spike_trains = list(simulator.spikemonitor.spike_trains().values()) x = [] if self.features: for ov in tqdm(self.output_var, desc='Extracting features', total=len(self.output), leave=True): summary_statistics = [] - o = obs[ov].get_value() + if ov != 'spikes': + o = obs[ov].get_value() + # TODO: should be vectorized + for idx, _o in enumerate(o.T): + if ov != 'spikes': + for feature in self.features[ov]: + summary_statistics.append(feature(_o)) + else: + summary_statistics.append(spike_trains[idx].shape[0]) + _x = np.array(summary_statistics, dtype=np.float32) + _x = _x.reshape(self.n_samples, -1) + x.append(_x) + x = np.hstack(x) + elif self.features is None and 'spikes' in self.output_var: + for ov in tqdm(self.output_var, desc='Extracting spikes', + total=len(self.output), leave=True): + summary_statistics = [] # TODO: should be vectorized - for _o in o.T: - for feature in self.features[ov]: - summary_statistics.append(feature(_o)) + if ov == 'spikes': + for spike_train in spike_trains: + summary_statistics.append(spike_train.shape[0]) _x = np.array(summary_statistics, dtype=np.float32) _x = _x.reshape(self.n_samples, -1) x.append(_x) From ba913830150c7da3994c3d9b999d5a9db79467dd Mon Sep 17 00:00:00 2001 From: antelk Date: Tue, 10 Aug 2021 21:35:07 +0200 Subject: [PATCH 069/121] enable inferencer to work without statemonitor --- brian2modelfitting/inferencer.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py index 2a12c15..46084c7 100644 --- a/brian2modelfitting/inferencer.py +++ b/brian2modelfitting/inferencer.py @@ -15,6 +15,7 @@ fail_for_dimension_mismatch, get_dimensions, Quantity) +from brian2.utils.logger import get_logger import numpy as np from sbi.utils.get_nn_models import (posterior_nn, likelihood_nn, @@ -28,6 +29,9 @@ from .utils import tqdm +logger = get_logger(__name__) + + def configure_simulator(): """Return the configured simulator, which can be either `.RuntimeSimulator`, object for the use with `.RuntimeDevice`, or @@ -487,7 +491,11 @@ def extract_summary_statistics(self, theta, level=0): name=network_name) # extract features for each output variable and each trace - obs = simulator.statemonitor.recorded_variables + try: + obs = simulator.statemonitor.recorded_variables + except KeyError: + logger.warn('The state monitor object is not defined.', + name_suffix='statemonitor_definition') if 'spikes' in self.output_var: spike_trains = list(simulator.spikemonitor.spike_trains().values()) x = [] From 41b33760f38232074107101a4d9a7c189a5a5b58 Mon Sep 17 00:00:00 2001 From: antelk Date: Thu, 12 Aug 2021 10:36:17 +0200 Subject: [PATCH 070/121] secifiy sbi minimum version --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 98ac0bb..cfea664 100644 --- a/setup.py +++ b/setup.py @@ -27,7 +27,7 @@ provides=['brian2modelfitting'], extras_require={'test': ['pytest'], 'docs': ['sphinx>=1.8'], - 'full': ['efel', 'lmfit', 'sbi'], + 'full': ['efel', 'lmfit', 'sbi>=0.16.0'], }, python_requires='>=3.6', use_2to3=False, From 2bf189c566b3242cc0334bb34f56ae5da048caf4 Mon Sep 17 00:00:00 2001 From: antelk Date: Thu, 12 Aug 2021 11:52:17 +0200 Subject: [PATCH 071/121] simplify feature extraction including spikes --- brian2modelfitting/inferencer.py | 44 ++++++++++---------------------- 1 file changed, 14 insertions(+), 30 deletions(-) diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py index 46084c7..4eeb61d 100644 --- a/brian2modelfitting/inferencer.py +++ b/brian2modelfitting/inferencer.py @@ -16,6 +16,7 @@ get_dimensions, Quantity) from brian2.utils.logger import get_logger +from brian2modelfitting.fitter import get_spikes import numpy as np from sbi.utils.get_nn_models import (posterior_nn, likelihood_nn, @@ -289,19 +290,9 @@ def __init__(self, dt, model, input, output, features=None, method=None, obs = [] if features: for ov, o in zip(self.output_var, self.output): - o = np.array(o) - if ov == 'spikes': - obs.extend(o.ravel()) - else: - for _o in o: - for feature in features[ov]: - obs.append(feature(_o)) - x_o = np.array(obs, dtype=np.float32) - elif features is None and 'spikes' in self.output_var: - for ov, o in zip(self.output_var, self.output): - o = np.array(o) - if ov == 'spikes': - obs.extend(o.ravel()) + for _o in o: + for feature in features[ov]: + obs.append(feature(_o)) x_o = np.array(obs, dtype=np.float32) else: for o in self.output: @@ -504,26 +495,15 @@ def extract_summary_statistics(self, theta, level=0): total=len(self.output), leave=True): summary_statistics = [] if ov != 'spikes': - o = obs[ov].get_value() + o = obs[ov].get_value().T # TODO: should be vectorized - for idx, _o in enumerate(o.T): + for i in range(self.n_neurons): if ov != 'spikes': for feature in self.features[ov]: - summary_statistics.append(feature(_o)) + summary_statistics.append(feature(o[i, :])) else: - summary_statistics.append(spike_trains[idx].shape[0]) - _x = np.array(summary_statistics, dtype=np.float32) - _x = _x.reshape(self.n_samples, -1) - x.append(_x) - x = np.hstack(x) - elif self.features is None and 'spikes' in self.output_var: - for ov in tqdm(self.output_var, desc='Extracting spikes', - total=len(self.output), leave=True): - summary_statistics = [] - # TODO: should be vectorized - if ov == 'spikes': - for spike_train in spike_trains: - summary_statistics.append(spike_train.shape[0]) + for feature in self.features[ov]: + summary_statistics.append(feature(spike_trains[i])) _x = np.array(summary_statistics, dtype=np.float32) _x = _x.reshape(self.n_samples, -1) x.append(_x) @@ -1290,7 +1270,11 @@ def generate_traces(self, posterior=None, output_var=None, param_init=None, # create dictionary of traces for multiple observed output variables if len(output_var) > 1: for ov in output_var: - trace = getattr(simulator.statemonitor, ov)[:] + if ov == 'spikes': + trace = get_spikes(simulator.spikemonitor, 1, + self.n_traces)[0] + else: + trace = getattr(simulator.statemonitor, ov)[:] traces = {ov: trace} else: traces = getattr(simulator.statemonitor, output_var[0])[:] From b6432268e204e532c351af78f205930550f488a6 Mon Sep 17 00:00:00 2001 From: antelk Date: Thu, 12 Aug 2021 14:28:37 +0200 Subject: [PATCH 072/121] add key error handling for the state monitor object in generate_traces method --- brian2modelfitting/inferencer.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py index 4eeb61d..89d6f95 100644 --- a/brian2modelfitting/inferencer.py +++ b/brian2modelfitting/inferencer.py @@ -1274,8 +1274,12 @@ def generate_traces(self, posterior=None, output_var=None, param_init=None, trace = get_spikes(simulator.spikemonitor, 1, self.n_traces)[0] else: - trace = getattr(simulator.statemonitor, ov)[:] - traces = {ov: trace} + try: + trace = getattr(simulator.statemonitor, ov)[:] + traces = {ov: trace} + except KeyError: + logger.warn('No state monitor object found.' + ' Call again with specified `output_var`.') else: traces = getattr(simulator.statemonitor, output_var[0])[:] return traces From 27370ac953d8bb05ba729c5e450e2fb59c1022de Mon Sep 17 00:00:00 2001 From: antelk Date: Thu, 12 Aug 2021 16:07:34 +0200 Subject: [PATCH 073/121] update examples before new PR covering spike support --- examples/IF_sbi.py | 100 ++- examples/hh_sbi_flexible_interface.py | 25 +- examples/hh_sbi_simple_interface.py | 144 +++- examples/hh_sbi_synthetic_traces.py | 37 +- examples/prototyping.ipynb | 921 ++++++++++++++++++++++++++ 5 files changed, 1141 insertions(+), 86 deletions(-) create mode 100644 examples/prototyping.ipynb diff --git a/examples/IF_sbi.py b/examples/IF_sbi.py index a6284f7..99001b0 100644 --- a/examples/IF_sbi.py +++ b/examples/IF_sbi.py @@ -2,32 +2,39 @@ from brian2modelfitting import * -# Generate input and output data traces +# Set parameters dt = 0.1*ms -defaultclock.dt = dt +sim_time = 60*ms +El = -70*mV +VT = -50*mV +DeltaT = 2*mV +ground_truth_params = {'gl': 30*nS, 'C': 1*nF} # parameters to be inferred + +# Set input trace inp_trace = hstack([zeros(int(round(5*ms/dt))), ones(int(round(25*ms/dt))), zeros(int(round(30*ms/dt)))]) * 10*nA I = TimedArray(inp_trace, dt=dt) -El = -70*mV -VT = -50*mV -DeltaT = 2*mV + +# Set model equations eqs = ''' dv/dt = (gl*(El - v) + gl*DeltaT*exp((v - VT) / DeltaT) + I(t)) / C : volt gl : siemens (constant) C : farad (constant) ''' -neurons = NeuronGroup(1, eqs, +# Run a model and create synthetic voltage traces +neurons = NeuronGroup(1, eqs, dt=dt, threshold='v > -50 * mV', reset='v = -70 * mV', method='exponential_euler') neurons.v = -70*mV -neurons.set_states({'gl': 30*nS, - 'C': 1*nF}) -monitor = StateMonitor(neurons, 'v', record=True) -run(60*ms) -out_trace = monitor.v +neurons.set_states(ground_truth_params) +state_monitor = StateMonitor(neurons, 'v', record=True) +spike_monitor = SpikeMonitor(neurons, record=True) +run(sim_time) +out_trace = state_monitor.v # voltage traces in mV +spike_times = array(spike_monitor.t_) # spike events in s # Inference start_scope() @@ -40,27 +47,64 @@ C : farad (constant) ''' +# Instantiate the inferencer object +spike_features_list = [ + lambda x: x.size, # number of spikes + lambda x: 0. if diff(x).size == 0 else mean(diff(x)), # mean ISI +] inferencer = Inferencer(dt=dt, model=eqs_inf, input={'I_syn': inp_trace.reshape(1, -1)}, - output={'v': out_trace}, + output={'spikes': [spike_times]}, + features={'spikes': spike_features_list}, method='exponential_euler', - threshold='v > -50 * mV', - reset='v = -70 * mV', - param_init={'v': -70 * mV}) + threshold='v > -50*mV', + reset='v = -70*mV', + param_init={'v': -70*mV}) + +# Infer parameter posteriors given bounds -inferencer.infer(n_samples=10_000, - gl=[10*nS, 100*nS], - C=[0.1*nF, 10*nF]) +posterior = inferencer.infer(n_samples=3_000, + n_rounds=3, + gl=[10*nS, 100*nS], + C=[0.1*nF, 10*nF]) -inferencer.sample((10000, )) -inferencer.pairplot(labels={'gl': r'$\overline{g}_{l}$', - 'C': r'$C$'}, - points={'gl': 30*nS, - 'C': 1*nF}, - limits={'gl': [10*nS, 100*nS], - 'C': [0.1*nF, 10*nF]}, - ticks={'gl': [10*nS, 100*nS], - 'C': [0.1*nF, 10*nF]}, +# Sample from the posterior +samples = inferencer.sample((3_000, )) + +# Create a pairplot +labels = {'gl': r'$\overline{g}_{l}$', 'C': r'$C$'} +ticks = {'gl': [10*nS, 100*nS], 'C': [0.1*nF, 10*nF]} +inferencer.pairplot(labels=labels, + limits=ticks, + ticks=ticks, + points=ground_truth_params, points_offdiag={'markersize': 9}, - points_colors=['r']) + points_colors=['r'], + figsize=(6, 6)) + +# Visualize the trace by sampling trained posterior +t = arange(0, inp_trace.size*dt/ms, dt/ms) +t_start, t_end = t[where(inp_trace != 0)[0][[0, -1]]] + +# Identify spike events +spike_v = (out_trace.min()/mV, out_trace.max()/mV) +spike_i = [] +for spike_time in spike_times: + spike_i.append(where(isclose(spike_time * 1000, t))[0].item()) + +# Generate traces from a single sample of parameters +inf_trace = inferencer.generate_traces(output_var='v') + +fig, axs = subplots(nrows, 1, sharex=True, + gridspec_kw={'height_ratios': [3, 1]}, figsize=(7, 3)) +axs[0].plot(t, out_trace.T/mV, 'C3-', lw=3, label='recordings') +axs[0].plot(t, inf_trace.T/mV, 'k--', lw=2, label='sampled traces') +axs[0].vlines(t[spike_i], *spike_v, lw=3, color='C0', label='spike', zorder=3) +axs[0].set_ylabel('$V$, mV') +axs[0].legend() +axs[1].plot(t, inp_trace.T/nA, lw=3, c='k', label='stimuli') +axs[1].set_xlabel('$t$, ms') +axs[1].set_ylabel('$I$, nA') +axs[1].legend() +tight_layout() show() diff --git a/examples/hh_sbi_flexible_interface.py b/examples/hh_sbi_flexible_interface.py index 55dec84..f9ff33d 100644 --- a/examples/hh_sbi_flexible_interface.py +++ b/examples/hh_sbi_flexible_interface.py @@ -36,22 +36,23 @@ # Time domain t = arange(0, out_traces.shape[1]*dt/ms, dt/ms) +t_start, t_end = t[where(inp_traces[0, :] != 0)[0][[0, -1]]] # Step-by-step inference # Start with the regular instatiation of the class inferencer = Inferencer(dt=dt, model=eqs, input={'I': inp_traces*amp}, output={'v': out_traces*mV}, - features={'v': [lambda x: x.mean(), - lambda x: x[(t > 5) & (t < 10)].mean(), - lambda x: x[(t > 5) & (t < 10)].std(), - lambda x: x.ptp()]}, + features={'v': [lambda x: mean(x), + lambda x: mean(x[(t > t_start) & (t < t_end)]), + lambda x: std(x[(t > t_start) & (t < t_end)]), + lambda x: ptp(x)]}, method='exponential_euler', threshold='m > 0.5', refractory='m > 0.5', param_init={'v': 'VT'}) -# Data generation +# Training data generation # Initializing the prior prior = inferencer.init_prior(gl=[1e-09*siemens, 1e-07*siemens], g_na=[2e-06*siemens, 2e-04*siemens], @@ -63,12 +64,12 @@ theta, x = inferencer.load_summary_statistics(path_to_data) else: # Generate training data - theta = inferencer.generate_training_data(n_samples=1000, + theta = inferencer.generate_training_data(n_samples=5_000, prior=prior) # Extract summary stats x = inferencer.extract_summary_statistics(theta) # Save the data for later use - #inferencer.save_summary_statistics(path_to_data, theta, x) + inferencer.save_summary_statistics(path_to_data, theta, x) # Amortized inference # Training the neural density estimator @@ -104,11 +105,13 @@ nrows = 2 ncols = out_traces.shape[0] fig, axs = subplots(nrows, ncols, sharex=True, - gridspec_kw={'height_ratios': [3, 1]}, figsize=(15, 4)) + gridspec_kw={'height_ratios': [3, 1]}, + figsize=(ncols * 3, 3)) for idx in range(ncols): - axs[0, idx].plot(t, out_traces[idx, :].T, label='measurements') - axs[0, idx].plot(t, inf_traces[idx, :].T/mV, label='fits') - axs[1, idx].plot(t, inp_traces[idx, :].T/nA, 'k-', label='stimulus') + axs[0, idx].plot(t, out_traces[idx, :].T, 'C3-', lw=3, label='recordings') + axs[0, idx].plot(t, inf_traces[idx, :].T/mV, 'k--', lw=2, + label='sampled traces') + axs[1, idx].plot(t, inp_traces[idx, :].T/nA, lw=3, c='k', label='stimuli') axs[1, idx].set_xlabel('$t$, ms') if idx == 0: axs[0, idx].set_ylabel('$V$, mV') diff --git a/examples/hh_sbi_simple_interface.py b/examples/hh_sbi_simple_interface.py index 42b2a5c..b42295c 100644 --- a/examples/hh_sbi_simple_interface.py +++ b/examples/hh_sbi_simple_interface.py @@ -1,15 +1,16 @@ from brian2 import * from brian2modelfitting import * import pandas as pd +from scipy.stats import kurtosis as kurt # Load input and output data traces df_inp_traces = pd.read_csv('input_traces_hh.csv') df_out_traces = pd.read_csv('output_traces_hh.csv') inp_traces = df_inp_traces.to_numpy() -inp_traces = inp_traces[[0, 1, 3], 1:] +inp_traces = inp_traces[[0, 1], 1:] out_traces = df_out_traces.to_numpy() -out_traces = out_traces[[0, 1, 3], 1:] +out_traces = out_traces[[0, 1], 1:] # Define model and its parameters area = 20_000*um**2 @@ -26,6 +27,7 @@ dn/dt = 0.032*(mV**-1)*(15.*mV-v+VT)/ (exp((15.*mV-v+VT)/(5.*mV))-1.)/ms*(1.-n)-.5*exp((10.*mV-v+VT)/(40.*mV))/ms*n : 1 dh/dt = 0.128*exp((17.*mV-v+VT)/(18.*mV))/ms*(1.-h)-4./(1+exp((40.*mV-v+VT)/(5.*mV)))/ms*h : 1 + g_na : siemens (constant) g_kd : siemens (constant) gl : siemens (constant) @@ -34,42 +36,124 @@ # Time domain t = arange(0, out_traces.shape[1]*dt/ms, dt/ms) +t_start, t_end = t[where(inp_traces[0, :] != 0)[0][[0, -1]]] + +# Visualize the recordings +nrows = 2 +ncols = out_traces.shape[0] +fig, axs = subplots(nrows, ncols, sharex=True, + gridspec_kw={'height_ratios': [3, 1]}, figsize=(9, 3)) +for idx in range(ncols): + axs[0, idx].plot(t, out_traces[idx, :].T, lw=3, c='C3', label='recordings') + axs[1, idx].plot(t, inp_traces[idx, :].T/nA, lw=3, c='k', label='stimulus') + axs[1, idx].set_xlabel('$t$, ms') + if idx == 0: + axs[0, idx].set_ylabel('$V$, mV') + axs[1, idx].set_ylabel('$I$, nA') +handles, labels = [(h + l) for h, l + in zip(axs[0, idx].get_legend_handles_labels(), + axs[1, idx].get_legend_handles_labels())] +fig.legend(handles, labels) +tight_layout() + + +# Obtain spike times manually +def get_spike_times(x): + x = x.copy() + # put everything to -40 mV that is below -40 mV or has negative slope + ind = where(x < -0.04) + x[ind] = -0.04 + ind = where(diff(x) < 0) + x[ind] = -0.04 + + # remaining negative slopes are at spike peaks + ind = where(diff(x) < 0) + spike_times = array(t)[ind] + + # spike times for active stimulus + spike_times_stim = spike_times[ + (spike_times > t_start) & (spike_times < t_end) + ] + + # number of spikes + if spike_times_stim.shape[0] > 0: + spike_times_stim = spike_times_stim[ + append(1, diff(spike_times_stim)) > 0.5 + ] + return spike_times_stim / 1000 # in seconds + + +# store spike times for each trace into the list +spike_times = [get_spike_times(out_trace) for out_trace in out_traces] + +# Visualize the recordings and spikes while stimulus is on +nrows = 2 +ncols = out_traces.shape[0] +fig, axs = subplots(nrows, ncols, sharex=True, + gridspec_kw={'height_ratios': [3, 1]}, figsize=(9, 3)) +for idx in range(ncols): + spike_idx = in1d(t, spike_times[idx] * 1000).nonzero()[0] + spike_v = (out_traces[idx, :].min(), out_traces[idx, :].max()) + axs[0, idx].plot(t, out_traces[idx, :].T, lw=3, c='C3', + label='recordings', zorder=1) + axs[0, idx].vlines(t[spike_idx], *spike_v, lw=3, color='C0', + label='spike event', zorder=2) + axs[1, idx].plot(t, inp_traces[idx, :].T/nA, lw=3, c='k', label='stimulus') + axs[1, idx].set_xlabel('$t$, ms') + if idx == 0: + axs[0, idx].set_ylabel('$V$, mV') + axs[1, idx].set_ylabel('$I$, nA') +handles, labels = [(h + l) for h, l + in zip(axs[0, idx].get_legend_handles_labels(), + axs[1, idx].get_legend_handles_labels())] +fig.legend(handles, labels) +tight_layout() + +# Define features to create a summary statistics representation of traces +v_features = [ + lambda x: max(x[(t > t_start) & (t < t_end)]), # AP max + lambda x: mean(x[(t > t_start) & (t < t_end)]), # AP mean + lambda x: std(x[(t > t_start) & (t < t_end)]), # AP std + lambda x: kurt(x[(t > t_start) & (t < t_end)], fisher=False), # AP kurt + lambda x: mean(x[(t > .25 * t_start) & (t < .75 * t_start)]), # resting +] +s_features = [lambda x: x.size] # numbe of spikes in a spike train # Simulation-based inference object instantiation inferencer = Inferencer(dt=dt, model=eqs, input={'I': inp_traces*amp}, - output={'v': out_traces*mV}, - features={'v': [lambda x: x[(t > 5) & (t < 10)].mean(), - lambda x: x[(t > 5) & (t < 10)].std(), - lambda x: x.max()]}, + output={'v': out_traces*mV, 'spikes': spike_times}, + features={'v': v_features, 'spikes': s_features}, method='exponential_euler', threshold='m > 0.5', refractory='m > 0.5', param_init={'v': 'VT'}) -# Generate prior and train the neural density estimator -inferencer.infer(n_samples=10_000, - n_rounds=1, - gl=[1e-09*siemens, 1e-07*siemens], - g_na=[2e-06*siemens, 2e-04*siemens], - g_kd=[6e-07*siemens, 6e-05*siemens], - Cm=[0.1*uF*cm**-2*area, 2*uF*cm**-2*area]) +# Multi-round inference +posterior = inferencer.infer(n_samples=5_000, + n_rounds=3, + inference_method='SNPE', + density_estimator_model='mdn', + gl=[1e-09*siemens, 1e-07*siemens], + g_na=[2e-06*siemens, 2e-04*siemens], + g_kd=[6e-07*siemens, 6e-05*siemens], + Cm=[0.1*uF*cm**-2*area, 2*uF*cm**-2*area]) # Draw samples from posterior -inferencer.sample((10_000, )) +samples = inferencer.sample((5_000, )) # Visualize pairplot and conditional pairplot -limits = {'gl': [1e-09*siemens, 1e-07*siemens], +limits = {'gl': [1e-9*siemens, 1e-07*siemens], 'g_na': [2e-06*siemens, 2e-04*siemens], 'g_kd': [6e-07*siemens, 6e-05*siemens], 'Cm': [0.1*uF*cm**-2*area, 2*uF*cm**-2*area]} -labels = {'gl': r'$\overline{g}_\mathrm{l}$', - 'g_na': r'$\overline{g}_\mathrm{Na}$', - 'g_kd': r'$\overline{g}_\mathrm{K}$', - 'Cm': r'$\overline{C}_{m}$'} +labels = {'gl': r'$\overline{g}_{l}$', + 'g_na': r'$\overline{g}_{Na}$', + 'g_kd': r'$\overline{g}_{K}$', + 'Cm': r'$C_{m}$'} inferencer.pairplot(limits=limits, - ticks=limits, labels=labels, + ticks=limits, figsize=(6, 6)) condition = inferencer.sample((1, )) inferencer.conditional_pairplot(condition=condition, @@ -81,25 +165,27 @@ # Construct and visualize conditional coefficient matrix cond_coeff_mat = inferencer.conditional_corrcoeff(condition=condition, limits=limits) -fig, ax = subplots(1, 1, figsize=(6, 6)) +fig, ax = subplots(1, 1, figsize=(4, 4)) im = imshow(cond_coeff_mat, clim=[-1, 1]) _ = fig.colorbar(im) -# Generate and visualize traces by sampling posterior -inf_traces = inferencer.generate_traces() +# Generate traces and visualize from a single sample of parameters +inf_traces = inferencer.generate_traces(output_var='v') -# Visualize traces nrows = 2 ncols = out_traces.shape[0] fig, axs = subplots(nrows, ncols, sharex=True, - gridspec_kw={'height_ratios': [3, 1]}, figsize=(15, 4)) + gridspec_kw={'height_ratios': [3, 1]}, figsize=(9, 3)) for idx in range(ncols): - axs[0, idx].plot(t, out_traces[idx, :], lw=3, label='measurements') - axs[0, idx].plot(t, inf_traces[idx, :]/mV, '--', lw=3,label='fits') - axs[1, idx].plot(t, inp_traces[idx, :]/nA, 'k-', label='stimulus') + spike_idx = in1d(t, spike_times[idx]).nonzero()[0] + spike_v = (out_traces[idx, :].min(), out_traces[idx, :].max()) + axs[0, idx].plot(t, out_traces[idx, :].T, 'C3-', lw=3, label='recordings') + axs[0, idx].plot(t, inf_traces[idx, :].T/mV, 'k--', lw=2, + label='sampled traces') + axs[1, idx].plot(t, inp_traces[idx, :].T/nA, lw=3, c='k', label='stimuli') axs[1, idx].set_xlabel('$t$, ms') if idx == 0: - axs[0, idx].set_ylabel('$v$, mV') + axs[0, idx].set_ylabel('$V$, mV') axs[1, idx].set_ylabel('$I$, nA') handles, labels = [(h + l) for h, l in zip(axs[0, idx].get_legend_handles_labels(), diff --git a/examples/hh_sbi_synthetic_traces.py b/examples/hh_sbi_synthetic_traces.py index 94116b5..ee75a44 100644 --- a/examples/hh_sbi_synthetic_traces.py +++ b/examples/hh_sbi_synthetic_traces.py @@ -4,7 +4,6 @@ # Input and output data traces simulation dt = 0.05*ms -defaultclock.dt = dt t_on = 50*ms t_total = 350*ms t_off = t_total - t_on @@ -13,9 +12,9 @@ Eleak = -70*mV VT = -60*mV C = 200*pF -gNa = 32*uS +gNa = 32*uS # 1st "unknown" parameter to infer ENa = 53*mV -gK = 1*uS +gK = 1*uS # 2nd "unknown" parameter to infer EK = -107*mV eqs = ''' dVm/dt = -(gNa*m**3*h*(Vm - ENa) + gK*n**4*(Vm - EK) + gleak*(Vm - Eleak) - I_inj) / C : volt @@ -58,7 +57,7 @@ alphan = (-0.032/mV) * (Vm - VT - 15.*mV) / (exp((-(Vm - VT - 15.*mV)) / (5.*mV)) - 1)/ms : Hz betan = 0.5*exp(-(Vm - VT - 10.*mV) / (40.*mV))/ms : Hz - # The parameters to fit + # parameters to fit gNa : siemens (constant) gK : siemens (constant) ''' @@ -72,7 +71,7 @@ 'h': '1/(1 + betah/alphah)', 'n': '1/(1 + betan/alphan)'}) -# Amortized inference +# Amortized inference with automatic feature extraction by using a default MLP inferencer.infer(n_samples=10_000, inference_method='SNPE', density_estimator_model='mdn', @@ -83,12 +82,13 @@ inferencer.sample((10_000, )) # Visualize estimated posterior distribution -inferencer.pairplot(limits={'gNa': [.5*uS, 80.*uS], - 'gK': [1e-4*uS, 15.*uS]}, - ticks={'gNa': [.5*uS, 80.*uS], - 'gK': [1e-4*uS, 15.*uS]}, - labels={'gNa': r'$\overline{g}_\mathrm{Na}$', - 'gK': r'$\overline{g}_\mathrm{K}$'}, +limits = {'gNa': [.5*uS, 80.*uS], + 'gK': [1e-4*uS, 15.*uS]} +labels= {'gNa': r'$\overline{g}_\mathrm{Na}$', + 'gK': r'$\overline{g}_\mathrm{K}$'} +inferencer.pairplot(limits=limits, + ticks=limits, + labels=labels, points={'gNa': 32*uS, 'gK': 1*uS}, points_offdiag={'markersize': 6}, @@ -97,14 +97,15 @@ # Visualize traces for a single sample from posterior inf_trace = inferencer.generate_traces() + fig, axs = subplots(2, 1, sharex=True, - gridspec_kw={'height_ratios': [3, 1]}, - figsize=(6, 4)) -axs[0].plot(t, out_trace.ravel()/mV, label='simulated recordings') -axs[0].plot(t, inf_trace.ravel()/mV, '--', label='posterior sample') -axs[0].set(ylabel='Vm, mV') + gridspec_kw={'height_ratios': [3, 1]}, figsize=(7, 3)) +axs[0].plot(t, out_trace.ravel()/mV, 'C3-', lw=3, label='simulated recordings') +axs[0].plot(t, inf_trace.ravel()/mV, 'k--', lw=2, label='posterior sample') +axs[0].set(ylabel='$V_m$, mV') axs[0].legend() -axs[1].plot(t, I_inj.ravel()/nA, 'k-', label='stimulus') -axs[1].set(xlabel='t, ms', ylabel='I, nA') +axs[1].plot(t, I_inj.ravel()/nA, 'k-', lw=3, label='stimulus') +axs[1].set(xlabel='$t$, s', ylabel='I, nA') axs[1].legend() +tight_layout() show() diff --git a/examples/prototyping.ipynb b/examples/prototyping.ipynb new file mode 100644 index 0000000..a8fcee3 --- /dev/null +++ b/examples/prototyping.ipynb @@ -0,0 +1,921 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "28e8bc5d-26a6-4ac6-83c4-97b2a816c1c5", + "metadata": {}, + "source": [ + "# Hodgkin-Huxley model: traces+spikes inference from recordings" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "2f3614b7-b6ac-43a3-a0c6-d2b3ab32e929", + "metadata": {}, + "outputs": [], + "source": [ + "# imports\n", + "from brian2 import *\n", + "from brian2modelfitting import Inferencer\n", + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from scipy.stats import kurtosis as kurt" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "9d3fbd95-785a-4e0a-8a37-2feb0d86eb9e", + "metadata": {}, + "outputs": [], + "source": [ + "# pretty figures :3\n", + "%config InlineBackend.figure_format = 'retina'" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "cdc3ea42", + "metadata": {}, + "outputs": [], + "source": [ + "# load few recorded traces\n", + "df_inp_traces = pd.read_csv('input_traces_hh.csv')\n", + "df_out_traces = pd.read_csv('output_traces_hh.csv')\n", + "inp_traces = df_inp_traces.to_numpy()\n", + "inp_traces = inp_traces[[0, 1], 1:]\n", + "out_traces = df_out_traces.to_numpy()\n", + "out_traces = out_traces[[0, 1], 1:]" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "fb22019e-62b0-4bda-bc17-e2b1b7dc4ce3", + "metadata": {}, + "outputs": [], + "source": [ + "# set parameters and define the Hodgkin-Huxley model\n", + "area = 20_000*um**2\n", + "El = -65*mV\n", + "EK = -90*mV\n", + "ENa = 50*mV\n", + "VT = -63*mV\n", + "dt = 0.01*ms\n", + "eqs = '''\n", + " dv/dt = (gl*(El-v) - g_na*(m*m*m)*h*(v-ENa) - g_kd*(n*n*n*n)*(v-EK) + I)/Cm : volt\n", + " dm/dt = 0.32*(mV**-1)*(13.*mV-v+VT)/\n", + " (exp((13.*mV-v+VT)/(4.*mV))-1.)/ms*(1-m)-0.28*(mV**-1)*(v-VT-40.*mV)/\n", + " (exp((v-VT-40.*mV)/(5.*mV))-1.)/ms*m : 1\n", + " dn/dt = 0.032*(mV**-1)*(15.*mV-v+VT)/\n", + " (exp((15.*mV-v+VT)/(5.*mV))-1.)/ms*(1.-n)-.5*exp((10.*mV-v+VT)/(40.*mV))/ms*n : 1\n", + " dh/dt = 0.128*exp((17.*mV-v+VT)/(18.*mV))/ms*(1.-h)-4./(1+exp((40.*mV-v+VT)/(5.*mV)))/ms*h : 1\n", + " g_na : siemens (constant)\n", + " g_kd : siemens (constant)\n", + " gl : siemens (constant)\n", + " Cm : farad (constant)\n", + "'''" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "8a515f25-b94a-4082-97a5-e76fe3887140", + "metadata": {}, + "outputs": [], + "source": [ + "# set up time domain\n", + "t = np.arange(0, inp_traces.shape[1]*dt/ms, dt/ms)\n", + "t_start, t_end = t[np.where(inp_traces[0, :] != 0)[0][[0, -1]]]" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "9f2c4326-a247-49f9-829d-9559c4db1eae", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABNUAAAHJCAYAAACi+g9VAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAABYlAAAWJQFJUiTwAACeCElEQVR4nOzdd3ydZf3/8fd1RvZs0plOWmjLhpYlUChDmTJkU8SFIKCIwA8VUVCGfkFAZIgMWSIIiMiUvWdbVvfebTqy9xnX748ktU3uOznn5Mzk9Xw88kh7Xfe57k8Oofnkc1/DWGsFAAAAAAAAIHKeVAcAAAAAAAAAZBqKagAAAAAAAECUKKoBAAAAAAAAUaKoBgAAAAAAAESJohoAAAAAAAAQJYpqAAAAAAAAQJQoqgEAAAAAAABR8qU6AAAAAAAA0H/MmjUrV9IZko6QtIMkf2ojAnoVkLRM0muSHp8yZUpzJC8y1tqERgUAAAAAAAaGjoLan7xe7yFer3eQx+PJlWRSHRfQCxsOh5tDoVBVKBR6W9IlkRTWmKkGAAAAAADi5Qyv13tIbm7u0GHDhm0oKCho8nq94VQHBfQkFAp5Ghoa8jZs2DCsubn5kFAodIakv/X2OvZUAwAAAAAA8XKE1+sdNGzYsA3FxcUNFNSQCbxeb7i4uLhh6NChlV6vd5Daly73iqIaAAAAAACIlx08Hk9uQUFBU6oDAaJVWFjY2LFkeVwk11NUAwAAAAAA8eKXZJihhkzk8XjCat8DMCui6xMbDgAAAAAAAJD+jInuTA2KagAAAAAAAECUKKoBAAAAAAAAUaKoBgAAAAAAAESJohoAAAAAAACidvvtt5cZY6bcfvvtZdu2V1RU7FZRUbFbquJKFopqAAAAAAAAQJR8qQ4AAAAAAAAA/ccrr7yyKNUxJANFNQAAAAAAAMTNLrvs0prqGJKBohoAAAAAAEio+ZMmT0l1DLGYvGD+rFhet3DhwqxJkybtdvLJJ2/5zW9+s/4Xv/hFxYcfflhYU1Pj+89//rPouOOOq3/66aeLbr/99iFffvllfmNjo3fo0KFtxxxzTM3111+/vry8PNR1zKVLl/p/97vfDXvzzTeLKysrs7Kzs8OjR49uPeqoo2puuumm9dte++677+Zdd911wz/99NOChoYGb3l5eeCwww6rvf7669ePGTMmsO213/rWt8b+61//Kps7d+5XzzzzTMlDDz1UvmrVqpzdd9+98ZNPPlkoSXPmzMm+4oorKt5///2iQCBgJk2a1HzllVdud89tde6ntnbt2q86226//faySy65ZOyf/vSnFePGjWv73e9+N2Lu3Ll5xhhNnTq1/pZbblmz9957t3Qd68svv8y+4oorRn744YeF295748aNvs7xfvKTn2zpvP7jjz/Ove6664bNnj27YNOmTf78/PzQ8OHD2/bff/+Gu+++e012draN5r9lTyiqAQAAAAAAJMCKFSuyDzrooMljx45tOemkk6qam5tNSUlJ6LLLLht+yy23jCguLg4ddthhNYMHDw7OnTs3969//evQ119/vfiTTz6ZP2jQoHDnOO+8807eN7/5zZ1qa2u9U6dObTjmmGOqm5qaPIsWLcq95ZZbRmxbVPvHP/5RfO6554631uqoo46qHj16dNvnn3+e9/e//33wK6+8UvLOO+8smDRpUlvXWC+++OLRn376acH06dNrjzjiiFqv1ytJ+uqrr7KnTZs2qaamxjdt2rTa3XbbrXnZsmXZM2bMGD9t2rS6aN+TF198sfi1114rmTZtWt2MGTM2LVy4MOftt98uPuKII/Lnzp07d/jw4cHOaz/77LOcQw89dFJdXZ330EMPrd1ll12aV6xYkX3OOeeMP+SQQ2q7jv3xxx/nHnLIIZONMfbwww+vHTNmTGtdXZ13+fLl2Y888sjgW2+9dS1FNQAAAAAAgDQ3e/bsgosuumjDHXfcsbaz7bnnniu85ZZbRuy5556Nr7766uJtZ6V1zua64oorKu6///7VktTS0mLOPPPM8bW1td677757+QUXXFC17T2WLl3q7/xzbW2t50c/+tG4UChkXnjhhYVHHXVUQ2ffVVddNeyGG26o+P73vz/m/fffX9w11jlz5uR9+umn87oW3C644ILRNTU1vt/+9rerr7766o2d7Y8++mjJOeecMz7a9+S1114rffrppxedcMIJ9Z1tF110UcVdd9017M477yy77rrrKjvbL7zwwtF1dXXe3//+96uuvPLKTZ3t//znP4tOP/30HbuOfd9995W1traaRx55ZNmMGTNqtu3btGmTt6CgINz1NX3B6Z8AAAAAAAAJUFZWFrzpppvWbdt2++23D5Gke++9d0XXZZ4/+clPtkyaNKn5mWeeGdTZ9vjjjxevW7cu67DDDqvpWlCTpPHjx29dzvnYY4+V1NbWeo855piqbQtqknTNNddsGDFiRNsHH3xQtHjx4qyu4/z4xz/e0LWgtnTpUv8HH3xQVFFR0faLX/xi47Z9M2bMqNlnn30aFKVjjz22atuCWse9N0nSzJkz8zvblixZ4v/oo48KR48e3Xr55Zdv2vb60047re6AAw5wnSWXl5fXrXg2ePDgUOfsu3hhphoAAAAAAEACTJo0qSk3N3e75YafffZZgc/ns4899tigxx57rNtrAoGAqa6u9m3YsME7bNiw0IcfflggSd/4xjd6XWo5e/bsPEmaPn16fdc+v9+v/fbbr/6ZZ54p+/jjj/N23HHH7QpoBxxwQGPX13z88cd5krTPPvvU+3zdS0gHHXRQ/aefflrQW1zbmjJlSrf7jB8/vk2Samtrt97kk08+yZOkvffeu8GpGHbAAQc0fPjhh0Xbtp111llVf/vb34aeffbZ44866qjqww8/vH769OkNiTo4gaIaAAAAAABAAgwZMiTQta2mpsYbCoXMrbfeOryn19bV1XmHDRsWqq2t9UrSyJEju+2D5vQaSRoxYkS3+0rSsGHDApJUXV3drUo1cuRIx1g7vo5g175tx4tGSUlJt0MY/P72FayhUMhEeu+hQ4d2a58+fXrTyy+/vOD6668f/vLLL5f++9//LpOksWPHtvz85z9ff/7553eb6dcXFNUAAAAAAEBCxXqKZqYzxnRrKywsDIXDYVNbW/t5JGMUFxeHJGnNmjXdlmx2VVRUFJKk9evX+536N2zY4JecC1tOsXZet3HjRsf6Ued4idD5dbvdu7Ky0rH9iCOOaDziiCOWNDc3m/feey/vhRdeKH7ggQeGXHDBBeOGDh0aOPHEE7vN4osVe6oBAAAAAAAkyZ577tlYV1fnnTlzZk4k1x9wwAENkvTf//63qLdr99prryZJevvttwu79gUCAX3yySeFkrT//vs3RXLv/fbbr0mSPv3008JgsPuEsffee6/bfeJl3333bZbaD3sIhbrVANW5LNZNbm6uPfLIIxtvu+22dTfeeOMqSXrmmWdK4hkjRTUAAAAAAIAk+elPf1opSeedd97YFStWdJvpVVdX53n99de3bth/xhln1I4YMaLtjTfeKLnnnnsGdb1+29M/zz777Jri4uLQ888/P2jbMSTpd7/73dC1a9dmHXDAAXVd91NzM378+MDXvva1urVr12bdeOONQ7bte/TRR0ui3U8tGjvuuGPbvvvuW79q1arsm2++efC2fU899VRR1/3UJOnVV1/Nb2ho6DblrrKy0i85H2DQFyz/BAAAAAAASJITTjih/pe//OXaG2+8sWLy5Mm7HnroobVjxoxpa2ho8KxZsybrk08+KZwyZUrD4YcfvliScnJy7D/+8Y+lxx9//E4XXHDBuPvvv3/w1KlTG1paWjyLFi3K+eijj4qCweAsSSouLg7fcccdK7773e/ucPTRR088+uijq0eNGtX2+eef573//vtF5eXlgfvuu29lNPH+5S9/WTVt2rRJv/71r0e9/vrrRbvuumvzsmXLsl955ZWS6dOn17755pvFiXifJOmuu+5aNX369Ek///nPR//3v/8t3mWXXZpXrFiR9fLLL5cefvjhNa+//nqJx/O/+WJ/+MMfhn300UdFU6dOrR89enRbQUFBaMGCBbnvvPNOcVFRUejiiy/eHM/4KKoBAAAAAAAk0fXXX79h2rRpDX/605+GzJw5s+C1117zFRQUhIYOHRo466yzNn3729/ebkP9adOmNc2cOXPetddeO+zNN98s/uyzz4bm5+eHR48e3XL55Zev3fbaGTNm1IwaNWrBddddN/ydd94pamho8JaXlwfOOuusTddff/36sWPHRnW4wG677db67rvvLrj88ssr3n///aKPP/64cOLEic2PPvro0o0bN/oSWVSbMmVKy9tvv73gyiuvrPjwww8LP/zww8KJEyc2P/LII0vnzZuX8/rrr5d07r0mSRdeeOGmkpKS0GeffZY/a9asgmAwaIYOHRqYMWPGxl/+8peVO+20U0Qz9CJlrLW9XwUAAAAAANCLWbNmzczJyZm8yy67zE91LOjfvvnNb4577rnnBn3++edz9thjj9Z4jTt37tzJLS0t86dMmTK1t2vZUw0AAAAAAABpJxQKadWqVd1WWT777LOFL7744qDx48e3xLOgFi2WfwIAAAAAACDttLa2mh122GH3/fbbr37HHXds8fl8dsGCBbkffPBBkd/vt7fddtuqVMZHUQ0AAAAAAABpJysry5599tmb3n///aIvv/wyv7m52VNaWho8+uijq3/5y1+uP/DAA5tTGR9FNQAAAAAAAKQdn8+nhx56aHWq43DDnmoAAAAAAABAlCiqAQAAAAAAAFGiqAYAAAAAAABEiaIaAAAAAAAAECWKagAAAAAAAECUKKoBAAAAAAAAUaKoBgAAAAAAAESJohoAAAAAAAAQJYpqAAAAAAAAQJQoqgEAAAAAAKShioqK3SoqKnZLdRxdGWOm7LvvvhO3bfvZz342whgz5fnnny9MVVzJRlENAAAAAAAgBfbdd9+JxpgpqY4DsfGlOgAAAAAAAAB098orryxKdQyRuuKKKzaec845VRMmTGhLdSzJQlENAAAAAAAgDe2yyy6tqY4hUsOHDw8OHz48mOo4komiGgAAAAAASKhMXeJorZ0V62v//ve/F99xxx1DlyxZklNbW+srKSkJjhkzpvVb3/pW1UknnVQ7adKkrXulbfv+7LPPPg2ffPLJQql9TzVJWrt27Ved/bfffnvZJZdcMvZPf/rTilGjRgWuu+664fPnz8/Lzs4OH3744bV/+ctfVpeXl4fef//93F/96lcVs2bNKggGg2b//fevv/vuu1dNnDhxu5lkTvfo9LOf/WzErbfeOvy5555bdNxxx9X39PVGc21/QVENAAAAAAAgjm6++ebyK664Ykx5eXngiCOOqC0rKwtu2rTJN2/evLxHH320/Ac/+EHVpZdeuv6JJ54oW7duXdall166vvO1Y8eOjWh22vPPP1/y5ptvFk+fPr12xowZmz799NOCp59+umz16tVZN9xww9rjjjtup6lTpzacccYZm+fNm5f75ptvFh933HE7LliwYK7X603cFz+AUFQDAAAAAACIo7/97W+D/X6//fzzz+dVVFRstyRy/fr1vvLy8tAtt9yy7r333itct25d1i233LIu2nu88cYbJc8+++zCY489tkGSQqGQDj744B0//PDDopNPPnnHW265ZeWPfvSjqs7rTzvttDFPPvlk+T/+8Y+SGTNm1PT5iwRFtXRhjFkuqUjSihSHAgBAOhkrqc5aOy7VgQwE5CMAgL564oknJk2YMCFnzpw5k1MdSzzMmTNnciAQyPZ4PKE99tij2/LInni9XpuVlWW7tsdr37HjjjuuqrOg1nE/nXXWWVUffvhh0Y477ti8bUFNks4999wtTz75ZPlnn32WS1EtPiiqpY+i3NzcQZMnTx6U6kAAAEgX8+fPV3Nzc6rDGEjIRwAAfdK5rNDj8eSlOJS48Hg8edZahcPhqF536qmnVl177bUjd955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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "image/png": { + "height": 228, + "width": 618 + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# visualize the recordings\n", + "nrows = 2\n", + "ncols = out_traces.shape[0]\n", + "fig, axs = subplots(nrows, ncols, sharex=True,\n", + " gridspec_kw={'height_ratios': [3, 1]}, figsize=(9, 3))\n", + "for idx in range(ncols):\n", + " axs[0, idx].plot(t, out_traces[idx, :].T, lw=3, c='C3', label='recordings')\n", + " axs[1, idx].plot(t, inp_traces[idx, :].T/nA, lw=3, c='k', label='stimuli')\n", + " axs[1, idx].set_xlabel('$t$, ms')\n", + " if idx == 0:\n", + " axs[0, idx].set_ylabel('$V$, mV')\n", + " axs[1, idx].set_ylabel('$I$, nA')\n", + "handles, labels = [(h + l) for h, l\n", + " in zip(axs[0, idx].get_legend_handles_labels(),\n", + " axs[1, idx].get_legend_handles_labels())]\n", + "fig.legend(handles, labels)\n", + "tight_layout();" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "4bec8cef-8df3-4f55-9db2-a408a0898d71", + "metadata": {}, + "outputs": [], + "source": [ + "# get spike times manually\n", + "def get_spike_times(x):\n", + " x = x.copy()\n", + " # put everything to -40 mV that is below -40 mV or has negative slope\n", + " ind = np.where(x < -0.04)\n", + " x[ind] = -0.04\n", + " ind = np.where(np.diff(x) < 0)\n", + " x[ind] = -0.04\n", + "\n", + " # remaining negative slopes are at spike peaks\n", + " ind = np.where(np.diff(x) < 0)\n", + " spike_times = np.array(t)[ind]\n", + " \n", + " # spike times for active stimulus\n", + " spike_times_stim = spike_times[\n", + " (spike_times > t_start) & (spike_times < t_end)\n", + " ]\n", + " \n", + " # number of spikes\n", + " if spike_times_stim.shape[0] > 0:\n", + " spike_times_stim = spike_times_stim[\n", + " np.append(1, np.diff(spike_times_stim)) > 0.5\n", + " ]\n", + " return spike_times_stim / 1000 # in seconds\n", + "\n", + "# store spike times for each trace into the list\n", + "spike_times = [get_spike_times(out_trace) for out_trace in out_traces]" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "3927d071-390b-4e20-8d3e-bfd7012ec762", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABNUAAAHJCAYAAACi+g9VAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAABYlAAAWJQFJUiTwAACk/klEQVR4nOzdd3iVRdoG8HtOSe+dhBIIVRSBUC0gCorYGyCgruva29rW7uraFz9U7IoVRBFdCxZEAUUFlI70Gnp6b6fO90cIJjnvm9PeU3P/ritXlpk5M08iy5nzvFOElBJERERERERERETkOl2gAyAiIiIiIiIiIgo1TKoRERERERERERG5iUk1IiIiIiIiIiIiNzGpRkRERERERERE5CYm1YiIiIiIiIiIiNzEpBoREREREREREZGbmFQjIiIiIiIiIiJykyHQARARERERERFR8FuzZk00gMkAxgLoAcAY2IiINGMBsAfAjwA+zs/Pb3DlRUJK6dOoiIiIiIiIiCi0HU2ovajX60fr9foUnU4XDUAEOi4ijUi73d5gs9nKbTbbzwBudyWxxpVqREREREREROTMZL1ePzo6OjozKyurMC4url6v19sDHRSRFmw2m662tjamsLAwq6GhYbTNZpsM4F1nr+OZakRERERERETkzFi9Xp+SlZVVmJiYWMuEGoUTvV5vT0xMrM3MzCzS6/UpaNri7BSTakRERERERETkTA+dThcdFxdXH+hAiHwlPj6+7ujW5u6utGdSjYiIiIiIiIicMQIQXKFG4Uyn09nRdFZghEvtfRsOERERERERERFR8BPCvbs3mFQjIiIiIiIiIiJyE5NqREREREREREREbmJSjYiIiIiIiIiIyE1MqhERERERERERUSszZ85MFULkz5w5M7VleU5Ozgk5OTknBCquYMKkGhERERERERERkZsMgQ6AiIiIiIiIiIhCw6JFi3YEOoZgwaQaERERERERERG5pH///qZAxxAsmFQjIiIiIiIiIo9s7dsvP9AxeKLftq1rPH3t9u3bI/r27XvCxRdfXPbvf//7yP3335+zYsWK+MrKSsNXX32149xzz6357LPPEmbOnJmxcePG2Lq6On1mZqZ5woQJlU8++eSRtLQ0W9s+d+/ebXz88cezli5dmlhUVBQRGRlp79q1q2n8+PGV06dPP9Ky7S+//BLzxBNPdFq1alVcbW2tPi0tzXL66adXPfnkk0e6detmadn2kksuyf3f//6Xunnz5j8///zzpPfffz9t//79UQMGDKj7448/tgPApk2bIu+5556c3377LcFisYi+ffs23Hvvva3GbKn5PLVDhw792Vw2c+bM1Ntvvz33xRdfLOjevbv58ccfz968eXOMEAJDhgypmTFjxsHBgwc3tu1r48aNkffcc0/nFStWxLccu7i42NDc32233VbW3P7333+PfuKJJ7LWrl0bV1JSYoyNjbV16tTJPGLEiNrXXnvtYGRkpHTnv6W3mFQjIiIiIiIiInJTQUFB5CmnnNIvNze38aKLLipvaGgQSUlJtrvuuqvTjBkzshMTE22nn356ZXp6unXz5s3Rb775ZubixYsT//jjj60pKSn25n6WLVsWc/755/euqqrSDxkypHbChAkV9fX1uh07dkTPmDEju2VS7aOPPkq86qqr8qSUGD9+fEXXrl3N69evj/nwww/TFy1alLRs2bJtffv2NbeN9ZZbbum6atWquDFjxlSNHTu2Sq/XAwD+/PPPyFGjRvWtrKw0jBo1quqEE05o2LNnT+S0adPyRo0aVe3u7+Tbb79N/PHHH5NGjRpVPW3atJLt27dH/fzzz4ljx46N3bx58+ZOnTpZm9uuW7cu6rTTTutbXV2tP+2006r69+/fUFBQEHnFFVfkjR49uqpt37///nv06NGj+wkh5BlnnFHVrVs3U3V1tX7v3r2Rs2fPTn/++ecPMalGRERERERERBTk1q5dG3fzzTcXvvzyy4eayxYsWBA/Y8aM7IEDB9b98MMPO1uuSmtezXXPPffkvP322wcAoLGxUVx++eV5VVVV+tdee23vDTfcUN5yjN27dxub/3dVVZXuxhtv7G6z2cQ333yzffz48bXNdQ8++GDWU089lXPNNdd0++2333a2jXXTpk0xq1at2tI24XbDDTd0raysNPznP/858PDDDxc3l8+ZMyfpiiuuyHP3d/Ljjz8mf/bZZzsuuOCCmuaym2++OefVV1/NeuWVV1KfeOKJoubym266qWt1dbX+mWee2X/vvfeWNJd/8sknCZMmTerVtu9Zs2almkwmMXv27D3Tpk2rbFlXUlKij4uLs7d9ja/x9k8iIiIiIiIiIjelpqZap0+ffrhl2cyZMzMA4K233ipou83ztttuK+vbt2/D559/ntJc9vHHHycePnw44vTTT69sm1ADgLy8vGPbOefOnZtUVVWlnzBhQnnLhBoAPProo4XZ2dnm5cuXJ+zcuTOibT+33nprYduE2u7du43Lly9PyMnJMd9///3FLeumTZtWOXTo0Fq46ZxzzilvmVA7OnYJAKxevTq2uWzXrl3GlStXxnft2tV09913l7RsP3HixOqRI0eqrpKLiYlxSJ6lp6fbmlff+RNXqhERERERERERualv37710dHRrbYbrlu3Ls5gMMi5c+emzJ071+E1FotFVFRUGAoLC/VZWVm2FStWxAHAWWed5XSr5dq1a2MAYMyYMTVt64xGI4YPH17z+eefp/7+++8xvXr1apVAGzlyZF3b1/z+++8xADB06NAag8ExPXTKKafUrFq1Ks5ZXC3l5+c7jJOXl2cGgKqqqmOD/PHHHzEAMHjw4FqlZNjIkSNrV6xYkdCybMqUKeXvvvtu5tSpU/PGjx9fccYZZ9SMGTOmNpAXJzCpRkRERERERETkpoyMDEvbssrKSr3NZhPPP/98p/ZeW11drc/KyrJVVVXpAaBz584O56ApvQYAsrOzHcYFgKysLAsAVFRUOGSpOnfurBjr0Z/D2rauZX/uSEpKcriEwWhs2sFqs9mEq2NnZmY6lI8ZM6Z+4cKF25588slOCxcuTP7iiy9SASA3N7fxvvvuO3L99dc7rPTzNSbViIiIiIiIiMgj3tyiGeqEEA5l8fHxNrvdLqqqqta70kdiYqINAA4ePOiwZbOthIQEGwAcOXLEqFRfWFhoBJQTW0qxNrcrLi5WzA019+cLzT+32thFRUWK5WPHjq0bO3bsroaGBvHrr7/GfPPNN4nvvPNOxg033NA9MzPTcuGFFzqs4vMlnqlGRERERERERKSBgQMH1lVXV+tXr14d5Ur7kSNH1gLA999/n+Cs7aBBg+oB4Oeff45vW2exWPDHH3/EA8CIESPqXRl7+PDh9QCwatWqeKvVccHYr7/+6jCOVoYNG9YANF32YLM55ADRvC1WTXR0tBw3blzdCy+8cPjpp5/eDwCff/55ki9ibQ+TakREREREREREGvjnP/9ZBADXXnttbkFBgcNKr+rqat3ixYuPHdg/efLkquzsbPOSJUuS3njjjZS27Vve/jl16tTKxMRE29dff53Ssg8AePzxxzMPHToUMXLkyOq256mpycvLs5x00knVhw4dinj66aczWtbNmTMnyd3z1NzRq1cv87Bhw2r2798f+dxzz6W3rPv0008T2p6nBgA//PBDbG1trcOSu6KiIiOgfIGBr3H7JxERERERERGRBi644IKaBx544NDTTz+d069fv+NPO+20qm7duplra2t1Bw8ejPjjjz/i8/Pza88444ydABAVFSU/+uij3eedd17vG264ofvbb7+dPmTIkNrGxkbdjh07olauXJlgtVrXAEBiYqL95ZdfLrj66qt7nH322X3OPvvsii5dupjXr18f89tvvyWkpaVZZs2atc+deF9//fX9o0aN6vvII490Wbx4ccLxxx/fsGfPnshFixYljRkzpmrp0qWJvvg9AcCrr766f8yYMX3vu+++rt9//31i//79GwoKCiIWLlyYfMYZZ1QuXrw4Saf7ay3Ys88+m7Vy5cqEIUOG1HTt2tUcFxdn27ZtW/SyZcsSExISbLfcckupr2JVw6QaEREREREREZFGnnzyycJRo0bVvvjiixmrV6+O+/HHHw1xcXG2zMxMy5QpU0quvPLKVgfqjxo1qn716tVbHnvssaylS5cmrlu3LjM2NtbetWvXxrvvvvtQy7bTpk2r7NKly7Ynnnii07JlyxJqa2v1aWlplilTppQ8+eSTR3Jzc926XOCEE04w/fLLL9vuvvvunN9++y3h999/j+/Tp0/DnDlzdhcXFxt8mVTLz89v/Pnnn7fde++9OStWrIhfsWJFfJ8+fRpmz569e8uWLVGLFy9Oaj57DQBuuummkqSkJNu6deti16xZE2e1WkVmZqZl2rRpxQ888EBR7969XVqhpyUhpXTeioiIiIiIiIg6rDVr1qyOiorq179//62BjoXC3/nnn999wYIFKevXr9904oknmvw59ubNm/s1NjZuzc/PH+KsLc9UIyIiIiIiIiIiv7LZbNi/f7/DDsovv/wy/ttvv03Jy8tr9HdCzV3c/klERERERERERH5lMplEjx49BgwfPrymV69ejQaDQW7bti16+fLlCUajUb7wwgv7Ax2jM0yqERERERERERGRX0VERMipU6eW/PbbbwkbN26MbWho0CUnJ1vPPvvsigceeODIySef3BDoGJ1hUo2IiIiIiIiIiPzKYDDg/fffPxDoOLzBM9WIiIiIiIiIiIjcxKQaERERERERERGRm5hUIyIiIiIiIiIichOTakRERERERERERG5iUo2IiIiIiIiIiMhNTKoRERERERERERG5iUk1IiIiIiIiIiIiNzGpRkRERERERERE5CYm1YiIiIiIiIiIiNzEpBoRERERERERURAQQuQPGzasT8uyO++8M1sIkf/111/HByouUsakGhERERERERERhR1fJyQNvuiUiIiIiIiIiIjcs3bt2s1xcXH2QMdBrmFSjYiIiIiIiIgoCAwaNKgx0DGQ65hUIyIiIiIiIiKv5d73TX6gY2hPwTPnrNGinw8//DDx5Zdfzty1a1dUVVWVISkpydqtWzfTJZdcUn7fffeVNLcbNmxYn1WrVsXV19evvffeezt99tlnqSUlJcbMzEzzxIkTy5588snCqKgo2bJvIUT+0KFDa//444/tzuLYuXNnxNlnn91r3759kS+88ELBzTffXA4ANTU1uqeeeirj888/T9m3b1+kEAK9e/duuPHGG4uvv/76cnd+1t27dxsfe+yxTkuWLEksLi42xsTE2AcPHlz773//+/Do0aPrm9tNmTKl60cffZQ+e/bs3dOmTats28+SJUtizzjjjL5nnXVWxcKFC/c0l7sT69dffx1/3nnn9b7jjjuOXHrppRUPPPBAzpo1a+KsVqs4/vjj65966qmD48aNq2tun5OTc8Lhw4cjAOC8887r3bIvKaUmfxd4phoRERERERERkQuee+65tGnTpvXctWtX1NixY6uuu+66ojFjxlQ1Njbq5syZk6b0mnPPPbfHxx9/nDZu3LjKq666qlgIgRkzZmRPmDAhz273bKfnihUrok8++eS+hYWFEfPnz9/ZnFArLS3VDx8+vM8zzzyTo9fr5cSJE0svueSSsvLycsMNN9zQ/bbbbst2dYxff/01ZsiQIcfNmTMnvUePHo1/+9vfis8444zKVatWxY0bN67vvHnzEpvb/v3vfy8DgNmzZ6cq9fXOO++kAsBVV11V1lzmaazr1q2LOeOMM/qaTCbd5ZdfXjpmzJiqtWvXxp133nl9NmzYENnc7vrrry8aOnRoLQBcfPHFZXfccceR5i9XfwfOcKUaEREREREREZEL3n333XSj0SjXr1+/JScnx9qy7siRI4o5lt27d0dv3rx5c3p6ug0A6uvrD5100kl9li5dmvjaa6+lNCfEXPXFF1/EX3HFFXnR0dH2H374YdvIkSMbmuuuv/76Llu3bo158MEHDz7xxBNFzeX19fXirLPO6vnyyy93mjx5csVJJ53UoNx7E4vFgilTpvSor6/XL1iwYPs555xT21xXUFBgHDZsWL9bbrml2/nnn/9ndHS0HDt2bF23bt1MS5cuTSwqKtJnZmbamts3NDSIBQsWpKSkpFgvvfTSKm9j/emnnxJffPHFgttuu+1Ygm769Olp//rXv7pNnz49c86cOfsB4JFHHimurKw0rFq1Ku7qq68uO/fcc2vc+T27gkm1ICGE2AsgAUBBgEMhIiIKJrkAqqWU3QMdSEfA+QgREamZN29e3549e0Zt2rSpX6Bj8ZSnsVsslkidTmc78cQT/wQAvV4vIyIiZNt2nTp1sjq+GrjnnnsONyfUACAmJkY+8cQTh84777zeH3zwQZo7SbVXX3015fbbb8/t2rWraeHChTt79eplbq4rLCzUf/nll6n9+/evb5mkah7zv//978GTTjrpuA8++CD1pJNOOtjeOPPmzUs6cOBA5HXXXVfUMqEGALm5uZZbb7218JFHHuny1VdfJUyaNKkKACZPnlz67LPP5rzzzjsp999//7FtsB9//HFSdXW1/pprrikyGo1exzp48ODalgk1ALjtttvK7r///q7r16+PdekXqREm1YJHQnR0dEq/fv1SAh0IERFRsNi6dSsaGtp9kEra4nyEiIgU6fV6AIBOp4sJcCge8zR2KSWat2ledtll5Y899ljn4447rv/5559fcdppp9WcccYZtdnZ2YoJNQA488wza9uWnXXWWTV6vR5btmxxOaYXX3wxY/HixUmDBg2qXbhw4a6WiToA+PXXX2NtNhuEELjzzjsdtk5aLBYBADt27IhyNtby5ctjAeDAgQMRSn3t2rUrEgC2bNkSBaAKAK699tqy6dOn58ydOzetZVKteUvotddeeywR5k2sJ554Yn3bssjISJmammqtqqrSO/vZtMSkWvAo6NevX8qaNZqclUdERBQW8vPzsXbt2oJAx9GBcD5CRESKtm7dCgDo16+9xV57/ROMh4477jiPXrdlyxbY7XYTADz66KNFaWlp1rfeeiv9vffey3jnnXcyhBAYOnRozfTp0w+OGjXKIeHTuXNnS9syo9GIpKQka3l5uct5mVWrVsVLKTF69Oiatgk1ACgpKTEAwKZNm2I2bdqkmqyrq6tzer5+c1zfffdd8nfffafarra29lhfeXl5lhEjRlQvX748Ye3atVGDBw9uPHTokGHZsmUJffv2bRg+fPixJ6XexJqUlOTwswOAwWCQdrtdOPvZtMSkGhEREVGACCEKAHRTqS6SUmYpvOYkAA8BGAEgGsBOAO8AeElKqTjJJCIi8oeCZ84JdAh+ccstt5TdcsstZaWlpfrFixfHff7550nz589PO//883tv2bJlU9tVawcPHjS23KYJNJ1ZVllZaYiNjXX5vfull14qeO6557Kef/75Tna7HS+88MLhlvXNyaZrrrmmaNasWe1u73QmISHBBgBz5szZNXXq1Cpn7ZtNmzatbPny5QmzZs1KffXVVw/NmjUrxWazicsvv7zUV7EGEm//JCIiIgqsKgCPKXw917ahEOICAMsAjALwOYCXAUQAeB7Ax36Kl4iIiACkpaXZJk2aVPXxxx/vu+SSS0qrqqr0ixYtimvbTqns+++/j7fZbDjuuOMcVrapSU5Otv3000878vPza1988cVON9xwQ+eW9aNGjarT6XRYuXJlvGc/0V9GjhxZBwDLli1zq68rrriiIi4uzvbZZ5+l2mw2fPTRR2l6vV5ec801rc6N0zLW9uj1egkANptvnjsyqUZEREQUWJVSykcVvlol1YQQCQDeAmADcJqU8hop5T0ABgJYAeBSIcRkv0dPRETUgSxYsCC++Xy1lkpLS40AEBMT41A5ffr07JKSkmNnfdXX14uHHnooBwCuuOKKsrbt25OcnGxfunTpzpEjR9a88cYbmVdffXWX5rqcnBzr+eefX7Z58+aYe+65p5PV6njM2+bNmyO3bdsW4WycKVOmVHbp0sX0wQcfpM+bNy9Rqc2PP/4YW1NT0yqvFBcXJ88555yK4uJi43/+85/M7du3R48ePbqq7U2pWsbantTUVCsAFBQUeNWPmg67/ZPbLYiIiCjEXAogHcAHUsrVzYVSykYhxEMAFgO4EVyxRkRE5DNTpkzJi4mJsQ8aNKi2a9euZiklVq5cGb9p06aY/v37119wwQU1bV+Tl5fX0L9///4TJkyoMBqN8vvvv086cOBA5GmnnVZ10003uZVUA4D4+Hj7jz/+uHPChAl57733XobJZNLNmTNnn06nw9tvv71/7969Uc8991z2/PnzU4cOHVqbkZFhOXLkiHHnzp3RmzZtinnjjTf29O3b19zeGJGR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NKxZC2N2JyRNnuy3iw+IiMIZV6oFCT4ZJiLShmnvXtSvXo2ILl0Rkz8YwmhE7S+/4OBtt0M2NCBp0iRkPfgARESE231LKWGrrIQhOdkHkZMSPhn2L85HiEKHpagYlZ98AvO+fYgZMgRJl116bAunrbISIioKtvJyGDp1ghAiwNEShTbOR0gNV6oREVFYieze3eEssLhTT0XfdWu97lsIwYQaEREFBWNmBtJvvUWxTp+UBADQZWf7MSIioo5HF+gAiIiIiIiIiIiIQg2TakRERERERERERG5iUo2IiIiIiIiIiMhNTKoRERERERERERG5iUk1IiIiIiIiIiIiNwkpZaBjIABCiLLo6OiUfv36BToUIiKioLF161Y0NDSUSylTAx1LR8D5CBERkSPOR0gNk2pBQgixF0ACgAINu+179Ps2DfsMdfydOOLvRBl/L474O3HE34kyLX8vuQCqpZTdNeiLnPDBfIT/H1HG34sj/k4c8XeijL8XR/ydKON8hHyOSbUwJoRYAwBSyvxAxxIs+DtxxN+JMv5eHPF34oi/E2X8vVAz/l1Qxt+LI/5OHPF3ooy/F0f8nSjj74X8gWeqERERERERERERuYlJNSIiIiIiIiIiIjcxqUZEREREREREROQmJtWIiIiIiIiIiIjcxKQaERERERERERGRm3j7JxERERERERERkZu4Uo2IiIiIiIiIiMhNTKoRERERERERERG5iUk1IiIiIiIiIiIiNzGpRkRERERERERE5CYm1YiIiIiIiIiIiNzEpBoREREREREREZGbmFQjIiIiIiIiIiJyE5NqREREREREREREbmJSjYiIiIiIiIiIyE1MqhEREREREREREbmJSTUiIiIiIiIiIiI3MalGRERERERERETkJibViIiIiIiIiIiI3MSkGhERERERERERkZuYVCMiIiIiIiIiInITk2pERERERERERERuYlKNiIiIiIiIiIjITUyqERERERERERERuYlJNSIiIiIiIiIiIjd1yKSaEOJSIcRLQohfhBDVQggphJjj5DUnCSG+FUKUCyEahBAbhRD/FELo/RU3ERERdVxCiFQhxD+EEJ8LIXYdnY9UCSF+FUJcI4TokPM6IiIiokAxBDqAAHkIwIkAagEcBNC3vcZCiAsAfAagEcA8AOUAzgPwPICTAVzmbUBCiL0AEgAUeNsXERFR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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "image/png": { + "height": 228, + "width": 618 + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# visualize the recordings and spikes while stimulus is on\n", + "nrows = 2\n", + "ncols = out_traces.shape[0]\n", + "fig, axs = subplots(nrows, ncols, sharex=True,\n", + " gridspec_kw={'height_ratios': [3, 1]}, figsize=(9, 3))\n", + "for idx in range(ncols):\n", + " spike_idx = np.in1d(t, spike_times[idx] * 1000).nonzero()[0]\n", + " spike_v = (out_traces[idx, :].min(), out_traces[idx, :].max())\n", + " axs[0, idx].plot(t, out_traces[idx, :].T, lw=3, c='C3',\n", + " label='recordings', zorder=1)\n", + " axs[0, idx].vlines(t[spike_idx], *spike_v, lw=3, color='C0',\n", + " label='spike event', zorder=2)\n", + " axs[1, idx].plot(t, inp_traces[idx, :].T/nA, lw=3, c='k', label='stimuli')\n", + " axs[1, idx].set_xlabel('$t$, ms')\n", + " if idx == 0:\n", + " axs[0, idx].set_ylabel('$V$, mV')\n", + " axs[1, idx].set_ylabel('$I$, nA')\n", + "handles, labels = [(h + l) for h, l\n", + " in zip(axs[0, idx].get_legend_handles_labels(),\n", + " axs[1, idx].get_legend_handles_labels())]\n", + "fig.legend(handles, labels)\n", + "tight_layout;" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "25a040ac-3dee-42cf-82fd-0e1af5c47f53", + "metadata": {}, + "outputs": [], + "source": [ + "# a few features to create a summary statistics representation of traces\n", + "v_features = [\n", + " lambda x: np.max(x[(t > t_start) & (t < t_end)]), # max active potential\n", + " lambda x: np.mean(x[(t > t_start) & (t < t_end)]), # mean active potential\n", + " lambda x: np.std(x[(t > t_start) & (t < t_end)]), # std of active potential\n", + " lambda x: kurt(x[(t > t_start) & (t < t_end)], fisher=False), # kurtosis of active potential\n", + " lambda x: np.mean(x[(t > 0.25 * t_start) & (t < 0.75 * t_start)]), # membrane resting potential\n", + "]\n", + "\n", + "s_features = [\n", + " lambda x: x.size, # count of spikes in the train\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "a4550ead", + "metadata": {}, + "outputs": [], + "source": [ + "# inference object instantiation\n", + "inferencer = Inferencer(dt=dt, model=eqs,\n", + " input={'I': inp_traces*amp},\n", + " output={'v': out_traces*mV,\n", + " 'spikes': spike_times},\n", + " features={'v': v_features,\n", + " 'spikes': s_features},\n", + " method='exponential_euler',\n", + " threshold='m > 0.5',\n", + " refractory='m > 0.5',\n", + " param_init={'v': 'VT'})" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "9fe4d1cc", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "fd6893517f754a8d8a63ee879b594705", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Extracting features: 0%| | 0/2 [00:00" + ] + }, + "metadata": { + "image/png": { + "height": 386, + "width": 378 + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# pairplotting space of sampled parameters from posterior\n", + "limits = {'gl': [1e-9*siemens, 1e-07*siemens],\n", + " 'g_na': [2e-06*siemens, 2e-04*siemens],\n", + " 'g_kd': [6e-07*siemens, 6e-05*siemens],\n", + " 'Cm': [0.1*uF*cm**-2*area, 2*uF*cm**-2*area]}\n", + "labels = {'gl': r'$\\overline{g}_{l}$',\n", + " 'g_na': r'$\\overline{g}_{Na}$',\n", + " 'g_kd': r'$\\overline{g}_{K}$',\n", + " 'Cm': r'$C_{m}$'}\n", + "\n", + "inferencer.pairplot(limits=limits,\n", + " labels=labels,\n", + " ticks=limits,\n", + " figsize=(6, 6));" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "1a87fdae", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "7534eaf0020d41259f5afb2eb7160e84", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Drawing 1 posterior samples: 0%| | 0/1 [00:00" + ] + }, + "metadata": { + "image/png": { + "height": 386, + "width": 378 + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# conditional pairplot\n", + "condition = inferencer.sample((1, ))\n", + "inferencer.conditional_pairplot(condition=condition,\n", + " limits=limits,\n", + " labels=labels,\n", + " ticks=limits,\n", + " figsize=(6, 6));" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "2f195b76", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjgAAAHiCAYAAADlOLYiAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAABYlAAAWJQFJUiTwAAA+E0lEQVR4nO3de5RlZX3n//cHJCIEGrwykShCaNokKgoK0hMuMsMgxksUousXiWKiQ5QBEWZM1Izgion+VoIIUTEaJaITdPAXiGsESbjJJcQBNWoEGhsaMWCUq9wV+vv7Y+/C4vQ53aeqdp0659T7tdZeT519efZzChb15fvcUlVIkiRNk82WugGSJEldM8CRJElTxwBHkiRNHQMcSZI0dQxwJEnS1DHAkSRJU8cAR5IkTR0DHEmSNHUMcCRJ0tQxwJEkSVPHAEeSJE0dAxxJkjR1DHAkSdLUMcCRJElTxwBHkqQJkuTQJKcmuTTJT5JUks/Os64dk3wqyS1JHkqyLsnJSbbfyDO/muQLSX6U5MEk1yU5MckT5v+tupeqWuo2SJKkISX5JvA84F7gB8Aq4HNV9fo51rMLcAXwVOAc4FrgRcABwHXA6qq6veeZvYALgS2As4CbgZcAewKXAwdW1UPz/W5dMoMjSdJkORZYCWwL/MEC6vkoTXBzdFW9qqr+sKpeAnwI2A14/+ybk2wOfBrYCji0qv6fqnonsBfwRWB127axYAZHkqQJlWR/4CLmmMFpszffA9YBu1TV+lnXtgFuBQI8tarua8+/BLgA+GpV7ddT387AWuAm4Fk1BsGFGRxJkpafA9ry/NnBDUBV3UPT3bQVsPesSy9py/N6K6uqG4A1wDOBnTtv7Tw8bqkbIEnSuEnyOZqxLYthJ5rMyQaqao9Femev3dpyzYDr1wMH0XSFXTCHZ1a2x9oO2rggBjiSJG1o1RO2zAuevesvdFrpNdf/lAcerPs7rXR+VrTl3QOuz5zfboHPLBkDHEmS+nj2rr/A/z3/GZ3W+cKDvs/Xv/3QtSPM1CxbBjiSJPVRFOtZv+kb51jnmJjJtqwYcH3m/F0LfGbJOMhYkqTl57q2XDng+q5tOXu8zXyeWTIGOJIkDfBIre/0GCMXteVBSR4TC7TTxFcD9wNXzrp0YVse3FtZO018Jc008Rs6b+08GOBIktRHAeupTo9Rd1Al2SLJqnbdm59/t6q1wPk0M7re1vPYicDWwBkza+C0LgGuAfZN8opZ79gM+GD78bRxWAMHHIMjSdJESfIq4FXtxx3a8sVJTm9/vq2qjm9/fjpNUHITTTAz21tptmo4JcmB7X170ayRswZ49+ybq+qRJEfQZHLOSnIW8H3gQH6+VcOHFvwFO2KAI0lSX90PMqabHM7uwBt6zu3MzxfYuwk4nk2oqrVJ9gTeR9PtdAjNCsYfBk6sqjv7PPPPSV5Ik+U5CNimfd/7gA+Myz5UYIAjSdJEqaoTgBOGvHcdzZYLg67fDBwxx/d/FzhsLs8sBQMcSZL6KOCRjoeTjMXglGXCAEeSpAHWG5JMLGdRSZKkqWMGR5KkPgp4pOMMjvmg0TGDI0mSpo4ZHEmSBnAMzuQygyNJkqaOGRxJkvooahGmiZsRGhUDHEmSBhir7TE1J3ZRSZKkqWMGR5KkPpwmPtnM4EiSpKljBkeSpAEeMeUysQxwJEnqo+h+kLHx0ujYRSVJkqaOGRxJkgZ4hCx1EzRPZnAkSdLUMYMjSVIfVbC+40EzHS+MrI0wwJEkqa8sQheVXV6jYheVJEmaOmZwJEnqo1nJuNuMiz1Uo2MGR5IkTR0zOJIkDbC+HDMzqQxwJEnqwy6qyTY2XVRJ9kny5SR3JHkgybeSvD3J5nOspzZyXLlY7ZckSeNjLDI4SV4JfBF4EPg8cAfwcuBDwGrgsDlWeRNwep/zP5h/KyVJy0t4pPM8gF1eo7LkAU6SbYFPAI8A+1fVVe35PwYuBA5N8rqqOnMO1a6rqhM6b6wkSZoI49BFdSjwFODMmeAGoKoeBN7TfvyDpWiYJGn5KppBxl0ejsEZnSXP4AAvacvz+lz7KnA/sE+Sx1fVQ0PWuV2SNwE7AHcDV1eV428kSVomxiHA2a0t1/ReqKqHk9wI/BqwM3DNkHU+D/jr2SeS/AtweFV9e5gKklw94NKvA/cC64ZsiyRp8ewE/KSqnrUYlbub+OQahwBnRVvePeD6zPnthqzvJJoBy2toBi2vAt5J0xV2YZLdq+rf5tdUADZ/wpZ54rN3/YUnLqAObcJ37nzyUjdB6sSvbv+jpW7CVLvu+p+x5eOzKP89LuCR6nYkh11Uo9NJgJNkHfDMOTzyuap6fRfv7lVVx/Wcugo4LMlZwGuA44Fjh6hnj37nk1z97F1/4QX/9/xfXnBbNdguXzhyqZuwPKxf6gZMv0t/+5SlbsJU+42Db13qJmhMdZXBWUuTLRnWLbN+nsnQrOh346zzd82xTb1Oowlw9l1gPZKkZSGsd5r4xOokwKmqAxfw+HXAnsBK4DHjXpI8DngW8DBwwwLeAfDjttx6gfVIkqQxNw7TxC9sy4P7XNsX2Aq4Yg4zqAbZuy0XGihJkpaBma0aujwcgzM64xDgnAXcBrwuyZ4zJ5NsCfxJ+/Fjsx9IslWSVUme0XP+uUm26H1BkucC728/frbLxkuSptPMIOMuDwOc0VnyWVRV9ZMkb6YJdC5OcibNVg2voJlCfhbN9g2zvQi4CLgE2H/W+XcAL09yKXAz8BDNLKqDgc1pVkz+20X7MpIkaSwseYADUFVnJ9kPeDfNQOAtge/RBCynVNWwQe/ZwLbAc2kWENwSuB04F/hEVf19x02XJE2tsL7zQcEOMh6VsQhwAKrqcuCQIe+9mD7/llTV2TRBjiRJWsbGJsCRJGmcNIOMXehvUo3DIGNJksZPdT/IuMsIJ8mOST6V5JYkDyVZl+TkJNsP+fz+SWqI45d7ntvYvWOz76MZHEmSJkySXYArgKcC5wDX0kzAOQY4OMnqqrp9E9WsA04ccO05wKuB71TVzX2u3wSc3uf8DzbZ+BExwJEkqY9ahJWMq7tBxh+lCW6OrqpTZ04mOYlmO6L3Axvd86aq1gEn9LuWZGbG8ScGPL6uqvo+Oy7sopIkaYK02ZuDaDIwH+m5/F7gPuDwJPNauT/Jk4HfAh4APjP/li4tMziSJA3wSI3ltO4D2vL8qnrMlrlVdU+Sy2kCoL2BC+ZR/xuAxwOfqaq7BtyzXZI3ATvQ7Cl5dVWNzfgbMMCRJGnUViW5ut+FqtpjiOd3a8s1A65fTxPgrGR+Ac6b2/LjG7nnecBfzz6R5F+Aw6vq2/N4Z+fsopIkqY+ZaeJdHh1NolrRlncPuD5zfru5VtwuursbzeDiKwbcdhKwGngKsA3wQppdB54HXJjk6XN972IwgyNJUl9hfXWdBwjAtUNmapbCW9ryrwbdUFXH9Zy6CjgsyVk0uxEcTzPQeUmZwZEkabLMZGhWDLg+c/6uuVSa5Ik0AcoDwBnzaNdpbbnvPJ7tnBkcSZL6GOOVjK9ry5UDru/aloPG6AwyM7j4bzYyuHhjftyW85q91TUzOJIkTZaL2vKgJI/5O55kG5rxMfcDc53VNDO4eGD31Cbs3ZY3zPP5ThngSJI0wCOVTo8uVNVa4HxgJ+BtPZdPpMmgnFFV982cTLIqyapBdSb5DeDZbHxwMUmem2SLfudpFhcE+OyQX2VR2UUlSVIfY76S8Vtptmo4JcmBwDXAXjRr5KwB3t1z/zVtOagBmxxc3HoH8PIklwI3Aw8Bq4CDgc1pVj7+28GPj44BjiRJE6aq1ibZE3gfTXBxCHAr8GHgxKq6c9i62s05D2W4wcVnA9sCzwVeAmwJ3A6cC3yiqv5+bt9k8RjgSJI0wCOdTxPvTrsJ5hFD3jswddQGQ08Ysp6zaYKcsTe+/+QkSZLmyQyOJEl9FLC+uzEzj9ap0TDAkSSpn0r3XVTjuXnnVLKLSpIkTR0zOJIk9THGKxlrCGZwJEnS1DGDI0nSAOsdMzOxzOBIkqSpYwZHkqQ+iizCGBwzQqNigCNJ0gDrx3glY22c/+QkSdLUMYMjSVIfzTRxVzKeVGZwJEnS1DGDI0lSX1mEMTgOMh6VscngJNkxyaeS3JLkoSTrkpycZPs51vPE9rl1bT23tPXuuFhtlyRNn5kuqi4Pu6hGZywyOEl2Aa4AngqcA1wLvAg4Bjg4yeqqun2Iep7U1rMSuBA4E1gFHAG8LMmLq+qGxfkWkiRpXIxFgAN8lCa4ObqqTp05meQk4Fjg/cCRQ9TzpzTBzUlVddyseo4GPty+5+AO2y1JmmJOE59cS/5Prs3eHASsAz7Sc/m9wH3A4Um23kQ9vwgc3t5/Qs/lvwRuAv5Lkp0X3mpJkjTOljzAAQ5oy/Orav3sC1V1D3A5sBWw9ybq2Rt4AnB5+9zsetYDX+l5nyRJA1WFR2qzTo9yb6uRGYcuqt3acs2A69fTZHhWAhcssB7aejYpydUDLq0a5nlJ0uRb76yniTUOGZwVbXn3gOsz57cbUT2SJGnCjUMGZyxV1R79zreZnReMuDmSpBEr4JGOBxk7TXx0xiGDM5NZWTHg+sz5u0ZUjyRJmnDjkMG5ri0HjY3ZtS0Hja3puh5JkmhWMu56DI5jekZlHDI4F7XlQUke054k2wCrgfuBKzdRz5XAA8Dq9rnZ9WxGM1B59vskSdKUWvIAp6rWAucDOwFv67l8IrA1cEZV3TdzMsmqJI+ZzVRV9wJntPef0FPPUW39X3ElY0nSMJqtGjbr9HAMzuiMQxcVwFtptlg4JcmBwDXAXjRr1qwB3t1z/zVt2ZvrexewP/COJLsDXwOeDbwS+BEbBlCSJA3UfReVRmXJMzjwaBZnT+B0msDmOGAXmu0V9h5mH6q2ntuBFwOnAL/S1rMX8Glgj/Y9kiRpyo1LBoequplmU8xh7h0YUlfVHTSbdB7TUdMkSctQEdZ3nAcoBxmPzFhkcCRJkro0NhkcSZLGzSOOwZlYBjiSJPVR1f0g43Ia1cjYRSVJkqaOGRxJkgZY3/FeVBod/8lJkqSpYwZHkqQ+ivBIx9O6nSY+OgY4kiQN4ErGk8suKkmSNHXM4EiSNICDjCeX/+QkSZpASXZM8qkktyR5KMm6JCcn2X4OdVycpDZybDnguV9N8oUkP0ryYJLrkpyY5AndfcOFMYMjSVIfBazvfJBxN5LsAlwBPBU4B7gWeBHNPowHJ1k97EbVrRMHnH+4z7v3Ai4EtgDOAm4GXgL8T+DAJAdW1UNzePeiMMCRJGnyfJQmuDm6qk6dOZnkJOBY4P3AkcNWVlUnDHNfks2BTwNbAa+sqr9vz28GfAF4Tfv+Dwz77sViF5UkSX2FR6rbgw4yQm325iBgHfCRnsvvBe4DDk+y9YJftqH9gGcDX50JbgCqaj3wP9qPRyZZ8ulnZnAkSeqj2Yuq2zxAR3tRHdCW57eBxaz6654kl9MEQHsDFwxTYZLXAs8CfgpcA1w4oJvpJW15Xu+FqrohyRpgJbAzsHaYdy8WAxxJkkZrVZKr+12oqj2GeH63tlwz4Pr1NAHOSoYMcIAzez7/KMnbquqsebx7ZXssaYBjF5UkSQOsr3R6dGRFW9494PrM+e2GqOsc4OXAjsATgFXAn7XPfj7JwYv47kVlBkeSpNG6dshMzaKrqg/1nLoOeFeSW4BTaYKdDbqjJoEZHEmS+piZJt7l0dE08ZksyYoB12fO37WAd3ySZor47km2GfG7O2EGR5KkvjrtVnq0zg5c15YrB1zftS0HjZPZpKp6MMk9wPbA1sA9o3p3V8zgSJI0WS5qy4Pa9Wce1WZbVgP3A1fO9wVJdqMJbu4Bbpt16cK27B2bQ5KdaQKfm4Ab5vvurhjgSJI0wPrarNOjC1W1Fjgf2Al4W8/lE2kyLmdU1X0zJ5OsSrJq9o1JnpXkib31J3kKzWJ+AGdW1ezVjC+hmUa+b5JXzHpmM+CD7cfTqjqaEL8AdlFJkjR53kqzVcMpSQ6kCTr2olkjZw3w7p77r2nL2X1k+wGnJbmMJuNyB/AM4BCasTRX8fPF+wCoqkeSHEGTyTkryVnA94EDgT2By4HegctLwgBHkqQ+Cjofg9NVWqOq1ibZE3gfTXfRIcCtwIeBE6vqziGquZpm/Zs9gOcD29J0SX2bZtuFj1fVT/u8+5+TvJAmW3QQsA1Nt9T7gA+Mwz5UYIAjSdJAXW+22aWquhk4Ysh7N/giVfVt4I3zfPd3gcPm8+yoOAZHkiRNHTM4kiT1Ud2uPvxonRoNMziSJGnqmMGRJGmA7hf606iYwZEkSVNnrAKcJDsm+VSSW5I8lGRdkpOTbD+HOi5OUhs5tlzM7yBJmh5jupu4hjA2XVRJdqFZtOipNNu3Xwu8CDgGODjJ6qq6fQ5Vnjjg/MMDzkuS9KhxXgdHmzY2AQ7wUZrg5uiqOnXmZJKTgGOB9wNHDltZVZ3QdQMlSdJkGIsuqjZ7cxCwDvhIz+X3AvcBhyfZesRNkyQtY+tJp4dGZ1wyOAe05flVtX72haq6J8nlNAHQ3sAFw1SY5LXAs4Cf0uzBceFclo9OcvWAS6u+c+eT2eULQyeTNA9rf/u0pW7CsvCsc96y1E2Yert/5pilbsJUu/n2sdj2SGNoXAKc3dpyzYDr19MEOCsZMsCh2V9jth8leVtVnTWP9kmSlpliERb6M4szMuMS4Kxoy7sHXJ85v90QdZ0D/DnwDeB24JnAG4DjgM8neVlVnbepSqpqj37n28zOC4ZohyRpktUirIPjKOORGZcApzNV1ZuvvA54V5JbgFOBPwM2GeBIkqTJNRaDjPl5hmbFgOsz5+9awDs+STNFfPck2yygHknSMuE6OJNrXAKc69py5YDru7bloDE6m1RVDwL3tB+djSVJ0hQbly6qi9ryoCSbzZ5J1WZbVgP3A1fO9wVJdgO2pwlybltAWyVJy4AL/U22scjgVNVa4HxgJ+BtPZdPpMm4nFFV982cTLIqyarZNyZ5VpIn9taf5CnAp9uPZ1aVqxlLkjapKp0eGp1xyeAAvJVmq4ZTkhxIs3bNXjRr5KwB3t1z/zVtOfvfmP2A05JcBtwA3AE8AziEZhzPVcD/WKwvIEmSxsPYBDhVtTbJnsD7gINpgpJbgQ8DJ1bVnUNUczXN+jd7AM8HtqXpkvo28AXg41X100VoviRp6izG6sNmcUZlbAIcgKq6GThiyHs3+Lekqr4NvLHjZkmSpAkzVgGOJEnjwkHGk20sBhlLkiR1yQyOJEn9FN3PfDKFMzIGOJIkDeDqw5PLLipJkjR1zOBIktRH0X0XlT1Uo2MGR5IkTR0zOJIk9bUYO4A7pmdUDHAkSRqg7FOaWHZRSZKkqWMGR5KkPgo634vKhNDomMGRJElTxwyOJEn9uJLxRDPAkSRpAFcynlx2UUmSpKljBkeSpAGcJj65zOBIkqSpYwZHkqQ+3ItqspnBkSRJU8cAR5KkvkJVt0eXe1El2THJp5LckuShJOuSnJxk+yGf3zrJ7yT5X0muTXJfknuSXJXkuCS/MOC52shxZWdfcIHsopIkqZ9ahGniHfVRJdkFuAJ4KnAOcC3wIuAY4OAkq6vq9k1U8xvAZ4E7gIuAs4HtgVcAfw68OsmBVfVgn2dvAk7vc/4Hc/4yi8QAR5KkyfNRmuDm6Ko6deZkkpOAY4H3A0duoo4fAq8H/ndV/XRWHccDFwP7AG8D/qLPs+uq6oQFtH/R2UUlSdIAVd0eXWizNwcB64CP9Fx+L3AfcHiSrTf+3eqbVfW52cFNe/4efh7U7N9Fm5eCGRxJkibLAW15flWtn32hqu5JcjlNALQ3cME83/Gztnx4wPXtkrwJ2AG4G7i6qsZm/A0Y4EiS1NciThNfleTqvter9hiimt3acs2A69fTBDgrmX+A86a2PG/A9ecBfz37RJJ/AQ6vqm/P852dsotKkqQBup9F1YkVbXn3gOsz57ebT+VJjgIOBr4JfKrPLScBq4GnANsALwTOogl6Lkzy9Pm8t2tmcCRJGq1rh8zUjFySVwMn0wxAfk1V/az3nqo6rufUVcBhSc4CXgMcTzPQeUmZwZEkaYDq+OjITIZmxYDrM+fvmkulSV4FnAn8CNi/qm6YY7tOa8t95/jcojDAkSRpslzXlisHXN+1LQeN0dlAksOA/w38O7BfVV23iUf6+XFbbnT21qiMRYCT5NAkpya5NMlP2tUQPzvPuha0sqMkSTPGdAzORW15UJLH/B1Psg3N+Jj7gaFmNSX5HeBvgVtogpvr59muvdtyrpmfRTEWAQ7wHuAoYHfg3+ZbSbs2wNXAEcDXgA/R/KKPAf4pyZMW3FJJ0vLQdf9UR/1UVbUWOB/YiWYhvtlOpMmgnFFV982cTLIqyareupK8AfgM8H1g3011SyV5bpIt+p2nWVwQmtWRl9y4DDI+lmZ55+8B+/Hz6HSuuljZUZKkcfdWmq0aTklyIHANsBfNGjlrgHf33H9NWz6aRkpyAM0sqc1o/u4ekWyQZbqrqk6e9fkdwMuTXArcDDwErKKZdbU58AmabNCSG4sAp6oeDWj6/HKHMsTKjm+hWdnxuNlRrSRJ/XXarfRonV2oqrVJ9gTeRxNcHALcCnwYOLGq7hyimmfy856cNw245yaaWVUzzga2BZ4LvATYErgdOBf4RFX9/Zy+yCIaiwCnI6NY2VGSpLFQVTfTDMkY5t4NIquqOp3+G2ZurJ6zaYKcsTdNAU6nKzsOWmWSJhUnSZpyzUrG3dep0ZimAGdRV3aUJC0/3XdRaVSmKcDp1KBVJtvMzgtG3BxJkjQH0xTgLMrKjpKkZcwMzsQal3VwutD5yo6SJGkyTVMG5zErO86eSTWflR0lSctcdT/I2FHGozNxGZwkW7QrMu4y+/x8VnaUJEnTaSwyOO0Opq9qP+7Qli9Ocnr7821VdXz789NpVmS8iSaYmW2uKztKkjSYGZeJNRYBDs0eVG/oObdze0ATzBzPJnS0sqMkSYDTxCfZWAQ4VXUCcMKQ965jI2tdz2VlR0mSNJ3GIsCRJGks2UU1sSZukLEkSdKmmMGRJGkAx+BMLgMcSZL6KbrvorLLa2TsopIkSVPHDI4kSX2FjUzaXUCdGgUzOJIkaeqYwZEkaRDHzEwsAxxJkgYxwJlYdlFJkqSpYwZHkqRBXAdnYpnBkSRJU8cMjiRJfRRQHY/BcUjP6JjBkSRJU8cMjiRJ/bhVw0QzwJEkaRAHGU8su6gkSdLUMYMjSVIfAdJxl5L5oNExgyNJkqaOGRxJkgZxUPDEMsCRJGkQBxlPLLuoJEnS1DGDI0lSP66DM9HM4EiSpKljBkeSpEHMuEwsAxxJkgYxwJlYdlFJkqSpYwZHkqRBnCY+sczgSJKkqWMGR5KkAbrei0qjMxYZnCSHJjk1yaVJfpKkknx2HvWsa5/td/xwMdouSdJSSLJjkk8luSXJQ+3fwJOTbD/Hep7YPreureeWtt4dF/vdi2lcMjjvAZ4H3Av8AFi1gLruBk7uc/7eBdQpSVpuxnihvyS7AFcATwXOAa4FXgQcAxycZHVV3T5EPU9q61kJXAicSfM3+AjgZUleXFU3LMa7F9u4BDjH0gQ23wP2Ay5aQF13VdUJXTRKkqQx9VGaAOPoqjp15mSSk2j+pr4fOHKIev6UJrg5qaqOm1XP0cCH2/ccvEjvXlRj0UVVVRdV1fVVZW+nJEkb0WZQDgLWAR/pufxe4D7g8CRbb6KeXwQOb+8/oefyXwI3Af8lyc5dv3sUxiLA6djjk7w+ybuSHJPkgCSbL3WjJEmTJ9Xt0ZED2vL8qlo/+0JV3QNcDmwF7L2JevYGngBc3j43u571wFd63tfluxfduHRRdWkH4IyeczcmOaKqLhm2kiRXD7jUjA9aP+CqOvGsc96y1E1YFm585V8tdROm3i5fWPJM/XTbbCIT/6sG/Y2pqj2GeH63tlwz4Pr1NFmWlcAFC6yHtp6u373opi2D82ngQJogZ2vgOcDHgZ2Ac5M8b+maJkmaLGkW+uvyoJOFA1e05d0Drs+c324R6unq3YtuqjI4VXViz6nvAEcmuRc4jqaP8beGrKtvFN1G3S9YQDMlSZNicRJE1w6ZqdECTFsGZ5DT2nLfJW2FJEkLN5MlWTHg+sz5uxahnq7eveimKoOzET9uyyUf1S1JmiDjOcTnurZcOeD6rm05aJzMQurp6t2LbrlkcGZGc9+w0bskSRp/M2vFHZTkMX/Hk2wDrAbuB67cRD1XAg8Aq9vnZtezGc1g4dnv6/Ldi27iApwkWyRZ1c7Fn33+2f3m3SfZiWY+P8Cct3+QJC1f4zhNvKrWAufTTKB5W8/lE2l6K86oqvse/R7N383H7BJQVffSzDremg3XwTmqrf8rs1cyns+7l8pYdFEleRXwqvbjDm354iSntz/fVlXHtz8/HbiGZgGinWZV81rguCRfba/dA+wCvAzYEvgy8OeL8gUkSdNnjLdqAN5Ks13CKUkOpPm7uBfNOjVrgHf33H9NW/ZO43oXsD/wjiS7A18Dng28EvgRGwYx83n3khiLAAfYHXhDz7md2wOagOV4Nu4imvn5z6dJkW1NM8jpMpoI9QxXSpYkTYOqWptkT+B9NFspHALcSrO9wolVdeeQ9dye5MU0qxC/CvgN4HaaZVf+Z1X9YLHevdjGIsBp9446Ych719FnIYF2Eb+hF/KTJGmTxvh/i6vqZppNMYe5d+ACPFV1B81GmccsxruXysSNwZEkSdqUscjgSJI0jjrcP0ojZgZHkiRNHTM4kiQNMnjoisacAY4kSYPYRTWx7KKSJElTxwyOJEl9dLn68Ow6NRpmcCRJ0tQxgyNJ0iBmXCaWAY4kSQPYpTS57KKSJElTxwyOJEmDmMGZWGZwJEnS1DGDI0nSIGZwJpYBjiRJ/SzCOjgGTKNjF5UkSZo6BjiSJGnqGOBIkqSp4xgcSZIGcczMxDKDI0mSpo4ZHEmSBnCrhsllgCNJ0iAGOBPLLipJkjR1zOBIkjSIGZyJZQZHkiRNHTM4kiT141YNE80AR5KkQQxIJpZdVJIkaeqYwZEkqY/QfRdVuq1OGzEWGZwkT0ry+0n+Lsn3kjyQ5O4klyX5vSRzameSHZN8KsktSR5Ksi7JyUm2X6zvIEmSxse4ZHAOAz4G3ApcBHwfeBrwauCTwEuTHFZVm4ylk+wCXAE8FTgHuBZ4EXAMcHCS1VV1+6J8C0nSdHEMzsQalwBnDfAK4P9U1fqZk0neBXwNeA1NsPPFIer6KE1wc3RVnTqrrpOAY4H3A0d213RJ0tQywJlYY9FFVVUXVtWXZgc37fkfAqe1H/ffVD1t9uYgYB3wkZ7L7wXuAw5PsvVC2yxJksbXWAQ4m/Cztnx4iHsPaMvz+wRL9wCXA1sBe3fXPEnSVGrXwenyMCM0OuPSRdVXkscBv9t+PG+IR3ZryzUDrl9Pk+FZCVywiXdfPeDSqiHaIUmSltBYBzjAB4BfB75cVV8Z4v4VbXn3gOsz57dbYLskScuBGZeJNbYBTpKjgeNoZkEdPur3V9Ue/c63mZ0XjLg5kiRpDsYywElyFPBh4LvAgVV1x5CPzmRoVgy4PnP+rvm3TpK0bJjBmVhjF+AkeTvwIeA7NMHNj+bw+HVtuXLA9V3bctAYHUmSHtX5ZpsambGaRZXknTTBzTeBA+YY3ECzSCDAQb2rHyfZBlgN3A9cucCmSpI0sZLsk+TLSe5odw/4VpK3J9l8DnU8Pcl/S3Juu2PAQ0luT/IPSV494Jn9k9RGjg909R3HJoOT5I+B9wFXAwdtrFsqyRbALsDPqmrtzPmqWpvkfJqZUm8DTp312InA1sDHq+q+RfgKkqRpM4UZnCSvpFk490Hg88AdwMtpEgyraXYXGMZ/A94J3EiTYPgh8EyahXn/U5IPVdU7Bjx7CXBxn/OXDfnuTRqLACfJG2iCm0eAS4Gjkw22JFtXVae3Pz8duAa4Cdip57630mzVcEqSA9v79qJZI2cN8O7uv4EkSeMvybbAJ2j+3u5fVVe15/8YuBA4NMnrqurMIar7WlvHJT3veDZNT8mxST5XVf2WXbm4qk5YwFfZpLEIcIBnteXmwNsH3HMJcPqmKmqzOHvSBEwHA4fQ7HH1YeDEqrpzoY2VJC0DtQhjcJY+I3Qo8BTgMzPBDUBVPZjkPTRrxP0BsMkAp6r+vwHnr0nyeeDNNLsQDFpXblGNRYDTRnEnzOH+dWxk1/mquhk4YqHtkiQtc0sfkHTtJW3Zb/Hcr9KMU90nyeOr6qEFvGdTuxD8Sjtjeluarq1Lq+r6BbxvA2MR4EiStIysGrRa/qA12Do0cMX/qno4yY3ArwE70wzxmLO2G+w1NOHh+QNu+532mP3cF4E3d9XTMlazqCRJGivV8bH0FnXF/zQDaD8JPA34WFX1Bkk/Bv4QeA6wDU132UuBb9AERV/qnQU9X2ZwJEkarWsXkqlJso5mttKwPldVr5/v++boL2hmYV0KbDCDqqr+FfjXWafuBc5LcgXNEjGraWZ0nbPQhhjgSJI0wMDBnktrLc0U72HdMuvnRVvxP8n/CxxLM5bnZXMZw1NVP0nyv2hmOu+LAY4kSYtoPLqVHqOqDlzA49cBe9Ks+P+YcUBJHkczq/lh4Ia5VJrkQzSzoC8CfrOq7p9H237cllvP49kNOAZHkqTl48K2PLjPtX2BrYArhs2+pPERmuDmH2gyN/MJbgD2bss5BVeDGOBIktRHaNbB6fRY6i8FZwG3Aa9r14wDIMmWwJ+0Hz82+4EkWyVZleQZPecD/BXNArvnAq+oqgc29vLZ7+w5/3rgtcBPgS/M6RsNYBeVJEnLRDvW5c00gc7FSc6k2arhFTRTyM+i2b5hthfRdD1dQrNw34z/Cfw+8ADNAOE/7LMLwTer6uxZn89K8jBwFfADYEvghe07Hgb+a7vW3YIZ4EiS1M9iTO0egzE9VXV2kv1oBvS+hibI+B7NrKdTqmrYVs7sQvAE4I8G3PM3wNmzPn8M+E80s6WeTJPU+jeanQpOrqp/GfqLbIIBjiRJy0xVXU6zldEw915Mn961qnoj8MY5vveDwAfn8sx8GeBIkjTIGGRcND8GOJIkDdD5ZpsaGWdRSZKkqWMGR5KkQczgTCwzOJIkaeqYwZEkaQDH4EwuAxxJkvqZ0nVwlgu7qCRJ0tQxgyNJ0gB2UU0uMziSJGnqmMGRJGkQMzgTywBHkqRBDHAmll1UkiRp6pjBkSRpAAcZTy4zOJIkaeqYwZEkqR8X+ptoZnAkSdLUMYMjSVIfAVLdplzSaW3aGAMcSZIGsUtpYtlFJUmSps5YBDhJnpTk95P8XZLvJXkgyd1JLkvye0mGbmeSdUlqwPHDxfwekqTpkur20OiMSxfVYcDHgFuBi4DvA08DXg18EnhpksOqhu4MvRs4uc/5exfeVEmSNO7GJcBZA7wC+D9VtX7mZJJ3AV8DXkMT7HxxyPruqqoTum6kJGmZMesyscaii6qqLqyqL80ObtrzPwROaz/uP/KGSZKWr467p7IY6+pooHHJ4GzMz9ry4Tk88/gkrweeAdwHfAv4alU90nXjJEnS+BnrACfJ44DfbT+eN4dHdwDO6Dl3Y5IjquqSId999YBLq351+x9x6W+fMofmaK52/8wxS92EZWGXLxy51E2Yemt/+7RN36R5e+Enb1vcF5hxmVhj0UW1ER8Afh34clV9ZchnPg0cSBPkbA08B/g4sBNwbpLnLUI7JUnSGBnbDE6So4HjgGuBw4d9rqpO7Dn1HeDIJPe29Z0A/NYQ9ewxoF1XAy8Ytj2SpMnl1O7JNZYZnCRHAR8GvgscUFV3dFDtTJ543w7qkiQtB9XxoZEZuwAnyduBU2kyLwe0M6m68OO23Lqj+iRJ0pgaqy6qJO+kGXfzTeA/V1WXo8f2bssbOqxTkjTF7KKaXGOTwUnyxzTBzdXAgRsLbpJskWRVkl16zj87yQYZmiQ7AX/Zfvxsd62WJEnjaCwyOEneALwPeAS4FDg62WBT+XVVdXr789OBa4CbaGZHzXgtcFySr7bX7gF2AV4GbAl8GfjzRfkSkqTpUtUcXdepkRiLAAd4VltuDrx9wD2XAKdvop6LgN2A5wOracbb3AVcRrMuzhlz2M9KkrSMhe67qDb4X3ctmrEIcNp9o06Yw/3r6PPvSbuI31AL+UmSpOk1FgGOJEljyZz/xBqbQcaSJEldMYMjSdIAWb/ULdB8mcGRJElTxwyOJEn9LMb2Co7pGRkzOJIkDZDq9hgXSfZJ8uUkdyR5IMm3krw9yeZzrKc2cly5ked+M8nFSe5Ocm+Sf27XxOuMGRxJkpaRJK8Evgg8CHweuAN4OfAhmjXkDptjlTfRf526Hwx4/1E0e07eTrO7wE+BQ4HTkzynqo6f4/v7MsCRJGmQKVsbNsm2wCdodg7Yv6quas//MXAhcGiS11XVmXOodl27nt0w79+JZkeBO4A923XtSPI+4P/S7Ebwxar6pzm8vy+7qCRJWj4OBZ4CnDkT3ABU1YPAe9qPf7CI738T8HjgL2eCm/b9dwJ/2n48sosXmcGRJGmARRo3syrJ1f0uVNUei/LGn3tJW57X59pXgfuBfZI8vqoeGrLO7ZK8CdgBuBu4uqoGjb/Z2PvP7blnQQxwJEkaZLp6qKDZrxFgTe+Fqno4yY3ArwE702xqPYznAX89+0SSfwEOr6pvz+H9tya5D9gxyVZVdf+Q7+/LAEeSpNG6dgSZmkFWtOXdA67PnN9uyPpOohmwvIZm0PIq4J00XWEXJtm9qv5tju/fur1vQQGOY3AkSeqn4yni6WhdnSTrNjE9u/f47MLf2l9VHVdVV1TVbVV1b1VdVVWH0QQ9TwY6mRE1H2ZwJEmaLGtpsiXDumXWzzOZkxX9bpx1/q45tqnXacBrgH17zt9NE/isoJkmPuj9gzI8QzPAkSRpkDGcJl5VBy7g8euAPYGVwGMGOid5HPAs4GHghgW8A+DHbbl1n/c/uX3/Y6aCJ/kP7f0/WOj4G7CLSpKkvkL3XVRZ6i/VrHUDcHCfa/sCWwFXzGEG1SB7t2VvoLSx97+0554FMcCRJGn5OAu4DXhdkj1nTibZEviT9uPHZj+QZKskq5I8o+f8c5Ns0fuCJM8F3t9+7B3/82ngIeCodtG/mWe2B97Vfjxtrl+qH7uoJEkaZPx6qBakqn6S5M00gc7FSc6kWVX4FTRTuM+i2b5hthcBFwGXAPvPOv8O4OVJLgVupglcVtFkZzanWTH5b3vef2OS/w6cAlyV5PP8fKuGHYG/6GIVYzDAkSRpWamqs5PsB7ybZiDwlsD3aAKWU6qGHnh0NrAt8Fyaxfm2pBk4fC7wiar6+wHvPzXJOpoZVr9L05v0XeA9VfU38/xaGzDAkSRpgHHaAbxLVXU5cMiQ915Mn+FDVXU2TZAzn/d/CfjSfJ4dlmNwJEnS1DGDI0lSPwWs7ziFM6UZoXFkgCNJ0iAGJBPLLipJkjR1zOBIkjTAtA4yXg7M4EiSpKljBkeSpEHGcC8qDccAR5KkfmoRuqiMl0bGLipJkjR1zOBIkjSIGZeJNTYZnCQfTHJBkpuTPJDkjiTfSPLeJE+aY107JvlUkluSPJRkXZKT291KJUnSlBunDM6xwNeBfwB+BGwN7A2cALwlyd5VdfOmKkmyC3AF8FTgHOBamp1QjwEOTrK6qm5flG8gSZoiRTofZGxKaFTGKcDZtqoe7D2Z5P3Au4A/At46RD0fpQlujq6qU2fVcxJNEPV+4MhOWixJmm7rl7oBmq+x6aLqF9y0vtCWu26qjjZ7cxCwDvhIz+X3AvcBhyfZep7NlCRJE2BsApyNeHlbfmuIew9oy/Or6jFxd1XdA1wObEXT9SVJ0kApSFXHx1J/q+VjnLqoAEhyPPCLwApgT+A/0gQ3Hxji8d3acs2A69fTZHhWAhdsoh1XD7i0aoh2SJKkJTR2AQ5wPPC0WZ/PA95YVT8e4tkVbXn3gOsz57ebX9MkScuKGZeJNXYBTlXtAJDkacA+NJmbbyT5zar6+gjbsUe/821m5wWjaockSZq7sR2DU1X/XlV/R9Ol9CTgM0M8NpOhWTHg+sz5uxbWOknSslDV7aGRGbsMTq+quinJd4Hdkzy5qm7byO3XteXKAddnZmINGqMjSdKjHBQ8ucY2g9Pjl9rykU3cd1FbHpTkMd8tyTbAauB+4MpumydJksbJWAQ4SVYm2aBbKclm7UJ/TwWuqKo72/NbJFnVrnvzqKpaC5wP7AS8rae6E2lWRz6jqu5bhK8hSZo2dlFNrHHpojoE+LMklwE3ArfTzKTaD9gZ+CHw5ln3Px24BriJJpiZ7a00WzWckuTA9r69aNbIWQO8e9G+hSRJGgvjEuD8I/ArNGvePJ9mGvd9NAHJGcApVXXHMBVV1dokewLvAw6mCZ5uBT4MnDiTBZIkaaMK0vVWDSZxRmYsApyq+g5w1BzuXwdkI9dvBo5YeMskScua3UoTayzG4EiSJHVpLDI4kiSNJRM4E8sMjiRJmjpmcCRJ6qvZAbzrOjUaBjiSJPVTdD/I2PhmZOyikiRJU8cMjiRJg3S9Do5GxgyOJEmaOmZwJEkaoPtBxhoVMziSJGnqmMGRJGkQMzgTywBHkqR+nCY+0eyikiRJU8cMjiRJgzhNfGKZwZEkaZlJsk+SLye5I8kDSb6V5O1JNp9DHSckqU0ca3ue2X8T93+gq+9oBkeSpD6yCHtRZQwG4SR5JfBF4EHg88AdwMuBDwGrgcOGrOrijVx7OfAC4NwB1y8Z8PxlQ757kwxwJEkaZMpmUSXZFvgE8Aiwf1Vd1Z7/Y+BC4NAkr6uqMzdVV1VdTJ8gpc0C/V778a8GPH5xVZ0w1/bPhV1UkiQtH4cCTwHOnAluAKrqQeA97cc/WOA7DgF2BK6sqm8tsK55M4MjSVI/0zlN/CVteV6fa18F7gf2SfL4qnponu94S1sOyt4A/EqSo4BtgR8Cl1bV9fN8X18GOJIkjdaqJFf3u1BVeyzyu3dryzV93v1wkhuBXwN2Bq6Za+VJdgReCtxNM75nkN9pj9nPfhF4c1XdOdf39mMXlSRJg1R1eyy9FW1594DrM+e3m2f9vwdsDny2qu7vc/3HwB8CzwG2oekueynwDeA1wJeSdBKbmMGRJGmQxVkH59qFZGqSrAOeOYdHPldVr5/v+4bVBiYzg4s/3u+eqvpX4F9nnboXOC/JFcA3aWZxvRw4Z6HtMcCRJGmyrKWZ4j2sW2b9PJOhWdHvxlnn75pjm6DJxPwyzeDib8/lwar6SZL/Bbwb2BcDHEmSFk/X6+B0oaoOXMDj1wF7AiuBx4wDSvI44FnAw8AN86h7ZnBx3+zNEH7cllvP8/nHcAyOJEnLx4VteXCfa/sCWwFXzHUGVZJfAl7GpgcXb8zebTmf4GoDBjiSJPXT9QDj8RhofBZwG/C6JHvOnEyyJfAn7cePzX4gyVZJViV5xkbqnRlcfEZVPTDoptnv7Dn/euC1wE+BLwzzRTbFLipJkpaJdqzLm2kCnYuTnEmzVcMraKaQn8WGGZgXARfRbK+wf2+dPYOLN7b2DcBZSR4GrgJ+AGwJvLB9x8PAf62qdXP+Yn0Y4EiSNMj6Jc+4dK6qzk6yH82A3tfQBBnfA94BnFI15zTTf6GZ1TXM4OKPAf+JZrbUk4EA/wacDpxcVf8yx3cPZIAjSdIgS9+ltCiq6nKaLRWGufdimkBk0PVzN3a9594PAh8c5t6FGpsxOEk+mOSCJDe3W7ffkeQbSd6b5ElzqGfdRrZh/+FifgdJkjQeximDcyzwdeAfgB/RTBPbGzgBeEuSvavq5iHruhs4uc/5exfeTEnSsjGlGZzlYJwCnG3b3UwfI8n7gXcBfwS8dci67lrsbdglSdL4Gpsuqn7BTWtmutiuo2qLJEmP7ibe6bHUX2r5GKcMziAvb8tvzeGZx7dz6p8B3Nc++9WqeqTrxkmSplUtwiwqI5xRGbsAJ8nxwC/S7IexJ/AfaQKUD8yhmh2AM3rO3ZjkiKq6ZMh29N3KHnjeddf/jN84+NY5NEdzdfPtH1rqJiwPm/kf28X2wk/ettRNmGrXXP9Ttnz8UBN4tMyMXYADHA88bdbn84A3VtWPB9zf69PApTS7ld4D7AwcRbNHxrlJXrzAefaPPPAgd3/z2z9bt4A6Rm1VW167pK2Ykx8sdQPmagJ/xxNnIn/HX5+4f5Un7ve80wMP1k8WrfZanO3EtfjGLsCpqh0AkjwN2Icmc/ONJL9ZVV8f4vkTe059Bzgyyb3AcTSzsn5riHrmvZX9uJnJRk3Tdxo3/o4Xn7/j0fD3rGkxNoOMe1XVv1fV3wEHAU8CPrPAKk9ry30XWI8kabmYrn2olpWxy+D0qqqbknwX2D3Jk6tqvh3anW7DLkmackX3g4yNcUZmbDM4PX6pLRcyC6rTbdglSdL4GosAJ8nKJCv6nN+sXejvqcAVVXVne36Lduv2XXruf3aSDTI0SXYC/rL9+NnOv4AkaQp1vQZOYQpndMali+oQ4M+SXAbcCNxOM5NqP5pZUD8E3jzr/qcD1wA3ATvNOv9a4LgkX22v3QPsAryMZrfULwN/vphfRJIkLb1xCXD+EfgVmjVvng9sR7NA3xqa9WxOqao7hqjnImC3to7VNONt7gIua+s5Yx7bwE88Z0MsPn/Hi8/f8Wj4e+6x/P5kTI2xCHCq6js0a9UMe/86+mzN3i7iN9RCfpIkaXqNRYAjSdJYMoMzsQxwJEnqp4D1Ha9kbLw0MmMxi0qSJKlLZnAkSeprMVYfNoUzKmZwJEnS1DGDI0nSIA4ynlgGOJIk9eNeVBPNLqoplmTHJJ9KckuSh5KsS3Jyku2Xum3TIMmhSU5NcmmSnySpJG4F0pEkT0ry+0n+Lsn3kjyQ5O4klyX5vST+96sjST6Y5IIkN7e/5zuSfCPJe5M8aanbJ82HGZwp1e7TdQXNPl7nANcCLwKOAQ5Osrqqbl/CJk6D9wDPA+4FfgCsWtrmTJ3DgI8Bt9KsUv59mi1cXg18EnhpksOW4+rki+BY4OvAPwA/olkFfm/gBOAtSfauqpuXrnlLp6rjaeIaGQOc6fVRmuDm6Ko6deZkkpNo/mP2fuDIJWrbtDiWJrD5Hs2+aRctbXOmzhrgFcD/qVl/ZZK8C/ga8BqaYOeLS9O8qbJtVT3Ye7Ld7PhdwB8Bbx15q6QFMMU7hdrszUHAOuAjPZffS7PP1+H9dl7X8Krqoqq63gzC4qiqC6vqS9Xzv9BV9UPgtPbj/iNv2BTqF9y0vtCWu46qLeOlmjE4XR4OwhkZA5zpdEBbnt/nj8M9wOXAVjQpaGkS/awtH17SVky/l7flt5a0FUupqttDI2MX1XTarS3XDLh+PU2GZyVwwUhaJHUkyeOA320/nreUbZk2SY4HfhFYAewJ/Eea4OYDS9kuaT4McKbTira8e8D1mfPbLX5TpM59APh14MtV9ZWlbsyUOZ5mIPeM84A3VtWPl6g9S8u9qCaaXVSSJkaSo4HjaGYFHr7EzZk6VbVDVQXYgWYA987AN5K8YGlbJs2dAc50msnQrBhwfeb8XYvfFKkbSY4CPgx8Fzigqu5Y4iZNrar696r6O5qu7CcBn1niJi0dx+BMLAOc6XRdW64ccH1mRsSgMTrSWEnyduBU4Ds0wc0Pl7ZFy0NV3UQTUP5akicvdXukuXAMznSaWY/loCSb9awhsg2wGrgfuHIpGifNRZJ30oy7+Sbwn6vqtqVt0bLzS235yJK2YgkURXU8BqcchDMyZnCmUFWtBc4HdgLe1nP5RJpVSs+oqvtG3DRpTpL8MU1wczVwoMFN95KsTLJBd3aSzdqF/p4KXFFVd46+dUus6L6LyvhmZMzgTK+30mzVcEqSA4FrgL1o1shZA7x7Cds2FZK8CnhV+3GHtnxxktPbn2+rquNH3KypkeQNwPtoMgeXAkcn6b1tXVWdPuKmTZtDgD9LchlwI3A7zUyq/WgGGf8QePPSNU+aHwOcKVVVa5PsSfMH4mCa/4jdSjNI88Rl+X9j3dsdeEPPuZ3bA+Ammmm3mp9nteXmwNsH3HMJcPooGjPF/hH4FZo1b55Ps3zEfTT/I3QGcMqyHtDd9W7iGpm4yrwkSY+V5Opt8sQXvPjxh3Ra7z899GXuqTu+XlV7dFqxNmAGR5Kkvgo6303cpMKoGOBIktRPQXXdRWV8MzLOopIkaZlIskWSY5J8Osk3k/w0SSX5/QXUuU+SLye5I8kDSb6V5O1JNt/IM7+Z5OIkdye5N8k/txMLOmMGR5KkQTrvolpyWwMntz//O80suV+eb2VJXgl8EXgQ+DxwB80u9B+iWXPtsD7PHEWzcOftwGeBnwKHAqcneU5Xs0/N4EiStHzcTzOr9peqagfgU/OtKMm2wCdolnLYv6p+r6r+O80M038CDk3yup5ndgL+nCYQ2rOq3lZVxwLPBdYCxyV58XzbNJsBjiRJA9T66vRYalX106o6t6pu7aC6Q4GnAGdW1VWz3vEg8J724x/0PPMm4PHAX1bVulnP3An8afvxyA7aZheVJEn9OYtqE17Sluf1ufZVmmzRPkkeX1UPDfHMuT33LIgBjiRJfdzHPfxz/WPndQKrklzd7/qErY+zW1tusHFzVT2c5Ebg12gWP71miGduTXIfsGOSrarq/oU0zgBHkqQNXbueR7iHuxaj7p0Wo9IlMLOH2d0Drs+c326Oz2zd3meAI0lSl6rqd5a6DYMkWQc8cw6PfK6qXr9IzRlbBjiSJE2WtTTTsod1yyK1YyYLs8Fu9D3n7+p55snttds38sygDM/QDHAkSZogVXXgUrehdR2wJ7ASeMyYoiSPo9kw92Hghp5nntw+8089z/wHmu6pHyx0/A04TVySJM3PhW15cJ9r+wJbAVfMmkG1qWde2nPPghjgSJKkgZKsSLKqzbDMdhZwG/C6JHvOun9L4E/ajx/reebTwEPAUe2ifzPPbA+8q/14WiftrpqqOfmSJGkjkvwhsKr9uDvwPOAK4Pr23GVV9clZ97+RJjD5m6p6Y09dr6IJdB4EzqRZofgVNNPBzwJ+u3oCjST/DTiFZgzO5/n5Vg07An/R1VYNjsGRJGl5ORjYr+fcPu0x45MMoarOTrIf8G7gNcCWwPeAdwCn9AY37TOntjPBjgd+l6Y36bvAe6rqb+b2VQYzgyNJkqaOY3AkSdLUMcCRJElTxwBHkiRNHQMcSZI0dQxwJEnS1DHAkSRJU8cAR5IkTR0DHEmSNHUMcCRJ0tQxwJEkSVPHAEeSJE0dAxxJkjR1DHAkSdLUMcCRJElTxwBHkiRNHQMcSZI0dQxwJEnS1Pn/AdDVqQjGSk37AAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "image/png": { + "height": 241, + "width": 284 + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# computing conditional coefficient matrix using the same condition\n", + "cond_coeff_mat = inferencer.conditional_corrcoeff(condition=condition, limits=limits)\n", + "\n", + "fig, ax = plt.subplots(1,1, figsize=(4, 4))\n", + "im = plt.imshow(cond_coeff_mat, clim=[-1, 1])\n", + "_ = fig.colorbar(im)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "7ed79a8f-187d-41bf-abbe-cac82160dbbb", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "aea058a947a944fc9f73e669a38cd97e", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Drawing 1 posterior samples: 0%| | 0/1 [00:00" + ] + }, + "metadata": { + "image/png": { + "height": 228, + "width": 618 + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# generate traces from a single sample of parameters\n", + "inf_traces = inferencer.generate_traces(output_var='v')\n", + "\n", + "nrows = 2\n", + "ncols = out_traces.shape[0]\n", + "fig, axs = subplots(nrows, ncols, sharex=True,\n", + " gridspec_kw={'height_ratios': [3, 1]}, figsize=(9, 3))\n", + "for idx in range(ncols):\n", + " spike_idx = np.in1d(t, spike_times[idx]).nonzero()[0]\n", + " spike_v = (out_traces[idx, :].min(), out_traces[idx, :].max())\n", + " axs[0, idx].plot(t, out_traces[idx, :].T, 'C3-', lw=3, label='recordings')\n", + " axs[0, idx].plot(t, inf_traces[idx, :].T/mV, 'k--', lw=2,\n", + " label='sampled traces')\n", + " axs[1, idx].plot(t, inp_traces[idx, :].T/nA, lw=3, c='k', label='stimuli')\n", + " axs[1, idx].set_xlabel('$t$, ms')\n", + " if idx == 0:\n", + " axs[0, idx].set_ylabel('$V$, mV')\n", + " axs[1, idx].set_ylabel('$I$, nA')\n", + "handles, labels = [(h + l) for h, l\n", + " in zip(axs[0, idx].get_legend_handles_labels(),\n", + " axs[1, idx].get_legend_handles_labels())]\n", + "fig.legend(handles, labels)\n", + "tight_layout;" + ] + }, + { + "cell_type": "markdown", + "id": "59d9e91e-7e22-4e9a-9ff0-7ddb2207b030", + "metadata": {}, + "source": [ + "# Integrate-and-Fire model: spike inference from synthetic trace" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "64968695-ad82-450e-bea7-1a2eb5ebd1e0", + "metadata": {}, + "outputs": [], + "source": [ + "from brian2 import *\n", + "from brian2modelfitting import Inferencer\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "73fc4301-ffab-4675-b68e-6534d1af5b1a", + "metadata": {}, + "outputs": [], + "source": [ + "%config InlineBackend.figure_format = 'retina'" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "ad802d6b-2976-4cae-86aa-f7bd276c802b", + "metadata": {}, + "outputs": [], + "source": [ + "# set parameters\n", + "dt = 0.1*ms\n", + "defaultclock.dt = dt\n", + "El = -70*mV\n", + "VT = -50*mV\n", + "DeltaT = 2*mV\n", + "ground_truth_params = {'gl': 30*nS, 'C': 1*nF}" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "d4635f4e-63d9-4d77-af5e-261cebb496cb", + "metadata": {}, + "outputs": [], + "source": [ + "# set input trace\n", + "inp_trace = np.hstack([np.zeros(int(round(5*ms/dt))),\n", + " np.ones(int(round(25*ms/dt))),\n", + " np.zeros(int(round(30*ms/dt)))]) * 10*nA\n", + "I = TimedArray(inp_trace, dt=dt)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "c83542d6-1d02-4ac7-9748-4cb1c5395a20", + "metadata": {}, + "outputs": [], + "source": [ + "# set the model equations\n", + "eqs = '''\n", + " dv/dt = (gl*(El - v) + gl*DeltaT*exp((v - VT) / DeltaT) + I(t)) / C : volt\n", + " gl : siemens (constant)\n", + " C : farad (constant)\n", + " '''" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "e1b40eec-43f7-472a-83b6-154546c77b0c", + "metadata": {}, + "outputs": [], + "source": [ + "# compute traces and spike trains\n", + "neurons = NeuronGroup(1, eqs,\n", + " threshold='v > -50*mV',\n", + " reset='v = -70*mV',\n", + " method='exponential_euler')\n", + "neurons.v = -70*mV\n", + "neurons.set_states(ground_truth_params)\n", + "monitor = StateMonitor(neurons, 'v', record=True)\n", + "smonitor = SpikeMonitor(neurons, record=True)\n", + "run(60*ms)\n", + "out_trace = monitor.v\n", + "spike_times = array(smonitor.t_)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "3c53dbc9-ac36-436a-8970-e8972541b361", + "metadata": {}, + "outputs": [], + "source": [ + "# inference procedure\n", + "start_scope()\n", + "El = -70*mV\n", + "VT = -50*mV\n", + "DeltaT = 2*mV\n", + "eqs_inf = '''\n", + " dv/dt = (gl*(El - v) + gl*DeltaT*exp((v - VT) / DeltaT) + I_syn) / C : volt\n", + " gl : siemens (constant)\n", + " C : farad (constant)\n", + " '''\n", + "\n", + "features = [\n", + " lambda x: x.size, # number of spikes\n", + " lambda x: 0. if np.diff(x).size == 0 else np.mean(np.diff(x)), # mean inter-spike interval\n", + " ]\n", + "\n", + "inferencer = Inferencer(dt=dt, model=eqs_inf,\n", + " input={'I_syn': inp_trace.reshape(1, -1)},\n", + " output={'spikes': [spike_times]},\n", + " features={'spikes': features},\n", + " method='exponential_euler',\n", + " threshold='v > -50*mV',\n", + " reset='v = -70*mV',\n", + " param_init={'v': -70*mV})" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "54451813-a222-4ff1-aa22-b31e3fda411f", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "The state monitor object is not defined.\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "98d56a92a892417c8c218c7e5f8c01a3", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Extracting features: 0%| | 0/1 [00:00" + ] + }, + "metadata": { + "image/png": { + "height": 386, + "width": 378 + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# sample and pairplot\n", + "samples = inferencer.sample((7_000, ))\n", + "labels = {'gl': r'$\\overline{g}_{l}$', 'C': r'$C$'}\n", + "ticks = {'gl': [10*nS, 100*nS], 'C': [0.1*nF, 10*nF]}\n", + "inferencer.pairplot(labels=labels,\n", + " limits=ticks,\n", + " ticks=ticks,\n", + " points=ground_truth_params,\n", + " points_offdiag={'markersize': 9},\n", + " points_colors=['r'], \n", + " figsize=(6, 6));" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "b39ca278-0e53-41f2-b1b5-6a781020cb24", + "metadata": {}, + "outputs": [], + "source": [ + "# set up time domain\n", + "t = np.arange(0, inp_trace.size*dt/ms, dt/ms)\n", + "t_start, t_end = t[np.where(inp_trace != 0)[0][[0, -1]]]" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "fdc1c61e-759e-4d15-ab73-5a2cb6ff594e", + "metadata": {}, + "outputs": [], + "source": [ + "# identify spike events\n", + "spike_v = (out_trace.min()/mV, out_trace.max()/mV)\n", + "spike_idx = []\n", + "for spike_time in spike_times:\n", + " spike_idx.append(np.where(np.isclose(spike_time * 1000, t))[0].item())" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "b5776e70-8424-4590-94df-a604ba97db5e", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "9bb3352f6e0f416785bc36f6ec7da8ba", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Drawing 1 posterior samples: 0%| | 0/1 [00:00" + ] + }, + "metadata": { + "image/png": { + "height": 205, + "width": 493 + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# generate traces from a single sample of parameters\n", + "inf_trace = inferencer.generate_traces(output_var='v')\n", + "\n", + "nrows = 2\n", + "fig, axs = subplots(nrows, 1, sharex=True,\n", + " gridspec_kw={'height_ratios': [3, 1]}, figsize=(7, 3))\n", + "axs[0].plot(t, out_trace.T/mV, 'C3-', lw=3, label='recordings')\n", + "axs[0].plot(t, inf_trace.T/mV, 'k--', lw=2, label='sampled traces')\n", + "axs[0].vlines(t[spike_idx], *spike_v, lw=3, color='C0', label='spike event', zorder=3)\n", + "axs[0].set_ylabel('$V$, mV')\n", + "axs[0].legend()\n", + "axs[1].plot(t, inp_trace.T/nA, lw=3, c='k', label='stimuli')\n", + "axs[1].set_xlabel('$t$, ms')\n", + "axs[1].set_ylabel('$I$, nA')\n", + "axs[1].legend()\n", + "tight_layout();" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "926141b7-3567-44b5-82c8-d156f6cebbdc", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.10" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From ee73d296f0948e10c9291df5d1f5533044f01a7d Mon Sep 17 00:00:00 2001 From: antelk Date: Thu, 12 Aug 2021 16:08:19 +0200 Subject: [PATCH 074/121] remove uncecessary files --- examples/prototyping.ipynb | 921 ------------------------------------- 1 file changed, 921 deletions(-) delete mode 100644 examples/prototyping.ipynb diff --git a/examples/prototyping.ipynb b/examples/prototyping.ipynb deleted file mode 100644 index a8fcee3..0000000 --- a/examples/prototyping.ipynb +++ /dev/null @@ -1,921 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "28e8bc5d-26a6-4ac6-83c4-97b2a816c1c5", - "metadata": {}, - "source": [ - "# Hodgkin-Huxley model: traces+spikes inference from recordings" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "2f3614b7-b6ac-43a3-a0c6-d2b3ab32e929", - "metadata": {}, - "outputs": [], - "source": [ - "# imports\n", - "from brian2 import *\n", - "from brian2modelfitting import Inferencer\n", - "import pandas as pd\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "from scipy.stats import kurtosis as kurt" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "9d3fbd95-785a-4e0a-8a37-2feb0d86eb9e", - "metadata": {}, - "outputs": [], - "source": [ - "# pretty figures :3\n", - "%config InlineBackend.figure_format = 'retina'" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "cdc3ea42", - "metadata": {}, - "outputs": [], - "source": [ - "# load few recorded traces\n", - "df_inp_traces = pd.read_csv('input_traces_hh.csv')\n", - "df_out_traces = pd.read_csv('output_traces_hh.csv')\n", - "inp_traces = df_inp_traces.to_numpy()\n", - "inp_traces = inp_traces[[0, 1], 1:]\n", - "out_traces = df_out_traces.to_numpy()\n", - "out_traces = out_traces[[0, 1], 1:]" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "fb22019e-62b0-4bda-bc17-e2b1b7dc4ce3", - "metadata": {}, - "outputs": [], - "source": [ - "# set parameters and define the Hodgkin-Huxley model\n", - "area = 20_000*um**2\n", - "El = -65*mV\n", - "EK = -90*mV\n", - "ENa = 50*mV\n", - "VT = -63*mV\n", - "dt = 0.01*ms\n", - "eqs = '''\n", - " dv/dt = (gl*(El-v) - g_na*(m*m*m)*h*(v-ENa) - g_kd*(n*n*n*n)*(v-EK) + I)/Cm : volt\n", - " dm/dt = 0.32*(mV**-1)*(13.*mV-v+VT)/\n", - " (exp((13.*mV-v+VT)/(4.*mV))-1.)/ms*(1-m)-0.28*(mV**-1)*(v-VT-40.*mV)/\n", - " (exp((v-VT-40.*mV)/(5.*mV))-1.)/ms*m : 1\n", - " dn/dt = 0.032*(mV**-1)*(15.*mV-v+VT)/\n", - " (exp((15.*mV-v+VT)/(5.*mV))-1.)/ms*(1.-n)-.5*exp((10.*mV-v+VT)/(40.*mV))/ms*n : 1\n", - " dh/dt = 0.128*exp((17.*mV-v+VT)/(18.*mV))/ms*(1.-h)-4./(1+exp((40.*mV-v+VT)/(5.*mV)))/ms*h : 1\n", - " g_na : siemens (constant)\n", - " g_kd : siemens (constant)\n", - " gl : siemens (constant)\n", - " Cm : farad (constant)\n", - "'''" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "8a515f25-b94a-4082-97a5-e76fe3887140", - "metadata": {}, - "outputs": [], - "source": [ - "# set up time domain\n", - "t = np.arange(0, inp_traces.shape[1]*dt/ms, dt/ms)\n", - "t_start, t_end = t[np.where(inp_traces[0, :] != 0)[0][[0, -1]]]" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "9f2c4326-a247-49f9-829d-9559c4db1eae", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABNUAAAHJCAYAAACi+g9VAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAABYlAAAWJQFJUiTwAACeCElEQVR4nOzdd3ydZf3/8fd1RvZs0plOWmjLhpYlUChDmTJkU8SFIKCIwA8VUVCGfkFAZIgMWSIIiMiUvWdbVvfebTqy9xnX748ktU3uOznn5Mzk9Xw88kh7Xfe57k8Oofnkc1/DWGsFAAAAAAAAIHKeVAcAAAAAAAAAZBqKagAAAAAAAECUKKoBAAAAAAAAUaKoBgAAAAAAAESJohoAAAAAAAAQJYpqAAAAAAAAQJQoqgEAAAAAAABR8qU6AAAAAAAA0H/MmjUrV9IZko6QtIMkf2ojAnoVkLRM0muSHp8yZUpzJC8y1tqERgUAAAAAAAaGjoLan7xe7yFer3eQx+PJlWRSHRfQCxsOh5tDoVBVKBR6W9IlkRTWmKkGAAAAAADi5Qyv13tIbm7u0GHDhm0oKCho8nq94VQHBfQkFAp5Ghoa8jZs2DCsubn5kFAodIakv/X2OvZUAwAAAAAA8XKE1+sdNGzYsA3FxcUNFNSQCbxeb7i4uLhh6NChlV6vd5Daly73iqIaAAAAAACIlx08Hk9uQUFBU6oDAaJVWFjY2LFkeVwk11NUAwAAAAAA8eKXZJihhkzk8XjCat8DMCui6xMbDgAAAAAAAJD+jInuTA2KagAAAAAAAECUKKoBAAAAAAAAUaKoBgAAAAAAAESJohoAAAAAAACidvvtt5cZY6bcfvvtZdu2V1RU7FZRUbFbquJKFopqAAAAAAAAQJR8qQ4AAAAAAAAA/ccrr7yyKNUxJANFNQAAAAAAAMTNLrvs0prqGJKBohoAAAAAAEio+ZMmT0l1DLGYvGD+rFhet3DhwqxJkybtdvLJJ2/5zW9+s/4Xv/hFxYcfflhYU1Pj+89//rPouOOOq3/66aeLbr/99iFffvllfmNjo3fo0KFtxxxzTM3111+/vry8PNR1zKVLl/p/97vfDXvzzTeLKysrs7Kzs8OjR49uPeqoo2puuumm9dte++677+Zdd911wz/99NOChoYGb3l5eeCwww6rvf7669ePGTMmsO213/rWt8b+61//Kps7d+5XzzzzTMlDDz1UvmrVqpzdd9+98ZNPPlkoSXPmzMm+4oorKt5///2iQCBgJk2a1HzllVdud89tde6ntnbt2q86226//faySy65ZOyf/vSnFePGjWv73e9+N2Lu3Ll5xhhNnTq1/pZbblmz9957t3Qd68svv8y+4oorRn744YeF295748aNvs7xfvKTn2zpvP7jjz/Ove6664bNnj27YNOmTf78/PzQ8OHD2/bff/+Gu+++e012draN5r9lTyiqAQAAAAAAJMCKFSuyDzrooMljx45tOemkk6qam5tNSUlJ6LLLLht+yy23jCguLg4ddthhNYMHDw7OnTs3969//evQ119/vfiTTz6ZP2jQoHDnOO+8807eN7/5zZ1qa2u9U6dObTjmmGOqm5qaPIsWLcq95ZZbRmxbVPvHP/5RfO6554631uqoo46qHj16dNvnn3+e9/e//33wK6+8UvLOO+8smDRpUlvXWC+++OLRn376acH06dNrjzjiiFqv1ytJ+uqrr7KnTZs2qaamxjdt2rTa3XbbrXnZsmXZM2bMGD9t2rS6aN+TF198sfi1114rmTZtWt2MGTM2LVy4MOftt98uPuKII/Lnzp07d/jw4cHOaz/77LOcQw89dFJdXZ330EMPrd1ll12aV6xYkX3OOeeMP+SQQ2q7jv3xxx/nHnLIIZONMfbwww+vHTNmTGtdXZ13+fLl2Y888sjgW2+9dS1FNQAAAAAAgDQ3e/bsgosuumjDHXfcsbaz7bnnniu85ZZbRuy5556Nr7766uJtZ6V1zua64oorKu6///7VktTS0mLOPPPM8bW1td677757+QUXXFC17T2WLl3q7/xzbW2t50c/+tG4UChkXnjhhYVHHXVUQ2ffVVddNeyGG26o+P73vz/m/fffX9w11jlz5uR9+umn87oW3C644ILRNTU1vt/+9rerr7766o2d7Y8++mjJOeecMz7a9+S1114rffrppxedcMIJ9Z1tF110UcVdd9017M477yy77rrrKjvbL7zwwtF1dXXe3//+96uuvPLKTZ3t//znP4tOP/30HbuOfd9995W1traaRx55ZNmMGTNqtu3btGmTt6CgINz1NX3B6Z8AAAAAAAAJUFZWFrzpppvWbdt2++23D5Gke++9d0XXZZ4/+clPtkyaNKn5mWeeGdTZ9vjjjxevW7cu67DDDqvpWlCTpPHjx29dzvnYY4+V1NbWeo855piqbQtqknTNNddsGDFiRNsHH3xQtHjx4qyu4/z4xz/e0LWgtnTpUv8HH3xQVFFR0faLX/xi47Z9M2bMqNlnn30aFKVjjz22atuCWse9N0nSzJkz8zvblixZ4v/oo48KR48e3Xr55Zdv2vb60047re6AAw5wnSWXl5fXrXg2ePDgUOfsu3hhphoAAAAAAEACTJo0qSk3N3e75YafffZZgc/ns4899tigxx57rNtrAoGAqa6u9m3YsME7bNiw0IcfflggSd/4xjd6XWo5e/bsPEmaPn16fdc+v9+v/fbbr/6ZZ54p+/jjj/N23HHH7QpoBxxwQGPX13z88cd5krTPPvvU+3zdS0gHHXRQ/aefflrQW1zbmjJlSrf7jB8/vk2Samtrt97kk08+yZOkvffeu8GpGHbAAQc0fPjhh0Xbtp111llVf/vb34aeffbZ44866qjqww8/vH769OkNiTo4gaIaAAAAAABAAgwZMiTQta2mpsYbCoXMrbfeOryn19bV1XmHDRsWqq2t9UrSyJEju+2D5vQaSRoxYkS3+0rSsGHDApJUXV3drUo1cuRIx1g7vo5g175tx4tGSUlJt0MY/P72FayhUMhEeu+hQ4d2a58+fXrTyy+/vOD6668f/vLLL5f++9//LpOksWPHtvz85z9ff/7553eb6dcXFNUAAAAAAEBCxXqKZqYzxnRrKywsDIXDYVNbW/t5JGMUFxeHJGnNmjXdlmx2VVRUFJKk9evX+536N2zY4JecC1tOsXZet3HjRsf6Ued4idD5dbvdu7Ky0rH9iCOOaDziiCOWNDc3m/feey/vhRdeKH7ggQeGXHDBBeOGDh0aOPHEE7vN4osVe6oBAAAAAAAkyZ577tlYV1fnnTlzZk4k1x9wwAENkvTf//63qLdr99prryZJevvttwu79gUCAX3yySeFkrT//vs3RXLv/fbbr0mSPv3008JgsPuEsffee6/bfeJl3333bZbaD3sIhbrVANW5LNZNbm6uPfLIIxtvu+22dTfeeOMqSXrmmWdK4hkjRTUAAAAAAIAk+elPf1opSeedd97YFStWdJvpVVdX53n99de3bth/xhln1I4YMaLtjTfeKLnnnnsGdb1+29M/zz777Jri4uLQ888/P2jbMSTpd7/73dC1a9dmHXDAAXVd91NzM378+MDXvva1urVr12bdeOONQ7bte/TRR0ui3U8tGjvuuGPbvvvuW79q1arsm2++efC2fU899VRR1/3UJOnVV1/Nb2ho6DblrrKy0i85H2DQFyz/BAAAAAAASJITTjih/pe//OXaG2+8sWLy5Mm7HnroobVjxoxpa2ho8KxZsybrk08+KZwyZUrD4YcfvliScnJy7D/+8Y+lxx9//E4XXHDBuPvvv3/w1KlTG1paWjyLFi3K+eijj4qCweAsSSouLg7fcccdK7773e/ucPTRR088+uijq0eNGtX2+eef573//vtF5eXlgfvuu29lNPH+5S9/WTVt2rRJv/71r0e9/vrrRbvuumvzsmXLsl955ZWS6dOn17755pvFiXifJOmuu+5aNX369Ek///nPR//3v/8t3mWXXZpXrFiR9fLLL5cefvjhNa+//nqJx/O/+WJ/+MMfhn300UdFU6dOrR89enRbQUFBaMGCBbnvvPNOcVFRUejiiy/eHM/4KKoBAAAAAAAk0fXXX79h2rRpDX/605+GzJw5s+C1117zFRQUhIYOHRo466yzNn3729/ebkP9adOmNc2cOXPetddeO+zNN98s/uyzz4bm5+eHR48e3XL55Zev3fbaGTNm1IwaNWrBddddN/ydd94pamho8JaXlwfOOuusTddff/36sWPHRnW4wG677db67rvvLrj88ssr3n///aKPP/64cOLEic2PPvro0o0bN/oSWVSbMmVKy9tvv73gyiuvrPjwww8LP/zww8KJEyc2P/LII0vnzZuX8/rrr5d07r0mSRdeeOGmkpKS0GeffZY/a9asgmAwaIYOHRqYMWPGxl/+8peVO+20U0Qz9CJlrLW9XwUAAAAAANCLWbNmzczJyZm8yy67zE91LOjfvvnNb4577rnnBn3++edz9thjj9Z4jTt37tzJLS0t86dMmTK1t2vZUw0AAAAAAABpJxQKadWqVd1WWT777LOFL7744qDx48e3xLOgFi2WfwIAAAAAACDttLa2mh122GH3/fbbr37HHXds8fl8dsGCBbkffPBBkd/vt7fddtuqVMZHUQ0AAAAAAABpJysry5599tmb3n///aIvv/wyv7m52VNaWho8+uijq3/5y1+uP/DAA5tTGR9FNQAAAAAAAKQdn8+nhx56aHWq43DDnmoAAAAAAABAlCiqAQAAAAAAAFGiqAYAAAAAAABEiaIaAAAAAAAAECWKagAAAAAAAECUKKoBAAAAAAAAUaKoBgAAAAAAAESJohoAAAAAAAAQJYpqAAAAAAAAQJQoqgEAAAAAAKShioqK3SoqKnZLdRxdGWOm7LvvvhO3bfvZz342whgz5fnnny9MVVzJRlENAAAAAAAgBfbdd9+JxpgpqY4DsfGlOgAAAAAAAAB098orryxKdQyRuuKKKzaec845VRMmTGhLdSzJQlENAAAAAAAgDe2yyy6tqY4hUsOHDw8OHz48mOo4komiGgAAAAAASKhMXeJorZ0V62v//ve/F99xxx1DlyxZklNbW+srKSkJjhkzpvVb3/pW1UknnVQ7adKkrXulbfv+7LPPPg2ffPLJQql9TzVJWrt27Ved/bfffnvZJZdcMvZPf/rTilGjRgWuu+664fPnz8/Lzs4OH3744bV/+ctfVpeXl4fef//93F/96lcVs2bNKggGg2b//fevv/vuu1dNnDhxu5lkTvfo9LOf/WzErbfeOvy5555bdNxxx9X39PVGc21/QVENAAAAAAAgjm6++ebyK664Ykx5eXngiCOOqC0rKwtu2rTJN2/evLxHH320/Ac/+EHVpZdeuv6JJ54oW7duXdall166vvO1Y8eOjWh22vPPP1/y5ptvFk+fPr12xowZmz799NOCp59+umz16tVZN9xww9rjjjtup6lTpzacccYZm+fNm5f75ptvFh933HE7LliwYK7X603cFz+AUFQDAAAAAACIo7/97W+D/X6//fzzz+dVVFRstyRy/fr1vvLy8tAtt9yy7r333itct25d1i233LIu2nu88cYbJc8+++zCY489tkGSQqGQDj744B0//PDDopNPPnnHW265ZeWPfvSjqs7rTzvttDFPPvlk+T/+8Y+SGTNm1PT5iwRFtXRhjFkuqUjSihSHAgBAOhkrqc5aOy7VgQwE5CMAgL564oknJk2YMCFnzpw5k1MdSzzMmTNnciAQyPZ4PKE99tij2/LInni9XpuVlWW7tsdr37HjjjuuqrOg1nE/nXXWWVUffvhh0Y477ti8bUFNks4999wtTz75ZPlnn32WS1EtPiiqpY+i3NzcQZMnTx6U6kAAAEgX8+fPV3Nzc6rDGEjIRwAAfdK5rNDj8eSlOJS48Hg8edZahcPhqF536qmnVl177bUjd955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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "image/png": { - "height": 228, - "width": 618 - }, - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# visualize the recordings\n", - "nrows = 2\n", - "ncols = out_traces.shape[0]\n", - "fig, axs = subplots(nrows, ncols, sharex=True,\n", - " gridspec_kw={'height_ratios': [3, 1]}, figsize=(9, 3))\n", - "for idx in range(ncols):\n", - " axs[0, idx].plot(t, out_traces[idx, :].T, lw=3, c='C3', label='recordings')\n", - " axs[1, idx].plot(t, inp_traces[idx, :].T/nA, lw=3, c='k', label='stimuli')\n", - " axs[1, idx].set_xlabel('$t$, ms')\n", - " if idx == 0:\n", - " axs[0, idx].set_ylabel('$V$, mV')\n", - " axs[1, idx].set_ylabel('$I$, nA')\n", - "handles, labels = [(h + l) for h, l\n", - " in zip(axs[0, idx].get_legend_handles_labels(),\n", - " axs[1, idx].get_legend_handles_labels())]\n", - "fig.legend(handles, labels)\n", - "tight_layout();" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "4bec8cef-8df3-4f55-9db2-a408a0898d71", - "metadata": {}, - "outputs": [], - "source": [ - "# get spike times manually\n", - "def get_spike_times(x):\n", - " x = x.copy()\n", - " # put everything to -40 mV that is below -40 mV or has negative slope\n", - " ind = np.where(x < -0.04)\n", - " x[ind] = -0.04\n", - " ind = np.where(np.diff(x) < 0)\n", - " x[ind] = -0.04\n", - "\n", - " # remaining negative slopes are at spike peaks\n", - " ind = np.where(np.diff(x) < 0)\n", - " spike_times = np.array(t)[ind]\n", - " \n", - " # spike times for active stimulus\n", - " spike_times_stim = spike_times[\n", - " (spike_times > t_start) & (spike_times < t_end)\n", - " ]\n", - " \n", - " # number of spikes\n", - " if spike_times_stim.shape[0] > 0:\n", - " spike_times_stim = spike_times_stim[\n", - " np.append(1, np.diff(spike_times_stim)) > 0.5\n", - " ]\n", - " return spike_times_stim / 1000 # in seconds\n", - "\n", - "# store spike times for each trace into the list\n", - "spike_times = [get_spike_times(out_trace) for out_trace in out_traces]" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "3927d071-390b-4e20-8d3e-bfd7012ec762", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABNUAAAHJCAYAAACi+g9VAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAABYlAAAWJQFJUiTwAACk/klEQVR4nOzdd3iVRdoG8HtOSe+dhBIIVRSBUC0gCorYGyCgruva29rW7uraFz9U7IoVRBFdCxZEAUUFlI70Gnp6b6fO90cIJjnvm9PeU3P/ritXlpk5M08iy5nzvFOElBJERERERERERETkOl2gAyAiIiIiIiIiIgo1TKoRERERERERERG5iUk1IiIiIiIiIiIiNzGpRkRERERERERE5CYm1YiIiIiIiIiIiNzEpBoREREREREREZGbmFQjIiIiIiIiIiJykyHQARARERERERFR8FuzZk00gMkAxgLoAcAY2IiINGMBsAfAjwA+zs/Pb3DlRUJK6dOoiIiIiIiIiCi0HU2ovajX60fr9foUnU4XDUAEOi4ijUi73d5gs9nKbTbbzwBudyWxxpVqREREREREROTMZL1ePzo6OjozKyurMC4url6v19sDHRSRFmw2m662tjamsLAwq6GhYbTNZpsM4F1nr+OZakRERERERETkzFi9Xp+SlZVVmJiYWMuEGoUTvV5vT0xMrM3MzCzS6/UpaNri7BSTakRERERERETkTA+dThcdFxdXH+hAiHwlPj6+7ujW5u6utGdSjYiIiIiIiIicMQIQXKFG4Uyn09nRdFZghEvtfRsOERERERERERFR8BPCvbs3mFQjIiIiIiIiIiJyE5NqREREREREREREbmJSjYiIiIiIiIiIyE1MqhERERERERERUSszZ85MFULkz5w5M7VleU5Ozgk5OTknBCquYMKkGhERERERERERkZsMgQ6AiIiIiIiIiIhCw6JFi3YEOoZgwaQaERERERERERG5pH///qZAxxAsmFQjIiIiIiIiIo9s7dsvP9AxeKLftq1rPH3t9u3bI/r27XvCxRdfXPbvf//7yP3335+zYsWK+MrKSsNXX32149xzz6357LPPEmbOnJmxcePG2Lq6On1mZqZ5woQJlU8++eSRtLQ0W9s+d+/ebXz88cezli5dmlhUVBQRGRlp79q1q2n8+PGV06dPP9Ky7S+//BLzxBNPdFq1alVcbW2tPi0tzXL66adXPfnkk0e6detmadn2kksuyf3f//6Xunnz5j8///zzpPfffz9t//79UQMGDKj7448/tgPApk2bIu+5556c3377LcFisYi+ffs23Hvvva3GbKn5PLVDhw792Vw2c+bM1Ntvvz33xRdfLOjevbv58ccfz968eXOMEAJDhgypmTFjxsHBgwc3tu1r48aNkffcc0/nFStWxLccu7i42NDc32233VbW3P7333+PfuKJJ7LWrl0bV1JSYoyNjbV16tTJPGLEiNrXXnvtYGRkpHTnv6W3mFQjIiIiIiIiInJTQUFB5CmnnNIvNze38aKLLipvaGgQSUlJtrvuuqvTjBkzshMTE22nn356ZXp6unXz5s3Rb775ZubixYsT//jjj60pKSn25n6WLVsWc/755/euqqrSDxkypHbChAkV9fX1uh07dkTPmDEju2VS7aOPPkq86qqr8qSUGD9+fEXXrl3N69evj/nwww/TFy1alLRs2bJtffv2NbeN9ZZbbum6atWquDFjxlSNHTu2Sq/XAwD+/PPPyFGjRvWtrKw0jBo1quqEE05o2LNnT+S0adPyRo0aVe3u7+Tbb79N/PHHH5NGjRpVPW3atJLt27dH/fzzz4ljx46N3bx58+ZOnTpZm9uuW7cu6rTTTutbXV2tP+2006r69+/fUFBQEHnFFVfkjR49uqpt37///nv06NGj+wkh5BlnnFHVrVs3U3V1tX7v3r2Rs2fPTn/++ecPMalGRERERERERBTk1q5dG3fzzTcXvvzyy4eayxYsWBA/Y8aM7IEDB9b98MMPO1uuSmtezXXPPffkvP322wcAoLGxUVx++eV5VVVV+tdee23vDTfcUN5yjN27dxub/3dVVZXuxhtv7G6z2cQ333yzffz48bXNdQ8++GDWU089lXPNNdd0++2333a2jXXTpk0xq1at2tI24XbDDTd0raysNPznP/858PDDDxc3l8+ZMyfpiiuuyHP3d/Ljjz8mf/bZZzsuuOCCmuaym2++OefVV1/NeuWVV1KfeOKJoubym266qWt1dbX+mWee2X/vvfeWNJd/8sknCZMmTerVtu9Zs2almkwmMXv27D3Tpk2rbFlXUlKij4uLs7d9ja/x9k8iIiIiIiIiIjelpqZap0+ffrhl2cyZMzMA4K233ipou83ztttuK+vbt2/D559/ntJc9vHHHycePnw44vTTT69sm1ADgLy8vGPbOefOnZtUVVWlnzBhQnnLhBoAPProo4XZ2dnm5cuXJ+zcuTOibT+33nprYduE2u7du43Lly9PyMnJMd9///3FLeumTZtWOXTo0Fq46ZxzzilvmVA7OnYJAKxevTq2uWzXrl3GlStXxnft2tV09913l7RsP3HixOqRI0eqrpKLiYlxSJ6lp6fbmlff+RNXqhERERERERERualv37710dHRrbYbrlu3Ls5gMMi5c+emzJ071+E1FotFVFRUGAoLC/VZWVm2FStWxAHAWWed5XSr5dq1a2MAYMyYMTVt64xGI4YPH17z+eefp/7+++8xvXr1apVAGzlyZF3b1/z+++8xADB06NAag8ExPXTKKafUrFq1Ks5ZXC3l5+c7jJOXl2cGgKqqqmOD/PHHHzEAMHjw4FqlZNjIkSNrV6xYkdCybMqUKeXvvvtu5tSpU/PGjx9fccYZZ9SMGTOmNpAXJzCpRkRERERERETkpoyMDEvbssrKSr3NZhPPP/98p/ZeW11drc/KyrJVVVXpAaBz584O56ApvQYAsrOzHcYFgKysLAsAVFRUOGSpOnfurBjr0Z/D2rauZX/uSEpKcriEwWhs2sFqs9mEq2NnZmY6lI8ZM6Z+4cKF25588slOCxcuTP7iiy9SASA3N7fxvvvuO3L99dc7rPTzNSbViIiIiIiIiMgj3tyiGeqEEA5l8fHxNrvdLqqqqta70kdiYqINAA4ePOiwZbOthIQEGwAcOXLEqFRfWFhoBJQTW0qxNrcrLi5WzA019+cLzT+32thFRUWK5WPHjq0bO3bsroaGBvHrr7/GfPPNN4nvvPNOxg033NA9MzPTcuGFFzqs4vMlnqlGRERERERERKSBgQMH1lVXV+tXr14d5Ur7kSNH1gLA999/n+Cs7aBBg+oB4Oeff45vW2exWPDHH3/EA8CIESPqXRl7+PDh9QCwatWqeKvVccHYr7/+6jCOVoYNG9YANF32YLM55ADRvC1WTXR0tBw3blzdCy+8cPjpp5/eDwCff/55ki9ibQ+TakREREREREREGvjnP/9ZBADXXnttbkFBgcNKr+rqat3ixYuPHdg/efLkquzsbPOSJUuS3njjjZS27Vve/jl16tTKxMRE29dff53Ssg8AePzxxzMPHToUMXLkyOq256mpycvLs5x00knVhw4dinj66aczWtbNmTMnyd3z1NzRq1cv87Bhw2r2798f+dxzz6W3rPv0008T2p6nBgA//PBDbG1trcOSu6KiIiOgfIGBr3H7JxERERERERGRBi644IKaBx544NDTTz+d069fv+NPO+20qm7duplra2t1Bw8ejPjjjz/i8/Pza88444ydABAVFSU/+uij3eedd17vG264ofvbb7+dPmTIkNrGxkbdjh07olauXJlgtVrXAEBiYqL95ZdfLrj66qt7nH322X3OPvvsii5dupjXr18f89tvvyWkpaVZZs2atc+deF9//fX9o0aN6vvII490Wbx4ccLxxx/fsGfPnshFixYljRkzpmrp0qWJvvg9AcCrr766f8yYMX3vu+++rt9//31i//79GwoKCiIWLlyYfMYZZ1QuXrw4Saf7ay3Ys88+m7Vy5cqEIUOG1HTt2tUcFxdn27ZtW/SyZcsSExISbLfcckupr2JVw6QaEREREREREZFGnnzyycJRo0bVvvjiixmrV6+O+/HHHw1xcXG2zMxMy5QpU0quvPLKVgfqjxo1qn716tVbHnvssaylS5cmrlu3LjM2NtbetWvXxrvvvvtQy7bTpk2r7NKly7Ynnnii07JlyxJqa2v1aWlplilTppQ8+eSTR3Jzc926XOCEE04w/fLLL9vuvvvunN9++y3h999/j+/Tp0/DnDlzdhcXFxt8mVTLz89v/Pnnn7fde++9OStWrIhfsWJFfJ8+fRpmz569e8uWLVGLFy9Oaj57DQBuuummkqSkJNu6deti16xZE2e1WkVmZqZl2rRpxQ888EBR7969XVqhpyUhpXTeioiIiIiIiIg6rDVr1qyOiorq179//62BjoXC3/nnn999wYIFKevXr9904oknmvw59ubNm/s1NjZuzc/PH+KsLc9UIyIiIiIiIiIiv7LZbNi/f7/DDsovv/wy/ttvv03Jy8tr9HdCzV3c/klERERERERERH5lMplEjx49BgwfPrymV69ejQaDQW7bti16+fLlCUajUb7wwgv7Ax2jM0yqERERERERERGRX0VERMipU6eW/PbbbwkbN26MbWho0CUnJ1vPPvvsigceeODIySef3BDoGJ1hUo2IiIiIiIiIiPzKYDDg/fffPxDoOLzBM9WIiIiIiIiIiIjcxKQaERERERERERGRm5hUIyIiIiIiIiIichOTakRERERERERERG5iUo2IiIiIiIiIiMhNTKoRERERERERERG5iUk1IiIiIiIiIiIiNzGpRkRERERERERE5CYm1YiIiIiIiIiIiNzEpBoRERERERERURAQQuQPGzasT8uyO++8M1sIkf/111/HByouUsakGhERERERERERhR1fJyQNvuiUiIiIiIiIiIjcs3bt2s1xcXH2QMdBrmFSjYiIiIiIiIgoCAwaNKgx0DGQ65hUIyIiIiIiIiKv5d73TX6gY2hPwTPnrNGinw8//DDx5Zdfzty1a1dUVVWVISkpydqtWzfTJZdcUn7fffeVNLcbNmxYn1WrVsXV19evvffeezt99tlnqSUlJcbMzEzzxIkTy5588snCqKgo2bJvIUT+0KFDa//444/tzuLYuXNnxNlnn91r3759kS+88ELBzTffXA4ANTU1uqeeeirj888/T9m3b1+kEAK9e/duuPHGG4uvv/76cnd+1t27dxsfe+yxTkuWLEksLi42xsTE2AcPHlz773//+/Do0aPrm9tNmTKl60cffZQ+e/bs3dOmTats28+SJUtizzjjjL5nnXVWxcKFC/c0l7sT69dffx1/3nnn9b7jjjuOXHrppRUPPPBAzpo1a+KsVqs4/vjj65966qmD48aNq2tun5OTc8Lhw4cjAOC8887r3bIvKaUmfxd4phoRERERERERkQuee+65tGnTpvXctWtX1NixY6uuu+66ojFjxlQ1Njbq5syZk6b0mnPPPbfHxx9/nDZu3LjKq666qlgIgRkzZmRPmDAhz273bKfnihUrok8++eS+hYWFEfPnz9/ZnFArLS3VDx8+vM8zzzyTo9fr5cSJE0svueSSsvLycsMNN9zQ/bbbbst2dYxff/01ZsiQIcfNmTMnvUePHo1/+9vfis8444zKVatWxY0bN67vvHnzEpvb/v3vfy8DgNmzZ6cq9fXOO++kAsBVV11V1lzmaazr1q2LOeOMM/qaTCbd5ZdfXjpmzJiqtWvXxp133nl9NmzYENnc7vrrry8aOnRoLQBcfPHFZXfccceR5i9XfwfOcKUaEREREREREZEL3n333XSj0SjXr1+/JScnx9qy7siRI4o5lt27d0dv3rx5c3p6ug0A6uvrD5100kl9li5dmvjaa6+lNCfEXPXFF1/EX3HFFXnR0dH2H374YdvIkSMbmuuuv/76Llu3bo158MEHDz7xxBNFzeX19fXirLPO6vnyyy93mjx5csVJJ53UoNx7E4vFgilTpvSor6/XL1iwYPs555xT21xXUFBgHDZsWL9bbrml2/nnn/9ndHS0HDt2bF23bt1MS5cuTSwqKtJnZmbamts3NDSIBQsWpKSkpFgvvfTSKm9j/emnnxJffPHFgttuu+1Ygm769Olp//rXv7pNnz49c86cOfsB4JFHHimurKw0rFq1Ku7qq68uO/fcc2vc+T27gkm1ICGE2AsgAUBBgEMhIiIKJrkAqqWU3QMdSEfA+QgREamZN29e3549e0Zt2rSpX6Bj8ZSnsVsslkidTmc78cQT/wQAvV4vIyIiZNt2nTp1sjq+GrjnnnsONyfUACAmJkY+8cQTh84777zeH3zwQZo7SbVXX3015fbbb8/t2rWraeHChTt79eplbq4rLCzUf/nll6n9+/evb5mkah7zv//978GTTjrpuA8++CD1pJNOOtjeOPPmzUs6cOBA5HXXXVfUMqEGALm5uZZbb7218JFHHuny1VdfJUyaNKkKACZPnlz67LPP5rzzzjsp999//7FtsB9//HFSdXW1/pprrikyGo1exzp48ODalgk1ALjtttvK7r///q7r16+PdekXqREm1YJHQnR0dEq/fv1SAh0IERFRsNi6dSsaGtp9kEra4nyEiIgU6fV6AIBOp4sJcCge8zR2KSWat2ledtll5Y899ljn4447rv/5559fcdppp9WcccYZtdnZ2YoJNQA488wza9uWnXXWWTV6vR5btmxxOaYXX3wxY/HixUmDBg2qXbhw4a6WiToA+PXXX2NtNhuEELjzzjsdtk5aLBYBADt27IhyNtby5ctjAeDAgQMRSn3t2rUrEgC2bNkSBaAKAK699tqy6dOn58ydOzetZVKteUvotddeeywR5k2sJ554Yn3bssjISJmammqtqqrSO/vZtMSkWvAo6NevX8qaNZqclUdERBQW8vPzsXbt2oJAx9GBcD5CRESKtm7dCgDo16+9xV57/ROMh4477jiPXrdlyxbY7XYTADz66KNFaWlp1rfeeiv9vffey3jnnXcyhBAYOnRozfTp0w+OGjXKIeHTuXNnS9syo9GIpKQka3l5uct5mVWrVsVLKTF69Oiatgk1ACgpKTEAwKZNm2I2bdqkmqyrq6tzer5+c1zfffdd8nfffafarra29lhfeXl5lhEjRlQvX748Ye3atVGDBw9uPHTokGHZsmUJffv2bRg+fPixJ6XexJqUlOTwswOAwWCQdrtdOPvZtMSkGhEREVGACCEKAHRTqS6SUmYpvOYkAA8BGAEgGsBOAO8AeElKqTjJJCIi8oeCZ84JdAh+ccstt5TdcsstZaWlpfrFixfHff7550nz589PO//883tv2bJlU9tVawcPHjS23KYJNJ1ZVllZaYiNjXX5vfull14qeO6557Kef/75Tna7HS+88MLhlvXNyaZrrrmmaNasWe1u73QmISHBBgBz5szZNXXq1Cpn7ZtNmzatbPny5QmzZs1KffXVVw/NmjUrxWazicsvv7zUV7EGEm//JCIiIgqsKgCPKXw917ahEOICAMsAjALwOYCXAUQAeB7Ax36Kl4iIiACkpaXZJk2aVPXxxx/vu+SSS0qrqqr0ixYtimvbTqns+++/j7fZbDjuuOMcVrapSU5Otv3000878vPza1988cVON9xwQ+eW9aNGjarT6XRYuXJlvGc/0V9GjhxZBwDLli1zq68rrriiIi4uzvbZZ5+l2mw2fPTRR2l6vV5ec801rc6N0zLW9uj1egkANptvnjsyqUZEREQUWJVSykcVvlol1YQQCQDeAmADcJqU8hop5T0ABgJYAeBSIcRkv0dPRETUgSxYsCC++Xy1lkpLS40AEBMT41A5ffr07JKSkmNnfdXX14uHHnooBwCuuOKKsrbt25OcnGxfunTpzpEjR9a88cYbmVdffXWX5rqcnBzr+eefX7Z58+aYe+65p5PV6njM2+bNmyO3bdsW4WycKVOmVHbp0sX0wQcfpM+bNy9Rqc2PP/4YW1NT0yqvFBcXJ88555yK4uJi43/+85/M7du3R48ePbqq7U2pWsbantTUVCsAFBQUeNWPmg67/ZPbLYiIiCjEXAogHcAHUsrVzYVSykYhxEMAFgO4EVyxRkRE5DNTpkzJi4mJsQ8aNKi2a9euZiklVq5cGb9p06aY/v37119wwQU1bV+Tl5fX0L9///4TJkyoMBqN8vvvv086cOBA5GmnnVZ10003uZVUA4D4+Hj7jz/+uHPChAl57733XobJZNLNmTNnn06nw9tvv71/7969Uc8991z2/PnzU4cOHVqbkZFhOXLkiHHnzp3RmzZtinnjjTf29O3b19zeGJGR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NKxZC2N2JyRNnuy3iw+IiMIZV6oFCT4ZJiLShmnvXtSvXo2ILl0Rkz8YwmhE7S+/4OBtt0M2NCBp0iRkPfgARESE231LKWGrrIQhOdkHkZMSPhn2L85HiEKHpagYlZ98AvO+fYgZMgRJl116bAunrbISIioKtvJyGDp1ghAiwNEShTbOR0gNV6oREVFYieze3eEssLhTT0XfdWu97lsIwYQaEREFBWNmBtJvvUWxTp+UBADQZWf7MSIioo5HF+gAiIiIiIiIiIiIQg2TakRERERERERERG5iUo2IiIiIiIiIiMhNTKoRERERERERERG5iUk1IiIiIiIiIiIiNwkpZaBjIABCiLLo6OiUfv36BToUIiKioLF161Y0NDSUSylTAx1LR8D5CBERkSPOR0gNk2pBQgixF0ACgAINu+179Ps2DfsMdfydOOLvRBl/L474O3HE34kyLX8vuQCqpZTdNeiLnPDBfIT/H1HG34sj/k4c8XeijL8XR/ydKON8hHyOSbUwJoRYAwBSyvxAxxIs+DtxxN+JMv5eHPF34oi/E2X8vVAz/l1Qxt+LI/5OHPF3ooy/F0f8nSjj74X8gWeqERERERERERERuYlJNSIiIiIiIiIiIjcxqUZEREREREREROQmJtWIiIiIiIiIiIjcxKQaERERERERERGRm3j7JxERERERERERkZu4Uo2IiIiIiIiIiMhNTKoRERERERERERG5iUk1IiIiIiIiIiIiNzGpRkRERERERERE5CYm1YiIiIiIiIiIiNzEpBoREREREREREZGbmFQjIiIiIiIiIiJyE5NqREREREREREREbmJSjYiIiIiIiIiIyE1MqhEREREREREREbmJSTUiIiIiIiIiIiI3MalGRERERERERETkJibViIiIiIiIiIiI3MSkGhERERERERERkZuYVCMiIiIiIiIiInITk2pERERERERERERuYlKNiIiIiIiIiIjITUyqERERERERERERuYlJNSIiIiIiIiIiIjd1yKSaEOJSIcRLQohfhBDVQggphJjj5DUnCSG+FUKUCyEahBAbhRD/FELo/RU3ERERdVxCiFQhxD+EEJ8LIXYdnY9UCSF+FUJcI4TokPM6IiIiokAxBDqAAHkIwIkAagEcBNC3vcZCiAsAfAagEcA8AOUAzgPwPICTAVzmbUBCiL0AEgAUeNsXERFR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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "image/png": { - "height": 228, - "width": 618 - }, - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# visualize the recordings and spikes while stimulus is on\n", - "nrows = 2\n", - "ncols = out_traces.shape[0]\n", - "fig, axs = subplots(nrows, ncols, sharex=True,\n", - " gridspec_kw={'height_ratios': [3, 1]}, figsize=(9, 3))\n", - "for idx in range(ncols):\n", - " spike_idx = np.in1d(t, spike_times[idx] * 1000).nonzero()[0]\n", - " spike_v = (out_traces[idx, :].min(), out_traces[idx, :].max())\n", - " axs[0, idx].plot(t, out_traces[idx, :].T, lw=3, c='C3',\n", - " label='recordings', zorder=1)\n", - " axs[0, idx].vlines(t[spike_idx], *spike_v, lw=3, color='C0',\n", - " label='spike event', zorder=2)\n", - " axs[1, idx].plot(t, inp_traces[idx, :].T/nA, lw=3, c='k', label='stimuli')\n", - " axs[1, idx].set_xlabel('$t$, ms')\n", - " if idx == 0:\n", - " axs[0, idx].set_ylabel('$V$, mV')\n", - " axs[1, idx].set_ylabel('$I$, nA')\n", - "handles, labels = [(h + l) for h, l\n", - " in zip(axs[0, idx].get_legend_handles_labels(),\n", - " axs[1, idx].get_legend_handles_labels())]\n", - "fig.legend(handles, labels)\n", - "tight_layout;" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "25a040ac-3dee-42cf-82fd-0e1af5c47f53", - "metadata": {}, - "outputs": [], - "source": [ - "# a few features to create a summary statistics representation of traces\n", - "v_features = [\n", - " lambda x: np.max(x[(t > t_start) & (t < t_end)]), # max active potential\n", - " lambda x: np.mean(x[(t > t_start) & (t < t_end)]), # mean active potential\n", - " lambda x: np.std(x[(t > t_start) & (t < t_end)]), # std of active potential\n", - " lambda x: kurt(x[(t > t_start) & (t < t_end)], fisher=False), # kurtosis of active potential\n", - " lambda x: np.mean(x[(t > 0.25 * t_start) & (t < 0.75 * t_start)]), # membrane resting potential\n", - "]\n", - "\n", - "s_features = [\n", - " lambda x: x.size, # count of spikes in the train\n", - "]" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "a4550ead", - "metadata": {}, - "outputs": [], - "source": [ - "# inference object instantiation\n", - "inferencer = Inferencer(dt=dt, model=eqs,\n", - " input={'I': inp_traces*amp},\n", - " output={'v': out_traces*mV,\n", - " 'spikes': spike_times},\n", - " features={'v': v_features,\n", - " 'spikes': s_features},\n", - " method='exponential_euler',\n", - " threshold='m > 0.5',\n", - " refractory='m > 0.5',\n", - " param_init={'v': 'VT'})" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "9fe4d1cc", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "fd6893517f754a8d8a63ee879b594705", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Extracting features: 0%| | 0/2 [00:00" - ] - }, - "metadata": { - "image/png": { - "height": 386, - "width": 378 - }, - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# pairplotting space of sampled parameters from posterior\n", - "limits = {'gl': [1e-9*siemens, 1e-07*siemens],\n", - " 'g_na': [2e-06*siemens, 2e-04*siemens],\n", - " 'g_kd': [6e-07*siemens, 6e-05*siemens],\n", - " 'Cm': [0.1*uF*cm**-2*area, 2*uF*cm**-2*area]}\n", - "labels = {'gl': r'$\\overline{g}_{l}$',\n", - " 'g_na': r'$\\overline{g}_{Na}$',\n", - " 'g_kd': r'$\\overline{g}_{K}$',\n", - " 'Cm': r'$C_{m}$'}\n", - "\n", - "inferencer.pairplot(limits=limits,\n", - " labels=labels,\n", - " ticks=limits,\n", - " figsize=(6, 6));" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "1a87fdae", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "7534eaf0020d41259f5afb2eb7160e84", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Drawing 1 posterior samples: 0%| | 0/1 [00:00" - ] - }, - "metadata": { - "image/png": { - "height": 386, - "width": 378 - }, - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# conditional pairplot\n", - "condition = inferencer.sample((1, ))\n", - "inferencer.conditional_pairplot(condition=condition,\n", - " limits=limits,\n", - " labels=labels,\n", - " ticks=limits,\n", - " figsize=(6, 6));" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "2f195b76", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "image/png": { - "height": 241, - "width": 284 - }, - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# computing conditional coefficient matrix using the same condition\n", - "cond_coeff_mat = inferencer.conditional_corrcoeff(condition=condition, limits=limits)\n", - "\n", - "fig, ax = plt.subplots(1,1, figsize=(4, 4))\n", - "im = plt.imshow(cond_coeff_mat, clim=[-1, 1])\n", - "_ = fig.colorbar(im)" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "7ed79a8f-187d-41bf-abbe-cac82160dbbb", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "aea058a947a944fc9f73e669a38cd97e", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Drawing 1 posterior samples: 0%| | 0/1 [00:00" - ] - }, - "metadata": { - "image/png": { - "height": 228, - "width": 618 - }, - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# generate traces from a single sample of parameters\n", - "inf_traces = inferencer.generate_traces(output_var='v')\n", - "\n", - "nrows = 2\n", - "ncols = out_traces.shape[0]\n", - "fig, axs = subplots(nrows, ncols, sharex=True,\n", - " gridspec_kw={'height_ratios': [3, 1]}, figsize=(9, 3))\n", - "for idx in range(ncols):\n", - " spike_idx = np.in1d(t, spike_times[idx]).nonzero()[0]\n", - " spike_v = (out_traces[idx, :].min(), out_traces[idx, :].max())\n", - " axs[0, idx].plot(t, out_traces[idx, :].T, 'C3-', lw=3, label='recordings')\n", - " axs[0, idx].plot(t, inf_traces[idx, :].T/mV, 'k--', lw=2,\n", - " label='sampled traces')\n", - " axs[1, idx].plot(t, inp_traces[idx, :].T/nA, lw=3, c='k', label='stimuli')\n", - " axs[1, idx].set_xlabel('$t$, ms')\n", - " if idx == 0:\n", - " axs[0, idx].set_ylabel('$V$, mV')\n", - " axs[1, idx].set_ylabel('$I$, nA')\n", - "handles, labels = [(h + l) for h, l\n", - " in zip(axs[0, idx].get_legend_handles_labels(),\n", - " axs[1, idx].get_legend_handles_labels())]\n", - "fig.legend(handles, labels)\n", - "tight_layout;" - ] - }, - { - "cell_type": "markdown", - "id": "59d9e91e-7e22-4e9a-9ff0-7ddb2207b030", - "metadata": {}, - "source": [ - "# Integrate-and-Fire model: spike inference from synthetic trace" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "64968695-ad82-450e-bea7-1a2eb5ebd1e0", - "metadata": {}, - "outputs": [], - "source": [ - "from brian2 import *\n", - "from brian2modelfitting import Inferencer\n", - "import numpy as np" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "73fc4301-ffab-4675-b68e-6534d1af5b1a", - "metadata": {}, - "outputs": [], - "source": [ - "%config InlineBackend.figure_format = 'retina'" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "ad802d6b-2976-4cae-86aa-f7bd276c802b", - "metadata": {}, - "outputs": [], - "source": [ - "# set parameters\n", - "dt = 0.1*ms\n", - "defaultclock.dt = dt\n", - "El = -70*mV\n", - "VT = -50*mV\n", - "DeltaT = 2*mV\n", - "ground_truth_params = {'gl': 30*nS, 'C': 1*nF}" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "d4635f4e-63d9-4d77-af5e-261cebb496cb", - "metadata": {}, - "outputs": [], - "source": [ - "# set input trace\n", - "inp_trace = np.hstack([np.zeros(int(round(5*ms/dt))),\n", - " np.ones(int(round(25*ms/dt))),\n", - " np.zeros(int(round(30*ms/dt)))]) * 10*nA\n", - "I = TimedArray(inp_trace, dt=dt)" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "c83542d6-1d02-4ac7-9748-4cb1c5395a20", - "metadata": {}, - "outputs": [], - "source": [ - "# set the model equations\n", - "eqs = '''\n", - " dv/dt = (gl*(El - v) + gl*DeltaT*exp((v - VT) / DeltaT) + I(t)) / C : volt\n", - " gl : siemens (constant)\n", - " C : farad (constant)\n", - " '''" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "e1b40eec-43f7-472a-83b6-154546c77b0c", - "metadata": {}, - "outputs": [], - "source": [ - "# compute traces and spike trains\n", - "neurons = NeuronGroup(1, eqs,\n", - " threshold='v > -50*mV',\n", - " reset='v = -70*mV',\n", - " method='exponential_euler')\n", - "neurons.v = -70*mV\n", - "neurons.set_states(ground_truth_params)\n", - "monitor = StateMonitor(neurons, 'v', record=True)\n", - "smonitor = SpikeMonitor(neurons, record=True)\n", - "run(60*ms)\n", - "out_trace = monitor.v\n", - "spike_times = array(smonitor.t_)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "3c53dbc9-ac36-436a-8970-e8972541b361", - "metadata": {}, - "outputs": [], - "source": [ - "# inference procedure\n", - "start_scope()\n", - "El = -70*mV\n", - "VT = -50*mV\n", - "DeltaT = 2*mV\n", - "eqs_inf = '''\n", - " dv/dt = (gl*(El - v) + gl*DeltaT*exp((v - VT) / DeltaT) + I_syn) / C : volt\n", - " gl : siemens (constant)\n", - " C : farad (constant)\n", - " '''\n", - "\n", - "features = [\n", - " lambda x: x.size, # number of spikes\n", - " lambda x: 0. if np.diff(x).size == 0 else np.mean(np.diff(x)), # mean inter-spike interval\n", - " ]\n", - "\n", - "inferencer = Inferencer(dt=dt, model=eqs_inf,\n", - " input={'I_syn': inp_trace.reshape(1, -1)},\n", - " output={'spikes': [spike_times]},\n", - " features={'spikes': features},\n", - " method='exponential_euler',\n", - " threshold='v > -50*mV',\n", - " reset='v = -70*mV',\n", - " param_init={'v': -70*mV})" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "54451813-a222-4ff1-aa22-b31e3fda411f", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "The state monitor object is not defined.\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "98d56a92a892417c8c218c7e5f8c01a3", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Extracting features: 0%| | 0/1 [00:00" - ] - }, - "metadata": { - "image/png": { - "height": 386, - "width": 378 - }, - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# sample and pairplot\n", - "samples = inferencer.sample((7_000, ))\n", - "labels = {'gl': r'$\\overline{g}_{l}$', 'C': r'$C$'}\n", - "ticks = {'gl': [10*nS, 100*nS], 'C': [0.1*nF, 10*nF]}\n", - "inferencer.pairplot(labels=labels,\n", - " limits=ticks,\n", - " ticks=ticks,\n", - " points=ground_truth_params,\n", - " points_offdiag={'markersize': 9},\n", - " points_colors=['r'], \n", - " figsize=(6, 6));" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "b39ca278-0e53-41f2-b1b5-6a781020cb24", - "metadata": {}, - "outputs": [], - "source": [ - "# set up time domain\n", - "t = np.arange(0, inp_trace.size*dt/ms, dt/ms)\n", - "t_start, t_end = t[np.where(inp_trace != 0)[0][[0, -1]]]" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "fdc1c61e-759e-4d15-ab73-5a2cb6ff594e", - "metadata": {}, - "outputs": [], - "source": [ - "# identify spike events\n", - "spike_v = (out_trace.min()/mV, out_trace.max()/mV)\n", - "spike_idx = []\n", - "for spike_time in spike_times:\n", - " spike_idx.append(np.where(np.isclose(spike_time * 1000, t))[0].item())" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "b5776e70-8424-4590-94df-a604ba97db5e", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "9bb3352f6e0f416785bc36f6ec7da8ba", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Drawing 1 posterior samples: 0%| | 0/1 [00:00" - ] - }, - "metadata": { - "image/png": { - "height": 205, - "width": 493 - }, - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# generate traces from a single sample of parameters\n", - "inf_trace = inferencer.generate_traces(output_var='v')\n", - "\n", - "nrows = 2\n", - "fig, axs = subplots(nrows, 1, sharex=True,\n", - " gridspec_kw={'height_ratios': [3, 1]}, figsize=(7, 3))\n", - "axs[0].plot(t, out_trace.T/mV, 'C3-', lw=3, label='recordings')\n", - "axs[0].plot(t, inf_trace.T/mV, 'k--', lw=2, label='sampled traces')\n", - "axs[0].vlines(t[spike_idx], *spike_v, lw=3, color='C0', label='spike event', zorder=3)\n", - "axs[0].set_ylabel('$V$, mV')\n", - "axs[0].legend()\n", - "axs[1].plot(t, inp_trace.T/nA, lw=3, c='k', label='stimuli')\n", - "axs[1].set_xlabel('$t$, ms')\n", - "axs[1].set_ylabel('$I$, nA')\n", - "axs[1].legend()\n", - "tight_layout();" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "926141b7-3567-44b5-82c8-d156f6cebbdc", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.8.10" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} From c10397ccde7c18720a4142bec147e184ae1fb635 Mon Sep 17 00:00:00 2001 From: antelk Date: Thu, 12 Aug 2021 16:08:57 +0200 Subject: [PATCH 075/121] add minor updates --- brian2modelfitting/inferencer.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py index 89d6f95..ed99ae7 100644 --- a/brian2modelfitting/inferencer.py +++ b/brian2modelfitting/inferencer.py @@ -1227,7 +1227,7 @@ def generate_traces(self, posterior=None, output_var=None, param_init=None, If a single output variable is observed, 2-D array of traces generated by using a set of parameters sampled from the trained posterior distribution of shape - (``n.traces``, number of time steps). Otherwise, a + (``self.n_traces``, number of time steps). Otherwise, a dictionary with keys set to names of output variables, and values to generated traces of respective output variables. """ @@ -1273,6 +1273,7 @@ def generate_traces(self, posterior=None, output_var=None, param_init=None, if ov == 'spikes': trace = get_spikes(simulator.spikemonitor, 1, self.n_traces)[0] + traces = {ov: trace} else: try: trace = getattr(simulator.statemonitor, ov)[:] From 3fe11f717507ad8ebfb8ef2652bf2c83e19a610e Mon Sep 17 00:00:00 2001 From: antelk Date: Fri, 13 Aug 2021 15:22:12 +0200 Subject: [PATCH 076/121] add inferencer api reference --- docs_sphinx/api/brian2modelfitting.inferencer.rst | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 docs_sphinx/api/brian2modelfitting.inferencer.rst diff --git a/docs_sphinx/api/brian2modelfitting.inferencer.rst b/docs_sphinx/api/brian2modelfitting.inferencer.rst new file mode 100644 index 0000000..30cf9c6 --- /dev/null +++ b/docs_sphinx/api/brian2modelfitting.inferencer.rst @@ -0,0 +1,7 @@ +brian2modelfitting.inferencer module +====================================== + +.. automodule:: brian2modelfitting.inferencer + :members: + :undoc-members: + :show-inheritance: From f1215460cad64ea36ef985dd69cbf7abdb8a53ac Mon Sep 17 00:00:00 2001 From: antelk Date: Sat, 14 Aug 2021 14:15:14 +0200 Subject: [PATCH 077/121] update README file --- README.md | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 31e29c7..278c316 100644 --- a/README.md +++ b/README.md @@ -1,28 +1,38 @@ brian2modelfitting ================== +Model fitting toolbox for Brian 2 simulator. -Model Fitting Toolbox for Brian 2 simulator, to allow the user to find the best fit of the parameters for recorded traces and spike trains. +[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.4601961.svg)](https://doi.org/10.5281/zenodo.4601961) -By default, we support a range of global derivative-free optimization methods, that include popular methods for model fitting, such as: Differential Evolution, Particle Swarm Optimization and Covariance Matrix Adaptation (provided by the Nevergrad) as well as Bayesian Optimization for black box functions (provided by Scikit-Optimize). -Documentation for Brian2modelfitting can be found at http://brian2modelfitting.readthedocs.org -Brian2modelfitting is released under the terms of the CeCILL 2.1 license. +The package [`brian2modelfitting`](https://brian2modelfitting.readthedocs.io) allows the user to find the best fit of the unknown free parameters for recorded traces and spike trains. It also supports simulation-based inference, where instead of point-estimated parameter values, a full posterior distribution over the parameters is computed. -Please report issues at the github issue tracker (https://github.com/brian-team/brian2modelfitting/issues) or at the brian discussion forum (https://brian.discourse.group) +By default, the toolbox supports a range of global derivative-free optimization methods, that include popular methods for model fitting: differential evolution, particle swarm optimization and covariance matrix adaptation (provided by the [`Nevergrad`](https://facebookresearch.github.io/nevergrad/), a gradient-free optimization platform) as well as Bayesian optimization for black box functions (provided by [`scikit-optimize`](https://scikit-optimize.github.io/stable/), a sequential model-based optimization library). On the other hand, simulation-based inference is the process of finding parameters of a simulator from observations by taking a Bayesian approach via sequential neural posterior estimation, likelihood estimation or ration estimation (provided by the [`sbi`](https://www.mackelab.org/sbi/)), where neural densitiy estimator, a deep neural network allowing probabilistic association between the data and underlying parameter space, is trained. After the network is trained, the approximated posterior distribution is available. -[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.4601961.svg)](https://doi.org/10.5281/zenodo.4601961) +Documentation +------------- +[![Documentation Status](https://readthedocs.org/projects/ansicolortags/badge/?version=latest)](https://brian2modelfitting.readthedocs.io) + +The full documentation is available at http://brian2modelfitting.readthedocs.org. + +Testing status +-------------- +[![Build Status](https://github.com/brian-team/brian2modelfitting/workflows/Tests/badge.svg)](https://github.com/brian-team/brian2modelfitting/actions) +[![Coverage Status](https://coveralls.io/repos/github/brian-team/brian2modelfitting/badge.svg?branch=master)](https://coveralls.io/github/brian-team/brian2modelfitting?branch=master) Installation ------------ -Module can be installed with pypi: +Install `brian2modelfitting` from the Python package index via pip: ``` pip install brian2modelfitting ``` +License +------- +The model fitting toolbox is released under the terms of the CeCILL 2.1 license and is available [here](https://github.com/brian-team/brian2modelfitting/blob/master/LICENSE). -Testing status --------------- -[![Build Status](https://github.com/brian-team/brian2modelfitting/workflows/Tests/badge.svg)](https://github.com/brian-team/brian2modelfitting/actions) -[![Coverage Status](https://coveralls.io/repos/github/brian-team/brian2modelfitting/badge.svg?branch=master)](https://coveralls.io/github/brian-team/brian2modelfitting?branch=master) +Use +--- +Please report issues at the GitHub [issue tracker](https://github.com/brian-team/brian2modelfitting/issues) or at the [Brian 2 discussion forum](https://brian.discourse.group). From 5f0651b5de78b65f3f101498a79c7fa8ba78d020 Mon Sep 17 00:00:00 2001 From: antelk Date: Sat, 14 Aug 2021 15:02:31 +0200 Subject: [PATCH 078/121] update the front webpage --- docs_sphinx/index.rst | 40 ++++++++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/docs_sphinx/index.rst b/docs_sphinx/index.rst index a4876c9..4c466ec 100644 --- a/docs_sphinx/index.rst +++ b/docs_sphinx/index.rst @@ -1,24 +1,40 @@ brian2modelfitting ================== -The package `.brian2modelfitting` is a tool for parameter fitting of neuron -models in the `Brian 2 simulator `_. +The package `.brian2modelfitting` is a tool for parameter identification of +neuron models defined in the `Brian 2 simulator `_. -Please report bugs at the `github issue tracker `_ -or at the `Brian discussion forum `_. The latter is -also a could place to discuss feature requests or potential contributions. +Please report bugs at the `GitHub issue tracker `_ +or at the `Brian 2 discussion forum `_. +The latter is also a place to discuss feature requests or potential +contributions. Model fitting ------------- -The ``brian2modelfitting`` toolbox offers allows the user to perform data driven -optimization for custom neuronal models specified with -`Brian 2 `_. +This toolbox allows the user to find the best fit of the unknown free +parameters for recorded traces and spike trains. +It also supports simulation-based inference, where instead of point-estimated +parameter values, a full posterior distribution over the parameters is +computed. -The toolbox allows the user to find the best fit of the parameters for recorded traces and -spike trains. Just like Brian itself, the Model Fitting Toolbox is designed to -be easy to use and save time through automatic parallelization of the +By default, the toolbox supports a range of global derivative-free +optimization methods, that include popular methods for model fitting: +differential evolution, particle swarm optimization and covariance matrix +adaptation (provided by the ``Nevergrad``, a gradient-free optimization +platform) as well as Bayesian optimization for black box functions (provided +by ``scikit-optimize``, a sequential model-based optimization library). On the +other hand, simulation-based inference is the process of finding parameters of +a simulator from observations by taking a Bayesian approach via sequential +neural posterior estimation, likelihood estimation or ration estimation +(provided by the ``sbi``), where neural densitiy estimator, a deep neural +network allowing probabilistic association between the data and underlying +parameter space, is trained. After the network is trained, the approximated +posterior distribution is available. + +Just like Brian itself, the `brian2modelfitting` toolbox is designed to be +easy to use and to save time through automatic parallelization of the simulations using code generation. @@ -32,6 +48,7 @@ Contents introduction/index optimizer/index metric/index + inferencer/index features/index examples/index @@ -48,4 +65,3 @@ Indices and tables * :ref:`genindex` * :ref:`modindex` -* :ref:`search` From 90bfad952bac08d7ef0d3b3fafbe163e77dd498a Mon Sep 17 00:00:00 2001 From: antelk Date: Sat, 14 Aug 2021 15:02:43 +0200 Subject: [PATCH 079/121] small changes --- docs_sphinx/conf.py | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/docs_sphinx/conf.py b/docs_sphinx/conf.py index 6cb4846..fc49303 100644 --- a/docs_sphinx/conf.py +++ b/docs_sphinx/conf.py @@ -10,6 +10,7 @@ # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. # + import os import sys sys.path.insert(0, os.path.abspath('..')) @@ -17,11 +18,12 @@ needs_sphinx = '1.8' -brian2modelfitting_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), - '..', 'brian2modelfitting')) +brian2modelfitting_dir = os.path.abspath(os.path.join( + os.path.dirname(__file__), '..', 'brian2modelfitting') + ) # -- Project information ----------------------------------------------------- -project = 'Brian2modelfitting' +project = 'brian2modelfitting' copyright = '2019, brian-team' author = 'brian-team' @@ -66,7 +68,8 @@ autodoc_default_options = {'inherited-members': True} # -- Options for HTML output ------------------------------------------------- -# on_rtd is whether we are on readthedocs.org, this line of code grabbed from docs.readthedocs.org +# on_rtd is whether we are on readthedocs.org, this line of code grabbed from +# docs.readthedocs.org on_rtd = os.environ.get('READTHEDOCS', None) == 'True' if not on_rtd: @@ -92,10 +95,12 @@ # -- Extension configuration ------------------------------------------------- -intersphinx_mapping = {'python': ('https://docs.python.org/', None), - 'brian2': ('https://brian2.readthedocs.org/en/stable/', None), - 'matplotlib': ('http://matplotlib.org/', None), - 'numpy': ('http://docs.scipy.org/doc/numpy/', None), - 'scipy': ('http://docs.scipy.org/doc/scipy/reference/', None), - 'pandas': ('https://pandas.pydata.org/pandas-docs/stable/', None), - 'lmfit': ('https://lmfit.github.io/lmfit-py/', None)} +intersphinx_mapping = { + 'python': ('https://docs.python.org/', None), + 'brian2': ('https://brian2.readthedocs.org/en/stable/', None), + 'matplotlib': ('http://matplotlib.org/', None), + 'numpy': ('http://docs.scipy.org/doc/numpy/', None), + 'scipy': ('http://docs.scipy.org/doc/scipy/reference/', None), + 'pandas': ('https://pandas.pydata.org/pandas-docs/stable/', None), + 'lmfit': ('https://lmfit.github.io/lmfit-py/', None), + } From 8510f1d957c3482f6ac754debfc3af70f0d1bf5e Mon Sep 17 00:00:00 2001 From: antelk Date: Sat, 14 Aug 2021 15:03:16 +0200 Subject: [PATCH 080/121] add inferencer to api references --- docs_sphinx/api/brian2modelfitting.rst | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs_sphinx/api/brian2modelfitting.rst b/docs_sphinx/api/brian2modelfitting.rst index d09c81a..4a10106 100644 --- a/docs_sphinx/api/brian2modelfitting.rst +++ b/docs_sphinx/api/brian2modelfitting.rst @@ -8,9 +8,10 @@ Subpackages and -modules .. toctree:: - brian2modelfitting.tests - brian2modelfitting.metric brian2modelfitting.fitter + brian2modelfitting.inferencer + brian2modelfitting.metric brian2modelfitting.optimizer brian2modelfitting.simulator + brian2modelfitting.tests brian2modelfitting.utils From f6ae7aa73dfe210316c472cec901ac3474556f7b Mon Sep 17 00:00:00 2001 From: antelk Date: Sat, 14 Aug 2021 15:12:46 +0200 Subject: [PATCH 081/121] update simple examples with Inferencer --- docs_sphinx/examples/base.rst | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/docs_sphinx/examples/base.rst b/docs_sphinx/examples/base.rst index a6f4c7d..9c03418 100644 --- a/docs_sphinx/examples/base.rst +++ b/docs_sphinx/examples/base.rst @@ -1,7 +1,8 @@ Simple Examples =============== -Following pieces of code show an example of Fitter class calls with possible inputs. +Following pieces of code show an example of two ``Fitter`` class calls and an +``Inferencer`` class call with possible inputs. TraceFitter @@ -27,8 +28,6 @@ TraceFitter g_na=[1*mS*cm**-2 * area, 2000*mS*cm**-2 * area], g_kd=[1*mS*cm**-2 * area, 1000*mS*cm**-2 * area]) - - SpikeFitter ----------- @@ -51,3 +50,31 @@ SpikeFitter metric=metric, gL=[20*nS, 40*nS], C = [0.5*nF, 1.5*nF]) + +Inferencer +---------- + +.. code:: python + + v_features = [ + lambda x: max(x[(t > t_start) & (t < t_end)]), # AP max + lambda x: mean(x[(t > t_start) & (t < t_end)]), # AP mean + lambda x: std(x[(t > t_start) & (t < t_end)]), # AP std + lambda x: mean(x[(t > .25 * t_start) & (t < .75 * t_start)]), # resting + ] + s_features = [lambda x: x.size] # number of spikes in a spike train + + inferencer = Inferencer(model=eqs, dt=0.1*ms, + input={'I': inp_traces}, + output={'v': out_traces, 'spike': spike_times}, + features={'v': v_features, 'spikes': s_features}, + method='exponential_euler', + threshold='m > 0.5', + refractory='m > 0.5', + param_init={'v': 'VT'}) + + posterior = inferencer.infer(n_samples=1_000, + n_rounds=2, + inference_method='SNPE', + gL=[20*nS, 40*nS], + C = [0.5*nF, 1.5*nF]) From bfb00946200fa48c13b5eaf9a79593468262934b Mon Sep 17 00:00:00 2001 From: antelk Date: Sat, 14 Aug 2021 15:13:06 +0200 Subject: [PATCH 082/121] update table of contents in examples --- docs_sphinx/examples/index.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs_sphinx/examples/index.rst b/docs_sphinx/examples/index.rst index 25f0830..957a08a 100644 --- a/docs_sphinx/examples/index.rst +++ b/docs_sphinx/examples/index.rst @@ -6,3 +6,5 @@ Examples base hh_multirun + hh_sbi_simple + hh_sbi_flex From 7d9278eee612981502877fe220e4a13f675736da Mon Sep 17 00:00:00 2001 From: antelk Date: Sat, 14 Aug 2021 15:13:41 +0200 Subject: [PATCH 083/121] change the title of the example using Fitter --- docs_sphinx/examples/hh_multirun.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs_sphinx/examples/hh_multirun.rst b/docs_sphinx/examples/hh_multirun.rst index e155a3b..d1ed895 100644 --- a/docs_sphinx/examples/hh_multirun.rst +++ b/docs_sphinx/examples/hh_multirun.rst @@ -1,5 +1,5 @@ -Multirun of Hodgkin-Huxley -========================== +Multirun fitting of Hodgkin-Huxley +================================== Here you can download the data: :download:`input_traces <../../examples/input_traces_hh.csv>` From ef99912a853123330b57e8e17aff32cc55c47fe3 Mon Sep 17 00:00:00 2001 From: antelk Date: Sat, 14 Aug 2021 15:14:01 +0200 Subject: [PATCH 084/121] add placehoders for examples using Inferencer --- docs_sphinx/examples/hh_sbi_flex.rst | 4 ++++ docs_sphinx/examples/hh_sbi_simple.rst | 4 ++++ 2 files changed, 8 insertions(+) create mode 100644 docs_sphinx/examples/hh_sbi_flex.rst create mode 100644 docs_sphinx/examples/hh_sbi_simple.rst diff --git a/docs_sphinx/examples/hh_sbi_flex.rst b/docs_sphinx/examples/hh_sbi_flex.rst new file mode 100644 index 0000000..e1e4b69 --- /dev/null +++ b/docs_sphinx/examples/hh_sbi_flex.rst @@ -0,0 +1,4 @@ +Inference on Hodgin-Huxley model: flexible interface +==================================================== + +tba \ No newline at end of file diff --git a/docs_sphinx/examples/hh_sbi_simple.rst b/docs_sphinx/examples/hh_sbi_simple.rst new file mode 100644 index 0000000..6b4d331 --- /dev/null +++ b/docs_sphinx/examples/hh_sbi_simple.rst @@ -0,0 +1,4 @@ +Inference on Hodgin-Huxley model: simple interface +================================================== + +tba \ No newline at end of file From b3274fc347a99727af6f7246741001e05398059b Mon Sep 17 00:00:00 2001 From: antelk Date: Sat, 14 Aug 2021 15:18:23 +0200 Subject: [PATCH 085/121] update introduction section --- docs_sphinx/introduction/howitworks.rst | 63 +++++++++++++---------- docs_sphinx/introduction/index.rst | 1 + docs_sphinx/introduction/introduction.rst | 20 ++++--- docs_sphinx/introduction/tutorial_sbi.rst | 4 ++ 4 files changed, 56 insertions(+), 32 deletions(-) create mode 100644 docs_sphinx/introduction/tutorial_sbi.rst diff --git a/docs_sphinx/introduction/howitworks.rst b/docs_sphinx/introduction/howitworks.rst index 39466c0..01769b6 100644 --- a/docs_sphinx/introduction/howitworks.rst +++ b/docs_sphinx/introduction/howitworks.rst @@ -1,10 +1,14 @@ +============ How it works ============ +Fitting +======= + Model fitting script requires three components: - - A **Fitter** of choice: object that will perform the optimization - - A **metric**: to compare results and decide which one is the best - - An **optimization** algorithm: to decide which parameter combinations to try + - a **fitter**: object that will perform the optimization + - a **metric**: objective function + - an **optimizer**: optimization algorithm All of which need to be initialized for fitting application. Each optimization works with a following scheme: @@ -13,61 +17,63 @@ Each optimization works with a following scheme: opt = Optimizer() metric = Metric() - fitter = Fitter(...) result, error = fitter.fit(metric=metric, optimizer=opt, ...) -The proposed solution is developed using a modular approach, where both the optimization -method and metric to be optimized can be easily swapped out by a custom implementation. +The proposed solution is developed using a modular approach, where both the +optimization method and the objective function can be easily swapped out by a +user-defined custom implementation. -`~.Fitter` objects require 'model' defined as an +`~.Fitter` objects require a model defined as an `~brian2.equations.equations.Equations` object or as a string, that has parameters that will be optimized specified as constants in the following way: .. code:: python model = ''' - ... - g_na : siemens (constant) - g_kd : siemens (constant) - gl : siemens (constant) - ''' + ... + g_na : siemens (constant) + g_kd : siemens (constant) + gl : siemens (constant) + ''' Initialization of Fitter requires: - - ``dt`` - time step - - ``input`` - a dictionary with the name of the input variable and a set of input traces (list or array) - - ``output`` - a dictionary with the name of the output variable(s) and a set of goal output (traces/spike trains) (list or array) - - ``n_samples`` - number of samples to draw in each round (limited by method) - - ``reset``, and ``threshold`` in case of spiking neurons (can take refractory as well) + - ``dt`` - the time step + - ``input`` - a dictionary with the name of the input variable and a set of + input traces (list or array) + - ``output`` - a dictionary with the name of the output variable(s) and a + set of goal output (traces/spike trains) (list or array) + - ``n_samples`` - a number of samples to draw in each round (limited by + method) + - ``reset`` and ``threshold`` in case of spiking neurons (can take + refractory as well) Additionally, upon call of `~brian2modelfitting.fitter.Fitter.fit()`, object requires: - - ``n_rounds`` - number of rounds to optimize over + - ``n_rounds`` - a number of rounds to optimize over - parameters with ranges to be optimized over -...as well as an ``optimizer`` and a ``metric`` - Each free parameter of the model that shall be fitted is defined by two values: .. code:: python - param_name = [min, max] + param_name = [lower_bound, upper_bound] Ready to use elements --------------------- -Alongside three optimization classes: +Optimization classes: - `~brian2modelfitting.fitter.TraceFitter` - `~brian2modelfitting.fitter.SpikeFitter` - `~brian2modelfitting.fitter.OnlineTraceFitter` -We also provide ready optimizers: +Optimization algorithms: - `~brian2modelfitting.optimizer.NevergradOptimizer` - `~brian2modelfitting.optimizer.SkoptOptimizer` -and metrics: +Metrics: - `~brian2modelfitting.metric.MSEMetric` (for `~brian2modelfitting.fitter.TraceFitter`) - `~brian2modelfitting.metric.GammaFactor` (for `~brian2modelfitting.fitter.SpikeFitter`) @@ -85,11 +91,11 @@ Example of `~brian2modelfitting.fitter.TraceFitter` with all of the necessary ar result, error = fitter.fit(optimizer=optimizer, metric=metric, n_rounds=1, - gl=[1e-8*siemens*cm**-2 * area, 1e-3*siemens*cm**-2 * area],) + gl=[1e-8*siemens*cm**-2 * area, 1e-3*siemens*cm**-2 * area]) Remarks ------- -- After performing first fitting, user can continue the optimization +- After performing first fitting round, user can continue the optimization with another `~brian2modelfitting.fitter.Fitter.fit()` run. - Number of samples can not be changed between rounds or `~brian2modelfitting.fitter.Fitter.fit()` @@ -101,3 +107,8 @@ Remarks - When using the `~brian2modelfitting.fitter.TraceFitter`, users can use a standard curve fitting algorithm for refinement by calling `~brian2modelfitting.fitter.TraceFitter.refine`. + +Simulation-based inference +========================== + +tba \ No newline at end of file diff --git a/docs_sphinx/introduction/index.rst b/docs_sphinx/introduction/index.rst index fedf7e1..139929e 100644 --- a/docs_sphinx/introduction/index.rst +++ b/docs_sphinx/introduction/index.rst @@ -7,3 +7,4 @@ Model Fitting introduction howitworks tutorial_hh + tutorial_sbi diff --git a/docs_sphinx/introduction/introduction.rst b/docs_sphinx/introduction/introduction.rst index ae1feb0..b0b8041 100644 --- a/docs_sphinx/introduction/introduction.rst +++ b/docs_sphinx/introduction/introduction.rst @@ -6,11 +6,19 @@ The `.brian2modelfitting` toolbox provides three optimization classes: - `~brian2modelfitting.fitter.SpikeFitter` - `~brian2modelfitting.fitter.OnlineTraceFitter` -The classes expect a model and data as an input and returns the best fit of -parameters and the corresponding error. The toolbox can optimize over multiple -traces (e.g. input currents) at the same time. +and a simulation-based inference class: + - `~brian2modelfitting.inferencer.Inferencer` -In following documentation we assume that ``brian2modelfitting`` has been imported like this: +All classes expect a model and the data as an input and return either the best +fit of each parameter with the corresponding error, or a posterior +distribution over unknown parameters. +The toolbox can optimize over multiple traces (e.g. input currents) at the +same time. +It also allows the possiblity of simultaneous fitting/inferencing by taking +into account multiple output variables including spike trains. + +In following documentation we assume that ``brian2modelfitting`` has been +installed and imported as follows: .. code:: python @@ -20,7 +28,7 @@ In following documentation we assume that ``brian2modelfitting`` has been import Installation ------------ -To install Model Fitting alongside Brian2 you can use pip, by using +To install the toolbox alongside Brian 2 simulator, use `pip` as follows: a pip utility: .. code:: python @@ -33,7 +41,7 @@ Testing Model Fitting Version on master branch gets automatically tested with Travis services. To test the code yourself, you will need to have ``pytest`` installed and run -the command: +the following command inside the `brian2modelfitting` root directory: .. code:: python diff --git a/docs_sphinx/introduction/tutorial_sbi.rst b/docs_sphinx/introduction/tutorial_sbi.rst new file mode 100644 index 0000000..3dad431 --- /dev/null +++ b/docs_sphinx/introduction/tutorial_sbi.rst @@ -0,0 +1,4 @@ +Tutorial: Inferencer +==================== + +tba \ No newline at end of file From 50f7192fa5960a459e9a5653f591298a30c46016 Mon Sep 17 00:00:00 2001 From: antelk Date: Sat, 14 Aug 2021 15:18:42 +0200 Subject: [PATCH 086/121] small typo fix --- docs_sphinx/index.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs_sphinx/index.rst b/docs_sphinx/index.rst index 4c466ec..d87651d 100644 --- a/docs_sphinx/index.rst +++ b/docs_sphinx/index.rst @@ -22,7 +22,7 @@ computed. By default, the toolbox supports a range of global derivative-free optimization methods, that include popular methods for model fitting: differential evolution, particle swarm optimization and covariance matrix -adaptation (provided by the ``Nevergrad``, a gradient-free optimization +adaptation (provided by the ``nevergrad``, a gradient-free optimization platform) as well as Bayesian optimization for black box functions (provided by ``scikit-optimize``, a sequential model-based optimization library). On the other hand, simulation-based inference is the process of finding parameters of From f086c7045393e0a639d349ad8cbabfe95954c674 Mon Sep 17 00:00:00 2001 From: antelk Date: Sat, 14 Aug 2021 15:20:02 +0200 Subject: [PATCH 087/121] placeholder for detailed info on Inferencer --- docs_sphinx/inferencer/index.rst | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 docs_sphinx/inferencer/index.rst diff --git a/docs_sphinx/inferencer/index.rst b/docs_sphinx/inferencer/index.rst new file mode 100644 index 0000000..67980ff --- /dev/null +++ b/docs_sphinx/inferencer/index.rst @@ -0,0 +1,4 @@ +Inferencer +========== + +tba \ No newline at end of file From 01ce180c16f3ca9900b6e6f5fa479053969d4db6 Mon Sep 17 00:00:00 2001 From: antelk Date: Sat, 14 Aug 2021 15:26:08 +0200 Subject: [PATCH 088/121] finilize the front page --- docs_sphinx/index.rst | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs_sphinx/index.rst b/docs_sphinx/index.rst index d87651d..644b7d8 100644 --- a/docs_sphinx/index.rst +++ b/docs_sphinx/index.rst @@ -26,16 +26,16 @@ adaptation (provided by the ``nevergrad``, a gradient-free optimization platform) as well as Bayesian optimization for black box functions (provided by ``scikit-optimize``, a sequential model-based optimization library). On the other hand, simulation-based inference is the process of finding parameters of -a simulator from observations by taking a Bayesian approach via sequential -neural posterior estimation, likelihood estimation or ration estimation -(provided by the ``sbi``), where neural densitiy estimator, a deep neural -network allowing probabilistic association between the data and underlying -parameter space, is trained. After the network is trained, the approximated -posterior distribution is available. +a simulator from observations by taking a Bayesian approach, in our case, via +sequential neural posterior estimation, likelihood estimation or ratio +estimation (provided by the ``sbi``), where neural densitiy estimator, a deep +neural network allowing probabilistic association between the data and +underlying parameter space, is trained. After the network is trained, the +approximated posterior distribution is available. -Just like Brian itself, the `brian2modelfitting` toolbox is designed to be -easy to use and to save time through automatic parallelization of the -simulations using code generation. +Just like Brian 2 simulator itself, the `.brian2modelfitting` toolbox is +designed to be easy to use and to save time through automatic parallelization +of the simulations using code generation. Contents From 0e936cb17334480d445fe1a6e38f3bda829c1ad8 Mon Sep 17 00:00:00 2001 From: antelk Date: Sat, 14 Aug 2021 15:31:32 +0200 Subject: [PATCH 089/121] double instead of single backticks --- docs_sphinx/introduction/introduction.rst | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/docs_sphinx/introduction/introduction.rst b/docs_sphinx/introduction/introduction.rst index b0b8041..a849dc8 100644 --- a/docs_sphinx/introduction/introduction.rst +++ b/docs_sphinx/introduction/introduction.rst @@ -17,7 +17,7 @@ same time. It also allows the possiblity of simultaneous fitting/inferencing by taking into account multiple output variables including spike trains. -In following documentation we assume that ``brian2modelfitting`` has been +In following documentation we assume that `.brian2modelfitting` has been installed and imported as follows: .. code:: python @@ -28,10 +28,9 @@ installed and imported as follows: Installation ------------ -To install the toolbox alongside Brian 2 simulator, use `pip` as follows: -a pip utility: +To install the toolbox alongside Brian 2 simulator, use ``pip`` as follows: -.. code:: python +.. code:: pip install brian2modelfitting @@ -41,9 +40,9 @@ Testing Model Fitting Version on master branch gets automatically tested with Travis services. To test the code yourself, you will need to have ``pytest`` installed and run -the following command inside the `brian2modelfitting` root directory: +the following command inside the `.brian2modelfitting` root directory: -.. code:: python +.. code:: pytest From 50c61971b1ef85f2b3624750a22ccbb08b663666 Mon Sep 17 00:00:00 2001 From: antelk Date: Sun, 15 Aug 2021 12:07:59 +0200 Subject: [PATCH 090/121] enable gpu support --- brian2modelfitting/inferencer.py | 99 +++++++++++++++++++++++--------- 1 file changed, 72 insertions(+), 27 deletions(-) diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py index ed99ae7..01eced8 100644 --- a/brian2modelfitting/inferencer.py +++ b/brian2modelfitting/inferencer.py @@ -1,5 +1,6 @@ from numbers import Number from typing import Mapping +import warnings from brian2.core.functions import Function from brian2.core.namespace import get_local_namespace @@ -129,7 +130,7 @@ def calc_prior(param_names, **params): Return ------ sbi.utils.torchutils.BoxUniform - ``sbi`` compatible object that contains a uniform prior + ``sbi``-compatible object that contains a uniform prior distribution over a given set of parameters. """ for param_name in param_names: @@ -151,9 +152,7 @@ class Inferencer(object): It offers an interface similar to that of the `.Fitter` class but instead of fitting, neural density estimator is trained using a generative model which ultimately provides the posterior - distribution over free parameters. - This class serves as a wrapper for ``sbi`` library for inferencing - posterior over unknown parameters of a given model. + distribution over the unknown parameters. Parameters ---------- @@ -309,6 +308,7 @@ def __init__(self, dt, model, input, output, features=None, method=None, self.posterior = None self.theta = None self.x = None + self.sbi_device = 'cpu' @property def n_neurons(self): @@ -574,7 +574,7 @@ def load_summary_statistics(self, f): return (theta, x) def init_inference(self, inference_method, density_estimator_model, prior, - **inference_kwargs): + sbi_device='cpu', **inference_kwargs): """Return instantiated inference object. Parameters @@ -587,13 +587,28 @@ def init_inference(self, inference_method, density_estimator_model, prior, ``linear``, ``mlp``, ``resnet`` for SNRE. prior : sbi.utils.BoxUniform Uniformly distributed prior over given parameters. + sbi_device : str, optional + Device on which the ``sbi`` will operate. By default this + is set to CPU and it is advisable to remain so for most + cases. In cases where the user provide custom embedding + network through ``inference_kwargs`` argument, which will + be trained more efficiently by using GPU, device should be + set accordingly. inference_kwargs : dict, optional - Additional keyword arguments for - ``sbi.utils.get_nn_models.posterior_nn`` method. The user - is free to provide own embedding network to learn features - from potentially high-dimensional simulation outputs. By - default multi-layer perceptron is used if no user defined - embedding network is provided. + Additional keyword arguments for different density + estimator builder functions: + ``sbi.utils.get_nn_models.posterior_nn`` for SNPE, + ``sbi.utils.get_nn_models.classifier_nn`` for SNRE, and + ``sbi.utils.get_nn_models.likelihood_nn`` for SNLE. For + details check the ``sbi`` documentation. The most important + additional keyword augment the user is able to pass is + custom embedding network to learn features from potentially + high-dimensional simulation outputs. By default multi-layer + perceptron is used if no custom embedding network is + provided. For SNPE and SNLE,the user can pass an embedding + network for simulation outputs, while for SNRE, the user + may pass two embedding networks, one for parameters and one + for simulation outputs, respectively. Returns ------- @@ -616,9 +631,26 @@ def init_inference(self, inference_method, density_estimator_model, prior, else: density_estimator_builder = classifier_nn( model=density_estimator_model, **inference_kwargs) - inference = inference_method_fun(prior, density_estimator_builder, - device='cpu', - show_progress_bars=True) + + sbi_device = str.lower(sbi_device) + if sbi_device in ['cuda', 'gpu']: + if torch.cuda.is_available(): + sbi_device = 'gpu' + self.sbi_device = 'cuda' + else: + logger.warn(f'Device {sbi_device} is not available.' + ' Falling back to CPU.') + sbi_device = 'cpu' + self.sbi_device = sbi_device + else: + sbi_device = 'cpu' + self.sbi_device = sbi_device + + with warnings.catch_warnings(): + warnings.filterwarnings('ignore') + inference = inference_method_fun(prior, density_estimator_builder, + device=sbi_device, + show_progress_bars=True) return inference def train(self, inference, theta, x, *args, **train_kwargs): @@ -646,7 +678,14 @@ def train(self, inference, theta, x, *args, **train_kwargs): True inside the `train_kwargs`. train_kwargs : dict, optional Additional keyword arguments for ``train`` method of - ``sbi.inference.NeuralInference`` object. + ``sbi.inference.NeuralInference`` object. The user is able + to gain full control over training process by tuning + hyperparameters, i.e. batch size (by specifiying + ``training_batch_size`` argument), learning rate + (``learning_rate``), validation fraction + (``validation_fraction``), number of training epochs + (``max_num_epochs``), etc. For details, check the ``sbi`` + documentation. Returns ------- @@ -667,7 +706,8 @@ def build_posterior(self, inference, **posterior_kwargs): simulation outputs prepared for training. posterior_kwargs : dict, optional Additional keyword arguments for ``build_posterior`` method - of ``sbi.inference.NeuralInference`` object. + in ``sbi.inference.NeuralInference`` classes. For details, + check the ``sbi`` documentation. Returns ------- @@ -710,7 +750,7 @@ def infer_step(self, proposal, inference, sbi.inference.NeuralPosterior Trained posterior. """ - # extract the training data and make adjustments for ``sbi`` + # extract the training data and make adjustments for the ``sbi`` if theta is None: if n_samples is None: raise ValueError('Either provide `theta` or `n_samples`.') @@ -719,7 +759,7 @@ def infer_step(self, proposal, inference, self.theta = theta theta = torch.tensor(theta, dtype=torch.float32) - # extract the summary statistics and make adjustments for ``sbi`` + # extract the summary statistics and make adjustments for the ``sbi`` if x is None: if n_samples is None: raise ValueError('Either provide `x` or `n_samples`.') @@ -741,7 +781,7 @@ def infer_step(self, proposal, inference, def infer(self, n_samples=None, theta=None, x=None, n_rounds=1, inference_method='SNPE', density_estimator_model='maf', inference_kwargs={}, train_kwargs={}, posterior_kwargs={}, - restart=False, **params): + restart=False, device='cpu', **params): """Return the trained posterior. If ``theta`` and ``x`` are not provided, ``n_samples`` has to @@ -770,18 +810,23 @@ def infer(self, n_samples=None, theta=None, x=None, n_rounds=1, ``mdn``, ``made``, ``maf``, ``nsf`` for SNPE and SNLE, or ``linear``, ``mlp``, ``resnet`` for SNRE. inference_kwargs : dict, optional - Additional keyword arguments for the inferencer method - definition. + Additional keyword arguments for the `.init_inference`. train_kwargs : dict, optional - Additional keyword arguments for training the posterior - estimator. + Additional keyword arguments for `.train`. posterior_kwargs : dict, optional - Additional keyword arguments for builing the posterior. + Additional keyword arguments for `.build_posterior`. restart : bool, optional When the method is called for a second time, set to True if amortized inference should be performed. If False, multi-round inference with the existing posterior will be performed. + sbi_device : str, optional + Device on which the ``sbi`` will operate. By default this + is set to CPU and it is advisable to remain so for most + cases. In cases where the user provide custom embedding + network through ``inference_kwargs`` argument, which will + be trained more efficiently by using GPU, device should be + set accordingly. params : dict Bounds for each parameter. Keys should correspond to names of parameters as defined in the model equaions, values @@ -812,7 +857,7 @@ def infer(self, n_samples=None, theta=None, x=None, n_rounds=1, # initialize prior prior = self.init_prior(**params) - # extract the training data and make adjustments for ``sbi`` + # extract the training data if theta is None: if n_samples is None: raise ValueError('Either provide `theta` or `n_samples`.') @@ -820,7 +865,7 @@ def infer(self, n_samples=None, theta=None, x=None, n_rounds=1, theta = self.generate_training_data(n_samples, prior) self.theta = theta - # extract the summary statistics and make adjustments for ``sbi`` + # extract the summary statistics if x is None: if n_samples is None: raise ValueError('Either provide `x` or `n_samples`.') @@ -831,7 +876,7 @@ def infer(self, n_samples=None, theta=None, x=None, n_rounds=1, # initialize inference object self.inference = self.init_inference(inference_method, density_estimator_model, - prior, + prior, device, **inference_kwargs) # args for SNPE in `.train` From 2cb7886d68a559b3dc8501e52c16998703fa91b3 Mon Sep 17 00:00:00 2001 From: antelk Date: Sun, 15 Aug 2021 15:45:12 +0200 Subject: [PATCH 091/121] add technical details on sbi --- docs_sphinx/inferencer/index.rst | 72 +++++++++++++++++++++++++++++++- 1 file changed, 71 insertions(+), 1 deletion(-) diff --git a/docs_sphinx/inferencer/index.rst b/docs_sphinx/inferencer/index.rst index 67980ff..d2c437b 100644 --- a/docs_sphinx/inferencer/index.rst +++ b/docs_sphinx/inferencer/index.rst @@ -1,4 +1,74 @@ Inferencer ========== -tba \ No newline at end of file +Unlike more traditional inverse identification procedures that rely either on +gradient or gradient-free methods, the ``Inferencer`` class supports +simulation-based inference that has been established as a powerful alternative +approach. + +The simulation-based inference is data-driven procedure supported by the +`sbi `_, ``PyTorch``-based toolbox by Macke lab. + +In general, this method yields twofold improvement over point-estimate fitting +procedures: + +#. Simulation-based inference acts as if the actual statistical inference is + performed, even in cases of extremly complex models with untractable + likelihood function. Thus, instead of returning a single set of optimal + parameters, it results in the approximated posterior distribution over + unknown parameters. This is achieved by training a neural density estimator, + details of which will be explained in depth later in the documentation. +#. Simulation-based inference uses prior system knowledge sparsely, using + only the most important features to identify mechanistic models that are + consistent with the recordings. This is achieved either by providing the + predifend set of features, or by automatically extraciting summary features + by using deep neural networks which is trained in parallel with neural + density estimator. + +The ``Inferencer`` class, in its core, is a fancy wrapper around the ``sbi`` +package where the focus is put on inferring the unknown parameters of the +single-cell neuron models defined in Brian 2 simulator. + +Neural density estimator +------------------------ + +There are three main estimation techniques supported in ``sbi`` that the user +can take the full control over seamlesly by using the ``Inferencer``: + +#. sequential neural posterior estimation (SNPE) +#. sequential neural likelihood estimation (SNLE) +#. sequential neural ratio estimator (SNRE) + +Simulation-based inference workflow +----------------------------------- + +The inferencer procedure is defined via three main steps: + +#. step + Prior over unknown parameters needs to be defined, where the simplest + choice would be uniform distribution given lower and upper bound + (currently, this is only prior distribution supported through + ``brian2modelfitting`` toolbox). + After that, simulated data are generated given a mechanistic model with + unknown parameters set as constants. + Instead of taking the full output of the model, the neural network takes + in summary data statistics of the output, e.g. instead of voltage trace as + the output from a neuron model, we would feed a neural network with + relevant electrophysiology features that outline the gist of the output + sufficiently well. +#. step + A neural network learns association between the summary data statistics + and unknown parameters (given the prior distribution over parameters). + The learning method is heavily dependent on the choice of the inference + technique. +#. step + The trained neural network is applied to the empirical data to infer + posterior distribution over unknown parameters. Optionally, this process + can be repeated by using the trained posterior distribution over parameters + as the prior distribution proposal for a refined optimization. + +Implementation +-------------- + +Go to :doc:`the tutorial section <../introduction/tutorial_sbi.rst>` for the +in-depth implementation analysis. \ No newline at end of file From 9c538881667a0b1fbab5a86b80289455c88fe9e2 Mon Sep 17 00:00:00 2001 From: antelk Date: Sun, 15 Aug 2021 15:53:01 +0200 Subject: [PATCH 092/121] fix typos --- docs_sphinx/inferencer/index.rst | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs_sphinx/inferencer/index.rst b/docs_sphinx/inferencer/index.rst index d2c437b..a4e3ff3 100644 --- a/docs_sphinx/inferencer/index.rst +++ b/docs_sphinx/inferencer/index.rst @@ -44,7 +44,7 @@ Simulation-based inference workflow The inferencer procedure is defined via three main steps: -#. step +#. step. Prior over unknown parameters needs to be defined, where the simplest choice would be uniform distribution given lower and upper bound (currently, this is only prior distribution supported through @@ -56,12 +56,12 @@ The inferencer procedure is defined via three main steps: the output from a neuron model, we would feed a neural network with relevant electrophysiology features that outline the gist of the output sufficiently well. -#. step +#. step. A neural network learns association between the summary data statistics and unknown parameters (given the prior distribution over parameters). The learning method is heavily dependent on the choice of the inference technique. -#. step +#. step. The trained neural network is applied to the empirical data to infer posterior distribution over unknown parameters. Optionally, this process can be repeated by using the trained posterior distribution over parameters @@ -70,5 +70,5 @@ The inferencer procedure is defined via three main steps: Implementation -------------- -Go to :doc:`the tutorial section <../introduction/tutorial_sbi.rst>` for the -in-depth implementation analysis. \ No newline at end of file +Go to `the tutorial section `_ +in for the in-depth implementation analysis. \ No newline at end of file From 598d9a9fc29342ecae1a896ca5f0b2dde1bd7974 Mon Sep 17 00:00:00 2001 From: antelk Date: Sun, 15 Aug 2021 18:10:07 +0200 Subject: [PATCH 093/121] update howitworks page --- docs_sphinx/introduction/howitworks.rst | 157 +++++++++++++++++++++++- 1 file changed, 156 insertions(+), 1 deletion(-) diff --git a/docs_sphinx/introduction/howitworks.rst b/docs_sphinx/introduction/howitworks.rst index 01769b6..c4c8bfe 100644 --- a/docs_sphinx/introduction/howitworks.rst +++ b/docs_sphinx/introduction/howitworks.rst @@ -111,4 +111,159 @@ Remarks Simulation-based inference ========================== -tba \ No newline at end of file +The `~brian2modelfitting.inferencer.Inferencer` class has to be initialized +within the script that will perform a simulation-based inference procedure. + +Initialization of `~brian2modelfitting.inferencer.Inferencer` requires: + +- ``dt`` - the time step in Brian 2 units. +- ``model`` - single cell model equations, defined as either string or as + ``brian2.Equation`` object. +- ``input`` - a dictionary where key corresponds to the name of the input + variable as defined in ``model`` and value corresponds to an array of + input traces. +- ``output`` - a dictionary where key corresponds to the name of the output + variable as defined in ``model`` and value corresponds to an array of + recorded traces and/or spike trains. + +.. code:: python + + inferencer = Inferencer(dt=0.1*ms, model=eqs, + input={'I': inp_traces*amp}, + output={'v': out_traces*mV}) + +Optionally, arguments to be passed to the constructor are: + +- ``features`` - a dictionary of callables that take the voltage + trace and/or spike trains and output summary statistics. Keys correspond to + output variable names, while values are lists of callables. If features are + not provided, automatic feature extraction will be performed either by using + the default multi-layer perceptron or by using the user-provided embedding + network. +- ``method`` - a string that defines an integration method. +- ``threshold`` - optional string that defines the condition which produces + spikes. It should be a single line boolean expression. +- ``reset`` - an optional (multi-line) string that that holds the code to + execute on reset. +- ``refractory`` - can be either Boolean expression or string. Defines either + the length of the refractory period (e.g., ``2*ms``), a string expression + that evaluates to the length of the refractory period after each spike, + e.g., ``'(1 + rand())*ms'``, or a string expression evaluating to a boolean + value, given the condition under which the neuron stays refractory after a + spike, e.g., ``'v > -20*mV'``. +- ``param_init`` - a dictionary of state variables to be initialized with + respective values, i.e., initial conditions. + +.. code:: python + + inferencer = Inferencer(dt=dt, model=eqs_inf, + input={'I': inp_trace*amp}, + output={'v': out_traces*mV}, + features={'v': voltage_feature_list}, + method='exponential_euler', + threshold='v > -50*mV', + reset='v = -70*mV', + param_init={'v': -70*mV}) + +Inference +--------- + +After the `~brian2modelfitting.inferencer.Inferencer` class is +instantiated, the simplest and the most convenient way to start with the +inferencer procedure is by calling `~brian2modelfitting.inferencer.Inferencer.infer` +method on `~brian2modelfitting.inferencer.Inferencer` object. + +In the nutshell, infer method returns the trained neural posterior object, +which may or may not be used by the user, but it has to exist. There are two +possible approaches: + +- amortized inference +- multi-round inference + +If the number of inference rounds is 1, then amortized inference will be +performed. Otherwise if the number of inference rounds is 2 or above, the +focused multi-round inference will be performed. Multi-round inference, +unlike the amortized one, is focused on a particular observation, where in +each new round of inference, samples are drawn from the posterior distribution +conditioned exactly by this observation. This process can be repeated +aribtrarily many times to get increasingly better approximations of the the +posterior distribution. + +The infer method requires: + +- ``n_samples`` - the number of samples from which the neural posterior will + be learnt. + +or: + +- ``theta`` - sampled prior. +- and ``x`` - summary statistics. + +along with the: + +- ``params`` - a dictionary of bounds for each free parameter defined in the + ``model``. Keys should correspond to names of parameters as defined in the + model equations, values are lists with lower and upper bounds with + quantities of respective parameter. + +The simplest way to start the inference process is by calling: + +.. code:: python + + posterior = inferencer.infer(n_samples=1000, + gl=[10*nS, 100*nS], + C=[0.1*nF, 10*nF]) + +Optionally, user can defined the following arguments: + +- ``n_rounds`` - if it is set to 1, amortized inference will be performed. + Otherwise, if ``n_rounds`` is integer larger than 1, multi-round inference + will be performed. This is only valid if the posterior has not yet been + defined. Otherwise, if this method is called after the posterior has already + been built, multi-round inference is performed, e.g. repeated calling of + ``~brian2modelfitting.inferencer.Inferencer.infer`` method or manually + building the posterior by approaching the inference with flexible inference. +- ``inference_method`` - either SNPE, SNLE or SNRE. +- ``density_estimator_model`` - string that defines the type of density + estimator to be created. Either ``mdn``, ``made``, ``maf``, ``nsf`` for SNPE + and SNLE, or ``linear``, ``mlp``, ``resnet`` for SNRE. +- ``inference_kwargs`` - a dictionary that holds additional keyword arguments + for the `~brian2modelfitting.inferencer.Inferencer.init_inference`. +- ``train_kwargs`` - a dictionary that holds additional keyword arguments for + `~brian2modelfitting.inferencer.Inferencer.train`. +- ``posterior_kwargs`` - a dictionary that holds additional keyword arguments + for `~brian2modelfitting.inferencer.Inferencer.build_posterior`. +- ``restart`` - when the method is called for a second time, set to True if + amortized inference should be performed. If False, multi-round inference + with the existing posterior will be performed. +- ``sbi_device`` a string that defines the device on which the ``sbi`` and + subseqently the ``torch`` will operate. By default this is set to ``cpu`` + and it is advisable to remain so for most cases. In cases where the user + provides custom embedding network through ``inference_kwargs`` argument, + which will be trained more efficiently by using GPU, device should be set + accordingly to ``gpu``. + +A bit more comprehensive specification of the infer call is showcased below: + +.. code:: python + + posterior = inferencer.infer(n_samples=5_000, + n_rounds=3, + inference_method='SNPE', + density_estimator_model='mdn', + restart=True, + sbi_device='cpu', + gl=[10*nS, 100*nS], + C=[0.1*nF, 10*nF]) + +Remarks +------- + +For a better understanding, please go through examples that go step-by-step +through the entire process. Currently, there are two tutorials: the one that +is covering `simple interface `_, +appropriate for the regular user, and the one that goes a bit more in-depth by +using `flexible interface `_, +and shows how to manually go through the process of inference, storing/loading +the training data and the trained neural density estimator, parameter space +visualization, conditioning, etc. \ No newline at end of file From 98666a63386ccbecf1e42f30e79f3bb16aa349de Mon Sep 17 00:00:00 2001 From: antelk Date: Mon, 16 Aug 2021 11:16:36 +0200 Subject: [PATCH 094/121] update docstrings --- brian2modelfitting/inferencer.py | 314 +++++++++++++++++-------------- 1 file changed, 169 insertions(+), 145 deletions(-) diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py index 01eced8..f57e0e9 100644 --- a/brian2modelfitting/inferencer.py +++ b/brian2modelfitting/inferencer.py @@ -92,11 +92,12 @@ def get_param_dict(param_values, param_names, n_values): Parameters ---------- - param_values : iterable - Iterable of size (``n_samples``, ``len(param_names)``) - containing parameter values. - param_names : iterable - Iterable containing parameter names + param_values : numpy.ndarray + Parameter values in a 2-dimensional array with the number of + rows corresponding to a number of samples and the number of + columns corresponding to ``len(param_names). + param_names : list + List containing parameter names. n_values : int Total number of given values for a single parameter. @@ -116,16 +117,17 @@ def get_param_dict(param_values, param_names, n_values): def calc_prior(param_names, **params): """Return the prior distribution over given parameters. - N.B. The only currently supported prior distribution is - the multi-dimensional uniform distribution defined on a box. + Note that the only currently supported prior distribution is the + multi-dimensional uniform distribution defined on a box. Parameters ---------- - param_names : iterable - Iterable containing parameter names. + param_names : list + List containing parameter names. params : dict - Dictionary with keys that correspond to parameter names, values - are a single dimensional lists or arrays. + Dictionary with keys that correspond to parameter names, and + the respective values are 2-element lists that hold the upper + and the lower bound of a distribution. Return ------ @@ -147,12 +149,12 @@ def calc_prior(param_names, **params): class Inferencer(object): - """Class for simulation-based inference. + """Class for a simulation-based inference. It offers an interface similar to that of the `.Fitter` class but - instead of fitting, neural density estimator is trained using a + instead of fitting, a neural density estimator is trained using a generative model which ultimately provides the posterior - distribution over the unknown parameters. + distribution over unknown free parameters. Parameters ---------- @@ -161,25 +163,26 @@ class Inferencer(object): model : str or brian2.equations.equations.Equations Single cell model equations. input : dict - Input traces in dictionary format where key corresponds to the - name of the input variable as defined in ``model`` and value - corresponds to an array of input traces. + Input traces in the dictionary format where key corresponds to + the name of the input variable as defined in ``model``, and + value corresponds to an array of input traces. output : dict Dictionary of recorded (or simulated) output data traces, where key corresponds to the name of the output variable as defined - in ``model`` and value corresponds to a an array of recorded + in ``model``, and value corresponds to an array of recorded traces. features : dict, optional - Dictionary of callables that take the 1-dimensional voltage - trace and output summary statistics. Keys correspond to output - variable names, while values are lists of callables. - If features are not provided, automatic feature extraction will - be performed either by using the default multi-layer perceptron - or by using the user-provided embedding network. + Dictionary of callables that take a 1-dimensional voltage + trace or a spike train and output summary statistics. Keys + correspond to output variable names, while values are lists of + callables. If ``features`` are set to None, automatic feature + extraction process will occur instead either by using the + default multi-layer perceptron or by using the custom embedding + network. method : str, optional Integration method. threshold : str, optional - The condition which produces spikes. Should be a single line + The condition which produces spikes. It should be a single line boolean expression. reset : str, optional The (possibly multi-line) string with the code to execute on @@ -193,7 +196,7 @@ class Inferencer(object): e.g., ``'v > -20*mV'``. param_init : dict, optional Dictionary of state variables to be initialized with respective - values. + values, i.e., initial conditions for the model. """ def __init__(self, dt, model, input, output, features=None, method=None, threshold=None, reset=None, refractory=False, @@ -317,8 +320,8 @@ class while generating data for training the neural density estimator. Unlike the `.Fitter` class, `.Inferencer` does not take the - total number of samples in the constructor. Thus, this property - becomes available only after the simulation is performed. + total number of samples directly in the constructor. Thus, this + property becomes available only after the simulation is performed. Parameters ---------- @@ -331,7 +334,7 @@ class while generating data for training the neural density """ if self.n_samples is None: raise ValueError('Number of samples have not been yet defined.' - 'Call `generate_training_data` method first.') + ' Call `generate_training_data` method first.') return self.n_traces * self.n_samples def setup_simulator(self, network_name, n_neurons, output_var, param_init, @@ -405,17 +408,20 @@ def setup_simulator(self, network_name, n_neurons, output_var, param_init, return simulator def init_prior(self, **params): - """Return the prior uniform distribution over parameters. + """Return the prior uniform distribution over the parameters. Parameters ---------- params : dict - Bounds for each parameter. + Dictionary with keys that correspond to parameter names, + and the respective values are 2-element lists that hold + the upper and the lower bound of a distribution. Returns ------- - sbi.utils.BoxUniform - Uniformly distributed prior over given parameters. + sbi.utils.torchutils.BoxUniform + ``sbi``-compatible object that contains a uniform prior + distribution over a given set of parameters. """ for param in params: if param not in self.param_names: @@ -438,7 +444,9 @@ def generate_training_data(self, n_samples, prior): Returns ------- numpy.ndarray - Sampled prior of shape (``n_samples``, -1). + Sampled prior with the number of rows that corresponds to + the ``n_samples``, while the number of columns depends on + the number of free parameters. """ # set n_samples to class variable to be able to call self.n_neurons self.n_samples = n_samples @@ -449,14 +457,14 @@ def generate_training_data(self, n_samples, prior): return theta def extract_summary_statistics(self, theta, level=0): - """Return summary statistics for training the neural density - estimator. + """Return the summary statistics for the process of training + of the neural density estimator. Parameters ---------- theta : numpy.ndarray - Sampled prior with ``n_samples`` rows, while then umber of - columns is equal to the number of free parameters. + Sampled prior with ``n_samples`` rows, and the number of + columns corresponds to the number of free parameters. level : int, optional How far to go back to get the locals/globals. @@ -517,8 +525,8 @@ def extract_summary_statistics(self, theta, level=0): return x def save_summary_statistics(self, f, theta=None, x=None): - """Save sampled prior, and extracted summary statistics into a - single file in compressed ``.npz`` format. + """Save sampled prior and the extracted summary statistics into + a single compressed ``.npz`` file. Parameters ---------- @@ -551,8 +559,8 @@ def save_summary_statistics(self, f, theta=None, x=None): np.savez_compressed(f, theta=t, x=x) def load_summary_statistics(self, f): - """Load samples from a prior and extracted summary statistics - from a compressed ``.npz`` file. + """Load samples from a prior and the extracted summary + statistics from a compressed ``.npz`` file. Parameters ---------- @@ -563,7 +571,7 @@ def load_summary_statistics(self, f): Returns ------- tuple - Sampled prior and summary statistics arrays. + Sampled prior and the summary statistics arrays. """ loaded = np.load(f, allow_pickle=True) if set(loaded.files) == {'theta', 'x'}: @@ -571,7 +579,7 @@ def load_summary_statistics(self, f): x = loaded['x'] self.theta = theta self.x = x - return (theta, x) + return theta, x def init_inference(self, inference_method, density_estimator_model, prior, sbi_device='cpu', **inference_kwargs): @@ -580,35 +588,37 @@ def init_inference(self, inference_method, density_estimator_model, prior, Parameters ---------- inference_method : str - Inference method. Either of SNPE, SNLE or SNRE. + Inference method. Either SNPE, SNLE or SNRE. density_estimator_model : str The type of density estimator to be created. Either ``mdn``, ``made``, ``maf``, ``nsf`` for SNPE and SNLE, or ``linear``, ``mlp``, ``resnet`` for SNRE. prior : sbi.utils.BoxUniform - Uniformly distributed prior over given parameters. + Uniformly distributed prior over free parameters. sbi_device : str, optional Device on which the ``sbi`` will operate. By default this - is set to CPU and it is advisable to remain so for most - cases. In cases where the user provide custom embedding + is set to ``cpu`` and it is advisable to remain so for most + cases. In cases where the user provides custom embedding network through ``inference_kwargs`` argument, which will be trained more efficiently by using GPU, device should be - set accordingly. + set accordingly to either ``gpu`` or ``cuda``. inference_kwargs : dict, optional Additional keyword arguments for different density estimator builder functions: ``sbi.utils.get_nn_models.posterior_nn`` for SNPE, ``sbi.utils.get_nn_models.classifier_nn`` for SNRE, and ``sbi.utils.get_nn_models.likelihood_nn`` for SNLE. For - details check the ``sbi`` documentation. The most important - additional keyword augment the user is able to pass is - custom embedding network to learn features from potentially + details check the official ``sbi`` documentation. A single + highlighted keyword argument is a custom embedding network + that serves a purpose to learn features from potentially high-dimensional simulation outputs. By default multi-layer perceptron is used if no custom embedding network is - provided. For SNPE and SNLE,the user can pass an embedding - network for simulation outputs, while for SNRE, the user - may pass two embedding networks, one for parameters and one - for simulation outputs, respectively. + provided. For SNPE and SNLE, the user may pass an embedding + network for simulation outputs through ``embedding_net`` + argument, while for SNRE, the user may pass two embedding + networks, one for parameters through + ``embedding_net_theta`` argument, and the other for + simulation outputs through ``embedding_net_x`` argument. Returns ------- @@ -654,38 +664,38 @@ def init_inference(self, inference_method, density_estimator_model, prior, return inference def train(self, inference, theta, x, *args, **train_kwargs): - """Return trained neural inference object. + """Return the trained neural inference object. Parameters ---------- inference : sbi.inference.NeuralInference Instantiated inference object with stored paramaters and - simulation outputs prepared for training. + simulation outputs prepared for the training process. theta : torch.tensor Sampled prior. x : torch.tensor Summary statistics. args : tuple, optional - Contains a uniformly distributed sbi.utils.BoxUniform - proposal. Used only for SNPE, for SNLE and SNRE, - ``proposal`` should not be passed to ``append_simulations`` - method, thus ``args`` should not be passed. The args should - be provided only if the parameters were not sampled from - the prior, e.g., during the multi-round inference. - For SNLE and SNRE, args can hold the number of round from - which the data is stemmed from. Round 0 means from prior. - This is used only if the `discard_prior_samples` are set to - True inside the `train_kwargs`. + Contains a uniformly distributed proposal. Used only for + SNPE, for SNLE and SNRE, proposal should not be passed to + inference object, thus ``args`` should not be passed. The + additional arguments should be passed only if the + parameters were not sampled from the prior, e.g., during + the multi-round inference. For SNLE and SNRE, this can be + the number of round from which the data is stemmed from, + e.g., 0 means from the prior. This is used only if the + ``discard_prior_samples`` is set to True inside the + ``train_kwargs``. train_kwargs : dict, optional - Additional keyword arguments for ``train`` method of - ``sbi.inference.NeuralInference`` object. The user is able - to gain full control over training process by tuning - hyperparameters, i.e. batch size (by specifiying - ``training_batch_size`` argument), learning rate - (``learning_rate``), validation fraction - (``validation_fraction``), number of training epochs - (``max_num_epochs``), etc. For details, check the ``sbi`` - documentation. + Additional keyword arguments for ``train`` method in the + ``sbi.inference.NeuralInference`` class. The user is able + to gain the full control over the training process by + tuning hyperparameters, e.g., the batch size (by specifiying + ``training_batch_size`` argument), the learning rate + (``learning_rate``), the validation fraction + (``validation_fraction``), the number of training epochs + (``max_num_epochs``), etc. For details, check the official + ``sbi`` documentation. Returns ------- @@ -697,37 +707,37 @@ def train(self, inference, theta, x, *args, **train_kwargs): return inference def build_posterior(self, inference, **posterior_kwargs): - """Return inference and neural posterior objects. + """Return the updated inference and the neural posterior + objects. Parameters ---------- inference : sbi.inference.NeuralInference Instantiated inference object with stored paramaters and - simulation outputs prepared for training. + simulation outputs. posterior_kwargs : dict, optional Additional keyword arguments for ``build_posterior`` method - in ``sbi.inference.NeuralInference`` classes. For details, - check the ``sbi`` documentation. + in all ``sbi.inference.NeuralInference``-type classes. For + details, check the official ``sbi`` documentation. Returns ------- tuple ``sbi.inference.NeuralInference`` object with stored paramaters and simulation outputs prepared for training and - ``sbi.inference.NeuralPosterior`` object. + the neural posterior object. """ posterior = inference.build_posterior(**posterior_kwargs) - return (inference, posterior) + return inference, posterior - def infer_step(self, proposal, inference, - n_samples=None, theta=None, x=None, - train_kwargs={}, posterior_kwargs={}, *args): + def infer_step(self, proposal, inference, n_samples=None, theta=None, + x=None, train_kwargs={}, posterior_kwargs={}, *args): """Return the trained neural density estimator. - Parameter - --------- + Parameters + ---------- proposal : ``sbi.utils.torchutils.BoxUniform`` - Prior over parameters for current inference round. + Prior over parameters for the current round of inference. inference : ``sbi.inference.NeuralInference`` Inference object obtained via `.init_inference` method. n_samples : int, optional @@ -737,17 +747,15 @@ def infer_step(self, proposal, inference, x : numpy.ndarray, optional Summary statistics. train_kwargs : dict, optional - Additional keyword arguments for training the posterior - estimator. + Additional keyword arguments for `.train`. posterior_kwargs : dict, optional - Dictionary of arguments for `.build_posterior` method. + Additional keyword arguments for `.build_posterior`. args : list, optional - Additional arguments for `.train` method if SNPE is used as - an inference method. + Additional arguments for `.train`. Returns ------- - sbi.inference.NeuralPosterior + sbi.inference.posteriors.base_posterior.NeuralPosterior Trained posterior. """ # extract the training data and make adjustments for the ``sbi`` @@ -784,12 +792,13 @@ def infer(self, n_samples=None, theta=None, x=None, n_rounds=1, restart=False, device='cpu', **params): """Return the trained posterior. - If ``theta`` and ``x`` are not provided, ``n_samples`` has to - be defined. Otherwise, if ``n_samples`` is provided, neither - ``theta`` nor ``x`` needs to be provided. + Note that if ``theta`` and ``x`` are not provided, + ``n_samples`` has to be defined. Otherwise, if ``n_samples`` is + provided, neither ``theta`` nor ``x`` are needed and will be + ignored. - Parameter - --------- + Parameters + ---------- n_samples : int, optional The number of samples. theta : numpy.ndarray, optional @@ -804,7 +813,7 @@ def infer(self, n_samples=None, theta=None, x=None, n_rounds=1, Otherwise, if this method is called after posterior has already been built, multi-round inference is performed. inference_method : str, optional - Inference method. Either of SNPE, SNLE or SNRE. + Inference method. Either SNPE, SNLE or SNRE. density_estimator_model : str, optional The type of density estimator to be created. Either ``mdn``, ``made``, ``maf``, ``nsf`` for SNPE and SNLE, or @@ -822,20 +831,20 @@ def infer(self, n_samples=None, theta=None, x=None, n_rounds=1, performed. sbi_device : str, optional Device on which the ``sbi`` will operate. By default this - is set to CPU and it is advisable to remain so for most + is set to ``cpu`` and it is advisable to remain so for most cases. In cases where the user provide custom embedding network through ``inference_kwargs`` argument, which will be trained more efficiently by using GPU, device should be - set accordingly. + set accordingly to either ``gpu`` or ``cuda``. params : dict Bounds for each parameter. Keys should correspond to names - of parameters as defined in the model equaions, values - are lists with lower and upper bounds with quantities of - respective parameter. + of parameters as defined in the model equations, while + values are lists with the lower and the upper bound with + corresponding quantities of the parameter. Returns ------- - sbi.inference.NeuralPosterior + sbi.inference.posteriors.base_posterior.NeuralPosterior Approximated posterior distribution over parameters. """ if restart: @@ -925,12 +934,12 @@ def infer(self, n_samples=None, theta=None, x=None, n_rounds=1, return posterior def save_posterior(self, f): - """Saves the density estimator state dictionary to a disk file. + """Save the density estimator state dictionary to a disk file. Parameters ---------- - posterior : sbi.inference.NeuralPosterior, optional - Posterior distribution. + posterior: neural posterior object, optional + Posterior distribution over parameters. f : str or os.PathLike Path to file either as string or ``os.PathLike`` object that contains file name. @@ -942,7 +951,8 @@ def save_posterior(self, f): torch.save(self.posterior, f) def load_posterior(self, f): - """Loads the density estimator state dictionary from a disk file. + """Loads the density estimator state dictionary from a disk + file. Parameters ---------- @@ -952,10 +962,10 @@ def load_posterior(self, f): Returns ------- - sbi.inference.NeuralPosterior + sbi.inference.posteriors.base_posterior.NeuralPosterior Loaded neural posterior with defined method family, density - estimator state dictionary, prior over parameters and - output shape of the simulator. + estimator state dictionary, the prior over parameters and + the output shape of the simulator. """ p = torch.load(f) self.posterior = p @@ -968,15 +978,16 @@ def sample(self, shape, posterior=None, **kwargs): ---------- shape : tuple Desired shape of samples that are drawn from posterior. - posterior : sbi.inference.NeuralPosterior, optional + posterior: neural posterior object, optional Posterior distribution. kwargs : dict, optional Additional keyword arguments for ``sample`` method of - ``sbi.inference.NeuralPosterior`` object. + the neural posterior object. Returns ------- numpy.ndarray - Samples from posterior of the shape as given in ``shape``. + Samples taken from the posterior of the shape as given in + ``shape``. """ if posterior: p = posterior @@ -992,28 +1003,34 @@ def sample(self, shape, posterior=None, **kwargs): def pairplot(self, samples=None, points=None, limits=None, subset=None, labels=None, ticks=None, **kwargs): - """Plot samples in a 2-D grid with marginals and pairwise - marginals. + """Plot samples in a 2-dimensional grid with marginals and + pairwise marginals. Check ``sbi.analysis.plot.pairplot`` for more details. Parameters ---------- - samples : iterable, optional + samples : list or numpy.ndarray, optional Samples used to build the pairplot. points : dict, optional Additional points to scatter, e.g., true parameter values, if known. limits : dict, optional - Limits for each parameter. If None, min and max of the - given samples will be used. + Limits for each parameter. Keys correspond to parameter + names as defined in the model, while values are lists with + limits defined as the Brian 2 quantity objects. If None, + min and max of the given samples will be used. subset : list, optional - Which parameters to plot. + The names as strings of parameters to plot. labels : dict, optional - Names for each parameter. + Names for each parameter. Keys correspond to parameter + names as defined in the model, while values are lists of + strings. ticks : dict, optional - Position of the ticks. If None, default ticks positions - will be used. + Position of the ticks. Keys correspond to parameter names + as defined in the model, while values are lists with ticks + defined as the Brian 2 quantity objects. If None, default + ticks positions will be used. kwargs : dict, optional Additional keyword arguments for the ``sbi.analysis.pairplot`` function. @@ -1021,7 +1038,7 @@ def pairplot(self, samples=None, points=None, limits=None, subset=None, Returns ------- tuple - Figure and axis of posterior distribution plot. + Figure and axis of the posterior distribution plot. """ if samples is not None: s = samples @@ -1083,29 +1100,34 @@ def conditional_pairplot(self, condition, density=None, points=None, ticks=None, **kwargs): """Plot conditional distribution given all other parameters. - Check ``sbi.analysis.plot.conditional_pairplot`` for more - details. + Check ``sbi.analysis.conditional_pairplot`` for more details. Parameters ---------- condition : numpy.ndarray Condition that all but the one/two regarded parameters are fixed to. - density : sbi.inference.NeuralPosterior, optional + density : neural posterior object, optional Posterior probability density. points : dict, optional Additional points to scatter, e.g., true parameter values, if known. limits : dict, optional - Limits for each parameter. If None, min and max of the - given samples will be used. + Limits for each parameter. Keys correspond to parameter + names as defined in the model, while values are lists with + limits defined as the Brian 2 quantity objects. If None, + min and max of the given samples will be used. subset : list, optional - Which parameters to plot. + The names as strings of parameters to plot. labels : dict, optional - Names for each parameter. + Names for each parameter. Keys correspond to parameter + names as defined in the model, while values are lists of + strings. ticks : dict, optional - Position of the ticks. If None, default ticks positions - will be used. + Position of the ticks. Keys correspond to parameter names + as defined in the model, while values are lists with ticks + defined as the Brian 2 quantity objects. If None, default + ticks positions will be used. kwargs : dict, optional Additional keyword arguments for the ``sbi.analysis.conditional_pairplot`` function. @@ -1192,11 +1214,13 @@ def conditional_corrcoeff(self, condition, density=None, limits=None, condition : numpy.ndarray Condition that all but the one/two regarded parameters are fixed to. - density : sbi.inference.NeuralPosterior, optional + density : neural posterior object, optional Posterior probability density. limits : dict, optional - Limits for each parameter. If None, min and max of the - given samples will be used. + Limits for each parameter. Keys correspond to parameter + names as defined in the model, while values are lists with + limits defined as the Brian 2 quantity objects. If None, + min and max of the given samples will be used. subset : list, optional Parameters that are taken for conditional distribution, if None all parameters are considered. @@ -1256,11 +1280,11 @@ def generate_traces(self, posterior=None, output_var=None, param_init=None, Parameters ---------- - posterior : sbi.inference.NeuralPosterior, optional + posterior: neural posterior object, optional Posterior distribution. - output_var: str or sequence of str + output_var: str or list Name of the output variable to be monitored, it can also be - a sequence of names to record multiple variables. + a list of names to record multiple variables. param_init : dict Dictionary of initial values for the model. level : int, optional @@ -1269,9 +1293,9 @@ def generate_traces(self, posterior=None, output_var=None, param_init=None, Returns ------- brian2.units.fundamentalunits.Quantity or dict - If a single output variable is observed, 2-D array of - traces generated by using a set of parameters sampled from - the trained posterior distribution of shape + If a single output variable is observed, 2-dimensional + array of traces generated by using a set of parameters + sampled from the trained posterior distribution of shape (``self.n_traces``, number of time steps). Otherwise, a dictionary with keys set to names of output variables, and values to generated traces of respective output variables. From 590ccb13ab6d369697d266b7a986f258f3bdbb54 Mon Sep 17 00:00:00 2001 From: antelk Date: Mon, 16 Aug 2021 15:54:29 +0200 Subject: [PATCH 095/121] sbi example with simple interface --- docs_sphinx/examples/hh_sbi_simple.rst | 157 ++++++++++++++++++++++++- 1 file changed, 156 insertions(+), 1 deletion(-) diff --git a/docs_sphinx/examples/hh_sbi_simple.rst b/docs_sphinx/examples/hh_sbi_simple.rst index 6b4d331..3350ab4 100644 --- a/docs_sphinx/examples/hh_sbi_simple.rst +++ b/docs_sphinx/examples/hh_sbi_simple.rst @@ -1,4 +1,159 @@ Inference on Hodgin-Huxley model: simple interface ================================================== -tba \ No newline at end of file +Here you can download the data: +:download:`input_traces <../../examples/input_traces_hh.csv>` +:download:`output_traces <../../examples/output_traces_hh.csv>` + +.. code:: python + + from brian2 import * + from brian2modelfitting import * + import pandas as pd + + +To load the data, use the following: + +.. code:: python + + df_inp_traces = pd.read_csv('input_traces_hh.csv') + df_out_traces = pd.read_csv('output_traces_hh.csv') + inp_traces = df_inp_traces.to_numpy() + inp_traces = inp_traces[[0, 1], 1:] + out_traces = df_out_traces.to_numpy() + out_traces = out_traces[[0, 1], 1:] + +Then we have to define the model and its parameters: + +.. code:: python + + area = 20_000*um**2 + El = -65*mV + EK = -90*mV + ENa = 50*mV + VT = -63*mV + dt = 0.01*ms + eqs = ''' + dv/dt = (gl*(El-v) - g_na*(m*m*m)*h*(v-ENa) - g_kd*(n*n*n*n)*(v-EK) + I)/Cm : volt + dm/dt = 0.32*(mV**-1)*(13.*mV-v+VT)/ + (exp((13.*mV-v+VT)/(4.*mV))-1.)/ms*(1-m)-0.28*(mV**-1)*(v-VT-40.*mV)/ + (exp((v-VT-40.*mV)/(5.*mV))-1.)/ms*m : 1 + dn/dt = 0.032*(mV**-1)*(15.*mV-v+VT)/ + (exp((15.*mV-v+VT)/(5.*mV))-1.)/ms*(1.-n)-.5*exp((10.*mV-v+VT)/(40.*mV))/ms*n : 1 + dh/dt = 0.128*exp((17.*mV-v+VT)/(18.*mV))/ms*(1.-h)-4./(1+exp((40.*mV-v+VT)/(5.*mV)))/ms*h : 1 + + # free parameters + g_na : siemens (constant) + g_kd : siemens (constant) + gl : siemens (constant) + Cm : farad (constant) +''' + +Let's also specify time domain for more convenient plotting afterwards: + +.. code:: python + + t = arange(0, out_traces.shape[1]*dt/ms, dt/ms) + stim_start, stim_end = t[where(inp_traces[0, :] != 0)[0][[0, -1]]] + +Now, we have to define features in order to create a summary statistics representation of the output data traces: + +.. code:: python + + list_of_features = [ + lambda x: max(x[(t > stim_start) & (t < stim_end)]), # max active potential + lambda x: mean(x[(t > stim_start) & (t < stim_end)]), # mean active potential + lambda x: std(x[(t > stim_start) & (t < stim_end)]), # std active potential + lambda x: mean(x[(t > .25 * stim_start) & (t < .75 * stim_start)]), # resting + ] + +We have to instantiate the object by using the class ``Inferencer`` in which the data and the list of features should be passed: + +.. code:: python + + inferencer = Inferencer(dt=dt, model=eqs, + input={'I': inp_traces*amp}, + output={'v': out_traces*mV}, + features={'v': list_of_features}, + method='exponential_euler', + threshold='m > 0.5', + refractory='m > 0.5', + param_init={'v': 'VT'}) + + + +Be sure that the names of parameters passed to the ``infer`` method correspond to the names of unknown parameters defined as constatns in the model equations. + +.. code:: python + + posterior = inferencer.infer(n_samples=5_000, + n_rounds=3, + inference_method='SNPE', + density_estimator_model='mdn', + gl=[1e-09*siemens, 1e-07*siemens], + g_na=[2e-06*siemens, 2e-04*siemens], + g_kd=[6e-07*siemens, 6e-05*siemens], + Cm=[0.1*uF*cm**-2*area, 2*uF*cm**-2*area]) + +After the training of the neural density estimator stored accessible through ``posterior`` is done, we can draw samples from the approximated posterior distribution as follows: + +.. code:: python + + samples = inferencer.sample((5_000, )) + +In order to analyze the sampled data further, we can use the embedded ``pairplot`` method which visualizes the pairwise relationship between each two parameters: + +.. code:: python + + limits = {'gl': [1e-9*siemens, 1e-07*siemens], + 'g_na': [2e-06*siemens, 2e-04*siemens], + 'g_kd': [6e-07*siemens, 6e-05*siemens], + 'Cm': [0.1*uF*cm**-2*area, 2*uF*cm**-2*area]} + labels = {'gl': r'$\overline{g}_{l}$', + 'g_na': r'$\overline{g}_{Na}$', + 'g_kd': r'$\overline{g}_{K}$', + 'Cm': r'$C_{m}$'} + inferencer.pairplot(limits=limits, + labels=labels, + ticks=limits, + figsize=(6, 6)) + condition = inferencer.sample((1, )) + inferencer.conditional_pairplot(condition=condition, + limits=limits, + labels=labels, + ticks=limits, + figsize=(6, 6)) + +To obtain a simulated trace from a single sample of parameters drawn from posterior distribution, use the following code: + +.. code:: python + + inf_traces = inferencer.generate_traces(output_var='v') + +Let us now visualize the recordings and simulated traces: + +.. code:: python + + inf_traces = inferencer.generate_traces(output_var='v') + + nrows = 2 + ncols = out_traces.shape[0] + fig, axs = subplots(nrows, ncols, sharex=True, + gridspec_kw={'height_ratios': [3, 1]}, figsize=(9, 3)) + for idx in range(ncols): + spike_idx = in1d(t, spike_times[idx]).nonzero()[0] + spike_v = (out_traces[idx, :].min(), out_traces[idx, :].max()) + axs[0, idx].plot(t, out_traces[idx, :].T, 'C3-', lw=3, label='recordings') + axs[0, idx].plot(t, inf_traces[idx, :].T/mV, 'k--', lw=2, + label='sampled traces') + axs[1, idx].plot(t, inp_traces[idx, :].T/nA, lw=3, c='k', label='stimuli') + axs[1, idx].set_xlabel('$t$, ms') + if idx == 0: + axs[0, idx].set_ylabel('$V$, mV') + axs[1, idx].set_ylabel('$I$, nA') + handles, labels = [(h + l) for h, l + in zip(axs[0, idx].get_legend_handles_labels(), + axs[1, idx].get_legend_handles_labels())] + fig.legend(handles, labels) + tight_layout() + show() From a7d168fd36ead46b6f8e5ec21a620f6d3fa72bb0 Mon Sep 17 00:00:00 2001 From: antelk Date: Mon, 16 Aug 2021 16:05:54 +0200 Subject: [PATCH 096/121] minor fixes --- docs_sphinx/examples/hh_sbi_simple.rst | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/docs_sphinx/examples/hh_sbi_simple.rst b/docs_sphinx/examples/hh_sbi_simple.rst index 3350ab4..c6a8ab5 100644 --- a/docs_sphinx/examples/hh_sbi_simple.rst +++ b/docs_sphinx/examples/hh_sbi_simple.rst @@ -1,9 +1,12 @@ Inference on Hodgin-Huxley model: simple interface ================================================== +You can also download and run this example by clicking here: +:download:`hh_sbi_simple_interface.py <../../examples/hh_sbi_simple_interface.py>` + Here you can download the data: -:download:`input_traces <../../examples/input_traces_hh.csv>` -:download:`output_traces <../../examples/output_traces_hh.csv>` +:download:`input traces <../../examples/input_traces_hh.csv>` +:download:`output traces <../../examples/output_traces_hh.csv>` .. code:: python @@ -11,7 +14,6 @@ Here you can download the data: from brian2modelfitting import * import pandas as pd - To load the data, use the following: .. code:: python @@ -47,7 +49,7 @@ Then we have to define the model and its parameters: g_kd : siemens (constant) gl : siemens (constant) Cm : farad (constant) -''' + ''' Let's also specify time domain for more convenient plotting afterwards: From 4eb23f09e4721ce9381a1914c0df068d06e6391e Mon Sep 17 00:00:00 2001 From: antelk Date: Mon, 16 Aug 2021 18:52:35 +0200 Subject: [PATCH 097/121] add small changes to examples --- examples/IF_sbi.py | 8 ++++---- examples/hh_sbi_simple_interface.py | 28 ++++++++++++---------------- 2 files changed, 16 insertions(+), 20 deletions(-) diff --git a/examples/IF_sbi.py b/examples/IF_sbi.py index 99001b0..3f5a501 100644 --- a/examples/IF_sbi.py +++ b/examples/IF_sbi.py @@ -49,9 +49,9 @@ # Instantiate the inferencer object spike_features_list = [ - lambda x: x.size, # number of spikes - lambda x: 0. if diff(x).size == 0 else mean(diff(x)), # mean ISI -] + lambda x: x.size, # number of spikes + lambda x: 0. if diff(x).size == 0 else mean(diff(x)), # mean ISI + ] inferencer = Inferencer(dt=dt, model=eqs_inf, input={'I_syn': inp_trace.reshape(1, -1)}, output={'spikes': [spike_times]}, @@ -95,7 +95,7 @@ # Generate traces from a single sample of parameters inf_trace = inferencer.generate_traces(output_var='v') -fig, axs = subplots(nrows, 1, sharex=True, +fig, axs = subplots(2, 1, sharex=True, gridspec_kw={'height_ratios': [3, 1]}, figsize=(7, 3)) axs[0].plot(t, out_trace.T/mV, 'C3-', lw=3, label='recordings') axs[0].plot(t, inf_trace.T/mV, 'k--', lw=2, label='sampled traces') diff --git a/examples/hh_sbi_simple_interface.py b/examples/hh_sbi_simple_interface.py index b42295c..e4eb53f 100644 --- a/examples/hh_sbi_simple_interface.py +++ b/examples/hh_sbi_simple_interface.py @@ -8,9 +8,9 @@ df_inp_traces = pd.read_csv('input_traces_hh.csv') df_out_traces = pd.read_csv('output_traces_hh.csv') inp_traces = df_inp_traces.to_numpy() -inp_traces = inp_traces[[0, 1], 1:] +inp_traces = inp_traces[[0, 1, 3, 4], 1:] out_traces = df_out_traces.to_numpy() -out_traces = out_traces[[0, 1], 1:] +out_traces = out_traces[[0, 1, 3, 4], 1:] # Define model and its parameters area = 20_000*um**2 @@ -42,7 +42,7 @@ nrows = 2 ncols = out_traces.shape[0] fig, axs = subplots(nrows, ncols, sharex=True, - gridspec_kw={'height_ratios': [3, 1]}, figsize=(9, 3)) + gridspec_kw={'height_ratios': [3, 1]}, figsize=(12, 3)) for idx in range(ncols): axs[0, idx].plot(t, out_traces[idx, :].T, lw=3, c='C3', label='recordings') axs[1, idx].plot(t, inp_traces[idx, :].T/nA, lw=3, c='k', label='stimulus') @@ -57,7 +57,7 @@ tight_layout() -# Obtain spike times manually +# Obtain spike times manually from recordings def get_spike_times(x): x = x.copy() # put everything to -40 mV that is below -40 mV or has negative slope @@ -70,17 +70,12 @@ def get_spike_times(x): ind = where(diff(x) < 0) spike_times = array(t)[ind] - # spike times for active stimulus - spike_times_stim = spike_times[ - (spike_times > t_start) & (spike_times < t_end) - ] - # number of spikes - if spike_times_stim.shape[0] > 0: - spike_times_stim = spike_times_stim[ - append(1, diff(spike_times_stim)) > 0.5 + if spike_times.shape[0] > 0: + spike_times = spike_times[ + append(1, diff(spike_times)) > 0.5 ] - return spike_times_stim / 1000 # in seconds + return spike_times / 1000 # in seconds # store spike times for each trace into the list @@ -90,7 +85,7 @@ def get_spike_times(x): nrows = 2 ncols = out_traces.shape[0] fig, axs = subplots(nrows, ncols, sharex=True, - gridspec_kw={'height_ratios': [3, 1]}, figsize=(9, 3)) + gridspec_kw={'height_ratios': [3, 1]}, figsize=(12, 3)) for idx in range(ncols): spike_idx = in1d(t, spike_times[idx] * 1000).nonzero()[0] spike_v = (out_traces[idx, :].min(), out_traces[idx, :].max()) @@ -116,8 +111,9 @@ def get_spike_times(x): lambda x: std(x[(t > t_start) & (t < t_end)]), # AP std lambda x: kurt(x[(t > t_start) & (t < t_end)], fisher=False), # AP kurt lambda x: mean(x[(t > .25 * t_start) & (t < .75 * t_start)]), # resting + lambda x: mean(x[(t > t_end) & (t <= max(t))]), # steady-state ] -s_features = [lambda x: x.size] # numbe of spikes in a spike train +s_features = [lambda x: x.size] # the number of spikes in a spike train # Simulation-based inference object instantiation inferencer = Inferencer(dt=dt, model=eqs, @@ -175,7 +171,7 @@ def get_spike_times(x): nrows = 2 ncols = out_traces.shape[0] fig, axs = subplots(nrows, ncols, sharex=True, - gridspec_kw={'height_ratios': [3, 1]}, figsize=(9, 3)) + gridspec_kw={'height_ratios': [3, 1]}, figsize=(12, 3)) for idx in range(ncols): spike_idx = in1d(t, spike_times[idx]).nonzero()[0] spike_v = (out_traces[idx, :].min(), out_traces[idx, :].max()) From fafcced33ae18634f212ac14839b8fad9e14ec3c Mon Sep 17 00:00:00 2001 From: antelk Date: Tue, 17 Aug 2021 18:16:36 +0200 Subject: [PATCH 098/121] fix new data generation in multi-round inference --- brian2modelfitting/inferencer.py | 47 +++++++++++++++++++++----------- 1 file changed, 31 insertions(+), 16 deletions(-) diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py index f57e0e9..d9e3ccd 100644 --- a/brian2modelfitting/inferencer.py +++ b/brian2modelfitting/inferencer.py @@ -499,8 +499,8 @@ def extract_summary_statistics(self, theta, level=0): spike_trains = list(simulator.spikemonitor.spike_trains().values()) x = [] if self.features: - for ov in tqdm(self.output_var, desc='Extracting features', - total=len(self.output), leave=True): + for ov in self.output_var: + print(f'Extracting features for \'{ov}\'...') summary_statistics = [] if ov != 'spikes': o = obs[ov].get_value().T @@ -517,8 +517,8 @@ def extract_summary_statistics(self, theta, level=0): x.append(_x) x = np.hstack(x) else: - for ov in tqdm(self.output_var, desc='Aranging output traces', - total=len(self.output)): + print('Aranging traces for automatic feature extraction...') + for ov in self.output_var: o = obs[ov].get_value().T x.append(o.reshape(self.n_samples, -1).astype(np.float32)) x = np.hstack(x) @@ -661,6 +661,7 @@ def init_inference(self, inference_method, density_estimator_model, prior, inference = inference_method_fun(prior, density_estimator_builder, device=sbi_device, show_progress_bars=True) + self.inference = inference return inference def train(self, inference, theta, x, *args, **train_kwargs): @@ -883,10 +884,8 @@ def infer(self, n_samples=None, theta=None, x=None, n_rounds=1, self.x = x # initialize inference object - self.inference = self.init_inference(inference_method, - density_estimator_model, - prior, device, - **inference_kwargs) + _ = self.init_inference(inference_method, density_estimator_model, + prior, device, **inference_kwargs) # args for SNPE in `.train` # args for SNRE and SNLE are not supported here, if needed the user @@ -903,6 +902,9 @@ def infer(self, n_samples=None, theta=None, x=None, n_rounds=1, args = [prior, ] else: args = [None, ] + # generate data if the posterior already exist given proposal + self.theta = self.generate_training_data(self.n_samples, prior) + self.x = self.extract_summary_statistics(self.theta, level=1) # allocate empty list of posteriors posteriors = [] @@ -915,8 +917,7 @@ def infer(self, n_samples=None, theta=None, x=None, n_rounds=1, tqdm_desc = f'{n_rounds}-round focused inference' else: tqdm_desc = 'Amortized inference' - for _ in tqdm(range(n_rounds), desc=tqdm_desc): - + for round in tqdm(range(n_rounds), desc=tqdm_desc): # inference step posterior = self.infer_step(proposal, self.inference, n_samples, self.theta, self.x, @@ -926,9 +927,16 @@ def infer(self, n_samples=None, theta=None, x=None, n_rounds=1, posteriors.append(posterior) # update the proposal given the observation - if n_rounds > 1: + if n_rounds > 1 and round < n_rounds - 1: x_o = torch.tensor(self.x_o, dtype=torch.float32) proposal = posterior.set_default_x(x_o) + if posterior._method_family == 'snpe': + args = [proposal, ] + else: + args = [None, ] + self.theta = self.generate_training_data(self.n_samples, + proposal) + self.x = self.extract_summary_statistics(self.theta, level=1) self.posterior = posterior return posterior @@ -1273,16 +1281,19 @@ def conditional_corrcoeff(self, condition, density=None, limits=None, **kwargs) return cond_coeff.numpy() - def generate_traces(self, posterior=None, output_var=None, param_init=None, - level=0): + def generate_traces(self, n_samples=1, posterior=None, output_var=None, + param_init=None, level=0): """Generates traces for a single drawn sample from the trained posterior and all inputs. Parameters ---------- - posterior: neural posterior object, optional + n_samples : int, optional + The number of parameters samples. If n_samples is larger + than 1, the mean value of sampled set will be used. + posterior : neural posterior object, optional Posterior distribution. - output_var: str or list + output_var : str or list Name of the output variable to be monitored, it can also be a list of names to record multiple variables. param_init : dict @@ -1300,6 +1311,10 @@ def generate_traces(self, posterior=None, output_var=None, param_init=None, dictionary with keys set to names of output variables, and values to generated traces of respective output variables. """ + if not isinstance(n_samples, int): + raise ValueError('`n_samples` argument needs to be a positive' + ' integer.') + # sample a single set of parameters from posterior distribution if posterior: p = posterior @@ -1310,7 +1325,7 @@ def generate_traces(self, posterior=None, output_var=None, param_init=None, ' posterior has been calculated by the `infere`' ' method.') x_o = torch.tensor(self.x_o, dtype=torch.float32) - params = p.sample((1, ), x=x_o) + params = p.sample((n_samples, ), x=x_o).mean(axis=0) # set output variable that is monitored if output_var is None: From 55eb009c8e9f45b871212f0919b3234f5eb63503 Mon Sep 17 00:00:00 2001 From: antelk Date: Tue, 17 Aug 2021 18:27:19 +0200 Subject: [PATCH 099/121] update examples after multi-round bug has been fixed --- examples/IF_sbi.py | 18 +++++++------- examples/hh_sbi_flexible_interface.py | 25 +++++++++----------- examples/hh_sbi_simple_interface.py | 12 +++++----- examples/hh_sbi_synthetic_traces.py | 34 +++++++++++++++++---------- 4 files changed, 47 insertions(+), 42 deletions(-) diff --git a/examples/IF_sbi.py b/examples/IF_sbi.py index 3f5a501..3dc182f 100644 --- a/examples/IF_sbi.py +++ b/examples/IF_sbi.py @@ -2,7 +2,7 @@ from brian2modelfitting import * -# Set parameters +# Set parameters for integrate-and-fire model dt = 0.1*ms sim_time = 60*ms El = -70*mV @@ -23,7 +23,7 @@ C : farad (constant) ''' -# Run a model and create synthetic voltage traces +# Run a model and create synthetic voltage traces and obtain spike trains neurons = NeuronGroup(1, eqs, dt=dt, threshold='v > -50 * mV', reset='v = -70 * mV', @@ -42,7 +42,7 @@ VT = -50*mV DeltaT = 2*mV eqs_inf = ''' - dv/dt = (gl*(El - v) + gl*DeltaT*exp((v - VT) / DeltaT) + I_syn) / C : volt + dv/dt = (gl*(El - v) + gl*DeltaT*exp((v - VT) / DeltaT) + I) / C : volt gl : siemens (constant) C : farad (constant) ''' @@ -53,7 +53,7 @@ lambda x: 0. if diff(x).size == 0 else mean(diff(x)), # mean ISI ] inferencer = Inferencer(dt=dt, model=eqs_inf, - input={'I_syn': inp_trace.reshape(1, -1)}, + input={'I': inp_trace.reshape(1, -1)}, output={'spikes': [spike_times]}, features={'spikes': spike_features_list}, method='exponential_euler', @@ -61,8 +61,7 @@ reset='v = -70*mV', param_init={'v': -70*mV}) -# Infer parameter posteriors given bounds - +# Infer parameter posteriors for given parameters posterior = inferencer.infer(n_samples=3_000, n_rounds=3, gl=[10*nS, 100*nS], @@ -79,7 +78,7 @@ ticks=ticks, points=ground_truth_params, points_offdiag={'markersize': 9}, - points_colors=['r'], + points_colors=['r'], figsize=(6, 6)) # Visualize the trace by sampling trained posterior @@ -94,8 +93,9 @@ # Generate traces from a single sample of parameters inf_trace = inferencer.generate_traces(output_var='v') - -fig, axs = subplots(2, 1, sharex=True, +nrows = 2 +ncols = 1 +fig, axs = subplots(nrows, ncols, sharex=True, gridspec_kw={'height_ratios': [3, 1]}, figsize=(7, 3)) axs[0].plot(t, out_trace.T/mV, 'C3-', lw=3, label='recordings') axs[0].plot(t, inf_trace.T/mV, 'k--', lw=2, label='sampled traces') diff --git a/examples/hh_sbi_flexible_interface.py b/examples/hh_sbi_flexible_interface.py index f9ff33d..c3e8fe5 100644 --- a/examples/hh_sbi_flexible_interface.py +++ b/examples/hh_sbi_flexible_interface.py @@ -32,7 +32,7 @@ g_kd : siemens (constant) gl : siemens (constant) Cm : farad (constant) -''' + ''' # Time domain t = arange(0, out_traces.shape[1]*dt/ms, dt/ms) @@ -43,10 +43,9 @@ inferencer = Inferencer(dt=dt, model=eqs, input={'I': inp_traces*amp}, output={'v': out_traces*mV}, - features={'v': [lambda x: mean(x), + features={'v': [lambda x: max(x), lambda x: mean(x[(t > t_start) & (t < t_end)]), - lambda x: std(x[(t > t_start) & (t < t_end)]), - lambda x: ptp(x)]}, + lambda x: std(x[(t > t_start) & (t < t_end)])]}, method='exponential_euler', threshold='m > 0.5', refractory='m > 0.5', @@ -64,28 +63,25 @@ theta, x = inferencer.load_summary_statistics(path_to_data) else: # Generate training data - theta = inferencer.generate_training_data(n_samples=5_000, + theta = inferencer.generate_training_data(n_samples=10_000, prior=prior) # Extract summary stats x = inferencer.extract_summary_statistics(theta) # Save the data for later use - inferencer.save_summary_statistics(path_to_data, theta, x) + # inferencer.save_summary_statistics(path_to_data, theta, x) # Amortized inference # Training the neural density estimator inference = inferencer.init_inference(inference_method='SNPE', density_estimator_model='mdn', - prior=prior, - hidden_features=50, - num_components=10) + prior=prior) # First round of inference where no observation data is set to posterior posterior_amortized = inferencer.infer_step(proposal=prior, inference=inference, - theta=theta, x=x, - train_kwargs={'num_atoms': 10}) + theta=theta, x=x) # Storing the trained posterior without a default observation -path_to_posterior = __file__[:-3] + '_posterior.pth' -inferencer.save_posterior(path_to_posterior) +path_to_posterior = __file__[:-3] + '_posterior_amortized.pth' +# inferencer.save_posterior(path_to_posterior) # Sampling from the posterior given observations, ... inferencer.sample((10_000, )) @@ -95,8 +91,9 @@ 'g_kd': r'$\overline{g}_\mathrm{K}$', 'Cm': r'$\overline{C}_{m}$'} inferencer.pairplot(labels=labels) + # ...and optionally, continue the multiround inference using ``infer`` method -posterior_multiround = inferencer.infer(n_rounds=2) +posterior_multiround = inferencer.infer() inferencer.sample((10_000, )) inferencer.pairplot(labels=labels) diff --git a/examples/hh_sbi_simple_interface.py b/examples/hh_sbi_simple_interface.py index e4eb53f..5fb4039 100644 --- a/examples/hh_sbi_simple_interface.py +++ b/examples/hh_sbi_simple_interface.py @@ -32,7 +32,7 @@ g_kd : siemens (constant) gl : siemens (constant) Cm : farad (constant) -''' + ''' # Time domain t = arange(0, out_traces.shape[1]*dt/ms, dt/ms) @@ -126,8 +126,8 @@ def get_spike_times(x): param_init={'v': 'VT'}) # Multi-round inference -posterior = inferencer.infer(n_samples=5_000, - n_rounds=3, +posterior = inferencer.infer(n_samples=10_000, + n_rounds=2, inference_method='SNPE', density_estimator_model='mdn', gl=[1e-09*siemens, 1e-07*siemens], @@ -136,9 +136,9 @@ def get_spike_times(x): Cm=[0.1*uF*cm**-2*area, 2*uF*cm**-2*area]) # Draw samples from posterior -samples = inferencer.sample((5_000, )) +samples = inferencer.sample((10_000, )) -# Visualize pairplot and conditional pairplot +# Visualize conditional pairwise relationships between parameter distributions limits = {'gl': [1e-9*siemens, 1e-07*siemens], 'g_na': [2e-06*siemens, 2e-04*siemens], 'g_kd': [6e-07*siemens, 6e-05*siemens], @@ -166,7 +166,7 @@ def get_spike_times(x): _ = fig.colorbar(im) # Generate traces and visualize from a single sample of parameters -inf_traces = inferencer.generate_traces(output_var='v') +inf_traces = inferencer.generate_traces(n_samples=10_000, output_var='v') nrows = 2 ncols = out_traces.shape[0] diff --git a/examples/hh_sbi_synthetic_traces.py b/examples/hh_sbi_synthetic_traces.py index ee75a44..f24f594 100644 --- a/examples/hh_sbi_synthetic_traces.py +++ b/examples/hh_sbi_synthetic_traces.py @@ -12,10 +12,9 @@ Eleak = -70*mV VT = -60*mV C = 200*pF -gNa = 32*uS # 1st "unknown" parameter to infer ENa = 53*mV -gK = 1*uS # 2nd "unknown" parameter to infer EK = -107*mV +ground_truth_params = {'gNa': 32*uS, 'gK': 1*uS} eqs = ''' dVm/dt = -(gNa*m**3*h*(Vm - ENa) + gK*n**4*(Vm - EK) + gleak*(Vm - Eleak) - I_inj) / C : volt I_inj = int(t >= t_on and t < t_off)*I : amp (shared) @@ -28,12 +27,18 @@ betah = 4/(1 + exp((-(Vm - VT - 40.*mV)) / (5.*mV)))/ms : Hz alphan = (-0.032/mV) * (Vm - VT - 15.*mV) / (exp((-(Vm - VT - 15.*mV)) / (5.*mV)) - 1)/ms : Hz betan = 0.5*exp(-(Vm - VT - 10.*mV) / (40.*mV))/ms : Hz + + # parameters + gNa : siemens (constant) + gK : siemens (constant) ''' neurons = NeuronGroup(1, eqs, dt=dt, threshold='m>0.5', refractory='m>0.5', method='exponential_euler') state_monitor = StateMonitor(neurons, 'Vm', record=True) spike_monitor = SpikeMonitor(neurons, record=False) +neurons.gNa = ground_truth_params['gNa'] +neurons.gK = ground_truth_params['gK'] neurons.Vm = 'Eleak' neurons.m = '1/(1 + betam/alpham)' neurons.h = '1/(1 + betah/alphah)' @@ -45,22 +50,26 @@ # Inference start_scope() + +# A set of equations for the Inferencer class eqs = ''' dVm/dt = -(gNa*m**3*h*(Vm - ENa) + gK*n**4*(Vm - EK) + gleak*(Vm - Eleak) - I_inj) / C : volt dm/dt = alpham*(1-m) - betam*m : 1 dn/dt = alphan*(1-n) - betan*n : 1 dh/dt = alphah*(1-h) - betah*h : 1 - alpham = (-0.32/mV) * (Vm - VT - 13.*mV) / (exp((-(Vm - VT - 13.*mV)) / (4.*mV)) - 1)/ms : Hz - betam = (0.28/mV) * (Vm - VT - 40.*mV) / (exp((Vm - VT - 40.*mV) / (5.*mV)) - 1)/ms : Hz + alpham = (-0.32/mV) * (Vm - VT - 13.*mV) / (exp((-(Vm - VT - 13.*mV))/(4.*mV)) - 1)/ms : Hz + betam = (0.28/mV) * (Vm - VT - 40.*mV) / (exp((Vm - VT - 40.*mV)/(5.*mV)) - 1)/ms : Hz alphah = 0.128 * exp(-(Vm - VT - 17.*mV) / (18.*mV))/ms : Hz betah = 4/(1 + exp((-(Vm - VT - 40.*mV)) / (5.*mV)))/ms : Hz alphan = (-0.032/mV) * (Vm - VT - 15.*mV) / (exp((-(Vm - VT - 15.*mV)) / (5.*mV)) - 1)/ms : Hz betan = 0.5*exp(-(Vm - VT - 10.*mV) / (40.*mV))/ms : Hz - # parameters to fit + # parameters gNa : siemens (constant) gK : siemens (constant) ''' + +# Instantiating the inferencer object with input and output data traces inferencer = Inferencer(dt=dt, model=eqs, input={'I_inj': I_inj.reshape(1, -1)}, output={'Vm': out_trace}, @@ -71,7 +80,7 @@ 'h': '1/(1 + betah/alphah)', 'n': '1/(1 + betan/alphan)'}) -# Amortized inference with automatic feature extraction by using a default MLP +# Amortized inference performed with automatic feature extraction inferencer.infer(n_samples=10_000, inference_method='SNPE', density_estimator_model='mdn', @@ -84,18 +93,17 @@ # Visualize estimated posterior distribution limits = {'gNa': [.5*uS, 80.*uS], 'gK': [1e-4*uS, 15.*uS]} -labels= {'gNa': r'$\overline{g}_\mathrm{Na}$', - 'gK': r'$\overline{g}_\mathrm{K}$'} +labels = {'gNa': r'$\overline{g}_\mathrm{Na}$', + 'gK': r'$\overline{g}_\mathrm{K}$'} inferencer.pairplot(limits=limits, ticks=limits, labels=labels, - points={'gNa': 32*uS, - 'gK': 1*uS}, + points=ground_truth_params, points_offdiag={'markersize': 6}, points_colors=['r'], figsize=(6, 6)) -# Visualize traces for a single sample from posterior +# Visualize sampled traces inf_trace = inferencer.generate_traces() fig, axs = subplots(2, 1, sharex=True, @@ -103,9 +111,9 @@ axs[0].plot(t, out_trace.ravel()/mV, 'C3-', lw=3, label='simulated recordings') axs[0].plot(t, inf_trace.ravel()/mV, 'k--', lw=2, label='posterior sample') axs[0].set(ylabel='$V_m$, mV') -axs[0].legend() +axs[0].legend(loc='upper right') axs[1].plot(t, I_inj.ravel()/nA, 'k-', lw=3, label='stimulus') axs[1].set(xlabel='$t$, s', ylabel='I, nA') -axs[1].legend() +axs[1].legend(loc='upper right') tight_layout() show() From 58c9b7273b120ef382278494bba1c870a722dcaf Mon Sep 17 00:00:00 2001 From: antelk Date: Tue, 17 Aug 2021 20:59:28 +0200 Subject: [PATCH 100/121] add examples of using the toolbox for simulation-based inferencer --- docs_sphinx/examples/hh_sbi_flex.rst | 186 ++++++++++++++++++++++++- docs_sphinx/examples/hh_sbi_simple.rst | 2 +- 2 files changed, 186 insertions(+), 2 deletions(-) diff --git a/docs_sphinx/examples/hh_sbi_flex.rst b/docs_sphinx/examples/hh_sbi_flex.rst index e1e4b69..37b58ea 100644 --- a/docs_sphinx/examples/hh_sbi_flex.rst +++ b/docs_sphinx/examples/hh_sbi_flex.rst @@ -1,4 +1,188 @@ Inference on Hodgin-Huxley model: flexible interface ==================================================== -tba \ No newline at end of file +You can also download and run this example by clicking here: +:download:`hh_sbi_simple_interface.py <../../examples/hh_sbi_flexible_interface.py>` + +Here you can download the data: +:download:`input traces <../../examples/input_traces_hh.csv>` +:download:`output traces <../../examples/output_traces_hh.csv>` + +.. code:: python + + from brian2 import * + from brian2modelfitting import * + import pandas as pd + + +To load the data, use the following: + +.. code:: python + + df_inp_traces = pd.read_csv('input_traces_hh.csv') + df_out_traces = pd.read_csv('output_traces_hh.csv') + inp_traces = df_inp_traces.to_numpy() + inp_traces = inp_traces[[0, 1, 3], 1:] + out_traces = df_out_traces.to_numpy() + out_traces = out_traces[[0, 1, 3], 1:] + +The model used for this example is the Hodgkin-Huxley neuron model. +The parameters of the model are defined as follows: + +.. code:: python + + area = 20_000*um**2 + El = -65*mV + EK = -90*mV + ENa = 50*mV + VT = -63*mV + dt = 0.01*ms + eqs = ''' + dv/dt = (gl*(El-v) - g_na*(m*m*m)*h*(v-ENa) - g_kd*(n*n*n*n)*(v-EK) + I)/Cm : volt + dm/dt = 0.32*(mV**-1)*(13.*mV-v+VT)/ + (exp((13.*mV-v+VT)/(4.*mV))-1.)/ms*(1-m)-0.28*(mV**-1)*(v-VT-40.*mV)/ + (exp((v-VT-40.*mV)/(5.*mV))-1.)/ms*m : 1 + dn/dt = 0.032*(mV**-1)*(15.*mV-v+VT)/ + (exp((15.*mV-v+VT)/(5.*mV))-1.)/ms*(1.-n)-.5*exp((10.*mV-v+VT)/(40.*mV))/ms*n : 1 + dh/dt = 0.128*exp((17.*mV-v+VT)/(18.*mV))/ms*(1.-h)-4./(1+exp((40.*mV-v+VT)/(5.*mV)))/ms*h : 1 + + # unknown parameters + g_na : siemens (constant) + g_kd : siemens (constant) + gl : siemens (constant) + Cm : farad (constant) + ''' + +Now, let's define the time domain and start with the inferencer procedure +manually: + +.. code:: python + + t = arange(0, out_traces.shape[1]*dt/ms, dt/ms) + t_start, t_end = t[where(inp_traces[0, :] != 0)[0][[0, -1]]] + + # Start with the regular instatiation of the class + inferencer = Inferencer(dt=dt, model=eqs, + input={'I': inp_traces*amp}, + output={'v': out_traces*mV}, + features={'v': [lambda x: max(x), + lambda x: mean(x[(t > t_start) & (t < t_end)]), + lambda x: std(x[(t > t_start) & (t < t_end)])]}, + method='exponential_euler', + threshold='m > 0.5', + refractory='m > 0.5', + param_init={'v': 'VT'}) + +The prior should be initialized by defining the upper and lower bounds for +each unknown parameter: + +.. code:: python + + prior = inferencer.init_prior(gl=[1e-09*siemens, 1e-07*siemens], + g_na=[2e-06*siemens, 2e-04*siemens], + g_kd=[6e-07*siemens, 6e-05*siemens], + Cm=[0.1*uF*cm**-2*area, 2*uF*cm**-2*area]) + +If the input and output data for the training of the neural density estimator +already exists, we can load it as follows: + +.. code:: python + + path_to_data = ... + theta, x = inferencer.load_summary_statistics(path_to_data) + +Otherwise, we have to generate training data and summary statistics from a +given list of features: + +.. code:: python + + theta = inferencer.generate_training_data(n_samples=10_000, + prior=prior) + x = inferencer.extract_summary_statistics(theta) + +And the data can be saved for the later use: + +.. code:: python + + inferencer.save_summary_statistics(path_to_data, theta, x) + +Finally, let's get our hands dirty and let's perform a single step of +inference: + +.. code:: python + + # amortized inference + inference = inferencer.init_inference(inference_method='SNPE', + density_estimator_model='mdn', + prior=prior) + # first round of inference where no observation data is set to posterior + posterior_amortized = inferencer.infer_step(proposal=prior, + inference=inference, + theta=theta, x=x) + +After the posterior has been built, it can be stored as follows: + +.. code:: python + + # storing the trained posterior without a default observation + path_to_posterior = ... + inferencer.save_posterior(path_to_posterior) + +Now, as in the simple interface example, sampling can be performed via +``sample`` method where it is enough to define a number of parameters to +be drawn from the posterior: + +.. code:: python + + inferencer.sample((10_000, )) + + +Creating the pairwise relationship visualizations using the approximated +posterior distribution + +.. code:: python + + # define the label for each parameter + labels = {'gl': r'$\overline{g}_\mathrm{l}$', + 'g_na': r'$\overline{g}_\mathrm{Na}$', + 'g_kd': r'$\overline{g}_\mathrm{K}$', + 'Cm': r'$\overline{C}_{m}$'} + inferencer.pairplot(labels=labels) + + +It is possible to continue with the focused inference (to draw parameters +from the posterior and to perform the training of a neural network to +estimate the posterior distribution by focusing on a particular observation) +by using a standard approach through ``infer`` method: + +.. code:: python + + posterior_focused = inferencer.infer() + +For every future call of ``inferencer``, the last trained posterior will be +used by default, e.g., when generating traces by using a single sample of +parameters from a now non-amortized approximated posterior distribution: + +.. code:: python + + inf_traces = inferencer.generate_traces() + nrows = 2 + ncols = out_traces.shape[0] + fig, axs = subplots(nrows, ncols, sharex=True, + gridspec_kw={'height_ratios': [3, 1]}, + figsize=(ncols * 3, 3)) + for idx in range(ncols): + axs[0, idx].plot(t, out_traces[idx, :].T, 'C3-', lw=3, label='recordings') + axs[0, idx].plot(t, inf_traces[idx, :].T/mV, 'k--', lw=2, + label='sampled traces') + axs[1, idx].plot(t, inp_traces[idx, :].T/nA, lw=3, c='k', label='stimuli') + axs[1, idx].set_xlabel('$t$, ms') + if idx == 0: + axs[0, idx].set_ylabel('$V$, mV') + axs[1, idx].set_ylabel('$I$, nA') + handles, labels = [(h + l) for h, l + in zip(axs[0, idx].get_legend_handles_labels(), + axs[1, idx].get_legend_handles_labels())] + fig.legend(handles, labels) + tight_layout() + show() diff --git a/docs_sphinx/examples/hh_sbi_simple.rst b/docs_sphinx/examples/hh_sbi_simple.rst index c6a8ab5..ef8d650 100644 --- a/docs_sphinx/examples/hh_sbi_simple.rst +++ b/docs_sphinx/examples/hh_sbi_simple.rst @@ -1,7 +1,7 @@ Inference on Hodgin-Huxley model: simple interface ================================================== -You can also download and run this example by clicking here: +You can also download and run a similar example available here: :download:`hh_sbi_simple_interface.py <../../examples/hh_sbi_simple_interface.py>` Here you can download the data: From 5aff366f50d798f90af2c166ad15ff8e57c5ffef Mon Sep 17 00:00:00 2001 From: antelk Date: Tue, 17 Aug 2021 21:00:09 +0200 Subject: [PATCH 101/121] small updates --- examples/hh_sbi_flexible_interface.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/hh_sbi_flexible_interface.py b/examples/hh_sbi_flexible_interface.py index c3e8fe5..bdc95b1 100644 --- a/examples/hh_sbi_flexible_interface.py +++ b/examples/hh_sbi_flexible_interface.py @@ -68,7 +68,7 @@ # Extract summary stats x = inferencer.extract_summary_statistics(theta) # Save the data for later use - # inferencer.save_summary_statistics(path_to_data, theta, x) + inferencer.save_summary_statistics(path_to_data, theta, x) # Amortized inference # Training the neural density estimator @@ -81,7 +81,7 @@ theta=theta, x=x) # Storing the trained posterior without a default observation path_to_posterior = __file__[:-3] + '_posterior_amortized.pth' -# inferencer.save_posterior(path_to_posterior) +inferencer.save_posterior(path_to_posterior) # Sampling from the posterior given observations, ... inferencer.sample((10_000, )) From ccd8ce69557ad13929d8288c44dc2d3155e4843b Mon Sep 17 00:00:00 2001 From: antelk Date: Wed, 18 Aug 2021 14:56:32 +0200 Subject: [PATCH 102/121] update advanced features list --- docs_sphinx/features/index.rst | 413 +++++++++++++++++++++++---------- 1 file changed, 290 insertions(+), 123 deletions(-) diff --git a/docs_sphinx/features/index.rst b/docs_sphinx/features/index.rst index 9fc3245..1f2d63d 100644 --- a/docs_sphinx/features/index.rst +++ b/docs_sphinx/features/index.rst @@ -1,8 +1,10 @@ Advanced Features ================= -This part of documentation list other features provided alongside or inside `~brian2modelfitting.fitter.Fitter` -objects, to help the user with easier and more flexible applications. +This part of documentation lists other features provided alongside or inside +`~brian2modelfitting.fitter.Fitter` and `~brian2modelfitting.inferencer.Inferencer` +objects to allow users easier and a more flexible development when working on +their own problems. .. contents:: :local: @@ -11,108 +13,199 @@ objects, to help the user with easier and more flexible applications. Parameters initialization ------------------------- -Whilst running `~brian2modelfitting.fitter.Fitter` user can specify values with which model evaluation -of differential equations start. +Whilst running `~brian2modelfitting.fitter.Fitter` or `~brian2modelfitting.inferencer.Inferencer`, +the user is able to pass the values of the parameters and variables that will +be used as initial conditions when solving the differential equations defined +in the neuron model. -The fitting functions accept additional dictionary input to address that. To do so, -dictionary argument has to be added to `~brian2modelfitting.fitter.Fitter` initialization: +Initial conditions should be passed by using an additional dictionary to the +constructor: .. code:: python - param_init = {'v': -30*mV} + init_conds = {'v': -30*mV} .. code:: python - fitter = TraceFitter(..., param_init = {'v': -30*mV}) + fitter = TraceFitter(..., param_init = init_conds) +or + +.. code:: python + + inferencer = Inferencer(..., param_init = init_conds) Restart ------- -By default any `~brian2modelfitting.fitter.Fitter` works in continuous optimization mode between run, where all of the -parameters drawn are being evaluated. +By default any `~brian2modelfitting.fitter.Fitter` object works in continuous +optimization mode between run, where all of the parameters drawn are being +evaluated. -Through changing the input flag in `~brian2modelfitting.fitter.Fitter.fit()`: ``restart`` to ``True``, user can reset the optimizer and -start the optimization from scratch. +By setting the ``restart`` argument in `~brian2modelfitting.fitter.Fitter.fit()` +to ``True``, the user can restart the optimizer and the optimization will +start from scratch. -Used by Fitter optimizer and metric can only be changed when the flat is `True`. +Used by Fitter optimizer and metric can only be changed when the flat is +`True`. +The previously outlined ``restart`` argument is used in the similar fashion +in `~brian2modelfitting.inferencer.Inferencer.infer()` method. It is set to +``False`` by default, and each following re-call of the method will result +in the multi-round inference. If the user wants amortized inference without +using any knowledge from the previous round of optimization instead, the +``restart`` argument should be set to ``True``. -Multiobjective normalization +Multi-objective optimization ---------------------------- -It is possible to fit more than one output variable at the same time, by combining the errors for each variable. To do -so, users can specify several output variables during the initialization:: +In the case of `~brian2modelfitting.fitter.Fitter` classes, it is possible to +fit more than one output variable at the same time by combining the errors for +each variable. To do so, the user can specify several output variables during +the initialization as follows: + +.. code:: python + + fitter = TraceFitter(..., + output={'x': target_x, + 'y': target_y}) + +If the fitter function uses a single metric, it is applied to both variables. + +.. note:: + + This approach requires that the resulting error has the same units for all + variables, i.e., it would not be possible to use the same `.MSEMetric` on + variables with different units, since the errors cannot be simply added up. + +As a more general solution, the user can specify a metric for each variable +and utilize their normalization arguments to make the units compatible (most +commonly by turning both errors into dimensionless quantities). The +normalization also defines the relative weights of all errors. For example, if +the variable ``x`` has dimensions of mV and the variable ``y`` is +dimensionless, the following metrics can be used to make an error of 10 mV in +``x`` to be weighed as much as an error of 0.1 in ``y`` + +.. code:: python + + metrics = {'x': MSEMetric(normalization=10*mV), + 'y': MSEMetric(normalization=0.1)} + +This has to be passed as the ``metric`` argument of the `~brian2modelfitting.fitter.Fitter.fit` +function. + +In the case of the `~brian2modelfitting.inferencer.Inferencer` class, +switching from a single- to multi-objective optimization is seamless. The user +has to provide multiple output variables during the initialization process the +same way as for `~brian2modelfitting.fitter.Fitter` classes: + +.. code:: python - fitter = TraceFitter(..., output={'x': target_x, - 'y': target_y}, - ...) + inferencer = Inferencer(..., + output={'x': target_x, + 'y': target_y}) -If the fit uses a single metric, it applies to both variables. Note that this requires that the resulting error has the -same units for both variables – for example, it would not be possible to use the same `.MSEMetric` on variables with -different units, since the errors cannot be simply added up. As a more general solution, users can specify a metric for -each variable and use their normalization arguments to make the units compatible (most commonly by turning both errors -into dimensionless quantities). This normalization also defines the relative weights of both errors. For example, if the -variable ``x`` has dimensions of volt and the variable ``y`` is dimensionless, the following metrics can be used to make -an error of 10mV in ``x`` to be weighed as much as an error of 0.1 in ``y``:: +Later, during the inference process, the user has to define feautres for each +output variable as follows: - metrics = {'x': MSEMetric(normalization=10*mV) - 'y': MSEMetric(normalization=0.1)} +.. code:: python + + posterior = inferencer.infer(..., + features={'x': list_of_features_for_x, + 'y': list_of_features_for_y}) -This dictionary then has to be provided as the ``metric`` argument of the `~.Fitter.fit` function. +If the user prefers automatic feature extraction, the ``features`` argument +should not be defined (it should stay set to None). +.. warning:: *The number of features - be aware* + + If the user chooses to define a list of features for extracting the summary + features, it is important to keep in mind that the total number of features + will be increased as many times as there are output variables set for + multi-objective optimization. Callback function ----------------- -To visualize the progress of the optimization we provided few possibilities of feedback -inside `~brian2modelfitting.fitter.Fitter`. - +To visualize the progress of the optimization we provided few possibilities of +the feedback inside the `~brian2modelfitting.fitter.Fitter`. The 'callback' input provides few default options, updated in each round: - - ``'text'`` (default) that prints out the parameters of the best fit and corresponding error - - ``'progressbar'`` that uses ``tqdm.autonotebook`` to provide a progress bar - - ``None`` for non-verbose option + - ``'text'`` (default) - prints out the parameters of the best fit and + corresponding error; + - ``'progressbar'`` - uses ``tqdm.autonotebook`` to provide a progress bar; + - ``None`` - non-verbose; as well as **customized feedback option**. User can provide -a *callable* (i.e. function), that will provide an output or printout. If callback returns -``True`` the fitting execution is interrupted. +a *callable* (i.e., a function), that ensures either returning an output or +printout. If callback returns ``True``, the fitting execution will be +interrupted. User gets four arguments to customize over: - - ``params`` - set of parameters from current round - - ``errors`` - set of errors from current round - - ``best_params`` - best parameters globally, from all rounds - - ``best_error`` - best parameters globally, from all rounds - - ``index`` - index of current round + - ``params`` - set of parameters from current round; + - ``errors`` - set of errors from current round; + - ``best_params`` - best parameters globally, from all rounds; + - ``best_error`` - best parameters globally, from all rounds; + - ``index`` - index of current round. -An example function: +An example callback function: .. code:: python - def callback(params, errors, best_params, best_error, index): - print('index {} errors minimum: {}'.format(index, min(errors))) - -.. code:: python + def callback_fun(params, errors, best_params, best_error, index): + print('index {} errors minimum: {}'.format(index, min(errors))) - fitter = TraceFitter(...) - result, error = fitter.fit(..., callback=...) + ... + fitter = TraceFitter(...) + result, error = fitter.fit(..., callback=callback_fun) +OnlineTraceFitter +----------------- + +`~brian2modelfitting.fitter.OnlineTraceFitter` was created to work with long +traces or large-scale optimization problems. This `~brian2modelfitting.fitter.Fitter` +class uses online mean square error as a metric. +When the `~brian2modelfitting.fitter.OnlineTraceFitter.fit()` method is called +there is no need of specifying a metric, which is by default set to None. +The errors are instead calculated with `~brian2.groups.group.Group.run_regularly` +for each simulation. + + .. code:: python + + fitter = OnlineTraceFitter(model=model, + input={'I': inp_traces}, + output={'v': out_traces}, + dt=0.1*ms, + n_samples=5) + + result, error = fitter.fit(optimizer=optimizer, + n_rounds=1, + gl=[1e-8*siemens*cm**-2 * area, 1e-3*siemens*cm**-2 * area]) + +Reference the target values in the equations +-------------------------------------------- + +A model can refer to the target output values within the equations. For +example, if the membrane potential trace *v* (i.e. `output_var='v'`) is used +for the optimization, equations can refer to the target trace as `v_target`. +This allows adding a coupling term such as: `coupling*(v_target - v)` to +the equation that corresponds to state variable `v`, pulling the trajectory +towards the correct solution. Generate Traces --------------- -With the same `~brian2modelfitting.fitter.Fitter` class user can also generate the traces with newly -optimized parameters. +`~brian2modelfitting.fitter.Fitter` and `~brian2modelfitting.inferencer.Inferencer` +classes allow the user can to generate the traces with optimized parameters. -To simulate and visualize the traces or spikes for the parameters of choice. -For a quick access to best fitted set of parameters Fitter classes provided -ready to use functions: +For a quick access to best fitted set of parameters `~brian2modelfitting.fitter.Fitter` +classes provide ready to use functions: - `~brian2modelfitting.fitter.TraceFitter.generate_traces` inside `~brian2modelfitting.fitter.TraceFitter` - `~brian2modelfitting.fitter.SpikeFitter.generate_spikes` inside `~brian2modelfitting.fitter.SpikeFitter` -Functions can be called after fitting in the following manner, without -any input arguments: +These functions can be called after the fitting procedure is finalized in the +following manner, without any input arguments: .. code:: python @@ -126,27 +219,46 @@ any input arguments: results, error = fitter.fit(...) spikes = fitter.generate_spikes() +On the other hand, since the `~brian2modelfitting.inferencer.Inferencer` class +is able to perform the inference of the unknown parameter distribution by +utilizing output traces and spike trains simultaneously, ``generate_traces`` +is used for both. + +Once the approximated posterior distribution is built, the user is allowed to +call ``generate_traces`` on `~brian2modelfitting.inferencer.Inferencer` +object. If only one output variable is used for the optimization of the +parameters, the user does not have to specifiy output variable in the +``generate_traces`` method through ``output_var`` argument. If, for example, +the multi-objective optimization is performed by using both output traces and +spike trains and the user is interested in only times of spike events, +``output_var`` should be set to ``'spike'``. Otherwise, if the user specifies +a list of names or the ``output_var`` is not specified, a dictionary with keys +set to output variable names and with their respective values, will be +returned instead. -Custom generate -~~~~~~~~~~~~~~~ -To create traces for other parameters, or generate traces after spike -train fitting, user can call the - `~brian2modelfitting.fitter.Fitter.generate` call, that takes in following -arguments: +Customize ``generate`` for `~brian2modelfitting.fitter.Fitter` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +To create traces for other parameters, or generate traces after the spike +train fitting, user can call the `~brian2modelfitting.fitter.Fitter.generate` +method, which takes in the following arguments: .. code:: python - fitter.generate(params=None, output_var=None, param_init=None, level=0) + fitter.generate(params=..., output_var=..., param_init=..., level=0) -Where ``params`` is a dictionary of parameters for which the traces we generate. -``output_var`` provides an option to pick one or more variable for visualization. With -``param_init``, user can define the initial values for differential equations. -``level`` allows for specification of namespace level from which we get -the constant parameters of the model. +where ``params`` should be a dictionary of parameters for which we generate +the traces; ``output_var`` provides an option to pick one or more variables +for visualization; with ``param_init``, the user is able to define the initial +values for differential equations in the model; and ``level`` allows for +specification of the namespace level from which we are able to get the +constant parameters of the model. -If ``output_var`` is the name of a single variable name (or the special name ``'spikes'``), a single `~.Quantity` -(for normal variables) or a list of spikes time arrays (for ``'spikes'``) will be returned. If a list of names is -provided, then the result is a dictionary with all the results. +If ``output_var`` is the name of a single variable name (or the special name +``'spikes'``), a single `~.Quantity` (for variables) or a list of spikes time +arrays (for ``'spikes'``) will be returned. If a list of names is provided, +then the result is a dictionary with all the results. .. code:: python @@ -155,43 +267,44 @@ provided, then the result is a dictionary with all the results. traces = fitter.generate(output_var=['v', 'h', 'n', 'm']) v_trace = traces['v'] h_trace = traces['h'] - ... - Results ------- -Fitter class stores all of the parameters examined by the optimizer as well -as the corresponding error. To retrieve them you can call the - `~brian2modelfitting.fitter.Fitter.results`. +`~brian2modelfitting.fitter.Fitter` classes store all of the parameters +used by the optimizer as well as the corresponding errors. To retrieve them +you can call the `~brian2modelfitting.fitter.Fitter.results`. .. code:: python - fitter = TraceFitter(...) - ... - traces = fitter.generate_traces() + fitter = TraceFitter(...) + ... + traces = fitter.generate_traces() .. code:: python - fitter = SpikeFitter(...) - ... - results = fitter.results(format='dataframe') + fitter = SpikeFitter(...) + ... + results = fitter.results(format='dataframe') Results can be returned in one of the following formats: - - ``'list'`` (default) returns a list of dictionaries with corresponding parameters (including units) and errors - - ``'dict'`` returns a dictionary of arrays with corresponding parameters (including units) and errors - - ``'dataframe'`` returns a `~pandas.DataFrame` (without units) + - ``'list'`` (default) - returns a list of dictionaries with corresponding + parameters (including units) and errors; + - ``'dict'`` - returns a dictionary of arrays with corresponding parameters + (including units) and errors; + - ``'dataframe'`` - returns a `~pandas.DataFrame` (without units). -The use of units (only relevant for formats ``'list'`` and ``'dict'``) can be switched -on or off with the ``use_units`` argument. If it is not specified, it will default to -the value used during the initialization of the `Fitter` (which itself defaults to -``True``). +The use of units (only relevant for formats ``'list'`` and ``'dict'``) can be +switched on or off with the ``use_units`` argument. If it is not specified, it +will default to the value used during the initialization of the `Fitter` +(which itself defaults to ``True``). Example output: ~~~~~~~~~~~~~~~ -``'list'``: +- ``'list'``: .. code:: python @@ -200,7 +313,7 @@ Example output: ...] -``'dict'``: +- ``'dict'``: .. code:: python @@ -210,68 +323,122 @@ Example output: 'errors': array([1.16788502, 0.5253008 , ...])} -``'dataframe'``: +- ``'dataframe'``: .. code:: python - g_na gl g_kd errors - 0 0.000280 8.870238e-08 0.000047 0.521425 - 1 0.000192 1.121861e-07 0.000118 0.387140 - ... + g_na gl g_kd errors + 0 0.000280 8.870238e-08 0.000047 0.521425 + 1 0.000192 1.121861e-07 0.000118 0.387140 + ... + +Posterior distribution analysis +------------------------------- +Unlike `~brian2modelfitting.fitter.Fitter` classes, the `~brian2modelfitting.inferencer.Inferencer` +class does not keep track of all parameter values. Rather, it stores all +training data for neural density estimator which will later be used for +building the posterior distribution of each unknown parameter. Thus, the `~brian2modelfitting.inferencer.Inferencer` +does not returns best-fit values and corresponding errors, but the entire +posterior distribution that can be used to draw samples from, compute +descriptive statistics of parameters, analyize pairwise relationship between +each to parameters, etc. + +There are three methods that enable the comprehensive analysis of the +posterior: + +- `~brian2modelfitting.inferencer.Inferencer.pairplot` - returns axes of drawn + samples from the posterior in a 2-dimenstional grid with marginals and + pairwise marginals. Using this method, the user is able to inspect the + relationship for all combinations of distributions for each parameter; +- `~brian2modelfitting.inferencer.Inferencer.conditional_pairplot` - + visualizes the conditional pairplot; +- `~brian2modelfitting.inferencer.Inferencer.conditional_corrcoeff` - returns + the correlation matrix of a distribution conditioned with the user-specified + condition. + +To see this in action, go to our tutorial page and learn how to use each of +the previouly outlined methods. Standalone mode --------------- -Just like with regular Brian script, modelfitting computations can be performed in -``Runtime`` mode (default) or ``Standalone`` mode. -(https://brian2.readthedocs.io/en/stable/user/computation.html) +Just like with regular Brian 2 scripts, all computations in the toolbox can be +performed in ``Runtime`` mode (default) or ``Standalone`` mode. For details, +please check the official Brian 2 documentation: https://brian2.readthedocs.io/en/stable/user/computation.html -To enable this mode, add the following line after your Brian import, but before your simulation code: +To enable the ``Standalone`` mode, and to allowthe source code generation to +C++ code, add the following code right after Brian 2 is imported, but before +the simulation code: .. code:: python set_device('cpp_standalone') - Important notes: ~~~~~~~~~~~~~~~~ .. warning:: - In standlone mode one script can not be used to contain multiple - `~brian2modelfitting.fitter.Fitter`, use separate scripts! + + In the ``Standalone`` mode, a single script should not contain multiple + `~brian2modelfitting.fitter.Fitter` or `~brian2modelfitting.inferencer.Inferencer` + classes. Please, use separate scripts. Note that the generation of traces or spikes via `~brian2modelfitting.fitter.Fitter.generate` will always use runtime mode, even when the fitting procedure uses standalone mode. +Embedding network for automatic feature extraction +-------------------------------------------------- -OnlineTraceFitter ------------------ - -`~brian2modelfitting.fitter.OnlineTraceFitter` was created to work with long traces or big optimization. -This `~brian2modelfitting.fitter.Fitter` uses online Mean Square Error as a metric. -When `~brian2modelfitting.fitter.Fitter.fit()` is called there is no need of specifying a metric, that is by -default set to None. Instead the errors are calculated with use of brian's `~brian2.groups.group.Group.run_regularly`, -with each simulation. +If the ``features`` argument of the `~brian2modelfitting.inferencer.Inferencer` +class is not defined, automatic feature extraction from the given output +traces will occur. By default, this is done by using the multi-layer +perceptron that is trained in parallel with the neural density estimator of +choice during the inference process. If the user wants to specify their own +custom embedding network, it is possible to do so by creating a neural +network by using ``PyTorch`` library and passing the instance of that neural +network as an additional keyword argument as follows: .. code:: python + + import torch + from torch import nn + + ... - fitter = OnlineTraceFitter(model=model, - input={'I': inp_traces}, - output={'v': out_traces}, - dt=0.1*ms, - n_samples=5) + class CustomEmbeddingNet(nn.Module): - result, error = fitter.fit(optimizer=optimizer, - n_rounds=1, - gl=[1e-8*siemens*cm**-2 * area, 1e-3*siemens*cm**-2 * area],) + def __init__(self, in_features, out_features, ...): + ... + def forward(self, x): + ... -Reference the target values in the equations --------------------------------------------- + + in_features = out_traces.shape[1] + out_features = ... + embedding_net = CustomEmbeddingNet(in_features, out_features, ...) + + ... + + inferencer = Inferencer(...) + inferencer.infer(..., + inference_kwargs={'embedding_net': embedding_net}) + +GPU usage for inference +----------------------- + +It is possible to use the GPU for training the sdensity estimator. It is enough +to specify the ``sbi_device`` to ``'gpu'`` or ``'cuda'``. Otherwise, if not +specified, or if set to ``'cpu'``, training will be done by using the CPU. + +.. note:: + + For default density estimators that are used either for SNPE, SNLE and SNRE, + there are no significant speed-ups expected if the training is translocated + to the GPU. -A model can refer to the target output values within the equations. For example, if you -are fitting a membrane potential trace *v* (i.e. `output_var='v'`), then the equations -can refer to the target trace as `v_target`. This allows you for example to add a coupling -term like `coupling*(v_target - v)` to the equation for `v`, pulling the trajectory towards the -correct solution. \ No newline at end of file +It is, however, possible to achieve a significant speed-up if the custom +embedding network relies on convolutions to extract feautres. Such operations +are known to achieve improvement in compuation time multifold. From 97163b6d4c8ef59db76f9ebc39006189243e9355 Mon Sep 17 00:00:00 2001 From: antelk Date: Wed, 18 Aug 2021 14:57:02 +0200 Subject: [PATCH 103/121] fix docstrings for conditional_corrcoeff --- brian2modelfitting/inferencer.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py index d9e3ccd..77cd7d5 100644 --- a/brian2modelfitting/inferencer.py +++ b/brian2modelfitting/inferencer.py @@ -1108,6 +1108,9 @@ def conditional_pairplot(self, condition, density=None, points=None, ticks=None, **kwargs): """Plot conditional distribution given all other parameters. + The conditionals can be interpreted as slices through the + density at a location given by condition. + Check ``sbi.analysis.conditional_pairplot`` for more details. Parameters @@ -1212,7 +1215,15 @@ def conditional_pairplot(self, condition, density=None, points=None, def conditional_corrcoeff(self, condition, density=None, limits=None, subset=None, **kwargs): - """Plot conditional distribution given all other parameters. + """Return the conditional correlation matrix of a distribution. + + All but two parameters are conditioned with the condition as + defined in the ``condition`` argument and the Pearson + correlation coefficient is computed between the remaining two + parameters under the distribution. This is performed for all + pairs of parameters given whose names are defined in the + ``subset`` argument. The conditional correlation matrix is + stored in the 2-dimenstional array. Check ``sbi.analysis.conditional_density.conditional_corrcoeff`` for more details. From 160de3ca841bf365fd4c9a9e772b8a0c3d659d79 Mon Sep 17 00:00:00 2001 From: antelk Date: Wed, 18 Aug 2021 15:06:28 +0200 Subject: [PATCH 104/121] fix typos --- docs_sphinx/features/index.rst | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/docs_sphinx/features/index.rst b/docs_sphinx/features/index.rst index 1f2d63d..806ec6b 100644 --- a/docs_sphinx/features/index.rst +++ b/docs_sphinx/features/index.rst @@ -34,7 +34,7 @@ or .. code:: python - inferencer = Inferencer(..., param_init = init_conds) + inferencer = Inferencer(..., param_init=init_conds) Restart ------- @@ -47,7 +47,7 @@ to ``True``, the user can restart the optimizer and the optimization will start from scratch. Used by Fitter optimizer and metric can only be changed when the flat is -`True`. +``True``. The previously outlined ``restart`` argument is used in the similar fashion in `~brian2modelfitting.inferencer.Inferencer.infer()` method. It is set to @@ -116,7 +116,7 @@ output variable as follows: If the user prefers automatic feature extraction, the ``features`` argument should not be defined (it should stay set to None). -.. warning:: *The number of features - be aware* +.. warning:: If the user chooses to define a list of features for extracting the summary features, it is important to keep in mind that the total number of features @@ -170,7 +170,7 @@ there is no need of specifying a metric, which is by default set to None. The errors are instead calculated with `~brian2.groups.group.Group.run_regularly` for each simulation. - .. code:: python +.. code:: python fitter = OnlineTraceFitter(model=model, input={'I': inp_traces}, @@ -201,8 +201,8 @@ classes allow the user can to generate the traces with optimized parameters. For a quick access to best fitted set of parameters `~brian2modelfitting.fitter.Fitter` classes provide ready to use functions: - - `~brian2modelfitting.fitter.TraceFitter.generate_traces` inside `~brian2modelfitting.fitter.TraceFitter` - - `~brian2modelfitting.fitter.SpikeFitter.generate_spikes` inside `~brian2modelfitting.fitter.SpikeFitter` + - `~brian2modelfitting.fitter.TraceFitter.generate_traces` inside `~brian2modelfitting.fitter.TraceFitter`; + - `~brian2modelfitting.fitter.SpikeFitter.generate_spikes` inside `~brian2modelfitting.fitter.SpikeFitter`. These functions can be called after the fitting procedure is finalized in the following manner, without any input arguments: @@ -237,8 +237,8 @@ set to output variable names and with their respective values, will be returned instead. -Customize ``generate`` for `~brian2modelfitting.fitter.Fitter` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Customize the ``generate`` method for `~brian2modelfitting.fitter.Fitter` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ To create traces for other parameters, or generate traces after the spike train fitting, user can call the `~brian2modelfitting.fitter.Fitter.generate` @@ -304,7 +304,7 @@ will default to the value used during the initialization of the `Fitter` Example output: ~~~~~~~~~~~~~~~ -- ``'list'``: +- ``format='list'``: .. code:: python @@ -313,7 +313,7 @@ Example output: ...] -- ``'dict'``: +- ``format='dict'``: .. code:: python @@ -323,7 +323,7 @@ Example output: 'errors': array([1.16788502, 0.5253008 , ...])} -- ``'dataframe'``: +- ``format='dataframe'``: .. code:: python @@ -359,7 +359,7 @@ posterior: condition. To see this in action, go to our tutorial page and learn how to use each of -the previouly outlined methods. +these methods. Standalone mode --------------- From a82670b3aa4df3944b2168ad6e6c44e46bf1b845 Mon Sep 17 00:00:00 2001 From: antelk Date: Fri, 20 Aug 2021 15:54:13 +0200 Subject: [PATCH 105/121] figures for the sbi tutorial --- .../hh_sbi_4params_3features_pairplot.png | Bin 0 -> 68237 bytes .../hh_sbi_4params_8features_pairplot.png | Bin 0 -> 32189 bytes ...i_4params_default_automatic_ext_pairplot.png | Bin 0 -> 32469 bytes .../_static/hh_sbi_4params_inf_traces.png | Bin 0 -> 87247 bytes ...bi_4params_multiround_3features_pairplot.png | Bin 0 -> 37113 bytes .../_static/hh_sbi_4params_spike_train.png | Bin 0 -> 45097 bytes .../_static/hh_sbi_4params_yulenet_pairplot.png | Bin 0 -> 46221 bytes docs_sphinx/_static/hh_sbi_recording_traces.png | Bin 0 -> 46203 bytes docs_sphinx/_static/hh_sbi_toy_inf_traces.png | Bin 0 -> 92486 bytes docs_sphinx/_static/hh_sbi_toy_pairplot.png | Bin 0 -> 12212 bytes 10 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs_sphinx/_static/hh_sbi_4params_3features_pairplot.png create mode 100644 docs_sphinx/_static/hh_sbi_4params_8features_pairplot.png create mode 100644 docs_sphinx/_static/hh_sbi_4params_default_automatic_ext_pairplot.png create mode 100644 docs_sphinx/_static/hh_sbi_4params_inf_traces.png create mode 100644 docs_sphinx/_static/hh_sbi_4params_multiround_3features_pairplot.png create mode 100644 docs_sphinx/_static/hh_sbi_4params_spike_train.png create mode 100644 docs_sphinx/_static/hh_sbi_4params_yulenet_pairplot.png create mode 100644 docs_sphinx/_static/hh_sbi_recording_traces.png create mode 100644 docs_sphinx/_static/hh_sbi_toy_inf_traces.png create mode 100644 docs_sphinx/_static/hh_sbi_toy_pairplot.png diff --git a/docs_sphinx/_static/hh_sbi_4params_3features_pairplot.png b/docs_sphinx/_static/hh_sbi_4params_3features_pairplot.png new file mode 100644 index 0000000000000000000000000000000000000000..1afaa40ea78454fb0cf64f4ed39668084c5c7570 GIT binary patch literal 68237 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 literal 0 HcmV?d00001 diff --git a/docs_sphinx/_static/hh_sbi_4params_8features_pairplot.png b/docs_sphinx/_static/hh_sbi_4params_8features_pairplot.png new file mode 100644 index 0000000000000000000000000000000000000000..a6ea548c02e7842aad600adf48af620987077a1b GIT binary patch literal 32189 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 bAMQ1al%G1!YN8~I=9-ec+Qr-p=C}VByL%Qk literal 0 HcmV?d00001 diff --git a/docs_sphinx/_static/hh_sbi_4params_default_automatic_ext_pairplot.png b/docs_sphinx/_static/hh_sbi_4params_default_automatic_ext_pairplot.png new file mode 100644 index 0000000000000000000000000000000000000000..cf6bdf882350707a8799f102a8abd1f401d63f5b GIT binary patch literal 32469 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 literal 0 HcmV?d00001 diff --git a/docs_sphinx/_static/hh_sbi_4params_inf_traces.png b/docs_sphinx/_static/hh_sbi_4params_inf_traces.png new file mode 100644 index 0000000000000000000000000000000000000000..223cf046529438876966629b67cf344200c3dc72 GIT binary patch literal 87247 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 literal 0 HcmV?d00001 diff --git a/docs_sphinx/_static/hh_sbi_4params_multiround_3features_pairplot.png b/docs_sphinx/_static/hh_sbi_4params_multiround_3features_pairplot.png new file mode 100644 index 0000000000000000000000000000000000000000..d3f2f168507659b76fde94f5fb5ae32ef5578345 GIT binary patch literal 37113 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 Yvf`&rA;3dEAv8B7 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 DU)Hxx literal 0 HcmV?d00001 diff --git a/docs_sphinx/_static/hh_sbi_toy_inf_traces.png b/docs_sphinx/_static/hh_sbi_toy_inf_traces.png new file mode 100644 index 0000000000000000000000000000000000000000..fb2b405729a241f57b9d1dce0452e2b04e8fe2ea GIT binary patch literal 92486 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

`5`a}Z^p7|NvPDoREQ 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 diff --git a/docs_sphinx/_static/hh_sbi_4params_inf_traces.png b/docs_sphinx/_static/hh_sbi_4params_inf_traces.png index 223cf046529438876966629b67cf344200c3dc72..5859865bb96c79993089bd8f2659217fe6f0145d 100644 GIT binary patch literal 89963 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 JeS7lz{{gf`5yb!i literal 87247 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 diff --git a/docs_sphinx/_static/hh_sbi_4params_multiround_3features_pairplot.png b/docs_sphinx/_static/hh_sbi_4params_multiround_3features_pairplot.png deleted file mode 100644 index d3f2f168507659b76fde94f5fb5ae32ef5578345..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37113 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 bVs$fDTjJsH3mq)*l{lqS>L;@mOn&=c)IPmK literal 0 HcmV?d00001 diff --git a/docs_sphinx/_static/hh_sbi_4params_spike_train.png b/docs_sphinx/_static/hh_sbi_4params_spike_train.png index e8c08ca10d4b84bddd544fb1aa139ede0b029edd..06cf9897183c87bc0248ce906c5663ba1ccdca6d 100644 GIT binary patch literal 50402 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 Yvfzo}|U)SDe|0YyXUgjw}DLMcEc>3?l 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

3$N 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 VvMj1i^CaGia$4he>c1}D`46^oL%je1 diff --git a/docs_sphinx/_static/hh_sbi_toy_pairplot.png b/docs_sphinx/_static/hh_sbi_toy_pairplot.png index 3c7eb90d614df883fceb25f51568e596ca6774ea..d989c66897845fe01190ac1bf067a2a5ca5bfb0d 100644 GIT binary patch literal 11088 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 B`KSN@ literal 12212 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 E2dKXJzW@LL literal 0 HcmV?d00001 From f4857b5583b045b64bff944ba773531b08a42bbc Mon Sep 17 00:00:00 2001 From: antelk Date: Sat, 21 Aug 2021 14:29:34 +0200 Subject: [PATCH 111/121] add reference to sbi lib and rename device to sbi_device in infer --- brian2modelfitting/inferencer.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py index 77cd7d5..2f84e63 100644 --- a/brian2modelfitting/inferencer.py +++ b/brian2modelfitting/inferencer.py @@ -156,6 +156,9 @@ class Inferencer(object): generative model which ultimately provides the posterior distribution over unknown free parameters. + To utilize simulation-based inference, this class uses a ``sbi`` + library, for details see Tejero-Cantero 2020. + Parameters ---------- dt : brian2.units.fundamentalunits.Quantity @@ -197,6 +200,12 @@ class Inferencer(object): param_init : dict, optional Dictionary of state variables to be initialized with respective values, i.e., initial conditions for the model. + + References + ---------- + * Tejero-Cantero, A., Boelts, J. et al. "sbi: A toolkit for + simulation-based inference" Journal of Open Source Software + (JOOS), 5(52):2505. 2020. """ def __init__(self, dt, model, input, output, features=None, method=None, threshold=None, reset=None, refractory=False, @@ -790,7 +799,7 @@ def infer_step(self, proposal, inference, n_samples=None, theta=None, def infer(self, n_samples=None, theta=None, x=None, n_rounds=1, inference_method='SNPE', density_estimator_model='maf', inference_kwargs={}, train_kwargs={}, posterior_kwargs={}, - restart=False, device='cpu', **params): + restart=False, sbi_device='cpu', **params): """Return the trained posterior. Note that if ``theta`` and ``x`` are not provided, @@ -885,7 +894,7 @@ def infer(self, n_samples=None, theta=None, x=None, n_rounds=1, # initialize inference object _ = self.init_inference(inference_method, density_estimator_model, - prior, device, **inference_kwargs) + prior, sbi_device, **inference_kwargs) # args for SNPE in `.train` # args for SNRE and SNLE are not supported here, if needed the user From c79128d6b568fda3f2a34d8f050ba6935ffae7b0 Mon Sep 17 00:00:00 2001 From: antelk Date: Sat, 21 Aug 2021 14:30:37 +0200 Subject: [PATCH 112/121] add simulating script for sbi tutorial --- examples/generate_traces_synthetic.py | 52 +++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 examples/generate_traces_synthetic.py diff --git a/examples/generate_traces_synthetic.py b/examples/generate_traces_synthetic.py new file mode 100644 index 0000000..97e6fa6 --- /dev/null +++ b/examples/generate_traces_synthetic.py @@ -0,0 +1,52 @@ +from brian2 import * + + +defaultclock.dt = 0.1*ms + + +I1 = 0.1*nA +I2 = 0.5*nA + +t_on = 100*ms +t_total = 1000*ms +t_off = t_total - t_on + +C = 200*pF +VT = -60.0*mV +E_Na = 53*mV +g_Na = 32*uS +E_K = -107*mV +g_K = 1*uS +E_l = -70*mV +g_l = 10*nS +E_l = -70*mV + +eqs = ''' + dVm/dt = - (g_Na * m ** 3 * h * (Vm - E_Na) + + g_K * n ** 4 * (Vm - E_K) + + g_l * (Vm - E_l) - I_inj) / C : volt + I_inj = ((I2 - I1) / (t_off - t_on) * (t - t_on) + I1) * int((t >= t_on) and (t < t_off)) : amp (shared) + dm/dt = alpha_m * (1-m) - beta_m * m : 1 + dn/dt = alpha_n * (1-n) - beta_n * n : 1 + dh/dt = alpha_h * (1-h) - beta_h * h : 1 + alpha_m = ((-0.32/mV) * (Vm - VT - 13.*mV) + / (exp((-(Vm - VT - 13.*mV)) / (4.*mV)) - 1))/ms : Hz + beta_m = ((0.28/mV) * (Vm - VT - 40.*mV) + / (exp((Vm - VT - 40.*mV) / (5.*mV)) - 1))/ms : Hz + alpha_h = 0.128 * exp(-(Vm - VT - 17.*mV) / (18.*mV))/ms : Hz + beta_h = 4 / (1 + exp((-(Vm - VT - 40.*mV)) / (5.*mV)))/ms : Hz + alpha_n = ((-0.032/mV) * (Vm - VT - 15.*mV) + / (exp((-(Vm - VT - 15.*mV)) / (5.*mV)) - 1))/ms : Hz + beta_n = 0.5 * exp(-(Vm - VT - 10.*mV) / (40.*mV))/ms : Hz + ''' +neurons = NeuronGroup(1, eqs, threshold='m>0.5', refractory='m>0.5', + method='exponential_euler', name='neurons') +neurons.Vm = 'E_l' +neurons.m = '1 / (1 + beta_m / alpha_m)' +neurons.h = '1 / (1 + beta_h / alpha_h)' +neurons.n = '1 / (1 + beta_n / alpha_n)' +Vm_mon = StateMonitor(neurons, ['Vm', 'I_inj'], record=True, name='Vm_mon') +run(t_total) + +save('input_traces_synthetic.npy', Vm_mon.I_inj.ravel()/amp) +save('output_traces_synthetic.npy', Vm_mon.Vm.ravel()/mV) From b30cb555221dcdb40922467cad82d168514ac196 Mon Sep 17 00:00:00 2001 From: antelk Date: Sat, 21 Aug 2021 14:40:43 +0200 Subject: [PATCH 113/121] add citation for sbi --- docs_sphinx/inferencer/index.rst | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/docs_sphinx/inferencer/index.rst b/docs_sphinx/inferencer/index.rst index a4e3ff3..8906817 100644 --- a/docs_sphinx/inferencer/index.rst +++ b/docs_sphinx/inferencer/index.rst @@ -2,12 +2,13 @@ Inferencer ========== Unlike more traditional inverse identification procedures that rely either on -gradient or gradient-free methods, the ``Inferencer`` class supports -simulation-based inference that has been established as a powerful alternative -approach. +gradient or gradient-free methods, the `~brian2modelfitting.inferencer.Inferencer` +class supports simulation-based inference that has been established as a +powerful alternative approach. The simulation-based inference is data-driven procedure supported by the -`sbi `_, ``PyTorch``-based toolbox by Macke lab. +`sbi `_, ``PyTorch``-based toolbox by Macke +lab, [Tejero-Cantero2020]_. In general, this method yields twofold improvement over point-estimate fitting procedures: @@ -25,15 +26,16 @@ procedures: by using deep neural networks which is trained in parallel with neural density estimator. -The ``Inferencer`` class, in its core, is a fancy wrapper around the ``sbi`` -package where the focus is put on inferring the unknown parameters of the -single-cell neuron models defined in Brian 2 simulator. +The `~brian2modelfitting.inferencer.Inferencer` class, in its core, is a fancy +wrapper around the ``sbi`` package, where the focus is put on inferring the +unknown parameters of the single-cell neuron models defined in Brian 2 +simulator. Neural density estimator ------------------------ There are three main estimation techniques supported in ``sbi`` that the user -can take the full control over seamlesly by using the ``Inferencer``: +can take the full control over seamlesly by using the `~brian2modelfitting.inferencer.Inferencer`: #. sequential neural posterior estimation (SNPE) #. sequential neural likelihood estimation (SNLE) @@ -70,5 +72,12 @@ The inferencer procedure is defined via three main steps: Implementation -------------- -Go to `the tutorial section `_ -in for the in-depth implementation analysis. \ No newline at end of file +Go to :doc:`the tutorial section <../introduction/tutorial_sbi>` for the +in-depth implementation analysis. + +References +---------- + +.. [Tejero-Cantero2020] Tejero-Cantero, A., Boelts, J. et al. "sbi: A toolkit + for simulation-based inference" Journal of Open Source + Software (JOOS), 5(52):2505. 2020. \ No newline at end of file From fa402990fd7077bfa5a914f2c97dbf5f8281c38a Mon Sep 17 00:00:00 2001 From: antelk Date: Sat, 21 Aug 2021 14:41:02 +0200 Subject: [PATCH 114/121] revision of the tutorial --- docs_sphinx/introduction/tutorial_sbi.rst | 208 ++++++++++++---------- 1 file changed, 112 insertions(+), 96 deletions(-) diff --git a/docs_sphinx/introduction/tutorial_sbi.rst b/docs_sphinx/introduction/tutorial_sbi.rst index d3f7671..b2eec2d 100644 --- a/docs_sphinx/introduction/tutorial_sbi.rst +++ b/docs_sphinx/introduction/tutorial_sbi.rst @@ -3,20 +3,20 @@ Tutorial: Inferencer In this tutorial, we use simulation-based inference on the Hodgkin-Huxley neuron model, where different scenarios are considered. The data are -synthetically generated from a model by using the script available `here `_. -This enables the comparisson of the inferred parameter values with the ground -truth parameter values as used in the generative model. +synthetically generated from the model which enables the comparisson of the +optimized parameter values with the ground truth parameter values as used in +the generative model. We start with importing basic packages and modules. Note that ``tutorial_sbi_helpers`` contains three different functions that are used extensively throughout this tutorial. Namely, ``plot_traces`` is used for -visualization of the input current and the output voltage traces, and optional -time series of spikes or sampled traces obtained by using an estimated -posterior. In order to detect and capture spike events in a given voltage -trace, we use ``spike_times`` function. Finally, ``plot_cond_coeff_mat`` is -used to visualize conditional coerrelation matrix. To check how each of these -functions works behind the scenes, download the script and go throguh the code -yourself: :download:`tutorial_sbi_helpers.py <../../examples/tutorial_sbi_helpers.py>` +visualization of the input current and output voltage traces, and optionally +for visualization of spike trains or sampled traces obtained by using an +estimated posterior. In order to detect and capture spike events in a given +voltage trace, we use ``spike_times`` function. Finally, +``plot_cond_coeff_mat`` is used to visualize conditional coerrelation matrix. +For a detailed overview of the mechanism of each of the functions, download +the script: :download:`tutorial_sbi_helpers.py <../../examples/tutorial_sbi_helpers.py>` .. code:: python @@ -28,20 +28,21 @@ yourself: :download:`tutorial_sbi_helpers.py <../../examples/tutorial_sbi_helper plot_cond_coeff_mat) Now, let's load the input current and output voltage traces by using ``NumPy``. -Not that all functions available in ``NumPy``, as well as in ``Matplotlib``, -are implicitly available via ``brian2`` import. +Note that all functions available in ``NumPy``, as well as in ``Matplotlib``, +are implicitly available after ``brian2`` was imported. .. code:: python inp_traces = load('input_traces_synthetic.npy').reshape(1, -1) out_traces = load('output_traces_synthetic.npy').reshape(1, -1) -You can download the ``.npy`` files loaded above: -:download:`input_traces_synthetic.npy <../../examples/output_traces_synthetic.npy>`, -:download:`output_traces_synthetic.npy <../../examples/output_traces_synthetic.npy>` +The data is generated by running ``generate_traces_synthetic.py`` script: +:download:`generate_traces_synthetic.py <../../examples/generate_traces_synthetic.py>` - -By setting the time step, we are able to set up the time domain: +By setting the time step, we are able to set up the time domain. From the +array of time steps, we also define the exact time when the stimulus starts +and when it ends by computing ``stim_start`` and ``stim_end``, respectively. +This will come handy later during the feature extraction process. .. code:: python @@ -49,9 +50,9 @@ By setting the time step, we are able to set up the time domain: t = arange(0, inp_traces.size*dt/ms, dt/ms) stim_start, stim_end = t[where(inp_traces[0, :] != 0)[0][[0, -1]]] -By calling a ``plot_traces`` and passing an array of time steps, input current -and output voltage traces, we obtain the visualization of a synthetic recording -of neural activity: +By calling ``plot_traces`` and passing the array of time steps, the input +current and output voltage traces, we obtain the visualization of a synthetic +neural activity recordings: .. code:: python @@ -66,11 +67,12 @@ Toy-example: infer two free parameters The first scenario we cover is a simple inference procedure of two unknown parameters in the Hodgkin-Huxley neuron model. The parameters to infer are -the maximal value of sodium and potassium electrical conductances. +the maximal value of sodium, :math:`\overline{g}_\mathrm{Na}`, and potassium +electrical conductances, :math:`\overline{g}_\mathrm{K}`. -As a standard practice in Brian 2 simulator, we have to define parameters of -the model, initial conditions for differential equations that describe the -model, and the model itself: +By following the standard practice from Brian 2 simulator, we have to define +parameters of the model, initial conditions for differential equations that +describe the model, and the model itself: .. code:: python @@ -88,9 +90,9 @@ model, and the model itself: # define initial conditions init_conds = {'v': 'E_l', - 'm': '1 / (1 + beta_m / alpha_m)', - 'h': '1 / (1 + beta_h / alpha_h)', - 'n': '1 / (1 + beta_n / alpha_n)'} + 'm': '1 / (1 + beta_m / alpha_m)', + 'h': '1 / (1 + beta_h / alpha_h)', + 'n': '1 / (1 + beta_n / alpha_n)'} # define the Hodgkin-Huxley neuron model eqs = ''' @@ -118,15 +120,15 @@ model, and the model itself: g_K : siemens (constant) ''' -Since the output of the model is very high-dimensional, and since we are +Since the output of the model is extremely high-dimensional, and since we are interested only in a few hand-picked features that will capture the gist of the neuronal activity, we start the inference process by defining a list of summary functions. Each summary feature is obtained by calling a single-valued function on each trace generated by using a sampled prior distribution over unknown parameters. -In this case, we consider the maximal value of the action potential, the mean -action potential and the standard deviatian of the action potential. +In this case, we consider the maximal value, mean and standard deviatian of +action potential, and the membrane resting potential. .. code:: python @@ -137,27 +139,29 @@ action potential and the standard deviatian of the action potential. lambda x: np.mean(x[(t > stim_start) & (t < stim_end)]), # std of action potential lambda x: np.std(x[(t > stim_start) & (t < stim_end)]), - ] + # membrane resting potential + lambda x: np.mean(x[(t > 0.1 * stim_start) & (t < 0.9 * stim_start)]) + ] -`Inferencer` -~~~~~~~~~~~~ +Inferencer +~~~~~~~~~~ -The minimum set of arguments for the ``Inferencer`` class constructor are the -time step, ``dt``, input data traces, ``input``, output data traces, ``output`` -and the model that will be used for the inference process, ``model``. -Input and output traces should be shaped so that the number of rows corresponds -to each individual observed trace and the number of columns is equal to the -number of time steps. +The minimum set of arguments for the `~brian2modelfitting.inferencer.Inferencer` +class constructor are the time step, ``dt``, input data traces, ``input``, +output data traces, ``output``, and the model that will be used for the +inference process, ``model``. Input and output traces should have the number +of rows that corresponds to the number of observed traces, and the number of +columns should be equal to the number of time steps in each trace. -Here, we define additional arguments such as ``method`` to define an +Here, we define additional arguments such as: ``method`` to define an integration technique used for solving the set of differential equations, ``threshold`` to define a condition that produce a single spike, ``refractory`` to define a condition under which a neuron remains refractory, and ``param_init`` to define a set of initial conditions. We also define the set of summary features that is used to represent the data instead of using the entire -trace. Summary features are passed to the inference algorithm via the -``features`` argument. +trace. Summary features are passed to the inference algorithm via ``features`` +argument. .. code:: python @@ -170,9 +174,10 @@ trace. Summary features are passed to the inference algorithm via the refractory='m > 0.5', param_init=init_conds) -After the ``inferencer`` object is created, we begin the inference process by -calling ``infer`` method and defining the total number of samples that are used -for the learning of a neural density estimator. +After the ``inferencer`` is instantiated, we may begin the inference process +by calling `~brian2modelfitting.inferencer.Inferencer.infer` and defining the +total number of samples that are used for the training of a neural density +estimator. Posterior @@ -183,31 +188,31 @@ i.e., sampled parameter values given a prior distribution, and the output data, i.e., summary features extracted from the traces, obtained by solving the model with the corresponding set of sampled parameters from the input data. -We can choose the inference method and the estimator model , but the only -arguments that are required to be passed to ``infer`` method are the number of -samples (in case of running the inference process for the first time), -``n_samples``, and upper and lower bounds for each unknown parameter. +We can choose the inference method and the estimator model , but only +arguments that `~brian2modelfitting.inferencer.Inferencer.infer` requires are +the number of samples (in case of running the inference process for the first +time), ``n_samples``, and upper and lower bounds for each unknown parameter. .. code:: python - posterior = inferencer.infer(n_samples=10_000, + posterior = inferencer.infer(n_samples=15_000, n_rounds=1, inference_method='SNPE', density_estimator_model='maf', g_Na=[1*uS, 100*uS], g_K=[0.1*uS, 10*uS]) -After the inference is completed, the estimated posterior distribution over -unkown parameters can be analyzed by observing the pairwise relationship -between each pair of parameters. -But before, we have to draw samples from the estimated posterior as follows: +After inference is completed, the estimated posterior distribution can be +analyzed by observing the pairwise relationship between each pair of +parameters. But before, we have to draw samples from the estimated posterior +as follows: .. code:: python samples = inferencer.sample((10_000, )) -The samples are stored inside the ``Inferencer``, and are available through -the ``samples`` variable. +The samples are stored inside the `~brian2modelfitting.inferencer.Inferencer` +object and are available through ``samples`` variable. We create a visual representation of the pairwise relationship of the posterior as follows: @@ -228,9 +233,14 @@ as follows: .. image:: ../_static/hh_sbi_toy_pairplot.png :width: 70 % +Let's zoom in a bit: + +.. image:: ../_static/hh_sbi_toy_pairplot_zoom_in.png + :width: 70 % + The inferred posterior is plotted against the ground truth parameters, and as -can be seen, the ground truth parameters are located in a high-probability -region of the estimated distribution. +can be seen, the ground truth parameters are located in high-probability +regions of the estimated distribution. To further substantiate this, let's now see the traces simulated from a single set of parameters sampled from the posterior: @@ -252,17 +262,18 @@ We again use the ``plot_traces`` function as follows: Additional free parameters -------------------------- -The simple scenarios where only two parameters are considered unkwon works -quite well on the synthetic data. What if we have a larger number of unkown -parameters? Let us now consider leakage additional unkown parameters for the -same model as before. In addition to the unknown maximal values of the +The simple scenarios where only 2 parameters are considered works quite well +using synthetic data traces. What if we have a larger number of unkown +parameters? Let's now consider additional unkown parameters for the same model +as before. In addition to the unknown maximal values of the electrical conductance of the sodium and potassium channels, the membrane -capacity and the maximal value of the electrical conductance of the leakage -ion channel are also unknown. +capacity, :math:`C_m`, and the maximal value of the electrical conductance of +the leakage ion channel, :math:`\overline{g}_{l}`, are also unknown. -We can try to do the same as before: +We can try to do the same as before with a bit more training data: .. code:: python + del Cm, g_l # set parameters, initial condition and the model @@ -318,7 +329,7 @@ We can try to do the same as before: refractory='m > 0.5', param_init=init_conds) - posterior = inferencer.infer(n_samples=10_000, + posterior = inferencer.infer(n_samples=20_000, n_rounds=1, inference_method='SNPE', density_estimator_model='maf', @@ -346,13 +357,13 @@ We can try to do the same as before: points_colors=['C3'], figsize=(6, 6)) -.. image:: ../_static/hh_sbi_4params_3features_pairplot.png +.. image:: ../_static/hh_sbi_4params_4features_pairplot.png :width: 70 % This could have been expected. The posterior distribution is estimated poorly using a simple approach as in the toy example. -Yes, we can play around with the hyper-parameters and tuning the neural density +Yes, we can play around with hyper-parameters and tuning the neural density estimator, but with this apporach we will not get far. We can, however, try with the non-amortized (or focused) approach, meaning we @@ -361,12 +372,12 @@ posterior from the previous one to sample new input data for the training, rather than using the same prior distribution as defined in the beginning. This approach yields additional advantage - the number of samples may be considerably lower, but it will lead to the posterior that is no longer being -amortized, it is accurate only for a specific observation. +amortized - it is accurate only for a specific observation. .. code:: python # note that the only difference is the number of rounds of inference - posterior = inferencer.infer(n_samples=5_000, + posterior = inferencer.infer(n_samples=10_000, n_rounds=2, inference_method='SNPE', density_estimator_model='maf', @@ -386,7 +397,7 @@ amortized, it is accurate only for a specific observation. points_colors=['C3'], figsize=(6, 6)) -.. image:: ../_static/hh_sbi_4params_multiround_3features_pairplot.png +.. image:: ../_static/hh_sbi_4params_multiround_4features_pairplot.png :width: 70 % This seems as a promising approach for parameters that already have the @@ -397,25 +408,25 @@ estimates. So, we may wonder, how else can we improve the neural density estimator accuracy? -Currently, we use only three features to describe extremely complex output of a +Currently, we use only four features to describe extremely complex output of a neural model and should probably create a more comprehensive and more descriptive set of summary features. If we want to include data related to spikes in summary statistics, it is necessary to perform multi-objective -optimization since we will observe spike trains as outputs in addition to +optimization since we will observe spike trains as an output in addition to voltage traces. Multi-objective optimization ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In order to use spikes, we have to have some observation to pass to the -``inferencer``. We can utilize ``spike_times`` function as follows: +`~brian2modelfitting.inferencer.Inferencer`. We can utilize ``spike_times`` as +follows: .. code:: python spike_times_list = [spike_times(t, out_trace) for out_trace in out_traces] -To visually prove that the spikes times are indeed correct, we use -``plot_traces`` again: +To visually prove that spike times are indeed correct, we use ``plot_traces``: .. code:: python @@ -424,7 +435,7 @@ To visually prove that the spikes times are indeed correct, we use .. image:: ../_static/hh_sbi_4params_spike_train.png :width: 70 % -Now, let us create additional features that will be applied to voltage traces, +Now, let's create additional features that will be applied to voltage traces, and a few features that will be applied to spike trains: .. code:: python @@ -449,16 +460,18 @@ and a few features that will be applied to spike trains: lambda x: np.mean(x[(t > 0.1 * stim_start) & (t < 0.9 * stim_start)]), # the voltage deflection between base and steady-state voltage voltage_deflection, - ] + ] s_features = [ # number of spikes in a train lambda x: x.size, # mean inter-spike interval lambda x: 0. if np.diff(x).size == 0 else np.mean(diff(x)), - ] + # time to first spike + lambda x: 0. if x.size == 0 else x[0] + ] -The rest of the inference process stays pretty much the same: +The rest of the inference process stays pretty much the same as before: .. code:: python @@ -471,7 +484,7 @@ The rest of the inference process stays pretty much the same: refractory='m > 0.5', param_init=init_conds) - posterior = inferencer.infer(n_samples=15_000, + posterior = inferencer.infer(n_samples=20_000, n_rounds=1, inference_method='SNPE', density_estimator_model='maf', @@ -490,7 +503,7 @@ The rest of the inference process stays pretty much the same: points_colors=['C3'], figsize=(6, 6)) -.. image:: ../_static/hh_sbi_4params_8features_pairplot.png +.. image:: ../_static/hh_sbi_4params_9features_pairplot.png :width: 70 % Let's also visualize the sampled trace, this time using the mean of ten @@ -509,14 +522,14 @@ Okay, now we are clearly getting somewhere and this should be a strong indicatior of the importance of crafting quality summary statistics. Still, the summary statistics can be a huge bottleneck and can set back the -training of a neural density estimator. For this reason automatic learning -summary features should be considered instead. +training of a neural density estimator. For this reason automatic feature +extraction can be considered instead. Automatic feature extraction ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -To enable automatic feature extraction, the ``features`` argument simly should +To enable automatic feature extraction, ``features`` argument simly should not be defined when instantiating an inferencer object. And that's it. Everything else happens behind the scenes without any need for additional user intervention. If the user wants to gain additional control over the extraction @@ -536,7 +549,7 @@ Default settings refractory='m > 0.5', param_init=init_conds) - posterior = inferencer.infer(n_samples=15_000, + posterior = inferencer.infer(n_samples=20_000, n_rounds=1, inference_method='SNPE', density_estimator_model='maf', @@ -582,11 +595,7 @@ using the YuleNet is capable of outperforming carefully hand-crafted features. class YuleNet(nn.Module): - """The summary feature extractor proposed in Rodrigues, Pedro L. C. - and Gramfort, Alexandre: Learning summary features of time series - for likelihood free inference, in proceedings of the Third workshop - on machine learning and the physical sciences (NeurIPS 2020). The - preprint is available at: https://arxiv.org/abs/2012.02807 + """The summary feature extractor proposed in Rodrigues 2020. Parameters ---------- @@ -599,6 +608,12 @@ using the YuleNet is capable of outperforming carefully hand-crafted features. Returns ------- None + + References + ---------- + * Rodrigues, P. L. C. and Gramfort, A. "Learning summary features + of time series for likelihood free inference" 3rd Workshop on + Machine Learning and the Physical Sciences (NeurIPS 2020). 2020. """ def __init__(self, in_features, out_features): super().__init__() @@ -640,7 +655,8 @@ using the YuleNet is capable of outperforming carefully hand-crafted features. return x.view(len(x), -1) In the following code, we also demonstrate how to control the hyperparameters -of the density estimator using additional keyword arguments in `~brian2modelfitting.inferencer.Inferencer.infer` method: +of the density estimator by using additional keyword arguments in `~brian2modelfitting.inferencer.Inferencer.infer` +method: .. code:: python @@ -655,7 +671,7 @@ of the density estimator using additional keyword arguments in `~brian2modelfitt refractory='m > 0.5', param_init=init_conds) - posterior = inferencer.infer(n_samples=15_000, + posterior = inferencer.infer(n_samples=20_000, n_rounds=1, inference_method='SNPE', density_estimator_model='maf', @@ -664,7 +680,7 @@ of the density estimator using additional keyword arguments in `~brian2modelfitt 'training_batch_size': 100, 'use_combined_loss': True, 'discard_prior_samples': True}, - device='gpu', + sbi_device='gpu', g_Na=[1*uS, 100*uS], g_K=[0.1*uS, 10*uS], g_l=[1*nS, 100*nS], @@ -687,5 +703,5 @@ of the density estimator using additional keyword arguments in `~brian2modelfitt Next steps ---------- -To learn more go through the reference API and check out examples on our GitHub -repository: https://github.com/brian-team/brian2modelfitting/tree/master/examples \ No newline at end of file +To learn more read the reference API and check out more examples available +:doc:`here <../examples/index>`. \ No newline at end of file From 570d570a44b49e1ca3da14fd3c6e40b6a798d3b6 Mon Sep 17 00:00:00 2001 From: antelk Date: Sat, 21 Aug 2021 17:58:30 +0200 Subject: [PATCH 115/121] add doi to sbi ref --- docs_sphinx/inferencer/index.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs_sphinx/inferencer/index.rst b/docs_sphinx/inferencer/index.rst index 8906817..f3fbc8d 100644 --- a/docs_sphinx/inferencer/index.rst +++ b/docs_sphinx/inferencer/index.rst @@ -80,4 +80,4 @@ References .. [Tejero-Cantero2020] Tejero-Cantero, A., Boelts, J. et al. "sbi: A toolkit for simulation-based inference" Journal of Open Source - Software (JOOS), 5(52):2505. 2020. \ No newline at end of file + Software 5(52):2505. 2020. doi: `10.21105/joss.02505 `_ \ No newline at end of file From 1a7e93f6e4c89cb58fc4cdc6247cf2a86f008222 Mon Sep 17 00:00:00 2001 From: antelk Date: Sat, 21 Aug 2021 17:58:39 +0200 Subject: [PATCH 116/121] add citations --- docs_sphinx/introduction/tutorial_sbi.rst | 38 +++++++++++++++++------ 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/docs_sphinx/introduction/tutorial_sbi.rst b/docs_sphinx/introduction/tutorial_sbi.rst index b2eec2d..a848499 100644 --- a/docs_sphinx/introduction/tutorial_sbi.rst +++ b/docs_sphinx/introduction/tutorial_sbi.rst @@ -2,10 +2,10 @@ Tutorial: Inferencer ==================== In this tutorial, we use simulation-based inference on the Hodgkin-Huxley -neuron model, where different scenarios are considered. The data are -synthetically generated from the model which enables the comparisson of the -optimized parameter values with the ground truth parameter values as used in -the generative model. +neuron model, [Hodgkin1952]_, where different scenarios are considered. The +data are synthetically generated from the model which enables the comparisson +of the optimized parameter values with the ground truth parameter values as +used in the generative model. We start with importing basic packages and modules. Note that ``tutorial_sbi_helpers`` contains three different functions that are used @@ -177,7 +177,8 @@ argument. After the ``inferencer`` is instantiated, we may begin the inference process by calling `~brian2modelfitting.inferencer.Inferencer.infer` and defining the total number of samples that are used for the training of a neural density -estimator. +estimator. We use the sequential neural posterior estimation algorithm (SNPE), +proposed in [Greenberg2019]_. Posterior @@ -583,10 +584,9 @@ only if a custom automatic feature extractor uses techniques that are actually faster to compute on the GPU. For this case, we use the YuleNet, a convolutional neural network, proposed in -the paper by Rodrigues and Gramfort 2020, titled *Learning summary features of -time series for likelihood free inference*, preprint available at: https://arxiv.org/abs/2012.02807. -The authors outline impresive results where the automatic feature extraction by -using the YuleNet is capable of outperforming carefully hand-crafted features. +[Rodrigues2020]_. The authors outline impresive results where the automatic +feature extraction by using the YuleNet is capable of outperforming carefully +hand-crafted features. .. code:: python @@ -704,4 +704,22 @@ Next steps ---------- To learn more read the reference API and check out more examples available -:doc:`here <../examples/index>`. \ No newline at end of file +:doc:`here <../examples/index>`. + +References +---------- + +.. [Hodgkin1952] Hodgkin, A. L., and Huxley, A. F. "A quantitative description + of membrane current and its application to conduction and + excitation in nerve" Journal of Physiology 117(4):500-44. 1952. + doi: `10.1113/jphysiol.1952.sp004764 `_ + +.. [Greenberg2019] Greenberg, D. S., Nonnenmacher, M. et al. "Automatic + posterior transformation for likelihood-free inference" + 36th International Conference on Machine Learning + (ICML 2019). 2019. Available online: `arXiv:1905.07488 `_ + +.. [Rodrigues2020] Rodrigues, P. L. C. and Gramfort, A. "Learning summary + features of time series for likelihood free inference" 3rd + Workshop on Machine Learning and the Physical Sciences + (NeurIPS 2020). 2020. Available online: `arXiv:2012.02807 `_ \ No newline at end of file From d57b1c53f13c2ee790edc4b9a930d4e2c0ca5560 Mon Sep 17 00:00:00 2001 From: antelk Date: Sun, 22 Aug 2021 13:36:30 +0200 Subject: [PATCH 117/121] update gitignore --- .gitignore | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 09ffcc7..8f674e0 100644 --- a/.gitignore +++ b/.gitignore @@ -83,11 +83,16 @@ brian2modelfitting.egg-info # sbi logs examples/sbi-logs/ +brian2modelfitting/tests/sbi-logs/ # other sbi and torch stuff examples/*.pt examples/*.pth +brian2modelfitting/tests/*.pt +brian2modelfitting/tests/*.pth # numpy files examples/*.npy -examples/*.npz \ No newline at end of file +examples/*.npz +brian2modelfitting/tests/*.npy +brian2modelfitting/tests/*.npz \ No newline at end of file From 2df6dc299784c972f4a21ff385a16623c78c26a9 Mon Sep 17 00:00:00 2001 From: antelk Date: Sun, 22 Aug 2021 13:37:07 +0200 Subject: [PATCH 118/121] fix docstrings --- brian2modelfitting/inferencer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/brian2modelfitting/inferencer.py b/brian2modelfitting/inferencer.py index 2f84e63..3cc4154 100644 --- a/brian2modelfitting/inferencer.py +++ b/brian2modelfitting/inferencer.py @@ -95,7 +95,7 @@ def get_param_dict(param_values, param_names, n_values): param_values : numpy.ndarray Parameter values in a 2-dimensional array with the number of rows corresponding to a number of samples and the number of - columns corresponding to ``len(param_names). + columns corresponding to a number of parameters. param_names : list List containing parameter names. n_values : int From 2bf03d2bb37ac928779641e70e6cbd576ccd1c2e Mon Sep 17 00:00:00 2001 From: antelk Date: Sun, 22 Aug 2021 13:38:31 +0200 Subject: [PATCH 119/121] testing inferencer --- brian2modelfitting/tests/test_inferencer.py | 334 ++++++++++++++++++++ 1 file changed, 334 insertions(+) create mode 100644 brian2modelfitting/tests/test_inferencer.py diff --git a/brian2modelfitting/tests/test_inferencer.py b/brian2modelfitting/tests/test_inferencer.py new file mode 100644 index 0000000..af20591 --- /dev/null +++ b/brian2modelfitting/tests/test_inferencer.py @@ -0,0 +1,334 @@ +from brian2 import nS, siemens, mV, volt, ms, TimedArray, Equations +from brian2.devices.device import reinit_devices +from brian2modelfitting.inferencer import (Inferencer, + get_param_dict, + calc_prior) +import numpy as np +from numpy.testing import assert_equal, assert_almost_equal +import pytest + + +def test_get_param_dict(): + param_names = ['a', 'b'] + n_samples = 3 + n_traces = 3 + n_neurons = n_samples * n_traces + + # check theta + theta = np.array([[1, 2], + [3, 4], + [5, 6]]) + _theta = np.array([[1, 2], + [1, 2], + [1, 2], + [3, 4], + [3, 4], + [3, 4], + [5, 6], + [5, 6], + [5, 6]]) + assert_equal(_theta, np.repeat(theta, repeats=n_traces, axis=0)) + + # check dictionary type and values + theta = np.repeat(theta, repeats=n_traces, axis=0) + d_param = {'a': np.array([1., 1., 1., 3., 3., 3., 5., 5., 5.]), + 'b': np.array([2., 2., 2., 4., 4., 4., 6., 6., 6.])} + d_param_ret = get_param_dict(param_names=param_names, + param_values=_theta, + n_values=n_neurons) + assert isinstance(d_param_ret, dict) + assert_equal(d_param, d_param_ret) + + +def test_calc_prior(): + n_samples = 10 + param_names = ['a', 'b'] + a_lower_bound = 1 + a_upper_bound = 10 + a_mean = (a_lower_bound + a_upper_bound) / 2. + b_lower_bound = 0 + b_upper_bound = 1 + b_mean = (b_lower_bound + b_upper_bound) / 2. + prior_mean = np.array([a_mean, b_mean], dtype=np.float32) + a_std = (a_upper_bound - a_lower_bound) / np.sqrt(12) + b_std = (b_upper_bound - b_lower_bound) / np.sqrt(12) + prior_std = np.array([a_std, b_std], dtype=np.float32) + + prior_sbi = calc_prior(param_names=param_names, + a=[a_lower_bound*volt, a_upper_bound*volt], + b=[b_lower_bound*volt, b_upper_bound*volt]) + + # check mean value + prior_sbi_mean = prior_sbi.mean.numpy() + assert_equal(prior_mean, prior_sbi_mean) + + # check standard deviation + prior_sbi_std = prior_sbi.stddev.numpy() + assert_equal(prior_std, prior_sbi_std) + + # check the type and shape of the prior + prior_sbi_sampled = prior_sbi.sample((n_samples, )).numpy() + assert isinstance(prior_sbi_sampled[0, 0], np.float32) + assert_equal(prior_sbi_sampled.shape, (n_samples, len(param_names))) + +E = 40*mV +input_traces = np.zeros((10, 5))*volt +for i in range(5): + input_traces[5:, i] = i * 10*mV +input_traces = input_traces.T +output_traces = input_traces * 10*nS +output_traces = output_traces.T +model = ''' + I = g * (v - E) : amp + g : siemens (constant) + ''' +model_full = ''' + I = g * (v - 40*mV) : amp + g : siemens (constant) + ''' + + +@pytest.fixture +def setup(request): + dt = 0.01 * ms + inferencer = Inferencer(dt=dt, + model=model, + input={'v': input_traces}, + output={'I': output_traces}) + + def fin(): + reinit_devices() + request.addfinalizer(fin) + + return dt, inferencer + + +@pytest.fixture +def setup_feautres(request): + dt = 0.01 * ms + inferencer = Inferencer(dt=dt, + model=model, + input={'v': input_traces}, + output={'I': output_traces}, + features={'I': [lambda x: x.mean()]}) + + def fin(): + reinit_devices() + request.addfinalizer(fin) + + return dt, inferencer + + +@pytest.fixture +def setup_full(request): + dt = 0.01 * ms + inferencer = Inferencer(dt=dt, + model=model_full, + input={'v': input_traces}, + output={'I': output_traces}, + features={'I': [lambda x: x.mean()]}) + + def fin(): + reinit_devices() + request.addfinalizer(fin) + + return dt, inferencer + + +def test_inferencer_init(setup): + _, inferencer = setup + attr_inferencer = ['dt', 'output_var', 'output', 'param_names', + 'n_traces', 'sim_time', 'output_dim', 'model', + 'input_traces', 'param_init', 'method', + 'threshold', 'reset', 'refractory', 'x_o', + 'features', 'params', 'n_samples', 'samples', + 'posterior', 'theta', 'x', 'sbi_device'] + for attr in attr_inferencer: + assert hasattr(inferencer, attr) + + assert inferencer.params is None + assert inferencer.n_samples is None + assert inferencer.samples is None + assert inferencer.posterior is None + assert inferencer.theta is None + assert inferencer.x is None + + assert isinstance(inferencer.input_traces, TimedArray) + assert isinstance(inferencer.model, Equations) + + target_var = f'{inferencer.output_var[0]}_target' + assert target_var in inferencer.model + assert inferencer.model[target_var].dim is inferencer.output_dim[0] + + assert inferencer.features is None + + observations = [] + for o in output_traces: + o = np.array(o) + observations.append(o.ravel().astype(np.float32)) + x_o = np.concatenate(observations) + assert_almost_equal(inferencer.x_o, x_o) + + +def test_inferencer_init_features(setup_feautres): + _, inferencer = setup_feautres + attr_inferencer = ['dt', 'output_var', 'output', 'param_names', + 'n_traces', 'sim_time', 'output_dim', 'model', + 'input_traces', 'param_init', 'method', + 'threshold', 'reset', 'refractory', 'x_o', + 'features', 'params', 'n_samples', 'samples', + 'posterior', 'theta', 'x', 'sbi_device'] + for attr in attr_inferencer: + assert hasattr(inferencer, attr) + + assert inferencer.params is None + assert inferencer.n_samples is None + assert inferencer.samples is None + assert inferencer.posterior is None + assert inferencer.theta is None + assert inferencer.x is None + + assert isinstance(inferencer.input_traces, TimedArray) + assert isinstance(inferencer.model, Equations) + + target_var = f'{inferencer.output_var[0]}_target' + assert target_var in inferencer.model + assert inferencer.model[target_var].dim is inferencer.output_dim[0] + + assert callable(inferencer.features['I'][0]) + + observations = [] + for o in output_traces: + o = np.array(o) + print(o) + observations.append(o.mean()) + x_o = np.array(observations, dtype=np.float32) + print(x_o) + print(inferencer.x_o) + assert_almost_equal(inferencer.x_o, x_o) + + +def test_init_prior(setup): + _, inferencer = setup + lower_bound = 1e-9 + upper_bound = 100e-9 + g_mean = np.array((lower_bound + upper_bound) / 2, dtype=np.float32) + g_std = np.array((upper_bound - lower_bound) / np.sqrt(12), + dtype=np.float32) + g_std = g_std.astype(np.float32) + prior = inferencer.init_prior(g=[lower_bound*siemens, upper_bound*siemens]) + + # check mean value + prior_mean = prior.mean.numpy() + assert_almost_equal(g_mean, prior_mean) + + # check standard deviation + prior_std = prior.stddev.numpy() + assert_almost_equal(g_std, prior_std) + + +def test_generate_training_data(setup): + _, inferencer = setup + lower_bound = 1*nS + upper_bound = 100*nS + n_samples = 100 + prior = inferencer.init_prior(g=[lower_bound, upper_bound]) + theta = inferencer.generate_training_data(n_samples, prior) + assert theta.shape == (100, 1) + + +def test_extract_summary_statistics(setup): + _, inferencer = setup + lower_bound = 1*nS + upper_bound = 100*nS + n_samples = 100 + n_traces = 5 + prior = inferencer.init_prior(g=[lower_bound, upper_bound]) + theta = inferencer.generate_training_data(n_samples, prior) + x = inferencer.extract_summary_statistics(theta) + assert x.shape == (100, n_traces * 10) + + +def test_extract_summary_statistics_errors(setup): + _, inferencer = setup + lower_bound = 1*nS + upper_bound = 100*nS + n_samples = 100 + prior = inferencer.init_prior(g=[lower_bound, upper_bound]) + theta = inferencer.generate_training_data(n_samples, prior) + with pytest.raises(Exception): + _ = inferencer.extract_summary_statistics(theta, level=2) + + +def test_save_summary_statistics_errors(setup): + _, inferencer = setup + with pytest.raises(AttributeError): + inferencer.save_summary_statistics('summary_stats') + + theta = np.array([[1, 2], [3, 4]]) + x = np.arange(2).reshape(2, 1) + with pytest.raises(TypeError): + inferencer.save_summary_statistics(1, theta=theta, x=x) + inferencer.save_summary_statistics(1, theta='theta', x=x) + inferencer.save_summary_statistics(1, theta=theta, x='x') + inferencer.save_summary_statistics(1, theta='theta', x='x') + + +def test_load_summary_statistics(setup): + _, inferencer = setup + theta = np.array([[1, 2], [3, 4]]) + x = np.arange(2).reshape(2, 1) + inferencer.save_summary_statistics('summ_stats.npz', theta=theta, x=x) + theta_load, x_load = inferencer.load_summary_statistics('summ_stats.npz') + assert_equal(theta_load, theta) + assert_equal(x_load, x) + + +def test_init_inference_errors(setup): + _, inferencer = setup + prior = inferencer.init_prior(g=[1*nS, 100*nS]) + with pytest.raises(NameError): + _ = inferencer.init_inference(inference_method='test', + density_estimator_model='mdn', + prior=prior, + sbi_device='cpu') + _ = inferencer.init_inference(inference_method='SNPE', + density_estimator_model='test', + prior=prior, + sbi_device='cpu') + + # sbi_device should be automatically set to 'cpu' + _ = inferencer.init_inference(inference_method='SNPE', + density_estimator_model='mdn', + prior=prior, + sbi_device='test') + assert inferencer.sbi_device == 'cpu' + + +def test_infer_step(setup_full): + _, inferencer = setup_full + prior = inferencer.init_prior(g=[1*nS, 100*nS]) + inference = inferencer.init_inference(inference_method='SNPE', + density_estimator_model='mdn', + prior=prior, + sbi_device='cpu') + posterior = inferencer.infer_step(proposal=prior, + n_samples=10, + inference=inference) + + +def test_infer_step_errors(setup_full): + _, inferencer = setup_full + prior = inferencer.init_prior(g=[1*nS, 100*nS]) + inference = inferencer.init_inference(inference_method='SNPE', + density_estimator_model='mdn', + prior=prior, + sbi_device='cpu') + with pytest.raises(ValueError): + _ = inferencer.infer_step(proposal=prior, + inference=inference) + + +def test_infer(setup_features): + _, inferncer = setup_features + posterior = inferencer.infer(n_samples=10) From 0c8776f625bdb057536ccaf7ab7bc023b08550d6 Mon Sep 17 00:00:00 2001 From: antelk Date: Sun, 22 Aug 2021 14:53:36 +0200 Subject: [PATCH 120/121] update tests --- brian2modelfitting/tests/test_inferencer.py | 29 ++++++++++++++++----- 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/brian2modelfitting/tests/test_inferencer.py b/brian2modelfitting/tests/test_inferencer.py index af20591..819f8a2 100644 --- a/brian2modelfitting/tests/test_inferencer.py +++ b/brian2modelfitting/tests/test_inferencer.py @@ -71,6 +71,7 @@ def test_calc_prior(): assert isinstance(prior_sbi_sampled[0, 0], np.float32) assert_equal(prior_sbi_sampled.shape, (n_samples, len(param_names))) + E = 40*mV input_traces = np.zeros((10, 5))*volt for i in range(5): @@ -104,7 +105,7 @@ def fin(): @pytest.fixture -def setup_feautres(request): +def setup_features(request): dt = 0.01 * ms inferencer = Inferencer(dt=dt, model=model, @@ -170,8 +171,8 @@ def test_inferencer_init(setup): assert_almost_equal(inferencer.x_o, x_o) -def test_inferencer_init_features(setup_feautres): - _, inferencer = setup_feautres +def test_inferencer_init_features(setup_features): + _, inferencer = setup_features attr_inferencer = ['dt', 'output_var', 'output', 'param_names', 'n_traces', 'sim_time', 'output_dim', 'model', 'input_traces', 'param_init', 'method', @@ -315,6 +316,8 @@ def test_infer_step(setup_full): posterior = inferencer.infer_step(proposal=prior, n_samples=10, inference=inference) + assert posterior._method_family == 'snpe' + assert_equal(np.array(posterior._x_shape), np.array([1, 5])) def test_infer_step_errors(setup_full): @@ -329,6 +332,20 @@ def test_infer_step_errors(setup_full): inference=inference) -def test_infer(setup_features): - _, inferncer = setup_features - posterior = inferencer.infer(n_samples=10) +def test_infer(setup): + _, inferencer = setup + posterior = inferencer.infer(n_samples=10, g=[1*nS, 100*nS]) + assert posterior == inferencer.posterior + + posterior_multi_round = inferencer.infer(n_samples=10, n_rounds=2, + restart=True, g=[1*nS, 100*nS]) + assert posterior_multi_round != posterior + assert posterior_multi_round == inferencer.posterior + + +def test_load_posterior(setup): + _, inferencer = setup + _ = inferencer.infer(n_samples=10, g=[1*nS, 100*nS]) + inferencer.save_posterior('posterior.pth') + posterior_load = inferencer.load_posterior('posterior.pth') + assert inferencer.posterior.net == posterior_load.net From cc3c6b17862c102fea8dbec144e0ef8b0b6b16b9 Mon Sep 17 00:00:00 2001 From: antelk Date: Mon, 23 Aug 2021 11:26:53 +0200 Subject: [PATCH 121/121] The last commit for GSoC 2021 project! --- setup.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index cfea664..ba3db00 100644 --- a/setup.py +++ b/setup.py @@ -46,6 +46,7 @@ 'Operating System :: OS Independent', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Topic :: Scientific/Engineering :: Bio-Informatics'], + 'Topic :: Scientific/Engineering :: Bio-Informatics' + ], keywords='model fitting computational neuroscience', )

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 DU)Hxx diff --git a/docs_sphinx/_static/hh_sbi_toy_inf_traces.png b/docs_sphinx/_static/hh_sbi_toy_inf_traces.png index fb2b405729a241f57b9d1dce0452e2b04e8fe2ea..21e467605b4ff76923b1268b5fceb9b55d3f8833 100644 GIT binary patch literal 88171 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 literal 92486 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

3$N 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 VvMj1i^CaGia$4he>c1}D`46^oL%je1 literal 0 HcmV?d00001 diff --git a/docs_sphinx/_static/hh_sbi_toy_pairplot.png b/docs_sphinx/_static/hh_sbi_toy_pairplot.png new file mode 100644 index 0000000000000000000000000000000000000000..3c7eb90d614df883fceb25f51568e596ca6774ea GIT binary patch literal 12212 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 Date: Fri, 20 Aug 2021 15:54:35 +0200 Subject: [PATCH 106/121] add tutorial on sbi --- docs_sphinx/introduction/tutorial_sbi.rst | 679 +++++++++++++++++++++- examples/tutorial_sbi_helpers.py | 107 ++++ 2 files changed, 785 insertions(+), 1 deletion(-) create mode 100644 examples/tutorial_sbi_helpers.py diff --git a/docs_sphinx/introduction/tutorial_sbi.rst b/docs_sphinx/introduction/tutorial_sbi.rst index 3dad431..6addc07 100644 --- a/docs_sphinx/introduction/tutorial_sbi.rst +++ b/docs_sphinx/introduction/tutorial_sbi.rst @@ -1,4 +1,681 @@ Tutorial: Inferencer ==================== -tba \ No newline at end of file +In this tutorial, we use simulation-based inference on the Hodgkin-Huxley +neuron model, where different scenarios are considered. The data are +synthetically generated from a model by using the script available `here `_. +This enables the comparisson of the inferred parameter values with the ground +truth parameter values as used in the generative model. + +We start with importing basic packages and modules. Note that +``tutorial_sbi_helpers`` contains three different functions that are used +extensively throughout this tutorial. Namely, ``plot_traces`` is used for +visualization of the input current and the output voltage traces, and optional +time series of spikes or sampled traces obtained by using an estimated +posterior. In order to detect and capture spike events in a given voltage +trace, we use ``spike_times`` function. Finally, ``plot_cond_coeff_mat`` is +used to visualize conditional coerrelation matrix. To check how each of these +functions works behind the scenes, download the script and go throguh the code +yourself: :download:`tutorial_sbi_helpers.py <../../examples/tutorial_sbi_helpers.py>` + +.. code:: python + + from brian2 import * + from brian2modelfitting import Inferencer + from scipy.stats import kurtosis as kurt + from tutorial_sbi_helpers import (spike_times, + plot_traces, + plot_cond_coeff_mat) + +Now, let's load the input current and output voltage traces by using ``NumPy``. +Not that all functions available in ``NumPy``, as well as in ``Matplotlib``, +are implicitly available via ``brian2`` import. + +.. code:: python + + inp_traces = load('input_traces_synthetic.npy').reshape(1, -1) + out_traces = load('output_traces_synthetic.npy').reshape(1, -1) + +You can download the ``.npy`` files loaded above: +:download:`input_traces_synthetic.npy <../../examples/output_traces_synthetic.npy>`, +:download:`output_traces_synthetic.npy <../../examples/output_traces_synthetic.npy>` + + +By setting the time step, we are able to set up the time domain: + +.. code:: python + + dt = 0.05*ms + t = arange(0, inp_traces.size*dt/ms, dt/ms) + stim_start, stim_end = t[where(inp_traces[0, :] != 0)[0][[0, -1]]] + +By calling a ``plot_traces`` and passing an array of time steps, input current +and output voltage traces, we obtain the visualization of a synthetic recording +of neural activity: + +.. code:: python + + fig, ax = plot_traces(t, inp_traces, out_traces) + +.. image:: ../_static/hh_sbi_recording_traces.png + + +Toy-example: infer two free parameters +-------------------------------------- + +The first scenario we cover is a simple inference procedure of two unknown +parameters in the Hodgkin-Huxley neuron model. The parameters to infer are +the maximal value of sodium and potassium electrical conductances. + +As a standard practice in Brian 2 simulator, we have to define parameters of +the model, initial conditions for differential equations that describe the +model, and the model itself: + +.. code:: python + + # set parameters of the model + E_Na = 53*mV + E_K = -107*mV + E_l = -70*mV + VT = -60.0*mV + g_l = 10*nS + Cm = 200*pF + + # set ground truth parameters, which are unknown from the model's perspective + ground_truth_params = {'g_Na': 32*uS, + 'g_K': 1*uS} + + # define initial conditions + init_conds = {'v': 'E_l', + 'm': '1 / (1 + beta_m / alpha_m)', + 'h': '1 / (1 + beta_h / alpha_h)', + 'n': '1 / (1 + beta_n / alpha_n)'} + + # define the Hodgkin-Huxley neuron model + eqs = ''' + # non-linear set of ordinary differential equations + dv/dt = - (g_Na * m ** 3 * h * (v - E_Na) + + g_K * n ** 4 * (v - E_K) + + g_l * (v - E_l) - I) / Cm : volt + dm/dt = alpha_m * (1 - m) - beta_m * m : 1 + dn/dt = alpha_n * (1 - n) - beta_n * n : 1 + dh/dt = alpha_h * (1 - h) - beta_h * h : 1 + + # time independent rate constants for a channel activation/inactivation + alpha_m = ((-0.32 / mV) * (v - VT - 13.*mV)) + / (exp((-(v - VT - 13.*mV)) / (4.*mV)) - 1) / ms : Hz + beta_m = ((0.28/mV) * (v - VT - 40.*mV)) + / (exp((v - VT - 40.*mV) / (5.*mV)) - 1) / ms : Hz + alpha_h = 0.128 * exp(-(v - VT - 17.*mV) / (18.*mV)) / ms : Hz + beta_h = 4 / (1 + exp((-(v - VT - 40.*mV)) / (5.*mV))) / ms : Hz + alpha_n = ((-0.032/mV) * (v - VT - 15.*mV)) + / (exp((-(v - VT - 15.*mV)) / (5.*mV)) - 1) / ms : Hz + beta_n = 0.5 * exp(-(v - VT - 10.*mV) / (40.*mV)) / ms : Hz + + # free parameters + g_Na : siemens (constant) + g_K : siemens (constant) + ''' + +Since the output of the model is very high-dimensional, and since we are +interested only in a few hand-picked features that will capture the gist of +the neuronal activity, we start the inference process by defining a list of +summary functions. + +Each summary feature is obtained by calling a single-valued function on each +trace generated by using a sampled prior distribution over unknown parameters. +In this case, we consider the maximal value of the action potential, the mean +action potential and the standard deviatian of the action potential. + +.. code:: python + + v_features = [ + # max action potential + lambda x: np.max(x[(t > stim_start) & (t < stim_end)]), + # mean action potential + lambda x: np.mean(x[(t > stim_start) & (t < stim_end)]), + # std of action potential + lambda x: np.std(x[(t > stim_start) & (t < stim_end)]), + ] + + +``Inferencer`` +~~~~~~~~~~~~~~ + +The minimum set of arguments for the ``Inferencer`` class constructor are the +time step, ``dt``, input data traces, ``input``, output data traces, ``output`` +and the model that will be used for the inference process, ``model``. +Input and output traces should be shaped so that the number of rows corresponds +to each individual observed trace and the number of columns is equal to the +number of time steps. + +Here, we define additional arguments such as ``method`` to define an +integration technique used for solving the set of differential equations, +``threshold`` to define a condition that produce a single spike, ``refractory`` +to define a condition under which a neuron remains refractory, and +``param_init`` to define a set of initial conditions. We also define the set of +summary features that is used to represent the data instead of using the entire +trace. Summary features are passed to the inference algorithm via the +``features`` argument. + +.. code:: python + + inferencer = Inferencer(dt=dt, model=eqs, + input={'I': inp_traces*amp}, + output={'v': out_traces*mV}, + features={'v': v_features}, + method='exponential_euler', + threshold='m > 0.5', + refractory='m > 0.5', + param_init=init_conds) + +After the ``Inferencer`` object is created, we begin the inference process by +calling ``infer`` method and defining the total number of samples that are used +for the learning of a neural density estimator. + + +Posterior +~~~~~~~~~ + +Neural density estimator learns the probabilistic mapping of the input data, +i.e., sampled parameter values given a prior distribution, and the output data, +i.e., summary features extracted from the traces, obtained by solving the model +with the corresponding set of sampled parameters from the input data. + +We can choose the inference method and the estimator model , but the only +arguments that are required to be passed to ``infer`` method are the number of +samples (in case of running the inference process for the first time), +``n_samples``, and upper and lower bounds for each unknown parameter. + +.. code:: python + + posterior = inferencer.infer(n_samples=10_000, + n_rounds=1, + inference_method='SNPE', + density_estimator_model='maf', + g_Na=[1*uS, 100*uS], + g_K=[0.1*uS, 10*uS]) + +After the inference is completed, the estimated posterior distribution over +unkown parameters can be analyzed by observing the pairwise relationship +between each pair of parameters. +But before, we have to draw samples from the estimated posterior as follows: + +.. code:: python + + samples = inferencer.sample((10_000, )) + +The samples are stored inside the ``Inferencer``, and are available through +the ``samples`` variable. +We create a visual representation of the pairwise relationship of the posterior +as follows: + +.. code:: python + + limits = {'g_Na': [1*uS, 100*uS], + 'g_K': [0.1*uS, 10*uS]} + labels = {'g_Na': r'$\overline{g}_{Na}$', + 'g_K': r'$\overline{g}_{K}$'} + fig, ax = inferencer.pairplot(limits=limits, + labels=labels, + ticks=limits, + points=ground_truth_params, + points_offdiag={'markersize': 5}, + points_colors=['C3'], + figsize=(6, 6)) + +.. image:: ../_static/hh_sbi_toy_pairplot.png + +The inferred posterior is plotted against the ground truth parameters, and as +can be seen, the ground truth parameters are located in a high-probability +region of the estimated distribution. + +To further substantiate this, let's now see the traces simulated from a single +set of parameters sampled from the posterior: + +.. code:: python + + inf_traces = inferencer.generate_traces() + +We again use the ``plot_traces`` function as follows: + +.. code:: python + + fig, ax = plot_traces(t, inp_traces, out_traces, inf_traces=array(inf_traces/mV)) + +.. image:: ../_static/hh_sbi_toy_inf_traces.png + + +Additional free parameters +-------------------------- + +The simple scenarios where only two parameters are considered unkwon works +quite well on the synthetic data. What if we have a larger number of unkown +parameters? Let us now consider leakage additional unkown parameters for the +same model as before. In addition to the unknown maximal values of the +electrical conductance of the sodium and potassium channels, the membrane +capacity and the maximal value of the electrical conductance of the leakage +ion channel are also unknown. + +We can try to do the same as before: + +.. code:: python + del Cm, g_l + + # set parameters, initial condition and the model + E_Na = 53*mV + E_K = -107*mV + E_l = -70*mV + VT = -60.0*mV + + ground_truth_params = {'g_Na': 32*uS, + 'g_K': 1*uS, + 'g_l': 10*nS, + 'Cm': 200*pF} + + init_conds = {'v': 'E_l', + 'm': '1 / (1 + beta_m / alpha_m)', + 'h': '1 / (1 + beta_h / alpha_h)', + 'n': '1 / (1 + beta_n / alpha_n)'} + + eqs = ''' + # non-linear set of ordinary differential equations + dv/dt = - (g_Na * m ** 3 * h * (v - E_Na) + + g_K * n ** 4 * (v - E_K) + + g_l * (v - E_l) - I) / Cm : volt + dm/dt = alpha_m * (1 - m) - beta_m * m : 1 + dn/dt = alpha_n * (1 - n) - beta_n * n : 1 + dh/dt = alpha_h * (1 - h) - beta_h * h : 1 + + # time independent rate constants for activation and inactivation + alpha_m = ((-0.32 / mV) * (v - VT - 13.*mV)) + / (exp((-(v - VT - 13.*mV)) / (4.*mV)) - 1) / ms : Hz + beta_m = ((0.28/mV) * (v - VT - 40.*mV)) + / (exp((v - VT - 40.*mV) / (5.*mV)) - 1) / ms : Hz + alpha_h = 0.128 * exp(-(v - VT - 17.*mV) / (18.*mV)) / ms : Hz + beta_h = 4 / (1 + exp((-(v - VT - 40.*mV)) / (5.*mV))) / ms : Hz + alpha_n = ((-0.032/mV) * (v - VT - 15.*mV)) + / (exp((-(v - VT - 15.*mV)) / (5.*mV)) - 1) / ms : Hz + beta_n = 0.5 * exp(-(v - VT - 10.*mV) / (40.*mV)) / ms : Hz + + # free parameters + g_Na : siemens (constant) + g_K : siemens (constant) + g_l : siemens (constant) + Cm : farad (constant) + ''' + + # infer the posterior using the same configuration as before + inferencer = Inferencer(dt=dt, model=eqs, + input={'I': inp_traces*amp}, + output={'v': out_traces*mV}, + features={'v': v_features}, + method='exponential_euler', + threshold='m > 0.5', + refractory='m > 0.5', + param_init=init_conds) + + posterior = inferencer.infer(n_samples=10_000, + n_rounds=1, + inference_method='SNPE', + density_estimator_model='maf', + g_Na=[1*uS, 100*uS], + g_K=[0.1*uS, 10*uS], + g_l=[1*nS, 100*nS], + Cm=[20*pF, 2*nF]) + + # finally, sample and visualize the posterior distribution + samples = inferencer.sample((10_000, )) + + limits = {'g_Na': [1*uS, 100*uS], + 'g_K': [0.1*uS, 10*uS], + 'g_l': [1*nS, 100*nS], + 'Cm': [20*pF, 2*nF]} + labels = {'g_Na': r'$\overline{g}_{Na}$', + 'g_K': r'$\overline{g}_{K}$', + 'g_l': r'$\overline{g}_{l}$', + 'Cm': r'$C_{m}$'} + fig, ax = inferencer.pairplot(limits=limits, + labels=labels, + ticks=limits, + points=ground_truth_params, + points_offdiag={'markersize': 5}, + points_colors=['C3'], + figsize=(6, 6)) + +.. image:: ../_static/hh_sbi_4params_3features_pairplot.png + +This could have been expected. The posterior distribution is estimated poorly +using a simple approach as in the toy example. + +Yes, we can play around with the hyper-parameters and tuning the neural density +estimator, but with this apporach we will not get far. + +We can, however, try with the non-amortized (or focused) approach, meaning we +perform multi-round inference, where each following round will use the +posterior from the previous one to sample new input data for the training, +rather than using the same prior distribution as defined in the beginning. +This approach yields additional advantage - the number of samples may be +considerably lower, but it will lead to the posterior that is no longer being +amortized, it is accurate only for a specific observation. + +.. code:: python + + # note that the only difference is the number of rounds of inference + posterior = inferencer.infer(n_samples=5_000, + n_rounds=2, + inference_method='SNPE', + density_estimator_model='maf', + restart=True, + g_Na=[1*uS, 100*uS], + g_K=[0.1*uS, 10*uS], + g_l=[1*nS, 100*nS], + Cm=[20*pF, 2*nF]) + + samples = inferencer.sample((10_000, )) + + fig, ax = inferencer.pairplot(limits=limits, + labels=labels, + ticks=limits, + points=ground_truth_params, + points_offdiag={'markersize': 5}, + points_colors=['C3'], + figsize=(6, 6)) + +.. image:: ../_static/hh_sbi_4params_multiround_3features_pairplot.png + +This seems as a promising approach for parameters that already have the +high-probability regions of the posterior distribution around ground-truth +values. For other parameters, this leads to further deterioration of posterior +estimates. + +So, we may wonder, how else can we improve the neural density estimator +accuracy? + +Currently, we use only three features to describe extremely complex output of a +neural model and should probably create a more comprehensive and more +descriptive set of summary features. If we want to include data related to +spikes in summary statistics, it is necessary to perform multi-objective +optimization since we will observe spike trains as outputs in addition to +voltage traces. + +Multi-objective optimization +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +In order to use spikes, we have to have some observation to pass to the +``inferencer``. We can utilize ``spike_times`` function as follows: + +.. code:: python + + spike_times_list = [spike_times(t, out_trace) for out_trace in out_traces] + +To visually prove that the spikes times are indeed correct, we use +``plot_traces`` again: + +.. code:: python + + fig, ax = plot_traces(t, inp_traces, out_traces, spike_times_list[0]) + +.. image:: ../_static/hh_sbi_4params_spike_train.png + +Now, let us create additional features that will be applied to voltage traces, +and a few features that will be applied to spike trains: + +.. code:: python + + def voltage_deflection(x): + voltage_base = np.mean(x[t < stim_start]) + stim_end_idx = np.where(t >= stim_end)[0][0] + steady_state_voltage_stimend = np.mean(x[stim_end_idx-10:stim_end_idx-5]) + return steady_state_voltage_stimend - voltage_base + + + v_features = [ + # max action potential + lambda x: np.max(x[(t > stim_start) & (t < stim_end)]), + # mean action potential + lambda x: np.mean(x[(t > stim_start) & (t < stim_end)]), + # std of action potential + lambda x: np.std(x[(t > stim_start) & (t < stim_end)]), + # kurtosis of action potential + lambda x: kurt(x[(t > stim_start) & (t < stim_end)], fisher=False), + # membrane resting potential + lambda x: np.mean(x[(t > 0.1 * stim_start) & (t < 0.9 * stim_start)]), + # the voltage deflection between base and steady-state voltage + voltage_deflection, + ] + + s_features = [ + # number of spikes in a train + lambda x: x.size, + # mean inter-spike interval + lambda x: 0. if np.diff(x).size == 0 else np.mean(diff(x)), + ] + +The rest of the inference process stays pretty much the same: + +.. code:: python + + inferencer = Inferencer(dt=dt, model=eqs, + input={'I': inp_traces*amp}, + output={'v': out_traces*mV, 'spikes': spike_times_list}, + features={'v': v_features, 'spikes': s_features}, + method='exponential_euler', + threshold='m > 0.5', + refractory='m > 0.5', + param_init=init_conds) + + posterior = inferencer.infer(n_samples=15_000, + n_rounds=1, + inference_method='SNPE', + density_estimator_model='maf', + g_Na=[1*uS, 100*uS], + g_K=[0.1*uS, 10*uS], + g_l=[1*nS, 100*nS], + Cm=[20*pF, 2*nF]) + + samples = inferencer.sample((10_000, )) + + fig, ax = inferencer.pairplot(limits=limits, + labels=labels, + ticks=limits, + points=ground_truth_params, + points_offdiag={'markersize': 5}, + points_colors=['C3'], + figsize=(6, 6)) + +.. image:: ../_static/hh_sbi_4params_8features_pairplot.png + +Let's also visualize the sampled trace, this time using the mean of ten +thousands drawn samples: + +.. code:: python + + inf_traces = inferencer.generate_traces(n_samples=10_000, output_var='v') + + fig, ax = plot_traces(t, inp_traces, out_traces, inf_traces=array(inf_traces/mV)) + +.. image:: ../_static/hh_sbi_4params_inf_traces.png + +Okay, now we are clearly getting somewhere and this should be a strong +indicatior of the importance of crafting quality summary statistics. + +Still, the summary statistics can be a huge bottleneck and can set back the +training of a neural density estimator. For this reason automatic learning +summary features should be considered instead. + + +Automatic feature extraction +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +To enable automatic feature extraction, the ``features`` argument simly should +not be defined when instantiating an inferencer object. And that's it. +Everything else happens behind the scenes without any need for additional user +intervention. If the user wants to gain additional control over the extraction +process, in addition to changing the hyperparameters, they can also define +their own embedding neural network. + +Default settings +################ + +.. code:: python + + inferencer = Inferencer(dt=dt, model=eqs, + input={'I': inp_traces*amp}, + output={'v': out_traces*mV}, + method='exponential_euler', + threshold='m > 0.5', + refractory='m > 0.5', + param_init=init_conds) + + posterior = inferencer.infer(n_samples=15_000, + n_rounds=1, + inference_method='SNPE', + density_estimator_model='maf', + g_Na=[1*uS, 100*uS], + g_K=[0.1*uS, 10*uS], + g_l=[1*nS, 100*nS], + Cm=[20*pF, 2*nF]) + + samples = inferencer.sample((10_000, )) + + fig, ax = inferencer.pairplot(limits=limits, + labels=labels, + ticks=limits, + points=ground_truth_params, + points_offdiag={'markersize': 5}, + points_colors=['C3'], + figsize=(6, 6)) + +.. image:: ../_static/hh_sbi_4params_default_automatic_ext_pairplot.png + + +Custom embedding network +######################## + +Here, we demonstrate how to build a custom summary feature extractor and how +to exploit the GPU processing power to speed up the inference process. + +Note that the use of the GPU will result in the speed-up of computation time +only if a custom automatic feature extractor uses techniques that are actually +faster to compute on the GPU. + +For this case, we use the YuleNet, a convolutional neural network, proposed in +the paper by Rodrigues and Gramfort 2020, titled *Learning summary features of +time series for likelihood free inference*, preprint available at: https://arxiv.org/abs/2012.02807. +The authors outline impresive results where the automatic feature extraction by +using the YuleNet is capable of outperforming carefully hand-crafted features. + +.. code:: python + + import torch + from torch import nn + + + class YuleNet(nn.Module): + """The summary feature extractor proposed in Rodrigues, Pedro L. C. + and Gramfort, Alexandre: Learning summary features of time series + for likelihood free inference, in proceedings of the Third workshop + on machine learning and the physical sciences (NeurIPS 2020). The + preprint is available at: https://arxiv.org/abs/2012.02807 + + Parameters + ---------- + in_features : int + Number of input features should correspond to the size of a + single output voltage trace. + out_features : int + Number of the features that are used for the inference process. + + Returns + ------- + None + """ + def __init__(self, in_features, out_features): + super().__init__() + self.conv1 = nn.Conv1d(in_channels=1, out_channels=8, kernel_size=64, + stride=1, padding=32, bias=True) + self.relu1 = nn.ReLU() + pooling1 = 16 + self.pool1 = nn.AvgPool1d(kernel_size=pooling1) + + self.conv2 = nn.Conv1d(in_channels=8, out_channels=8, kernel_size=64, + stride=1, padding=32, bias=True) + self.relu2 = nn.ReLU() + pooling2 = int((in_features // pooling1) // 16) + self.pool2 = nn.AvgPool1d(kernel_size=pooling2) + + self.dropout = nn.Dropout(p=0.50) + linear_in = 8 * in_features // (pooling1 * pooling2) - 1 + self.linear = nn.Linear(in_features=linear_in, + out_features=out_features) + self.relu3 = nn.ReLU() + + def forward(self, x): + if x.ndim == 1: + x = x.view(1, 1, -1) + else: + x = x.view(len(x), 1, -1) + x_conv1 = self.conv1(x) + x_relu1 = self.relu1(x_conv1) + x_pool1 = self.pool1(x_relu1) + + x_conv2 = self.conv2(x_pool1) + x_relu2 = self.relu2(x_conv2) + x_pool2 = self.pool2(x_relu2) + + x_flatten = x_pool2.view(len(x), 1, -1) + x_dropout = self.dropout(x_flatten) + + x = self.relu3(self.linear(x_dropout)) + return x.view(len(x), -1) + +In the following code, we also demonstrate how to control the hyperparameters +of the density estimator using additional keyword arguments in `~brian2modelfitting.inferencer.Inferencer.infer` method: + +.. code:: python + + in_features = out_traces.shape[1] + out_features = 10 + + inferencer = Inferencer(dt=dt, model=eqs, + input={'I': inp_traces*amp}, + output={'v': out_traces*mV}, + method='exponential_euler', + threshold='m > 0.5', + refractory='m > 0.5', + param_init=init_conds) + + posterior = inferencer.infer(n_samples=15_000, + n_rounds=1, + inference_method='SNPE', + density_estimator_model='maf', + inference_kwargs={'embedding_net': YuleNet(in_features, out_features)}, + train_kwargs={'num_atoms': 10, + 'training_batch_size': 100, + 'use_combined_loss': True, + 'discard_prior_samples': True}, + device='gpu', + g_Na=[1*uS, 100*uS], + g_K=[0.1*uS, 10*uS], + g_l=[1*nS, 100*nS], + Cm=[20*pF, 2*nF]) + + samples = inferencer.sample((10_000, )) + + fig, ax = inferencer.pairplot(limits=limits, + labels=labels, + ticks=limits, + points=ground_truth_params, + points_offdiag={'markersize': 5}, + points_colors=['C3'], + figsize=(6, 6)) + +.. image:: ../_static/hh_sbi_4params_yulenet_pairplot.png + + +Next steps +---------- + +To learn more go through the reference API and check out examples on our GitHub +repository: https://github.com/brian-team/brian2modelfitting/tree/master/examples \ No newline at end of file diff --git a/examples/tutorial_sbi_helpers.py b/examples/tutorial_sbi_helpers.py new file mode 100644 index 0000000..422a4c2 --- /dev/null +++ b/examples/tutorial_sbi_helpers.py @@ -0,0 +1,107 @@ +from brian2 import * + + +def spike_times(t, x): + """Return time points in seconds in which a spike occurs. + + Parameters + ---------- + t : numpy.ndarray + Time steps in ms. + x : numpy.ndarray + Voltage trace in mV. + + Returns + ------- + numpy.ndarray + Spike times in seconds. + """ + x = x.copy() + + ind = where(x < -0.04) + x[ind] = -0.04 + ind = where(diff(x) < 0) + x[ind] = -0.04 + + ind = where(diff(x) < 0) + spike_times = array(t)[ind] + + if spike_times.shape[0] > 0: + spike_times = spike_times[append(1, diff(spike_times)) > 0.5] + return spike_times / 1000 + + +def plot_traces(t, inp_traces, out_traces, spike_times=None, inf_traces=None): + """Visualize input current and output voltage traces. + + Parameters + ---------- + t : numpy.ndarray + Time steps in ms. + inp_traces : numpy.ndarray + Synaptic stimulus data in Amperes. + inp_traces : numpy.ndarray + Recorded voltage traces in mV. + spike_times : numpy.ndarray + Spike times in s. + inf_traces : numpy.ndarray, optional + Sampled voltage traces from the approximated posterior in mV. + + Returns + ------- + tuple + Figure and axes. + """ + if (inp_traces.ndim, out_traces.ndim) != (2, 2): + inp_traces = inp_traces.reshape(1, -1) + out_traces = out_traces.reshape(1, -1) + if inf_traces is not None: + if inf_traces.ndim != 2: + inf_traces = inf_traces.reshape(1, -1) + if spike_times is not None: + spike_times = spike_times.ravel() + spike_i = [] + for spike_time in spike_times: + spike_i.append(where(isclose(spike_time * 1000, t))[0].item()) + spike_v = (out_traces.min(), out_traces.max()) + + fig, ax = subplots(2, 1, sharex=True, + gridspec_kw={'height_ratios': [3, 1]}, figsize=(6, 3)) + + # voltage traces + ax[0].plot(t, out_traces.T, 'C0', lw=3, label='recordings', zorder=1) + if inf_traces is not None: + ax[0].plot(t, inf_traces.T, 'C1--', lw=2, label='sampled traces', + zorder=2) + if spike_times is not None: + ax[0].vlines(t[spike_i], *spike_v, lw=2, color='C3', label='spikes', + zorder=3) + ax[0].set(ylabel='$V$ [mV]') + ax[0].legend(loc='upper right') + + # input stimulus current + ax[1].plot(t, inp_traces.T * 1e9, lw=2, c='k', label='stimulus') + ax[1].set(xlabel='$t$ [ms]', ylabel='$I$, nA') + ax[1].legend(loc='upper right') + + tight_layout() + return fig, ax + + +def plot_cond_coeff_mat(cond_coeff_mat): + """Visualize conditional coerrelation matrix. + + Parameters + ---------- + cond_coeff_mat : numpy.ndarray + Average conditional correlation matrix. + + Returnss + ------- + tuple + Figure and axes. + """ + fig, ax = subplots(1, 1, figsize=(4, 4)) + im = imshow(cond_coeff_mat, clim=[-1, 1]) + _ = fig.colorbar(im) + return fig, ax From a4560973b56c0bf899a6e02c724e4e7849ccad95 Mon Sep 17 00:00:00 2001 From: antelk Date: Fri, 20 Aug 2021 16:05:03 +0200 Subject: [PATCH 107/121] fix formating issues and resize images --- docs_sphinx/introduction/tutorial_sbi.rst | 42 ++++++++++++++--------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/docs_sphinx/introduction/tutorial_sbi.rst b/docs_sphinx/introduction/tutorial_sbi.rst index 6addc07..1bf4946 100644 --- a/docs_sphinx/introduction/tutorial_sbi.rst +++ b/docs_sphinx/introduction/tutorial_sbi.rst @@ -58,6 +58,7 @@ of neural activity: fig, ax = plot_traces(t, inp_traces, out_traces) .. image:: ../_static/hh_sbi_recording_traces.png + :width: 70 % Toy-example: infer two free parameters @@ -139,8 +140,8 @@ action potential and the standard deviatian of the action potential. ] -``Inferencer`` -~~~~~~~~~~~~~~ +``~brian2modelfitting.inferencer.Inferencer`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The minimum set of arguments for the ``Inferencer`` class constructor are the time step, ``dt``, input data traces, ``input``, output data traces, ``output`` @@ -169,7 +170,7 @@ trace. Summary features are passed to the inference algorithm via the refractory='m > 0.5', param_init=init_conds) -After the ``Inferencer`` object is created, we begin the inference process by +After the ``inferencer`` object is created, we begin the inference process by calling ``infer`` method and defining the total number of samples that are used for the learning of a neural density estimator. @@ -225,6 +226,7 @@ as follows: figsize=(6, 6)) .. image:: ../_static/hh_sbi_toy_pairplot.png + :width: 70 % The inferred posterior is plotted against the ground truth parameters, and as can be seen, the ground truth parameters are located in a high-probability @@ -244,6 +246,7 @@ We again use the ``plot_traces`` function as follows: fig, ax = plot_traces(t, inp_traces, out_traces, inf_traces=array(inf_traces/mV)) .. image:: ../_static/hh_sbi_toy_inf_traces.png + :width: 70 % Additional free parameters @@ -328,13 +331,13 @@ We can try to do the same as before: samples = inferencer.sample((10_000, )) limits = {'g_Na': [1*uS, 100*uS], - 'g_K': [0.1*uS, 10*uS], - 'g_l': [1*nS, 100*nS], - 'Cm': [20*pF, 2*nF]} + 'g_K': [0.1*uS, 10*uS], + 'g_l': [1*nS, 100*nS], + 'Cm': [20*pF, 2*nF]} labels = {'g_Na': r'$\overline{g}_{Na}$', - 'g_K': r'$\overline{g}_{K}$', - 'g_l': r'$\overline{g}_{l}$', - 'Cm': r'$C_{m}$'} + 'g_K': r'$\overline{g}_{K}$', + 'g_l': r'$\overline{g}_{l}$', + 'Cm': r'$C_{m}$'} fig, ax = inferencer.pairplot(limits=limits, labels=labels, ticks=limits, @@ -344,6 +347,7 @@ We can try to do the same as before: figsize=(6, 6)) .. image:: ../_static/hh_sbi_4params_3features_pairplot.png + :width: 70 % This could have been expected. The posterior distribution is estimated poorly using a simple approach as in the toy example. @@ -364,7 +368,7 @@ amortized, it is accurate only for a specific observation. # note that the only difference is the number of rounds of inference posterior = inferencer.infer(n_samples=5_000, n_rounds=2, - inference_method='SNPE', + inference_method='SNPE', density_estimator_model='maf', restart=True, g_Na=[1*uS, 100*uS], @@ -383,6 +387,7 @@ amortized, it is accurate only for a specific observation. figsize=(6, 6)) .. image:: ../_static/hh_sbi_4params_multiround_3features_pairplot.png + :width: 70 % This seems as a promising approach for parameters that already have the high-probability regions of the posterior distribution around ground-truth @@ -417,6 +422,7 @@ To visually prove that the spikes times are indeed correct, we use fig, ax = plot_traces(t, inp_traces, out_traces, spike_times_list[0]) .. image:: ../_static/hh_sbi_4params_spike_train.png + :width: 70 % Now, let us create additional features that will be applied to voltage traces, and a few features that will be applied to spike trains: @@ -477,14 +483,15 @@ The rest of the inference process stays pretty much the same: samples = inferencer.sample((10_000, )) fig, ax = inferencer.pairplot(limits=limits, - labels=labels, - ticks=limits, - points=ground_truth_params, - points_offdiag={'markersize': 5}, - points_colors=['C3'], - figsize=(6, 6)) + labels=labels, + ticks=limits, + points=ground_truth_params, + points_offdiag={'markersize': 5}, + points_colors=['C3'], + figsize=(6, 6)) .. image:: ../_static/hh_sbi_4params_8features_pairplot.png + :width: 70 % Let's also visualize the sampled trace, this time using the mean of ten thousands drawn samples: @@ -496,6 +503,7 @@ thousands drawn samples: fig, ax = plot_traces(t, inp_traces, out_traces, inf_traces=array(inf_traces/mV)) .. image:: ../_static/hh_sbi_4params_inf_traces.png + :width: 70 % Okay, now we are clearly getting somewhere and this should be a strong indicatior of the importance of crafting quality summary statistics. @@ -548,6 +556,7 @@ Default settings figsize=(6, 6)) .. image:: ../_static/hh_sbi_4params_default_automatic_ext_pairplot.png + :width: 70 % Custom embedding network @@ -672,6 +681,7 @@ of the density estimator using additional keyword arguments in `~brian2modelfitt figsize=(6, 6)) .. image:: ../_static/hh_sbi_4params_yulenet_pairplot.png + :width: 70 % Next steps From b562c8045c0d50bdf366c06870b5bd8aa2d44cc1 Mon Sep 17 00:00:00 2001 From: antelk Date: Fri, 20 Aug 2021 16:11:20 +0200 Subject: [PATCH 108/121] fix ref to Inferencer --- docs_sphinx/introduction/tutorial_sbi.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs_sphinx/introduction/tutorial_sbi.rst b/docs_sphinx/introduction/tutorial_sbi.rst index 1bf4946..4662ccd 100644 --- a/docs_sphinx/introduction/tutorial_sbi.rst +++ b/docs_sphinx/introduction/tutorial_sbi.rst @@ -140,8 +140,8 @@ action potential and the standard deviatian of the action potential. ] -``~brian2modelfitting.inferencer.Inferencer`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +`~brian2modelfitting.inferencer.Inferencer` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The minimum set of arguments for the ``Inferencer`` class constructor are the time step, ``dt``, input data traces, ``input``, output data traces, ``output`` From 7c731069faf3b627b9af5d0ac377161dc9ffa9fb Mon Sep 17 00:00:00 2001 From: antelk Date: Fri, 20 Aug 2021 16:15:59 +0200 Subject: [PATCH 109/121] remove ref to class from subtitle --- docs_sphinx/introduction/tutorial_sbi.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs_sphinx/introduction/tutorial_sbi.rst b/docs_sphinx/introduction/tutorial_sbi.rst index 4662ccd..d3f7671 100644 --- a/docs_sphinx/introduction/tutorial_sbi.rst +++ b/docs_sphinx/introduction/tutorial_sbi.rst @@ -140,8 +140,8 @@ action potential and the standard deviatian of the action potential. ] -`~brian2modelfitting.inferencer.Inferencer` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +`Inferencer` +~~~~~~~~~~~~ The minimum set of arguments for the ``Inferencer`` class constructor are the time step, ``dt``, input data traces, ``input``, output data traces, ``output`` From 15ac38da7401d55edd838d698620ee0785f0d67f Mon Sep 17 00:00:00 2001 From: antelk Date: Sat, 21 Aug 2021 14:28:45 +0200 Subject: [PATCH 110/121] update figures for sbi tutorial --- .../hh_sbi_4params_3features_pairplot.png | Bin 68237 -> 0 bytes .../hh_sbi_4params_4features_pairplot.png | Bin 0 -> 42159 bytes .../hh_sbi_4params_8features_pairplot.png | Bin 32189 -> 0 bytes .../hh_sbi_4params_9features_pairplot.png | Bin 0 -> 22603 bytes ...4params_default_automatic_ext_pairplot.png | Bin 32469 -> 25811 bytes .../_static/hh_sbi_4params_inf_traces.png | Bin 87247 -> 89963 bytes ..._4params_multiround_3features_pairplot.png | Bin 37113 -> 0 bytes ..._4params_multiround_4features_pairplot.png | Bin 0 -> 30216 bytes .../_static/hh_sbi_4params_spike_train.png | Bin 45097 -> 50402 bytes .../hh_sbi_4params_yulenet_pairplot.png | Bin 46221 -> 42997 bytes .../_static/hh_sbi_recording_traces.png | Bin 46203 -> 50179 bytes docs_sphinx/_static/hh_sbi_toy_inf_traces.png | Bin 92486 -> 88171 bytes docs_sphinx/_static/hh_sbi_toy_pairplot.png | Bin 12212 -> 11088 bytes .../_static/hh_sbi_toy_pairplot_zoom_in.png | Bin 0 -> 18166 bytes 14 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 docs_sphinx/_static/hh_sbi_4params_3features_pairplot.png create mode 100644 docs_sphinx/_static/hh_sbi_4params_4features_pairplot.png delete mode 100644 docs_sphinx/_static/hh_sbi_4params_8features_pairplot.png create mode 100644 docs_sphinx/_static/hh_sbi_4params_9features_pairplot.png delete mode 100644 docs_sphinx/_static/hh_sbi_4params_multiround_3features_pairplot.png create mode 100644 docs_sphinx/_static/hh_sbi_4params_multiround_4features_pairplot.png create mode 100644 docs_sphinx/_static/hh_sbi_toy_pairplot_zoom_in.png diff --git a/docs_sphinx/_static/hh_sbi_4params_3features_pairplot.png b/docs_sphinx/_static/hh_sbi_4params_3features_pairplot.png deleted file mode 100644 index 1afaa40ea78454fb0cf64f4ed39668084c5c7570..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68237 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 diff --git a/docs_sphinx/_static/hh_sbi_4params_4features_pairplot.png b/docs_sphinx/_static/hh_sbi_4params_4features_pairplot.png new file mode 100644 index 0000000000000000000000000000000000000000..af5ab24c1c3d449eae7db191e21c2afcaac414d8 GIT binary patch literal 42159 zcmcG#cQo7K|2M2!RkZe~QnU7^s9j2JTB@j3)GC6g5hJNpt5#8awMK1f#%%4qcWkjm z>=ltG^!t1MxzBxm_kEtP>^p%$K1HwmyI5;>DR8sM)UHw^VhW?BU>K)2k}Vzwu1n zL3_u2u<>0$H8&4doR$6bI34gN+y7fdXC)prr?qQ8vhe zt@QMiry??qsyikvJltpSSdv^7IX;<^9Nhv&cG60eax=ZdY# z0K$r;JfB?8ip3`5|DuckWd$kQ&mqUh;x5=X;>i4ZRUtcxP~v}+N|5~TMNrR)+n76d z{ajbh){lGtd64_Re=r61yfk0zW(ltJ{{*Y}9~G4RmkP?EBu6#P$5>(ByJ;w8y?gtg z=yU#O)%9Nk{(sW>|IeN97u=`{am0Kr?T}P`SK1A#*&B=e4ZVM4Gu3x@!y0;|Gmlm zUo2nD!|!Tq+exzUl;Q>^Y+Pyn+31IlfZJ$!HmAfs6HxE6AkgxhQUe|Qu=r$oEq1li_szaYJaBgKL6aN&QLWz49gz zxLAzMdM*HD7S_#-QBR;v93A`|(q+ee4ZGQ*bf!g8laZq^9m&#Q*550AxAyzYP}Ub9 z?08|gja^zFUo?P7<}IxkXL_<-N%Q<VnS#Wx0#yqbOA_^Y2Wn@4qPw2|P-I%uy9gerwz`I*A~t@-uW(pCi*ke2iNb7&OE z?p%}KG9G2H%(_(WBP;z4t{hEHjT?$HoCel=4Og%>YSGIhIz)_fi`;g~jyu?91ll?w z59b2#&zf@TYm4ZCW^?On<2>h=8^2FF=T2Onn|tp)=X-h6{GU9k@ntaTBzA(;O7ymEv0onj8Wc$Ry9IBg@>u%%^>ZQ z39imDG((dD3G{egF^9!O_pJPk3_kz(JlFdal>l--qb`-X%;`2MU3^%|2QXg|sz1kw zm1NhVNWa>TI4jOfG3AuhJ=EHE#l6U3rHMoo98@razn`ApNlbFqq}vGhN0#iacP2Cm zK~YrW(HT>y2eY0rgTcyxl0WViE!Gf*x*Cp7D+Ix3%~Ik|dgr?*q*-=MIsJZecYmd9 zy147(DI``81WlQm!^kgfqU;#J?lu{v#r)Zp?q3Y)yz3?tRs}ID_01Ac7}e@sxpGX( zRLkeVDE>i@?UM9r4sa~eO@=+_9&_}TwJXtNev`Y&Tug-uR!cs~o9mSYE!1~k#Xm)T zH}HOwvE6jB>L|BkrQF<>R|1yqEwpra+M&Y|(P?mR(ZQ8rYB!<45$aH6M*n-X`pY?D zBKl7yaF;%=J^OKg9Zln@!E5KaMHmd6oba~h5PCo`N>}ZTa5_&?wT`8A?nYg@-`S3A z|N5rZM?n-50s>?IMZOWDUgw3B=g8(45Hz!~3+v(&D6fg$X~@&yVV zN=6rXcq(zXjO^(|N&jb&tD2KHgUwy4oI~NMHYRK%VYmg~-oyvW%Qr68T6lWGqM*QI z!4)>;sqxMSGO~(AC9bv)g^LLt(K$26zn;rh z=R`@Yy?0A0c0_UUuT15(ucpXhK1n+ySHjDn%f`>XIh6(~r36kHfWCgFeVrwG8LSY!ueg!FLWaJ6kt)@lAyXLi^`&aF%G`V7s%-qlt>*lztm(=QOSlvpr z{3%5K>p4mimMc<`>78;Ld}dZ@{B4bYXyHH6G!U_f0f&lrYlWSHCJLsO2FIN4xO zW+3sHtxhQ`&_ zb0>pkv($sgh+1`8BFOol7(d>(7X{Flxda%&J`X33J_zRU|r{s5xdiA|69FO;6-y)Qv1 zMU@oG249lT=N?EASembqk7}@C)>;z|DNuR7Lun~d(*DmR#nL=i(4Sh~c=&HWe$v?| zJbe=Ts2mt5@2$W5;*Hl{< zt#9(TaY5w$c{&*h?{R35O=ah62g2N_Ipteb?*-J76z69@ZVK8?zq&SDeN zYJsm$oZ!-n=fe-Tz5jHodR8Rn>N#d$4Em5YPj%5wX3c;%i?Hu0^eq&NTm|l9IROUQ zKK!Jx=E)8RfR-5gz&P>CIh-l}IZO-bzba(}xb-`3?`L4CYff|FhLH*-kMAX?1_Psw z0fo!9Wl=G_UeI+}#?Is;WX%Q^%}(TN!;RJ)ZF-y+?r8&dufKA&)efjzcbmW)0#>M^ zypkKY-VdD3ZZY6AIZe)i6m&!uuj48%zThL?x=VB!{VZBg=ZL<%Ti?FU$$j#{cj>3M zS-&$(dSqMNlG`$OYbzBncl%?}_VO4WrhY1;Dq_#8GYaS7Hz|LKaqqc7SNykYjG~1- zv*KpdZ3Rq6Uth`d{_$z4?@DM|CzD3UFTg*WS&6=tW|mdVeYPWg994cSE$OZU%`jj4Mf?^d1n{_z@I^KH!)5Y6wVBFuAD}E^ z3ZYp}W4DzLpmXewo0MwAFTKAGrz;9SM1F~wi820Rs@2whm%P?3igDF4N~tF*_K!l+ z?GMT6Oa?gO!o2?WUHZ7}9Jl&r(`P8cPfp^>avO1D{*04NwpDM@m%UC*z0{uZtIJ$K zU!tZ(_);qGr+w;MKmV;+1wJUjAwAoPp_29fV5Lj+E#5wRNf1M)Pn~%94C&lS{p&)8 zlis|X6w|lSun`agM+o6v$Zvt zS*~3#0p1WFTyw6-H^QU-Sz7n0P?{;~Zzv%eHt!*w-Y_Ay07;QO1l%qJe9AQ}(a>jW zU&hVnoq3yd*}dF@d)$PlFsMBP1d1-q$O+EaKMjw0_qg3`lZ04O&7 zo9NaHNlOMAuc*5nSzE_W_SS!V4vGr^r``7DHU=2^Z-UJTc-x3rhXy5w?fKmtLqx>K zS2XdybZ;+ilpCk+rvuIXe&~Or_IlE+!7Ht~@DQmw=KZLM(O{g^U^?1WA!TG{YZUo-L7qp~N@vW7#AWTk&oE|zAG;-yTMN&pm%kBSXHv1$<2?f@ zZ|Yc@2B>N*Z0|?K)2oL26ife^KXBRMnw&PHUwQ6w|1)yT+cVSDf|BTEIa77B1QFxD z5|bY31)k=DGhXypgX-~m9O?)9>+hG88Hg5@p)&Z1lqJ9+Cm>r1@vC@8H^`c>F9k5_ zdERz$1gPUA*RwLGuG#J*f#7tJ)kL-?r{jP#EC_>0H;WN*Zm|=J6+irD)K^BPgbu4nojD`ptxi6pR}G9Nk;BEupY=WzWsQ1jPZSO?&Yok z^{*Ff%7u5=$@PX`U8rchq@ZV(BsV$LXhErLiDxe!KuO^cijGL@=-Z9<2h9Yr+>lB; zdu>~u?ib2JsnwUY(MV*n@oI*wD&lZhMup#aFKvM zK|Y!xWQe0HM+ap%yCq+abcLUhgCFj-N&^P#)E;Yy&u?ff zF9aB^mxE)=Q%zC^++kHUgUDQG_d3?aBlZ1}r$)ze(~?n7O`arg`LIYC8W@U$%2&Rp z={Pz*hJ1>*u%7Gtppi@4Ek(WiF4J^#)&22L$4x)4VO@cuX!`p;yWLvE$?{PK@|=qs zK$iOl<5h4N!-7+r9HJ zMf!EIk`KgmQL6KnR`O21Dy7`20SxLMyhFUyW8skzXsUjNsC{7v=^uZoaRXMFwSC&q zJ0)Tp&@ZdN5Ds7^?cSoT-*N6TPmS5%k>XxT`?3QB6?OAOYeYx3WntUT!t*DrchD%d z&sYtDgr@m^BVx&(Q z-?a%HQS#B#?R;LbK}%zIfx=fAzE>3x4H3&?;)8#P4{K z<3JD=;SVhCN|;y9LX0o4_j&k%8|PL{bx1F>3$psT|^}=-?wl%|#U6panqOXvat#$0@rlJ1jMP&zy z`OE6@T7as^&oon>WaCSI==0KQx@j^OFA3RkQEJ>Z`lh37;3Ex7yTF*% zC?>DH7e8qq4bvT$eXyKc|Cp-%YJfd#meHOyDxyAp(8qN*$}s@-LFZ*t_WbeSTKhZ4 zOh%5di0Y4wxkRhE8AO+y%XP24%yZMMb>*dRaUn}2q#SQolMI;{4eV5JajkAjBU^hO44VO@xTMjy*bFm;bmQ1}~un%iHp zQUj5`=t9q;irGqJaGDEzsW!;BUGBG1~^r20KTzq8=JiGL}OI@|vvC?#! zsuXj%AFtTVb4Bw~UImCaJnJZpWL9Vfe%(Dhi}0`VO2WLA4H^`XP3F0)47xZ-+c^O- z;wgVf3?{5-IDe;qsbV+E;sUKS0s5JK;K+8ra{hR*dVXiB4|>8h3sBroX5yhf$@u zj6kG1;z@Wlx13b2fDp(`oUc>VQH8|OHsh#6UD`TY^kP=jWeKy;q>q%Y5-4pvI?g69&Nnh)q=p3v~o^eSy52)EZ6}3mkdNh1(^nbIqFf);@ipO=jJ@Yj4g^}GL>t^*8ar&Ee z%RUNcYdH>$+m}20*>~JxVfJ-o9u=oaj>Snn#`@5&u@dLc#HUF)Gol?BN!jUUH58g0 z36IaUMCum+XipoMS=D@H(u7!N-5h!_$o04uc;!G-YyD1KY|eP_(uz;Nr>2Qo95FU? zMQ1Uv6z)zQB~s)Neg~n7W1S6F+R=|S(LSU4a3bHm z^fITUV;=mcGM&y*mYz&ChVHle6|PPtt2i7}xR1WmY=s%Wua`|_{Lc<^*XDE`SKo`Q zNb;EQR@&-d#~R(8>4&V-N}tr>yKn_XtO1$Mvp zdLR7%>U8YCP8-UX$2_2d4QryMOVuy{Y_l~w{7-Dg<%fCH{ORt$2_$WsZ=y+tj?u-(wG?`FGg-a^OC+xZo?3+*Q8@BXHmkSC@TKWVuMow@pigyzdtpM%&8>7`De zqo0hcs{#-S)CuC}+<|XJp#p3KdqPo6BUf)Tp5Z7*(l3pdf<+-0d62NAv|`J7_!m0BA`N7pW`F)LkVD!J=G2_F zqX34n=av6n*(Qn++>wJ7Tc(pUALx~5$AThoS z$G?>Kp@Y7WQNBBt(&$a?^%X|UvwC-gBu6I?)*yeYdL_yp#6)Gwp(^CmnFBRz7JN_V zHix6YpKwR8gIxuq?6fwpW~ZKUF_t%Sap9%LmD4G`CPbj(h7H@6vgh5}xy@JG&03nH z*-qfY6atk&$kpNCv`|ks;>dnO`wFg29-V&Lu$~hU5z&o+9P2~k3kuZmiRo38qZra= zuhNh{9LFg18%m{%qdd9B&2sRHIGFX;CJlIrW?*{%+HU*2rl>Ar&m$Jj9?YM0h#wrv zVGb|nk?8r{(?+B(a)sn-k>sp}rsgxGr$DEa15xZq~5rE4NP}_t$&=kYWC~ z#A9Dq?pPP6VcP_`oQKuvIX-5Qaqs$5$}XeA;_qI5%cqZAurezzE88P&2F4JzoFvFK ztWDISIv<`-)HLD!(Qi74U*W!DVWCN*R27=UuUBi7U|n*>GaN{F=Q9i|=;^gyFH(S@ zk0%c&A?V45%Tx zDUPSfLsV2yRxtB7pk5`>@9;f8M)fs9?02_B{t#vtdBxw1hBf!!VD4f1sRqEz%xwL; z5x^XCg`Rb8eEku^;>!(;Kv`0Dd5|CKR`@lUzS&hTWa)Y~2`28-o8WF1mP1GDB4^@Mg#T3L_mm2|-=uFpgjYP;s88C{ z_MRC%>r$2l8fR{{j8>!{^U7k*2Qwxt=fNn1%^~S3u1AyEizx5emA(1H8VIW9sivzj zBYLvwL=-3etc`==wEWuCLC1w=zO&dv<87l`o&&DwuJ1Z)(u^`L}fvuC-8bC!r}*$0LOlr5#TBVvyNFZ zy9|f;ou<F*W!9ea^3l>PM)WY_P3%KLFeuPOMS434dWd8n8_j_$5#r^G+z`p zFYhh2UWfMU#Ue3R$n~mHUqmhrSa?pWl;aQ^+Tt(>2x@^Ha*cK})5nL3150=7ez#-8 zEYn~E2Fo^NZjk@D6p{vR9(2t>8P6Z(itjh9%OGn}3!g?cFHf8>VpxEJ$ehm#VA1z% z)$GcuY2CYNy;2St`YYI!pOWS{G6lGsxEd4hxOeHajg)A|Pc?Bx*U6-nl{|--_Kj+l zlSmDPcTML#7oZ7)62Alj(m3B#hkxkTr0Kmn-?-cr5Sc86C56fp?nv3Eu z4E#FQiKmE=o}_uuI!DEb?!D;b$1;7;Jhg^YcF~$pRzf)uH) z>mejWxU?q!4!n)BaSHB7umZi_L?i@1zp20&=nGX?-$6K{B2w8tHpj#ciHcw!Ad8X6 zCA=;oO7%5@Il-4+TbXJp{A(|Z_bTS_B{qE{?$fG+qKiwX{<306xc!cj2WW~t6vgt) zX{#^W$C5=D~}L3oXVU*zy~-KJ)qYJqbI!(Cl312>X%R z`RSDueCtjDCM^P;K8Q7vhl*;UkbQwGyyo+iW>u3(X(VWHh4C@~@~6b4{tO$# z+A}cc8HX`ZK7rTN;~GO2He0E%wHYzoog{+}RHpFzoI``5lg(Gh4X8QfTE4a~H{^f= z(t>sPK27Ap)YPJ*lQ*3i=3>%gv#DXYA; zlZ7ZM3>EjsMdKlN>yc|%RAW_oy~lXf3Yik?8+>&C?)qjI)|9kb?x*6SxpMA&ry&oQ zenWUfQ%eV^^~3UtZPQc9^pnaw#L?2V34D`i?ZNH&m`7qI+a@Ri0jI=fPTPsw^=f$O zt>NKa5Y6Muoyp^XmpQ-|HYC`N;Tnmp4PQ3Xs`(S0C^q`1pN!=Vp_M2shu({ls%^Zlb55i-2>;?9Xm928{Fe?OOu_gQ=yT z*Y!5Z(`%ohb0&59Vgn&R$-cf^U;4u@EE4Z!KgpDxD2DGfDLeQ&-mCi)-wtkdZS6gH zOdNCS6$v8EV?H#=1q($7-x3-EgM#qV&--kEFvpsGEG_tc%>a3MdG|apy9=wZg{u>& zqz@Sxv@5ZK0<+IhHxFWp=*%7t$$o_yN=&)(bN`t?*0lWueF9X~$!z|NjgD4WHXLOx z&2U(b<=EM$5iVY9;9kBOoIT{#T=U9x&_BZx+kV@p%WkFKk1>}S7}slx8_;~&+YI-^ zXSg;981#}HD>s&J7BlXTdUFYZUo%7bNX%-~cP8d6h85{0umFI!d!0nwI>UmcA)p>n zy)vJnv)syfB`A0CQ%(|!2sgWA!4muB4mu~el7JW4bqqUiLZW1`rs8x%S$&YFV1YrO zH4)HoxM|y*$Aa&C6ZLgbB-k3DApVm}h>HXLe!cRIli z2SPQoK%!EgRUYW&K`%#*FABD>hQy$o2b+9RVsj^{>(c8DU>R&?ygmcngw3T}v>4N! zQHe38Q^-KL^2c9B{v<@>4fLJ;l)GRB)NQhxp7-boMwhJ(WSPiHd>VNoFhujj2|H7&~Va&r3Du z&+xLWM{*yzE??(=0+91wZBTPnmFTtT90<2aWY3s9W?edSVY{^}#0)-r^4Dc_60Tg1 zazu^wbN6}FoWp2s98T`!OVN&u6HDNsvrRrU9pwnzaz<25Y5`EoG|ehlidf&YT`x9Q zjU^`7EbQ#iHw0UF$hE<~fGu3hdk%?#u6{T2Y@tXOqy-T`=hp1By&oyPcBospW@V|m zlkr$rWUp8$Y&TjP^{7uyo^fQTn|@G-lW2$olUaD@$tx1K#xIP4XI#dvBTfUGfnrtl~?;%g^g}{#zs|HI` zq)XpYpQ|Z*_>TqoxJsITBhb69bAwlExbq`s)?uF|?27kg_19L-r$5EtR$2R8wuw$w z5~#STn}surATu8vRhY}#F|WT6p2nL zSg~*r4_eqIv?s+KOKHtZ@;fCwu_-8QNny9>M1qseZen8@QnYSVPX4q-jp@l4_UzO)v(I0a=AP0NDD$ zH}NzvL}5u)S-@P6rWFUtkFN)ePg4QDrZ%|?A)nq{@0i3;q@)>-eo?P@TFfAI8`%C# zR1@%bzbP%Pq;APB$>EWxD=ajDI^VdYJ)u}5v<0cIG<9KLPLzp zX5QP)Tk7Fi1yKnJgzym+al6)QE-|l`IW>N?i2^Z95m=u{1yd>Q{*2<%-_Y&j&=ivY z-C!W`5gzeRWOl*})qZhG#M@jkedbnv@of3LDmjD2OgYLAnDer{uliKXt;-8fUs0Z` zsd#t`7pXvx*=b)gv1vlduz%1@+e1#WBp&NdCnnLP{E~>A0YyN*T}EL^L_VsX{cbnc zFNNz3Iv9++L-!tHxi2oj+rbFnGjGtd#l8Tz8^j?o{y>{cNhghl#6$mi-wc5`b9A+X zV7yMxl3cDk1V?X8>4qI?wak>ID|GRR39WMRi2S6e4@w!+On27x)S*#Zh3i=SJ}wmL z3!4RuHb(J2EM;Iy#Vt{PzvB8(c1|89>tT(wZ`ZV3kz)tP811U_`g}ShMik zv!Me=ub6Av`jRdRrz*) z59MCtJslwNYFh;ZDh%n?n$CYS5p!FZ39WpsSFZ!a-}d* zCJrxO9}Y|YEP*eiMZ=c&EGaVf$8E|j0jrx5W8o^dI!%p5Ykc&qgHqgBC`BYg{e zPu^t6J*cqc;c%+oe44T=%aQpY_s)&EeE0&AbF8ov7ZtAPwp9!BuYAgMg1zh!C|xiT zW8|oYPcZxIZ=9%h3DKUFUscK{w?UzS)k22I?n?+0vI$l-Wh-A)`LClM)FyGx+(5Q< z;_(5BP8J*HD3^i{`1t{K}T^h%HzS_xSI%~@rh2|@GCR}25sPUJsB)&5y~g4@sq1M zT-W3~%FDC2^l#vts7Y~k3%95j6aeDhsOz_(#uNMj?_WLAp*e|$Wz%0S;PmaF_~bY8sSyw74e0Pj$!l#TloTDRuBLFOp}*P9#Hx}3m1wi40Vie ztH~eYu<1nHOKDh5I_gQ!%aidFW}-qoVMe-oKS=#V+<5Os(8e?DDKu5Lnzo1Czk7rt za2prMH(s>Nm?8nhzDJR8CaOpS+N?LEGV#*Y!boC!E38rLEd7C1KFZMX*0CCm77%`c zE$n4+#$I{RoNxM1mKOspw+q%0CkTtx{F>Tp-o$-al4BAyznW?1c6-=dX}4T^UWKiV zJNVq|@4fhzb#|EEOk?K-;wuImRr`vJC^#q3{(!}jh->gPD$i54zEi&$&4vXREVUrF zGO3zerCm>9hb5X1tX`d!D99P6CgoB%S){jp>oS+Cg8UHwq0_;Y$ixcnBy;hayuY9KR(5+SVYjy<%fxL@XUav3IH<*G z_iBq`EjNKD5$eT8jefZ(8Sn1FEi7mtt>zAq(dK>J{et&?_>euzm2-07IR$__M-b9| z!;zqg{nfUK0hRq<6l3uc5C%OggBhK45{*WHMwjnWjy|v-qt(G}BY$)lMul0q1~X>+ zE`oeo#!8f&CHgvB%Gy3L7va{Y-teBT9R5|qjX!G=>vR4Zw_Ri4(uri=c;(zG@vPJ! zX)Ban(mwH5hFXKB?}m!!?+Dv;kaAcw$#c?_qi1 z*moknH8~*R903))I_KnE1JSbl!L}tLHIDoG{uE6GcK^>;$;0|eTId^&{i9!W&XKiK z9K7G5`c3w?%NwRdso=wLY)>1jC!2UE*quesE*gA-4(+Tx42)sQW|9gEWChX(B5|PC zyw+2-el8D~;Y#H!BLC4dj4#)r_431&kDA1o_ye(mEZ&d+|KTP=-qThi4bX)q%^K0q zP1>xC!lQCWWc5Ap{dSeVhm}b&YTBcNgLaedBG4A0lJX^NeXo>PBGCMwUKJf@G(PtF z9L=hY>aG11k}{KB_&!tM19V7tjy*6?*JV3z(+PZbIGdtr8j*_b4xJRh ziDRO8s}~jTeU%^%{!_c}-cSV+%GROk>8TI6>KnAjzpKJU4_DZL-XTO>QH5`W&X1m9 zgF*I3v7rFQN8qt97tu4ZrAeYBH?rg>uNXg@=57q>3WfJ)U1nE(sm9}=2L0qB3T^w8 zy8NLoVqw-gwg_ zWDoX@EgZv~VuoDUC91gvP~(T1m{DH{LKJ z@pP2u37VlF7$wO0P(U*IR-mbOvu&H?>hx7wtyROXdsq?Bh#rrIW5sJ%;g=LtX61M6 zJ*rgBB~Yi4^V8HB#Ox5Gto_pItNz#F66tiH4hYE(bFkZXcO(A!ENDQ}nuZ~PZS8Ts z{xI+Nr$p)2e{JuE8pz8U;mV0Ah@xahmhWJ5cx)!p)efj`v;-Q#wwC7Ljt#6{;`t5h zVkz_+Q7IoP(kfRSSI;SayF1>tev(n@)0X5;$7|lrP7#pH_)Dq$Ivm7=M_+6z1;&ZT zCRchq6E7x}3dV9_vzP{s2WrXf-{9B-@tVIQwmto<+~{cIc!Au%qsx`SvV#Tq;&(0v8#AR|w#zlqMP#YWB@lAV(9qg2n4+G4{PG=ECJFbd z7D9|ItOL?dK^j(_hQzUY^4v1VYVEcj^1O8qB7h+zGPW1zPyUQAc5)4>iKl!yKf%oH zmX+KR*P?6P%coG&7SZHa~jZ|ptZ>NaQ5QvfXUSi+}uh7}Zyj-Wc%zCKou7sanyO|C`wvnC*S+NkCxAWt>wM=YSw3J4z?$+e2!EXs zqr)C8@w$fhXDS=-#x}G@JaX{8bLX4<#=1+~G5J`pM0P4fyyiRx@>>nMNRbkXDry-v;BuZW*k0< zToZ*DkQi)YMDKIjDi`;hBf>(h$A3y7)M~z~tBRG!a#h7zA}+5af?a>bGRgU`il$LK z(t2=oUi`ED$cG=AG)E7pqQ!-J&F5i&+APnP@(S`QDZS5XdLKr4!W z<5+#6T3zE31E?D|aAx+6zDbUk-HzHID-dg_;hQ?noO39!qiH6F2^u~(P($SEzML7M za3TwfP=tOz2uxLCk7~@3V+luGHwE9gouI^4E6aRF}EUnBwk`@s2#r%9UPfm^tqu(vB6 zAV2G0xYO6BEr(n=C3daS2f+G7sxCcD699f<_T zp>Lj8SOvasW6Ahs=sjXRU(@P%^yJ!he!p-B`W3u12s3`76ZlY-`Mu``yRPKImC%MB zbUe4`a3I#cQ|rRr#a=4k`ZvLtMpq4v7%;XO3&h8<+HxYX487qN=ny-jNa}ViLvfR? z8cTV{-!A$aY!-4+g-2FxpA%<5S3l#tH*DLa>+tNjblh&IXnc%Q9y{(&xy->s6NyzaZY}W#0xPvl#8XT}G(C^j(n;>IWUL}47A-I1r)cvS_^?WTL>#pMrvDvAgu<9QelqS@@+ zJxmt{Fdl&4ApN3DgCfIs^g7gj;Ne%wo#k;xNj;Xg#6MClu4dl^GWC@G=_gqKylE#lC zcXUR7NeaOJMeSErOTMF;17!tsoFCtoD!()B^K*fA?)_%a#8!HBcyb8Eu=k8)GhnPA6+d9Y1UO9-A|NySU}Q6h$3p|3&m%sP#_>Gg;$Oay8nT@Ac!xwt&3D z+JZjES46j$4_NG83D27d&BWVWi4%p&Q~e72TodRK^U&u?Htr?wA7f_(xy;%%stBss zA#nvcr?q%5i8gO_NAbnY;oYBdltc#-2X?BF}PSLA=Xl{`Vj*rK2qOaR6<^*fZOOgqgR| z0Qe8lQ7-Wk)mrw!(&jivNm?H1a(ygY@mjQ{&N2+k4*Fsez|7Og?6&9dluh#!2(5ra zqXWLGNuLVs!=`mmMaP=wZ^yl2i2i7#^gkh$Y`q&`rzgva@5@=82&f|A%N>8zJHJx9!jni_D1>2#X`yPTavUNT zc$M`zXKbLTS@E{-sZ1rHwX}ied84t8fH(Hu#?tBo@MI#IXImODd3%Rjyw=rMT=}K% z#7io$!BVD}*Kh0G?u_EcYlIxcV5+CbxX68G9jt)EE#R21iCw|Lx(r z4ow|~VX4|C$6}5Zy*Bkkwv##{1Oao7CFm*e_*=Moi^BBVHRiV5v zZ=6oT%((tJITKtc@K5gRxVMzCrXZ1&J0PAg>E;G*yA!?(1&+(>p1* zeRhWjrTSjZo{|5W@Zd0+>kfxXD^!})I)vZWF&yGOeTWc#Ssx*&l6_~TJTEjd-QM8f zg<5#qM#!+UW6-=sivm+*XZF6qxYvJt0W_vJSJNT9U4R@|<@P=GkQ)tuu=qI3Y>4+< zlTN(7h28hCwwmp3h^#sKd8wJm{V(HqZ;j|$VC|*Mr||3#Aci{iY_Vrr{yvgdnS52@ z=A8tS@YBwgJt6&dfeVHU3dhuO)7Rxcn5bk0LW&P|&JEVya(;{X!OGTZlYB9+e zUo=-Gu8HC7>%|_SVNYVEDXnej%YbH8y^gdM$URwn-}N$6r{8De?9B7AUTkrAF0V#- zJv+ivXjHzWzZRg&n&dZdq-psA2K?+MnTpK)dVcb1HD!fKr!K_MLYkXk1-r)~`f_8H z>^tB-AeCmgE~bi3S6)bia@$TvlU=*CEdm$d>(imVZLDf%%`sK2S-=ad*YwEA;XRNH zZu)8ZWxqtRg4|#VdqoA3ng@F_7$dl-GG}A?^M|Q`;X{AMmzSIh_Yeg0NzH5U5$vfk z3v8r~E+*D_Zc2qIUEU}Zsv6}6oVNj^Rt4Fjw7a*z|uUOe=$JvNu=r->^r7EKcy)4o{iB@e^pnGsyz2}S$w|F)?V zAEtj;Q6>y0Kry~IbBaiJG9aPa&RT9dw%THqxlH~kNx1qhz>LvSGqK@irEZbKznu;~ z&A$V4<`34iDGAK*QU~Kf6^dVpiM}j!g$s{buy}nA#NNY+ku%$1W74j2(QJvZgbilU ztggLHO%zwCd-E*C)Nb>H$T<>w6Kg5N3OwHfZdE9?)^_SQjlH9?>!kU)Y%5+rzV0zra1fndR%;1VFX1-B5~-QC@S zI|RA7yA#|A?(AH?_iA^mw)X8?{<+1KbLRB)^z_Vh{~AXdfs93Xp4c)wo;~u5@RC>` z9`)1-sR}#k<-92M)H}aBf^CHe8TmWv4gQYs)(7_^0=H-OZT3q4E?km}PR;$xzNl)E zU$}JU1g<{t4gS)-CWQ8Hr;rpQuVXUpHV((edC;r~)6=Y@KT zR#E?vxEgef#M1&(GDksC+$eYIM-Z7cz29{>|4@uXc8-rmLK%K>Z*3lkK#o}nF|5yg z>zL@Ne}FXnU1t7Je)GKx@H8ESIP+(lIo1>6-293VUew#_qkGtH+bH|-(yME2%<($d ze6B)ERA8MR%h+P`L;@_xhchC>pn@?uid|2$)yTwquBneh1n44wCr3! zT0dd>`cp5fJp>M0UaOqD&L8gH-pmlz_SUV&J+0g*z&R&V>!Mg|wID9|oR)0Zbwcwl zWpUZCJxtYJ=!+=__6q_NY}l8h#~rQ|*)w8w)tGDq)wgKRtLJ+V!F<$1V;AFmJ{FXm zn^1UHlZ4^Zhj|k^!kh@7k2C&5x9HO@MWDNo2czM% zP7hWynZ{Sb%+ORz6&GCg)K7Aic^XDC72S-n1O*5j5^wm{W$--1Z&yET7O+=&Df=HB zWGw2uci3Oqjm9y>^G;10XsV^uwd)B>XdOAd%1$#f93RZ0wB54pR|Ia^^5_{M2*qCN z@@Z>X;tDH9TlH7Ow!(g!yTFZQAt6^O)_$p&&UK47`t-n2OIq*n3$fFOsV2h)gb`-5NZF6*B zP^nF-vFl3LqR+=UalJN#ky`fW#XXc_X%swk(=OgQH%XR==99e=+kk_GP{%$eSRz%z zw2B1-UUcE-i#_4PMODMB-XLoiS~9^k<51<9hJJiu*7`4&n0>6&DyPqr^x}`#G%_yn zFPvZi!NvWz=528JU=aXpS&ejo%2yQ zUl)Qw(qe7QfFRF}e&u?@W0)}NP+2wRw+c>{%}ES|&5=S`@S%inM~G|4gp;Dn=Dfp2 zmF@3O%_`p|Xq*dzUy{>7p zG%XE?g0zuwiE>$DigQ^Cdi^+8r3H`dwew5)NNmdDPH}Tyur>Yb0KQ;I9PgSzzbD_O zP+R-=S~-SK?_Xv7QWd6tMaLF>pXlDY`Ok%TC9&(pS5)4^rJ1e@>#$F9ucMeG;hEmL zEi=ByLqaZwAelJoRCPYv3qslZrG;5%rjjaXYgGB-GJW`de$75BA7-QC^U-%RFZV>c z2|8uS)g)#wr#~Vx{M2W&8J!L}cfn-tRoiNPY0zz`2W*XP)wf&?6`6~FHwwKq`@OsP z-h`IRVtj!(IfyT*8m4ILSans>#TL&Y(qr>(y}kn-upuH_%yTq329WO z;oR_Vu}5ihsHyUj@eZ5=I9&l?Stq_56Lp-L+>g(5&9g(!*`Hy#azZKlEbD6z@AlLo zQX)b9`_?zMWv)1zZkhY6ic0C)Z2JXlb;VpFWyTyVS~?vu96_Dmg7w4~FWTPFzlzc) zi{{+-`_=G|B_!_*_K37}p3`J(H=^jQ6jr+y>o&f_wMAwLGnQqM=lzi(UIi{yl6a1J zZEW+glv++h5iR3l_4MqwmZlhrias)$DE7n_D&^2zOK*1~oIa9rQ(donFC{d^BDxv> z7I=b{`M6QW*x+t><87L5r+2@RuM7QqcA$uokz%@GLxy14(UugWMk@3y-tO;~G@yj{a~W$%k$LozK<_2c4#het7RD11{_@b>f41ihVmv_uOW`gO{Yfdu%3OL z-`?0d5fiUS#c9Ld3$Xd%*Jr~kU+l|6GrCnq1=88xSELSq@|ai&L#1*%EugcRu@rQ- zu>VE4{GNH9&o^-^ILP^u!(30C5R34qMDCQk5$)C(zp~jvwi_Gm#PR5CR_=dsvfORjC7@2MXtzRI#zo%u|Y{Gq&8+>BSgzQVoBT zGqz!Dpc`p*MLi-j6-8hX{c;?zK^yunxc@Nsho>C%_sFdB9z7<*3f$Fz;y32$wQVgn zAz<}j)!bG)ePLxbk)_R2eCA8{M*mP<{jVpt!`c*K1#yMX&ug(_-eAo}-Gcenx>|b`%SY}E2-QOTJ}fz(qP;()6!Yn@VKJ} zpRMySYdW?C{4b$hfwvt<9^4JVWV&t3M6+T1e+xo6oc&&VdBL_~9%l*QDavB2F1A$! zeUGB&+=Cj#ccXA$IjIJu=JDrRlfDu)ja9e9&~Vs1LN0=oN=o`<=Ev|}>4$t|*Jnd(|nZR4I=}Lno^$97Pb?*%r1_-xNPqi{%8V8Y5s5k!sH$ z(iUw!=6Gc{ZlTO#!S0Uav_M|1OBOe8+8s+Z;hms$JyJcIees!`!G_iBG;uB3=IWd| zNXNlZZXW;{qNbzR0-n$P9S`Nr_>UE*MRqYyqgUynLH?4p`opENJEP5-cd6V%f5tT@l#%NpCe!sdUCJ zI@NM!UR}Qc_q1n8*SBE(Vw2iWzw6-K9nBB^kl<*eU$ksxrfxVQD<~TO+HSpj1%k;Q zdKH4_U`ECeOo+zXATRv|NPfs4yQl9hb5c#yKw=8%m=s0=>M4^{?xd=mPV*-VFL9@v z7c{yC3F_~Vh8=9Frn}0lzH)UpyZbygoS^Vko^a?z+|I(@F&^oeFvqOPa)oLtRk%B~ z$k@?cM))E5-Ud5UsFVh=c7)9fv_`&c_GZ0iLuOoh{nhzQ?tz{4FH6g; zmUmyRbu(*}`Rk*P=HvIHO?IeixRwPsoOFxhWUjGW6+p5^I|4;kAQL1fHLd ze~}R1J0#e7T>TCv7F1)f&kcz>N7L*AnYsJ2>C0!%dxnqDc#CoSMC%mVGg=8A{cG43 zkF|acKAt{aYn(@eN9OCZRLBMU&?ERBlEQ> zX$-F4-K%9X8XGq^(sIIug8-+_wkZr4l3MnQlM*tQulUN|SrlHVCpSKF^P4PaGdKP} z%s%i#vgEiI#mQ(5T)?5l)@T>r&q;SO^sg#%4$Qnql|kypM(qyB>d5?r42VuGE?F)13Dgm>=jDPlE9!ql`4o~1Wuwv;Q_ue^O74wcZ8k~Mp3^Dl)!$v_S?DZW31;5c=D1Tu{x591P!Zx3Yb0F+> zDe6g5_C?FP&8`e>OGPS&R^=K{BUitcr;)@OoP?(hjM!~4Hvr?kjlHo zyQ|%^YTJz~#>dv9JM>6)zUrfY*VVGs9)X{CDde#-{1xwgyB^|mmi)W)J`Ycxl^C{% zY^(Dchrs#wRuIun33XL8K+5TH!-DSIOlBrFKacbIRU`?O`IOt(0EyZt(=7B`8&Xb~ z&3&piElZG$HHLgqo@A+GheduT6Ss4D@;qkNkDk{$W4*ykd-g)%ab=a^UtAoo=eD`L zxxws4I^HRH+&T)fEa4#W+OGY6=I{rs8V5W&z=9z)&8KuRo{(Y)uR3%Hu!#R+0hz61w;qO2ZK#Z(d|mio0*waUlFHHsm)#) zIJbE+nP0oA*&d85yJGvCg2NF!S8|;pC;LvVT5HqYQ9qZYO2zSoW^ij{;x~>G`k8MP zBr$|a-%oQ-*o=QXvXzK+h^okp-Ro%41%pew5%3NU8 zb29cSe5uh=-q*5($Gco!G^6uI!m2!8#1V%EasOiP?1L2@TAfi>t2tR@{#7B z67Cy6g2~a(6%o`bWbSs}sHSH6p9w-wZ1GqYMWm%c5ZDV1x=$(x>^5_h=5Uzt2?vWG zzNaLdrXujlw+@(U?d58w?*<@a_0|Tx(d2vUpF?)W8@KH7V_xRge-u+s*Blv{_db=bF*<$IXpX zPFjz+do)%MM`CS>xY0pxx(|$j@XLHPez#~0acKH^s;Jn>|U>C8oAaf+`xthP}7J zipqk@qA#!BzFa|cBmGqe`QDY3qp@ewg_@ujKaP0*q1v|V*vewsg!Zi9izh;s z88`lC+F(w=yoiIqsD@#6#7~ReRIXp(`8DTV$v3C#S9DCZv)F{I~YSn)h*0+S`!Kw$IAsF)-v(^08OG+pia}Ku=hD zOtryLneq#B8E|oKJc*92f$xA9%Shpf>UlJ3s8D#2c+kf*+vliRA`{7ai%~$vk6}4lX^A)zLrH$BG?95B77Z79u{EP41@HAYZN?0(aSx6>+Mf0iGjQ0(c zQ6?Zfk9O!s;NZ6#>As_^l;3)~n=T^R8eMgWn`3*`Zsen z#$&oaEGvRU*}yaTH{Lex#4@QqW9yTMnHI&`lM1)al>@29!6hm)m2KN6T$#NHmE-XCKYpFbzt?@1TIq-Ywk+FwRi7qu2lz=nK zlBx0PEb;-8#Og~aI=AuHEtSD93fW+NiGnX;QE=cyosoI!YTD8Z3-E{Y>HSA@@AuoL zkLHKxiCm4Cs4G=9c(dg=)*YbxOq;V^9@lvAj_=POw#5@t%XkV5@@KCe1=%5 zzJjE_L76|Enej*PJ3O-Op;+kICbl)VbZvnfmD)_;xsSzZv}d<({@3Lkf*kS97yrdV zey?szg0!+YlQed{n%p{DtUVW|R8+^EV=`@@X1e`6oi88poIr9Sf-hNd>FH#;{WoJI zA_)o($l#>HRqrMPkarTj$L4ycg_TF9Ll4**np~xCsghfDO|DW;ph%`b!Hs5Bp(D_B zsBfpnCctB0M1x=cs=4|AT`cfyj8L3#wk^Sl?=Ldl(4*hGrWvv41QcsWAfe z%8M1MwWQxuP|gR|C@rysg0s)l;2+2vECRmax3$RV8Q=3Z*Lyh%*zRVoGBtZ$?riHy z>qGigH~4A?JQnX!_@)~X_>+C*O>vy{80R!G3h76-d@^WiFJ}K=&ddbS0Lh;J$`iY^^bV$YV#+3#5@?WB`BYN}Z8dj&B#y)hj?p{1ECp1-i6K|{f zUfeL=*42}?;^FexZB4zNj%Z`a28Vd*6os$(*1BFWE!~4!u9TILt*9Ro5t9D`}5O(=5secB$POFcCNbP{hNR7eiyD>@h1{wIKtaCr0kgp>i#bC ziEi%t?_Ryh68C4cVMFhh(X)B@I(YK5u=bEf%!H((x@MsOlWKE{iXCe(2Rt^7ux}8W z1i7B9?Rpc7Xoy{f{M07g`WKajfFELORqI*}JLl80$dXjLQGj|HWh_h+R>~7K7 zM&R97Jq}d!1RRlkKQx(Nyz4PHz?BQ`b%8ijx7f z*ndC&wG>2dq_yrx368O0Wj~8Tz&=~}mk0twk{1PqeK8XlI?*SGS&NzN(Khp+*=dX@ z&$6viJ66{ZIPj#N8KbQ5xa;F=+}M=P)qLO)u;2`!Syqm5ikl5DUwv7G-*kC330v@9 zY{{QDO;o!ZEMKxSvD1h*xSJKTmam)eYyYr*aMX&aa6}$T z!Uo^f;dLTvN2OrAmg0BzmzDNgnx}keC}x%O2TtS7rI}tc>%DAIMaY=bn!vY~;gSDd zhLo_%7E3dY!=ARnnZ=KEMs!Aglphy(cZV|`TdazEF1Q3~V|5}hs7-C3b{ef97QGYc z^zqj&vKF1TogZ`LK|Nhmd+y`Ji3;_Om%a~dx7Ly}Fnm zjG=7&RTG9zz<)DLm!{JRFfF2nHSg#>1lZqF$goyy+oF3ct}hDHmRm;^P0(A)$G9#@ zvDW4b$Z-`aiPG7gx9%-6_+s)SU3+IRMxK67E4o_j?9d~7@i_b7fLyQCEof#b6E%#i z)54w6bAMDCTE}&HdTX&YS}N*dj}&5;B)=h*)v)CnHM?bS;udhNKUahrCEN#b3vzIt zlX`BO^oQq1J8xQDyQI3r%P88<1&A|ssr9=8Xg7vV%>t{`$(VwFu6YDmt38)8G5cIU zs-T=IMOidp1n|778d{by%~dJ+SrbAdy^Q@NiY?DSd;g>rJ(uTVv%cI5>)2!Nn^E(O z9xxxtNTob`t7D;-lKQ;L0%ukl|BJ1U$J{1!$>+HE;c=;#o>et`*LCz0=7~#xb0;4s z4(2$C^rd=&e!$jle1>TwrlCG66B`1%YrEI>za+iDAq-j9J4jpo!Y>7IjCPVB7DuRn zKT=EYFG-Uo%L1EBhWcK9)}j;ZgnD=#mAy~f3!iOfSHyzXM9^Z#pT_d#q&sQ>V)no9 zbEL10QiCjBESKsn`(7(<(b8<{yBC+<8{6BAN}rEeI;Z%o%@xYOWF)A5?J+};tT3?r z>-^l6HP6Mv#YU$YX>UWBKm|M6XL#9fEXvhlIv|D$3*p_W=z(+@bL~9GU-n&B*6-0W zXjC5*H6_$s;AszZ_96$+feouqPbpq@Z+uOW0;7>GT~&Uhi2NX*c(!8}XDr{RJKqo+ zSSRJuLuVu#TMvgn_i&6We$XQcLrYuC(_1FmPlosJ@JgIfoi7fybeZbIhjp!k1b27S zL=AXp%%auEJF6!R#y-HntkTTW`InTa1WDI$DPj! zPaixu*<0t48{y$yJgw4HosL1{l>VZV?2c7Q*c?AsKB;s#K80kiGP>L#fNfJ}fk#(w zJn77x(cElYzRKa(Tq>HRft5!j(-QhEw!?WoY-w;+Mykyf&9@%@`=outzPfm->;2+w!xmcZ0SR+h6cwb?*z(@q?edheYbPu(mxG9)FvVay4nES0a1zWtI7EF9=J2K@O5@?sH=xd6jT>JnzJyI@No2Zg4Msgtoc1BC7D1VF`p=? z88yY8o|HdUt;{m`V=TtL90S60L7i;nkIl8%#X+?*N&*OKd4VOHNa*;#kkCTKfnR!3W6@=tSLuj-Z zuI)aas_i)cgRI@T?X?&kOa@m);OLH*QuUO*@cP|1tTM32h>{!B(0F7}%cSx$YP!=} zg`-Bjp9GpD7JC6#E#VpOfK2UX>d{QA#vTCbjf3c{p?vgzG zfj^cVHc_!|z6ink;$diQ?jnAcjkv)czyII^oAG)4Azq*L2j-HR!nCm;dCE=0uYb+W zQ>nl=rR~$iY~6KyBg?vQWOtKh7Bi=|oHw?z_`Ql*v++P98Ps=h`mr|DMamA@PKCs{kKA%8HlX}pnE8s(R(e$bE) z3I}P1=&@Ds2_WClzh{A~3q}W;Nsn0{{y#}h|Gx@naDyXG{W7OP)4GG2dHWm2b<*Q? zD*lAamdj>tH(ZcG>NzT1LAo{bzo0*9=zv^BPDp9}CLRo6FAN_XNA&QxTvVntKUI*x zp+5irj&T~F`2u~g|H%k|rtCv=YySTiiqZJJ^!RXjirjjP3{VyfItB*t%xh3=gVXKZ zyXOxFt@pK1K8g+_Zn?veme#{b+-a|j`$^p`6fqJ%OY`_d^RR?4%Z z+M^R15l>GD`%(|G_Lbnnn#Wxjlr)vN;Bk4lcsEyeKUWiG2O)GgE_G-Qa=X3w2TdL4 z)zs$}0buBX)D1vRq?o$T0EL1Db_c*d z2A!@Kpn!nLpJ#wC!C-D?CTa0l1TYqgN=jT-D*{~3XWPcSQ|Hs#X+O`Pgp;jZs}1ta z1G}>*{_7}2vE{o>_ThdeKmn-FLu%Iet#$VoC+#1k>3_vVGUgv@y>)m*>zQ11Z{@GQ z=NxuIdjyOCp(Q}LIexfoO-s8eNaNaBo3I;fT)ww}c^G~?edJjy6D4X1TD2p$skr95 zYz5@7WWKG6-)(`v&L$uyZOpOxD#2MYW{#T*tzCjlo8!w(iAyR70G7FBiW*eQ`x6zC ztq<`pGR=-B5f(GfYfTL5185|N8w}|r=WSu>alk!th9-^&mwDXpHQh{>ZEm?AZp}10 zFhG$%*Pg^zuz>Vc0s)*eD7EXGuC6B(egbKJd;#!Buz-DZ6{Ns7m3BXyW(^QX$A55I z!T}|z*XRPiH?&SxOBBj`xgK1;lX8c`fY9BKy$E=n&oVsZNKeY+FXJ!0eSZC;2cg#a zr1(<3qYW|yE*hxrC{yIch$Ac*<17RH6jE5u5#z^)4y{T24{Q9JqVDUWjz=!b{W^^C zO-E2}POtjX3HH*%MJ<%mvl<pFx`qa|hKi znM;WX!XNLNL)|ZoJnYApxm$P*`KR6oxgObCFXOz$_}%I^07__*()uV`JjlRw5hGw6uWm#p;`d2 z1;x3Xlvuh2g@m9!K?T%X&(&e>?uH-l*2(2Q50M$^gv!3vWs;|#iZ)0`OqJ8rsb1an zF0%FEV}%tY$;oD9`1$^fG_R_qW#~ig!k>rx+xk^s{F-K&|0_O;gI??&3PqdNayj_Q zUCMvg!B3vk2?dFz%7K{7VB`(EGr-AmA72LO7syFJ;3)9yh|B!-bKmxJ1T?B1na4Ak zwPuf=G@;MZQE!!FW^`cgi84M~VcH@dk@=usTeMS8XQ&0$>7q&r725WPKojPY$1;Tc z#AvJ^?=MedYnwKz_%@-~Hg&)a%bhQ6xiKkizL*o=s46PAm|SdG6l<3rXSw@F{K%Bv zRet(c(3Nn|d4pEFH%3LPSJPp!Yx!<)`4~_i?yLBuKNFGmD>>nxiMuHKdqo~D&~kwH9556zGEov*{r*l7R+C$pz-(RzRJ zy5-0^%!Odd&D+9IiEx$ZM}od< z39SK!1jb>}4#(8gH1D1XC-MJARRU0@j%3fv>_U*V#dHE4k$A*YS^yhS4_^BMrOIn6+*NU3z$+$!l1gRstR#GB3N4whDa$0#)gEjXA3 z+=kN0mEv`&d8rc%mF%!RrM-+FOSGOz1Vi+-06N98QT2QzLnu$v4*n`3?fNYYl+VLN zfJRm8vB{ja3MF8)c|N1k*uH^kE1<>kPwUNaR*jcsxg6H}aUV6E)z`{S2*lC@t?Xov4d7UnbpPtu0by@xo^{2T<)drWqYJ2aO4b5@~#MU52}V@v1As zZXtqo?52B@q-?h-Jr=*-+wItkc-@QmjwIX*txfx3L;Iv*x*6>!m;z*SJ(?cQ%eDYV zh~SAyvqp5up>^>)&U#Ww#rk;VQ_JRpo@Z}kyu0b1)}v2!8o%Zo&ksd}{lDUt-kKjyu%NbHy0k(X zm(J;1fB?piE}af-)B2N^&M2WkK=WIsch5^3cHe{6A6bF9y1?TBjuAWn_hFrv$9dTU z7C`10)vbkcbGTkHA|oR|jdG~FV-JArVWtx2kV zpb|8=CCC@9xy^@oyM($NL@XnVEZ;jGy1R#sE{PqD7B&5?&^A=5Xm5Qy0Yyckg3i#W z?C%c{y5d^J@j}Ix>2FkM6bNR-X|GH1`wVKEM_2w&{3EpZiQBkx7;HSv zWC2UBdHuowzuCGQqYY|=?Vsn+lLQAVt1 z<#sZU?TJhGdova1AkQxIX463ZKU`oT^P;b zraw*p<&XOJTlBhvw=s9Y$7FAT!SM7FkP9 zoQT!XHbK2${Wy@Q0f^BKVXJ&sE^!_~Du<0eZq2MMrz`YCS3~qS=#&eisAIc$#vJlT zP09bISob(ZI{35d#jr;Q8tCQB=+yQniL>g5p%Pl4Og(>zDJa_rl0VffK;r0g4tIi$ z{mkhD5v9JjjHVq;WFOFQ56f^%9CsHZXkGm32Fh%*4;2;`vm8cL9n;^HScbE)u{ivX zT*A-NVxJ!9PKcPv&RtL(Kpa1cvPmf&dd2c|@f0t@B_8tS=bOtAu_DvXQL#xUPKu|F z;WVehQz{tDm2M}PlCBlcp;E@U(c!DWb|DBzowP=0&s>x&?ER#rt0nFAlo&y=|AY1z zog!J=?OqD${KF~H-er1mzQd(z>jLgUShP}yHjx{Tb{YK^_vPVc;0x0G7mzxAA-$K} zZZjXLs;Hr?uOU46tJhWt%|ug2fN~vtA-w^PUaYzn+lQ!@W_D@?4H8&l2szh) zhv2>ZRJpZL1&s#f)Hg)mS&MWQ5ndF%D*!6nE&D$+J9w)ylu-%jcJBi zIvei&lh%QV(5NaK;UkYjruQbbYTiYN9>yZg=A;;DHl3f*t;|7|`woVg$%pQN@wo~tVdwG|N@!YT2h^pP@5-B+1^~6_EQRlLghU@Gp!cIsxJYfn8T*H6 z0Fq4QN`72$Ij+->a}t#+c$mU0Mh;w>uu$nk8ra#zKuJVPI~{N8^QnWiNdSE;sxZ<}XF>u&_;0&mK;s|Y zh1QDC6{*xyq!w9I`CpvGpeG>7w~)sx;!{8k3w*kk6rePIyBQ37yb7~jw3~(np2~i> zLP&YEU%Qh=>x-q=_6+6DIr?ju5jMsHA56mxc`vSR7GF4?rJy3$5_gA|V(uE|g{f_Z zLqlX0paiieSG7p%{QVMGI9NI_1A3DDlMx2x`e=b4M22qH(!}GsiP8iqj4TH^NikwB zkh2@sOB5B{u3tauGA~yU7Cgc^@S+l(^U&2d!-3nrp6m>;PH1iT%U9jz%dNn590)co zYsUUL-F#@*bP`jx@FNY~ZCeP6*#an{on)dSz#=w4+f!0)m0><+2@3GpXiAviHKldk zINkt3I&4T7nRDjr@1SU#p#tdqZM59tc9+t6>QLkM2*6c?uTzhogBhUK?GXxUeHi7x z5xq{J~Y{QWJ@eFwB&*f)Ho?TvTx(DuJQ;$3nX@|-bky&_pG6IyKhf^Vz;%T{>)Ow8%1^6D1#kKr6X@OF)p8QfP*Ywuw z&7}IB+@z}!KR)1k+xS);pTp_I-fq2k#zs$E?%u|{kTx@|t>26Ol~9RpDPqR%Hh%Yk z_3xas7F5}t{GT-PW>WiJ$^8!Ek*w167wfLW;|krWlZ@yI^VM=uUG@*U836@+LEvxl zcn^#TfTsr>=np)A0cr#m%-pueq&PG_54Hnyp_{XV**6g_Wd+3_ z9E%wl(1ZR{qytm!e(2D#fwED-7DpJAv-d>xgnD)@w})$Urey}hsk}*in}M{YD`4UD z*d9S9T6fs6Cq45UI5hUR>e?AjC)}OM8-v--SRISqR{Y*wJ?*2U+FGrV)md(R)jvzZ zbU5Iu=XyG_0pu{*7Hm7TwlUoOVK8er;5~9ee}PW4t^!cSwfFI~WlfRLl^gJA8CG)` z+-TUBU6}zOnw!{<)@D?`jUT-@h4+Zp+MsPNM&y15weO?VWrYFJf@<6HeAeX(9s!Re zK`4uh77^Q%iXpzU0x8sb=vKfJwClC|9hQnlJ7D%Qb+0ioIQ2?6 zu6P2h-)f+LGL|8NVdvN=9XWQK-PDzfP?zr z3z%x0O@My823;@MX`VuHX;AzZl#dAYonA{wNKm;21D7`$N}kmKOM@qlH5u{sODONv z=?3ZZrkC?y1_EWJnNqCcWqo}W;eF8?gN|L1un@0jX6ve)FKd`6r%k!A1mm@>IZj6qNlBQ-%B^LnCnHmHEUK- zjZIC{Z`A+IpCO`34MiX(FsT!v*~UAlDq-ThDAwKtr4q@p!>5qZ!s2iVY_2A)(N5Q_ zQ!U7BV!o)iztCQ2VD|5Co7f8W>nXDzh6Wr=KYJWur$P!WBJ_)M(A^-UPnqv8I7mpRHq!YUBH*#sSFJ)PPFdV!@`Jx&Wa)xvL)|?xGY$l)nh4wf7^D$??Kf_0 zL=|nLqBs-%BJasE{#}83NH6xc-y5?GHFg9hKl{%kK==9jpk1bSFVH@h^)5C*ky8F3 zUqqyWi;{>>5J?U=EXi_DyNymS2V59m7<{55aTcT3)h81U!}pwwc%zqUmi6GoDf%RC zdXoQ}8{X5aDz{=^qJxa=-7Mi`G(-BgyZdiSs0}NVBjXA>Vb*B=7ta3*Skr?FM6R>C zOZxp1oti-tjW^yz*>HDE`Wxz=UGpl|dt_tn9Y9W;0Ivpxk&q~DFz6V@zbycqkjN2R z@)zXgFWm{OJDAw;YVpNs2KwuBpg7f@WZ9lpD^;b@eQm=7Ik#PSQM$HC-=Yi+^YRXe z*cy|u#?e_uAH{!U*7YCNQRdXhyP8<|x0$=$TL(G&8{ zkZ@8@h1g&rpd%C>5p;>@|Fz2BZAw=8uha9|fe(N2_Nd@H0vgH!?j1&-J}Uu_pb6fX zW7D|b`#4-cafAASSj<4bu~@tSzlv41Sg0bxDhnaecY*~&DJAYy;t6&e5oJvTb+>U3 z08GA3m&WgUX;q*e+uCp1e{T=tb-}2iyp8*RTk^@?^*oEdnIvZfgPFRhXQ7{+Md84{ z18}I7@z00)(Vmb|v+wYfIA08u7yfbPEnX&z1q&w__hjlRyai_|6P8?g`%tLO0ECnH z4s3*(zK_-gGWjS3s=rRY3tguOF_s3HnsU2k+aNyek?fz!Z}N*TdOOGZP)mk-jDOBDKxIxz@%VUg$j`OAJM?(9 z$IRR-8J>oSSc-(GgCbY)DQJ&ULNlBd$z~+P&-rs`-;Rl9oXM;uR+#+zgNlj3Uq;pk zWAK-XD^}Q?B=R4yj`K-lC2s;AY@UiO6496f<$p+((oG=HtQF)rDo&Xalbw# z=rArZiy)DWJcEHr4(X?GT0qLJ|F#gSG5D_jKC+R98nS$6ZkPH(4^#BHGYrg6W)2I7 zZ+1ztB8k7=T8PWf75rQ{|6s!k|4mKpd-W$l5^$Z7e$~>C|2VbElKI@$ubPm~P74cK zB}&uROAvc)_p>Kn$!;t1#yF8bhvS8TY1<(XwW(KQkFud%w|?`*RCA8<8@Y!<9hb~9 z&#UL2L@+-&bnE*%Hyn8)hiRiWBN{2P&lzp<%&kykm3S6ggZJ&LH(JO;nnM+#yA~R3YS} zlvE^QuQv*MC#kM%#tWEqoQgkEe{IHiY@C`S?2}f6jU&k&G@}%4Nt;r9Y%m5{eZHaGc-Du60#M; zLzED{Zi3W@n1a3e%=1`2#@mS;_vv|GzFT?~`q~|XjrT*7Vh&XkZE<6Tu=GgJKX%%Q z1p=*E%Fpqlf8T)~`5C=cN6>5iZJ~sA9+wP0MR0cAh;ilyo#xv7LW+g zlT^wzn_fhpbru%!3|U8mB%SbGo>$mVnPsy;4q`Q=>m2wN$<{ak2iOMhPM#!PHjBUM zH)`{#7#QTxOU124YDjZTa1Yh4WysdOCq}7Vz}SrF$$x6b#uu3=TRGz1jaVKF8jMJ? zUSo?0W3y;u#Gb0>e|e==lA%i531d2}{{DlMbQ)jeJjI%IKO#a-ctm0%R-vVtdG+ci zRdP1yxkv%a5fd9>Jni?l@;UJbEhBx-4^Ub!DgapS*EsLqlslWl} zD1Xy~D+$I{0Gy_1I#BzlmnRoUwewXL)D+_F;p-niwuehf2z<;q9xDIo^K_}#;8NMu z4qE1(T9Ja33(n)%o3n4RV@aWwLKq0Ys%D16A})F}LgUcN3jO&XPd;1}ziU~>q1W&Y zVL&_EI7bYl$TjGJ(yZC{CMPTw40PB)$5MFm+*GPVHOMhV>JyVE0pr`J=(Iij+jffI z;?tes%-OI_G-tbw)n{|-h2+w^ASwjl~fsA3~fQ zd&>iZO!5|U8x}@9AQlg%;1~2wPQ{HV0&_MorebhqF%xeGU^bx!1x7VE79U1nEb9w8 zNy3wI!_bNN5W(m)*I=111)uW3kPty{2?K-uH1ohl_~k#C5jUVj0%csb_2MuB!yMhXuaCsR z4Pmy4*ka+pD;@ND|64EJ(iJd2(WKJ&G_kO-{-q+&v71a#m#9{dE{(%P;&FGu!Ei+< zB+#@jm;L$k$5948_B{hb-0+ryl$2Cc9vnIA`!n!!RAN4j$SR}ZRF2{2H4R{~{FfJ= zgkl70TY*&nhj9NNUkqqr!FPiGr?~%jTMvEQ{^GBdB9(@NV|CVR6RjQ|oT1Qzn7rvj zVibh)KgbN*;7~|TM8x+aGc&947`gd!%YE{e+et6g&6dZ55wz)iX)>U0#S|+0Lb?w! z&c)b(!Z=t?79=nm?M6z_M@;W2X=$Yrxt+;PPEFbGaIvzoI-iY-#>B-@l}#5((AR%v zHX51$zj!(0=$JRl8`P+9n> zvMVeqQqs^U2BINZD0KU{rf8Sd*_Yy^=&V7z7c;+GH2JL6mAFT=O)I+qX33q z0FF9M`eQ%b9Cx5A$;)RBCb9SLor`FB++A6t;<1QDvV7~o$jQsw3u0&)8OxD4haPJo z@PBH1g#e=y^Fh5P9^5Zcmik+b#i9v$!p?Z!WnZ&OsfICm!r#Ao<1;h3ZDrH{2P^NpaQ|_zkS>&n_`|AXGcj!)}irZRQTZG zH#Q1_l!ZlU#JBgfv@So6fXKl!yDZ;oHF7E{E8~e%va?Tn3uaUf#R!Bc3ZwJFkk>WdQNdG>KPL0+kXU8)RRm zi=({>yLG?6Dag+LjEagnSD_E#EUVOqpnbqO7^1*OJy6>UAZ|Mml@{NCcy$0og|?7q>omu#kC$v%_rn>lm*-4k2zrcng9h( zWVcKOHB1OUeEprRFkM(&tjLHv0j{+E&vA}$cz8ID9Q=auV~x=;k&ocJjg1ZCxhmtE z`PO@NP>bn4iO6N2Nh;x^@b&feT(gUV*%DnQ*xnL|gf`@dV^h|0nW|=9?GP*mus=V^ zYaIXSIq?ty-IaX%_N^Rbb10>#xR?$Y(M*MDF6+PE43VF`&W@%i2F9KY>vk7h+? zqvErDKiwQutGCH9F);!0I5}x|>r^*)r^8Sqbq~tJ9PFxhIQ`hVq*b2YDY1p|u4br! zfr%6p67sq@n9pnXdSN=6DNNYXy$67UO*|*}nZiMH@VTG>oF*_Mi-|(iZzA7l?b`H4 zQZ#@QTXJzP1k|z0VZNfizAq)3jmi>n^pme;ct%THU<3-mbR!U1SW*(hBmxN~93PkA zUo5c2{-BoK;fF370_0PWpHD6S&b%l)wZPnUrOh*5ROf<|m8c0InM_m?>O&g@wDt5Rp&)9y;)#U|qyF$s2 z4krKBjMG(w;V6v)fT$&vfi$bH%JuNz-U zRW%=+OQ@8!J~)5ld4sg`4?-MAet+!8AHBx0c9k~cKW{URa3YBs|-IWe&f)NULEj}$@Y zJ`f6FlXqwyJPKr2WjKfzg2(y=I-A+qRsWx}S&3#DaM(wHb+0xar_{8YRB8Zc4T}Fq zYgZl*<-W$JzTfZjydD#iWY^w0`hy4fY`e<3 zXIHpvMxLwR28ZV3=kJAO6{X;svXYA{_k5?mQ!~@p#QfY9FhWLJTH4Frrf0*E)l??a zthl&X!Tk$$>%j;robs>z|TZY_{c7 z|Cbi~VT4{PG(LgP$=(0G9g@+9UKm>Q^rA05=lv6hbIo-tF;yp>9$Cfpi_6O9HOp_1 zaolrD%s>Y2_10ax%2x?Wz6cUltW%n7yOmT>P@u;;OC;{CRGlwC^R|L3JEcI-mPYQ? z2o7mlNpx_KtW=qHY>NTUk0O(KvYp$@G9G)oRCmVvo`I;Ya(<|oKRPEzS_l**U{No&Bto}U!99s;iw5%8iUCcKvZUv`r$C`3kcZ)_(S;o`zEVwH3p*=q~5ScufkQr*43Biyr~p5)Htzw>#wY^D3lDUbt_?R4F64th*(GBU5;nEPT$d z81aOKP0sN2tXZbzrHq1M-AON%_KuF8NV_=0JpxCId}gJgHPYSSXWZtq67s3=ccUD!A$b9CIp24&)`v+HFyM zdB+GHQ^(`W)8)C4@XF&=Eew>$j@phz3rd}`|NJ75tVz{A7(<8@%iOZw{^1e~tw31O z&A#|LA980%CL3~Zw;z&irhyaUHdiHH;2y3vM%Pt#{Jw1S>eBT#$xLq4d4Gj%L zvE5L|x&_b@X8(zdF)y@S)DCIwLLHBsu@YpCr@~o?%h3uBMayg#7uWkRJ8(f!X%1RI z#Z^@;P#O*bTd)&3bxr?o^$ieXpzDfu;!*j;P%9we z`V3v)Bydr^){@{iRQ1ci8R#`NN8pvxQDuyd6Z<}#f7I;!s2S2s|Cb2}3F36``GVK& zHU6Ajqrf-U>Co9vGNnDqJmFQeFP#S_HJ>2$+364EB(Mn1MNCNpOM=Mz9*V1zp%xC4$P$@nO zy@;gozQ#A7h9KrN!z@!Fu)!2-knxK~z%~e-BbBN}mV?XH91yiW(xS|IpU7|FWf)HI zpySic?i#1!A&=@n|88A%qBg{6n)>CRT-^u2_zVQX#v5#eMT(#i+oi8z?<}-aR#(I- zj-jAE?5>pao+gLSSKpbH#S1XtRC&~0)9h0Rg5mZRAu>ku_m!zs8VN$qTsT&D+_1H_ zwl?M7y(&G4LfTMksUBHns%s19(o67vP+&!%^D_faho}pY?@q}FpJ^wQkc1Rm?)gkS z7mXVc0z&gp#Qo!vU4#NT2d^rsx{#84CS~`D6iC-F`0;TK^hmF}s5CRgwaINlbtSk+ zKad}oXKPF((ou?{P}cW1KQb9CntyyhJ3AMM!&rY4tDt_e+rT#kM(53k2%UduZdT}# z3w1)#ZurhRDC1=Sgag3Vx4%#rv;7*nJ;d(r?kH&@*=^uGU3KQuTIYx6LMmSQ2&9$A zDIeDeSVg>00j1QMGdsn^v;i9Tmxw`dSA`m}p$)+0>y0x@*m3}olatfzksGYdC79-t z9e)W3-@-%Trn40#?gmS6Y@u<1!B*W!S${Bu#e3719YR)Iml1Yh3vJ&*+S4k^057bb=pm%q<2J0DVS9HtghBwDaRqssgEnEfM`df#?WiErahMFNwzeLRb({68D2Vz^$>< zB(Md^EZ>f>aG)P;UgJUM7{zSR{iWrvVhn~Ft$#Mp>gurHg3x^0?I3*{Ju25|) zh+ax;oADfloHTQCN#}vDf&)q%7|aPxRYjf^=!2Li)@*|_1LxeZOF`oJmNLG1$cZN$ zSvu0lsPI;{ZS@rj6)IsT@8X@i?2%eWYIf%9!ah^t`5D>%qZ0U|{@y=xT~A42E1z%L9A9rH!!v2c#xPF1R{yfGqE zybRk@z^%$Y`8V7VRvVCwo|t0Grbc+gn?Lp~_94GwC3by5O$k!rJz0b4xVrTXY>oH3 zznGl?6YE-;>S8x6GT5e*hhw!R(M9>uZp+%)w59e>+lC$-<(Gc?x&AZ;Ym9! zSo0p|750Y0{nB&X&%*{3){bkQ%2W#Thu8$|9f|}0QA>+q2z>}0HoOvQ!H>UP>ZPAm z7t6ZVb^y806X(&l$ubLv{-bOBc>VoT%3FBL$O}&-qh(2YPq{#Re&H#kvlPiA*ZIUh zD+lXaB_9KzBMnMYJ8K$%v%nzzi8TPo;YqI)Iz5neRN)F+_!a`%6prn0%oeMVx>OGB zu}pV^1ih|*16>vzq2zuT+t>cv^GBEAN5}$LT^_X$WIhPwr@cRV`|QT0Pn(l{8UI_y!%gn4@V>?$@w4jFq_FtjULMFYr&^Ty5s z3t&_PQfD#9h8U^|FCQNfnx}f2@))}x^+|%s?59S%J;rKHBqj=j_eRM$Mb)L5Ci?p? zMRXd3GZgJ-e2Sp^eji9r`+8y^%b3o?RQ1iI(nK`Yyyj&1i6mvu@h+770n(4b>~ln) z`Mm}vD2L(`T1!c6-b-K$NFbiv4hy@>cs!*`VC0qFg0++X@quHbH9TZvzdzw-BhxiC z)HcZ=zD1lx0ID5o3%b`K8yg#2ulkG=Ta}fYZSCx$0gG#u%nyeb3B*_0DT$C8AD*{+ zn;UnrLvYKh-=p@WnskJmZ5$O;2$w(KA%N>BRh>I`utV!L;M6WYI3E)qpT`?ZyGP|y z@#!@HhxWmfHGrY`*01m3FPgXl*qiAx2u*hLH?gxYtM6uI=Zzqeup%C5Nv@FT(@nFt zO3pz8b=e@Rcf9FrJ>UUR*Yr{m&x4VXk!BAZBZY*7n9^%UgW&qJ0kl^`vfGUF011mJ zeKngcUon)0`aDP zU?M%QWe4sZh*7qE@U#Y*_VX649M8h0emtm2z#4%^RSXpD8zsB@1XOguS=B=?)F`w} z8Niz8dAC7<%iv%JtQT$#M#1oP0ALx=U9BOGPdluorPbC@=`${+JUjZv4A7a##kSB9 z0zkYYPc07v0l!)LMrEq4vr~@@cS=BT13(LGH(km>+0Y?Pw{aJkT5o?!A~ zTFONRhNI4J#~~c8IE}Bk!Cq-{H~1werLEOSMe~oqmd7fZfCrmpSszHwaQ*yZ1x}%t zBh3kJk|-%Cj6x}E9kOp`x*{HzNSFu8N>57CA|C}tPM4>$il?RChNh(Km<6Q}Y)C;e zsOw+_6(uSj-S5InylWUYD8Hc3y=2{3zsrF?2_B(v1GU!m^cvv(h>#-<2$)$|SXg(B zo*7sv7q?8T|%PBDMYWzbY}j z#LL86;o-@5?%dHC%SkWuNO~}IiDS7|uU`)~G>!|h~i)*eT8%-7lG^oa<{=~P!DNx@a$*tph| z1T+|?A03bPnW8Vfr1nUp3t&HvoRRSegXLp&)|D%I$G&(68nzX7JXy-1ze*lj$xBEB*igxr17(k}VpouFcD$3^Y2+Mk>O z_l@q<^neJ{s+mB0J(W~n5H|Y+yb}osc6BANGsrUO#X^cbTSzHO{VJq9bCUj(jMBej z2xLmf3$Z;t4yeA7a9F1Zp7~Pn_8on!Ik75N-fJRL#_1jJ$W^N*RAj<<6oa;rbEa7V z_aS3s4(4TdAtuF3*f9*z6Sk^e&>85_eK%a%xlIS0$)O?B3c`Lh;uJ_hK{T4+Guf`+ zJPjeg21L(k=JgyQ>$T;yXWQ*!eq9K@e3b(2+Q&FE1|-m(3UjEA~PV zG0XqW%C`U9s7RBFhLaC;!0zB(Sv+Iaa4n)wmJ5UVO$6i!DRRYBSafvLKn$pf5wC8E zMfdeN-l9-W1*{UZE(sAn9p^QSGa?XL?oQ|BEDF;M?o!OIOeF0p3yp8|(Rc zgy%4Ym!OjO4FmlVX8hm&igPzWhstXIC$H~X%|$}Rt z8MmQS1;Gr(a#$H-z4Zo(+9W{n)f#N20!#mo*}MoFnPKT*oWqFw&rFWM$}>2CFNy?> zZL5CFHr%o)tQyJ+YCNECU&W^#OQ0JiI}E&kXsBn}0+YRkWE>-CU23Y3SZ7;R=WH02 ze99UKf$HqnqwEaDDuVzdEK*rkMsAgZQp@!qpiiXpaIkZZzh@Jz=2h;w^WMU_2r z-k-U^sNhrX6tFp1AO?DlUjsq`NR+%-NbsJY{!kA^m^4@-7FX8@AA#VC!aJ-?c1_3y zMrxxZKLw-X*L6lFrn2!5HUa8*+7gc^?(8lcJ(6ygs|yMC2uK`mgDvTBalmf3@pSx( z&(9Lvpa+M<(t!~Z0dE-E6hR~CQ6r;7u{ih5l66&8RES?$&w}qFc?F{*2{{OmP1&ng zfkM9UOrk6Nh)YQsLHWf5(9Ew_WD|C5-);y3Fo2nLr0t2zzn)JdJaBcouOVy4u3fc| zFKcUR?i6~mdS+Q4Ox)Za)G;hXSBxCVZ{Dh^8o%f4b~Y5nbwKIO<8z=`4rr3bCMK`j zorx1)J~4shqhPjLP!ii>q`7K=$+5Ms?~wY3yzGB|OV<3_Tnbfa?+tEWw0v*}^ffc~ HTl)V4RpZW$ literal 0 HcmV?d00001 diff --git a/docs_sphinx/_static/hh_sbi_4params_8features_pairplot.png b/docs_sphinx/_static/hh_sbi_4params_8features_pairplot.png deleted file mode 100644 index a6ea548c02e7842aad600adf48af620987077a1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32189 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 bAMQ1al%G1!YN8~I=9-ec+Qr-p=C}VByL%Qk diff --git a/docs_sphinx/_static/hh_sbi_4params_9features_pairplot.png b/docs_sphinx/_static/hh_sbi_4params_9features_pairplot.png new file mode 100644 index 0000000000000000000000000000000000000000..e1425b438e94517c1d851509aea20e0320223ede GIT binary patch literal 22603 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 literal 0 HcmV?d00001 diff --git a/docs_sphinx/_static/hh_sbi_4params_default_automatic_ext_pairplot.png b/docs_sphinx/_static/hh_sbi_4params_default_automatic_ext_pairplot.png index cf6bdf882350707a8799f102a8abd1f401d63f5b..debe01212e077cb0af9fb0e887edb444990fee91 100644 GIT binary patch literal 25811 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