From 9908ad8508fe222afe0e9b63e8fa965671edbc23 Mon Sep 17 00:00:00 2001 From: T Ehrhardt Date: Fri, 24 Apr 2026 18:54:59 +0200 Subject: [PATCH 01/22] first pass --- pisa/stages/aeff/aeff.py | 24 +- pisa/stages/aeff/param.py | 20 +- pisa/stages/aeff/weight.py | 21 +- pisa/stages/aeff/weight_hnl.py | 24 +- pisa/stages/background/atm_muons.py | 14 +- pisa/stages/data/csv_data_hist.py | 20 +- pisa/stages/data/csv_icc_hist.py | 16 +- pisa/stages/data/csv_loader.py | 15 +- pisa/stages/data/grid.py | 19 +- pisa/stages/data/simple_data_loader.py | 7 +- pisa/stages/data/simple_signal.py | 16 +- pisa/stages/data/sqlite_loader.py | 14 +- pisa/stages/data/toy_event_generator.py | 13 +- pisa/stages/discr_sys/csv_hypersurfaces.py | 15 +- pisa/stages/discr_sys/hypersurfaces.py | 25 +- pisa/stages/discr_sys/ultrasurfaces.py | 20 +- pisa/stages/flux/airs.py | 16 +- pisa/stages/flux/astrophysical.py | 20 +- pisa/stages/flux/barr_simple.py | 25 +- pisa/stages/flux/barr_simple_backup.py | 293 ++++++++++++++++++ .../flux/distribution_maker_outputs.json.bz2 | Bin 0 -> 27021 bytes pisa/stages/flux/hillasg.py | 21 +- pisa/stages/flux/honda_ip.py | 22 +- pisa/stages/flux/mceq_barr.py | 23 +- pisa/stages/flux/mceq_barr_red.py | 29 +- .../likelihood/generalized_llh_params.py | 2 +- pisa/stages/osc/decoherence.py | 27 +- pisa/stages/osc/external.py | 35 +-- pisa/stages/osc/globes.py | 28 +- pisa/stages/osc/nusquids.py | 40 +-- pisa/stages/osc/two_nu_osc.py | 29 +- pisa/stages/reco/resolutions.py | 33 +- pisa/stages/reco/simple_param.py | 18 +- pisa/stages/utils/add_indices.py | 29 +- pisa/stages/utils/adhoc_sys.py | 16 +- pisa/stages/utils/bootstrap.py | 14 +- pisa/stages/utils/fix_error.py | 11 +- pisa/stages/utils/hist.py | 9 +- pisa/stages/utils/kfold.py | 11 +- pisa/stages/xsec/correct_charm_y.py | 5 +- pisa/stages/xsec/dis_sys.py | 41 +-- pisa/stages/xsec/genie_sys.py | 16 +- pisa/stages/xsec/nutau_xsec.py | 15 +- 43 files changed, 741 insertions(+), 370 deletions(-) create mode 100644 pisa/stages/flux/barr_simple_backup.py create mode 100644 pisa/stages/flux/distribution_maker_outputs.json.bz2 diff --git a/pisa/stages/aeff/aeff.py b/pisa/stages/aeff/aeff.py index a27b57a97..f0cce23d4 100644 --- a/pisa/stages/aeff/aeff.py +++ b/pisa/stages/aeff/aeff.py @@ -1,5 +1,5 @@ """ -PISA pi stage to apply effective area weights +Stage to apply effective area weights """ from __future__ import absolute_import, print_function, division @@ -14,7 +14,7 @@ class aeff(Stage): # pylint: disable=invalid-name """ - PISA Pi stage to apply aeff weights. + Stage to apply aeff weights. This combines the detector effective area with the flux weights calculated in an earlier stage to compute the weights. @@ -24,8 +24,8 @@ class aeff(Stage): # pylint: disable=invalid-name Parameters ---------- - params - Expected params are .. :: + params : ParamSet + Must have parameters:: livetime : Quantity with time units aeff_scale : dimensionless Quantity @@ -33,13 +33,14 @@ class aeff(Stage): # pylint: disable=invalid-name nutau_norm : dimensionless Quantity nu_nc_norm : dimensionless Quantity - Expected container keys are .. :: - - "weights" - "weighted_aeff" + Notes + ----- + Expected container keys are:: + "weights", "weighted_aeff" """ + def __init__( self, **std_kwargs, @@ -51,16 +52,19 @@ def __init__( 'nutau_norm', 'nu_nc_norm', ) - expected_container_keys = ( 'weights', 'weighted_aeff', ) - + # Implements no setup_function+compute_function + supported_reps = { + 'calc_mode': [None], + } # init base class super().__init__( expected_params=expected_params, expected_container_keys=expected_container_keys, + supported_reps=supported_reps, **std_kwargs, ) diff --git a/pisa/stages/aeff/param.py b/pisa/stages/aeff/param.py index 5643a8d80..880d57878 100644 --- a/pisa/stages/aeff/param.py +++ b/pisa/stages/aeff/param.py @@ -25,7 +25,7 @@ __author__ = 'T.C. Arlen, T. Ehrhardt, S. Wren, J. Weldert' -__license__ = '''Copyright (c) 2014-2017, The IceCube Collaboration +__license__ = '''Copyright (c) 2014-2026, The IceCube Collaboration Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at @@ -137,19 +137,19 @@ class param(Stage): # pylint: disable=invalid-name Parameters ---------- params : ParamSet or sequence with which to instantiate a ParamSet. - Expected params are .. :: + Must have parameters:: aeff_energy_paramfile : string aeff_coszen_paramfile : string livetime : Quantity [time] aeff_scale : Quantity [dimensionless] - Expected container keys are .. :: + Notes + ----- - "true_energy" - "true_coszen" - "weights" + Expected container keys are:: + "true_energy", "true_coszen", "weights" """ def __init__( @@ -162,16 +162,20 @@ def __init__( 'livetime', 'aeff_scale' ) - expected_container_keys = ( 'true_energy', 'true_coszen', 'weights', ) - + # Implements no setup_function+compute_function + supported_reps = { + 'calc_mode': [None], + } + # init base class super().__init__( expected_params=expected_params, expected_container_keys=expected_container_keys, + supported_reps=supported_reps, **std_kwargs, ) diff --git a/pisa/stages/aeff/weight.py b/pisa/stages/aeff/weight.py index 4a20d02df..3ab560731 100644 --- a/pisa/stages/aeff/weight.py +++ b/pisa/stages/aeff/weight.py @@ -1,5 +1,5 @@ """ -PISA pi stage to apply weights +Stage to apply weights """ from __future__ import absolute_import, print_function, division @@ -13,25 +13,26 @@ class weight(Stage): # pylint: disable=invalid-name """ - PISA Pi stage to apply weights. + Stage to apply weights. This assumes a weight has already been calculated. The weight is then multiplied by the livetime to get an event count. Parameters ---------- - params : ParamSet or sequence with which to instantiate a ParamSet. - Expected params are: .. :: + Must have parameters:: livetime : Quantity [time] Detector livetime for scaling template weight_scale : Quantity [dimensionless] Overall scaling/normalisation of template - Expected container keys are .. :: + Notes + ----- - "weights" + Expected container keys are:: + "weights" """ def __init__( self, @@ -41,19 +42,21 @@ def __init__( 'livetime', 'weight_scale', ) - expected_container_keys = ( 'weights', ) - + # Implements no setup_function+compute_function + supported_reps = { + 'calc_mode': [None], + } # init base class super().__init__( expected_params=expected_params, expected_container_keys=expected_container_keys, + supported_reps=supported_reps, **std_kwargs, ) - @profile def apply_function(self): weight_scale = self.params.weight_scale.m_as('dimensionless') diff --git a/pisa/stages/aeff/weight_hnl.py b/pisa/stages/aeff/weight_hnl.py index d92368b27..3e282755d 100644 --- a/pisa/stages/aeff/weight_hnl.py +++ b/pisa/stages/aeff/weight_hnl.py @@ -1,5 +1,5 @@ """ -PISA pi stage to apply HNL specific re-weighting +Stage to apply HNL specific re-weighting """ from __future__ import absolute_import, print_function, division @@ -77,15 +77,24 @@ def re_weight_hnl( class weight_hnl(Stage): # pylint: disable=invalid-name """ - PISA pi stage to apply HNL specific re-weighting. + Stage to apply HNL specific re-weighting. This re-weights HNL events from sampling 1/L to target exponential and applies . Parameters ---------- - params - Expected params are .. :: + params : ParamSet + Must have parameters:: + U_tau4_sq : dimensionless Quantity + + Notes + ----- + + Expected container keys are:: + + 'mHNL', 'hnl_true_energy', 'hnl_proper_lifetime', 'hnl_distance_min', + 'hnl_distance_max', 'hnl_decay_width', 'weights' """ def __init__( @@ -93,7 +102,6 @@ def __init__( **std_kwargs, ): expected_params = ("U_tau4_sq",) - expected_container_keys = ( 'mHNL', 'hnl_true_energy', @@ -103,11 +111,15 @@ def __init__( 'hnl_decay_width', 'weights', ) - + # Implements no setup_function+compute_function + supported_reps = { + 'calc_mode': [None], + } # init base class super().__init__( expected_params=expected_params, expected_container_keys=expected_container_keys, + supported_reps=supported_reps, **std_kwargs, ) diff --git a/pisa/stages/background/atm_muons.py b/pisa/stages/background/atm_muons.py index 60826ccc5..eef564297 100644 --- a/pisa/stages/background/atm_muons.py +++ b/pisa/stages/background/atm_muons.py @@ -18,7 +18,7 @@ class atm_muons(Stage): # pylint: disable=invalid-name """ - PISA stage to apply atmospheric muon background systematics. + Stage to apply atmospheric muon background systematics. Typically this is used with muons generated by MuonGun, but should be generic to other generators. Note that this stage only modifies an weights based on the systematics, @@ -28,7 +28,7 @@ class atm_muons(Stage): # pylint: disable=invalid-name Parameters ---------- params : ParamSet or instantiable thereto - Parameters for steering the stage. The following parameters must be included: .. :: + Must have parameters:: atm_muon_scale : quantity (dimensionless) Normalisation of atmospheric muons @@ -42,10 +42,12 @@ class atm_muons(Stage): # pylint: disable=invalid-name delta_gamma_mu : quantity (dimensionless) Parameter controlling variation in spectral index - Expected container keys are .. :: + Notes + ----- - "weights" + Expected container keys are:: + "true_coszen", "weights" """ def __init__(self, @@ -60,12 +62,10 @@ def __init__(self, 'delta_gamma_mu_variable', 'delta_gamma_mu', ) - expected_container_keys = ( 'true_coszen', 'weights', ) - # init base class super().__init__( expected_params=expected_params, @@ -76,8 +76,6 @@ def __init__(self, def setup_function(self): - self.data.representation = self.calc_mode - # Create the primary uncertainties spline that will be used for # re-weighting the muon flux self.prim_unc_spline = self._make_prim_unc_spline() diff --git a/pisa/stages/data/csv_data_hist.py b/pisa/stages/data/csv_data_hist.py index 85b16949d..07dec8226 100644 --- a/pisa/stages/data/csv_data_hist.py +++ b/pisa/stages/data/csv_data_hist.py @@ -1,5 +1,5 @@ """ -A Stage to load data from a CSV datarelease format file into a PISA pi ContainerSet +A Stage to load data from a CSV datarelease format file into a ContainerSet """ from __future__ import absolute_import, print_function, division @@ -16,14 +16,14 @@ class csv_data_hist(Stage): # pylint: disable=invalid-name """ - CSV file loader PISA Pi class + CSV file loader class Parameters ---------- - - events_file : csv file path - + events_file : str + csv file path """ + def __init__(self, events_file, **std_kwargs, @@ -33,15 +33,19 @@ def __init__(self, self.events_file = find_resource(events_file) expected_params = () - + expected_container_keys = () + # Implements no apply_function + supported_reps = { + 'apply_mode': [None], + } # init base class super().__init__( expected_params=expected_params, - expected_container_keys=(), + expected_container_keys=expected_container_keys, + supported_reps=supported_reps, **std_kwargs, ) - def setup_function(self): events = pd.read_csv(self.events_file) diff --git a/pisa/stages/data/csv_icc_hist.py b/pisa/stages/data/csv_icc_hist.py index d7abf8b0c..cb38a7ede 100644 --- a/pisa/stages/data/csv_icc_hist.py +++ b/pisa/stages/data/csv_icc_hist.py @@ -1,5 +1,5 @@ """ -A Stage to load data from a CSV datarelease format file into a PISA pi ContainerSet +A Stage to load data from a CSV datarelease format file into a ContainerSet """ from __future__ import absolute_import, print_function, division @@ -18,13 +18,19 @@ class csv_icc_hist(Stage): # pylint: disable=invalid-name """ - CSV file loader PISA class + CSV file loader class Parameters ---------- - events_file : csv file path + events_file : str + csv file path + params : ParamSet + Must have parameters:: + + atm_muon_scale : quantity (dimensionless) """ + def __init__( self, events_file, @@ -34,11 +40,11 @@ def __init__( self.events_file = find_resource(events_file) expected_params = ('atm_muon_scale',) - + expected_container_keys = () # init base class super().__init__( expected_params=expected_params, - expected_container_keys=(), + expected_container_keys=expected_container_keys, **std_kwargs, ) diff --git a/pisa/stages/data/csv_loader.py b/pisa/stages/data/csv_loader.py index 1d073d681..3b118b099 100644 --- a/pisa/stages/data/csv_loader.py +++ b/pisa/stages/data/csv_loader.py @@ -1,5 +1,5 @@ """ -A Stage to load data from a CSV datarelease format file into a PISA pi ContainerSet +A Stage to load data from a CSV datarelease format file into a ContainerSet """ from __future__ import absolute_import, print_function, division @@ -13,14 +13,15 @@ from pisa.core.container import Container from pisa.utils.format import split +__all__ = ['csv_loader', 'init_test'] + class csv_loader(Stage): # pylint: disable=invalid-name """ - CSV file loader PISA Pi class + CSV file loader class Parameters ---------- - events_file : str or sequence of str csv file path(s) @@ -50,8 +51,8 @@ class csv_loader(Stage): # pylint: disable=invalid-name scale_aeff : bool, default: False Convert effective area from cm^2 to m^2 (PISA flux tables are stored in m^2) if given in cm^2. - """ + def __init__( self, events_file, @@ -91,10 +92,16 @@ def __init__( self.dis_idx = None self.scale_aeff = scale_aeff + # apply_function sets representation to "events", so only accept that + # to be transparent + supported_reps = { + 'apply_mode': ["events"], + } # init base class super().__init__( expected_params=(), expected_container_keys=(), + supported_reps=supported_reps, **std_kwargs, ) diff --git a/pisa/stages/data/grid.py b/pisa/stages/data/grid.py index c4576ca73..521a35ce8 100644 --- a/pisa/stages/data/grid.py +++ b/pisa/stages/data/grid.py @@ -19,14 +19,16 @@ class grid(Stage): # pylint: disable=invalid-name Parameters ---------- - + grid_binning : :py:class:`~.MultiDimBinning` Binning object defining the grid to be generated entity : str - `entity` arg to be passed to `MultiDimBinning.meshgrid` (see that - fucntion docs for details) + `entity` arg to be passed to :py:meth:`~.MultiDimBinning.meshgrid` + output_names : array_like + List of output names (event types) """ + def __init__( self, grid_binning, @@ -35,20 +37,24 @@ def __init__( **std_kwargs, ): expected_params = () + expected_container_keys=() # store args self.grid_binning = grid_binning self.entity = entity self.output_names = output_names + # only intended to work with calc_mode="events" + supported_reps = { + 'calc_mode': ["events"], + } # init base class super(grid, self).__init__( expected_params=expected_params, - expected_container_keys=(), + expected_container_keys=expected_container_keys, + supported_reps=supported_reps, **std_kwargs, ) - - assert self.calc_mode == "events" assert self.output_names is not None def setup_function(self): @@ -83,7 +89,6 @@ def setup_function(self): self.data.add_container(container) - def apply_function(self): # reset weights for container in self.data: diff --git a/pisa/stages/data/simple_data_loader.py b/pisa/stages/data/simple_data_loader.py index 39283a80d..266c00c2b 100644 --- a/pisa/stages/data/simple_data_loader.py +++ b/pisa/stages/data/simple_data_loader.py @@ -1,5 +1,5 @@ """ -A Stage to load data from a PISA style hdf5 file into a PISA pi ContainerSet +A Stage to load data from a PISA style hdf5 file into a ContainerSet """ #TODO This class has become decreasingly "simple"! Make it into a more specific stage for our purposes and recreate a much more simple HDF5 file loader that is generic for any PISA task @@ -19,11 +19,10 @@ class simple_data_loader(Stage): # pylint: disable=invalid-name """ - HDF5 file loader PISA Pi class + HDF5 file loader class Parameters ---------- - events_file : hdf5 file path output from make_events, including flux weights and Genie systematics coefficients @@ -67,8 +66,8 @@ class simple_data_loader(Stage): # pylint: disable=invalid-name Looks for `initial_weights` fields in events file, which will serve as nominal weights for all events included. No fields named `weights` may already be present. - """ + def __init__(self, events_file, mc_cuts, diff --git a/pisa/stages/data/simple_signal.py b/pisa/stages/data/simple_signal.py index 3c70da590..9ef48eafa 100644 --- a/pisa/stages/data/simple_signal.py +++ b/pisa/stages/data/simple_signal.py @@ -23,12 +23,12 @@ class simple_signal(Stage): # pylint: disable=invalid-name """ - random toy event generator PISA class + random toy event generator class Parameters ---------- - params - Expected params .. :: + params : ParamSet + Must have parameters:: n_events : int Number of events to be generated per output name @@ -55,15 +55,19 @@ def __init__( 'mu', 'sigma' ) - + expected_container_keys = () + # setup_function sets representation to "events", so only accept that + # to be transparent + # FIXME: apply_mode=MultiDimBinning is assumed in setup_function, but + # apply_function sets rep. to "events" supported_reps = { + 'calc_mode': ["events"], 'apply_mode': [MultiDimBinning] } - # init base class super().__init__( expected_params=expected_params, - expected_container_keys=(), + expected_container_keys=expected_container_keys, supported_reps=supported_reps, **std_kwargs, ) diff --git a/pisa/stages/data/sqlite_loader.py b/pisa/stages/data/sqlite_loader.py index f164abf3a..e417d4779 100644 --- a/pisa/stages/data/sqlite_loader.py +++ b/pisa/stages/data/sqlite_loader.py @@ -15,18 +15,24 @@ # TODO: docstrings class sqlite_loader(Stage): # pylint: disable=invalid-name """ - SQLite loader PISA Pi class + SQLite loader class + Parameters ---------- database : path to sqlite database - **kwargs - Passed to Stage + + output_names : array_like + List of output names (event types) + + post_fix : str + + """ def __init__( self, database, output_names, - post_fix = '_pred', + post_fix='_pred', **std_kwargs, ): diff --git a/pisa/stages/data/toy_event_generator.py b/pisa/stages/data/toy_event_generator.py index 3e19e1503..b9f7cdbe9 100644 --- a/pisa/stages/data/toy_event_generator.py +++ b/pisa/stages/data/toy_event_generator.py @@ -17,24 +17,23 @@ class toy_event_generator(Stage): # pylint: disable=invalid-name """ - random toy event generator PISA Pi class + random toy event generator class Parameters ---------- + output_names : array_like + List of output names (event types) - output_names : str - list of output names - - params - Expected params .. :: + params : ParamSet + Must have parameters:: n_events : int Number of events to be generated per output name random seed : int Seed to be used for random - """ + def __init__( self, output_names, diff --git a/pisa/stages/discr_sys/csv_hypersurfaces.py b/pisa/stages/discr_sys/csv_hypersurfaces.py index d31852136..327f8ed1b 100644 --- a/pisa/stages/discr_sys/csv_hypersurfaces.py +++ b/pisa/stages/discr_sys/csv_hypersurfaces.py @@ -1,5 +1,5 @@ """ -PISA stage to apply hypersurface fits from discrete systematics parameterizations +Stage to apply hypersurface fits from discrete systematics parameterizations """ @@ -23,7 +23,7 @@ __author__ = "B. Benkel, J. Weldert" -__license__ = """Copyright (c) 2014-2025, The IceCube Collaboration +__license__ = """Copyright (c) 2014-2026, The IceCube Collaboration Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -62,7 +62,15 @@ class csv_hypersurfaces(Stage): propagate_uncertainty : bool, optional Propagate the uncertainties from the hypersurface to the uncertainty of the output. + + Notes + ----- + + Expected container keys are:: + + "weights" and, if "error_method" is set, "errors" """ + def __init__( self, fit_results_file, @@ -118,9 +126,6 @@ def __init__( # pylint: disable=line-too-long def setup_function(self): """Load the fit results from the file and check compatibility with container names""" - - self.data.representation = self.calc_mode - for f in self.fit_results_file: k = os.path.splitext(os.path.basename(f))[0] if k.startswith('hs_'): # naming convention diff --git a/pisa/stages/discr_sys/hypersurfaces.py b/pisa/stages/discr_sys/hypersurfaces.py index 4423d2275..93e997ed9 100644 --- a/pisa/stages/discr_sys/hypersurfaces.py +++ b/pisa/stages/discr_sys/hypersurfaces.py @@ -1,5 +1,5 @@ """ -PISA stage to apply hypersurface fits from discrete systematics parameterizations +Stage to apply hypersurface fits from discrete systematics parameterizations """ #TODO Currently have to defined the `links` value in the stage config to match what the `combine_regex` does in @@ -24,7 +24,7 @@ __author__ = "P. Eller, T. Ehrhardt, T. Stuttard, J.L. Lanfranchi, A. Trettin" -__license__ = """Copyright (c) 2014-2018, The IceCube Collaboration +__license__ = """Copyright (c) 2014-2026, The IceCube Collaboration Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -70,7 +70,14 @@ class hypersurfaces(Stage): # pylint: disable=invalid-name fluctuate_seed : int, default: 12345 + Notes + ----- + + Expected container keys are:: + + "weights" and, if "error_method" is set, "errors" """ + def __init__( self, fit_results_file, @@ -81,8 +88,6 @@ def __init__( fluctuate_seed=12345, **std_kwargs, ): - # -- Only allowed/implemented modes -- # - assert isinstance(std_kwargs['calc_mode'], MultiDimBinning) # -- Load hypersurfaces -- # # Store args @@ -109,12 +114,14 @@ def __init__( #TODO: When in a pipeline after utils.hist, # this will cause a warning about missing presence of 'errors' # because hist adds this key during apply - - + supported_reps = { + 'calc_mode': [MultiDimBinning], + } # -- Initialize base class -- # super().__init__( expected_params=self.hypersurface_param_names + self.inter_params, expected_container_keys=expected_container_keys, + supported_reps=supported_reps, **std_kwargs, ) if links is None: @@ -135,9 +142,6 @@ def __init__( # pylint: disable=line-too-long def setup_function(self): """Load the fit results from the file and make some check compatibility""" - - self.data.representation = self.calc_mode - if self.links is not None: for key, val in self.links.items(): self.data.link_containers(key, val) @@ -158,9 +162,6 @@ def setup_function(self): # the linter thinks that "logging" refers to Python's built-in # pylint: disable=line-too-long, logging-not-lazy, deprecated-method def compute_function(self): - - self.data.representation = self.calc_mode - # Link containers if self.links is not None: for key, val in self.links.items(): diff --git a/pisa/stages/discr_sys/ultrasurfaces.py b/pisa/stages/discr_sys/ultrasurfaces.py index 0d277c7c3..bf116777e 100644 --- a/pisa/stages/discr_sys/ultrasurfaces.py +++ b/pisa/stages/discr_sys/ultrasurfaces.py @@ -23,7 +23,7 @@ __author__ = "A. Trettin, L. Fischer, T. Ehrhardt" -__license__ = """Copyright (c) 2014-2025, The IceCube Collaboration +__license__ = """Copyright (c) 2014-2026, The IceCube Collaboration Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -126,6 +126,13 @@ class ultrasurfaces(Stage): # pylint: disable=invalid-name params : ParamSet Note that the params required to be in `params` are determined from those listed in the `systematics`. + + Notes + ----- + + Expected container keys are:: + + `varnames` + "weights", and, if not already in `varnames`, "true_energy" """ def __init__( # pylint: disable=dangerous-default-value @@ -140,8 +147,6 @@ def __init__( # pylint: disable=dangerous-default-value distance_tol=0, **std_kwargs, ): - # evaluation only works on event-by-event basis - assert std_kwargs["calc_mode"] == "events" # Store args self.fit_results_file = find_resource(fit_results_file) @@ -183,10 +188,15 @@ def __init__( # pylint: disable=dangerous-default-value if 'true_energy' not in expected_container_keys: expected_container_keys.append('true_energy') + # evaluation only works on event-by-event basis + supported_reps = { + 'calc_mode': ["events"], + } # -- Initialize base class -- # super().__init__( expected_params=param_names, expected_container_keys=expected_container_keys, + supported_reps=supported_reps, **std_kwargs, ) @@ -197,8 +207,6 @@ def setup_function(self): import pandas as pd from sklearn.neighbors import KDTree - self.data.representation = self.calc_mode - # create containers for scale factors for container in self.data: container["us_scales"] = np.ones(container.size, dtype=FTYPE) @@ -302,8 +310,6 @@ def setup_function(self): @profile def compute_function(self): - self.data.representation = self.calc_mode - # Calculate the `delta_p` matrix containing the polynomial features. # If requested, these feature may be extrapolated using the strategy defined # by `self.extrapolation`. diff --git a/pisa/stages/flux/airs.py b/pisa/stages/flux/airs.py index e6570aeeb..1dec8659f 100644 --- a/pisa/stages/flux/airs.py +++ b/pisa/stages/flux/airs.py @@ -20,21 +20,25 @@ class airs(Stage): # pylint: disable=invalid-name """ + Stage to implement the atmospheric density uncertainty. + Uses the neutrino fluxes calculated in the mceq_barr stage, and scales the weights. + Parameters ---------- airs_spline : spline containing the 1-sigma shifts from AIRS data params : ParamSet - Must exclusively have parameters: .. :: + Must have parameters:: airs_scale : quantity (dimensionless) the scale by which the weights are perturbed via the airs 1-sigma shift - Expected container keys are .. :: + Notes + ----- + + Expected container keys are:: - "true_energy" - "true_coszen" - "weights" + "true_energy", "true_coszen", "weights" """ def __init__(self, airs_spline, **std_kwargs): @@ -44,13 +48,11 @@ def __init__(self, airs_spline, **std_kwargs): expected_params = [ "airs_scale", ] - expected_container_keys = ( 'true_energy', 'true_coszen', 'weights', ) - super().__init__( expected_params=expected_params, expected_container_keys=expected_container_keys, diff --git a/pisa/stages/flux/astrophysical.py b/pisa/stages/flux/astrophysical.py index 761c52129..ebd496b3d 100644 --- a/pisa/stages/flux/astrophysical.py +++ b/pisa/stages/flux/astrophysical.py @@ -1,5 +1,5 @@ """ -stage to implement getting the contribution to fluxes from astrophysical neutrino sources +Stage to implement getting the contribution to fluxes from astrophysical neutrino sources """ import numpy as np @@ -19,17 +19,18 @@ class astrophysical(Stage): # pylint: disable=invalid-name Parameters ---------- - params - Expected params are .. :: + params : ParamSet + Must have parameters:: astro_delta : quantity (dimensionless) astro_norm : quantity (dimensionless) - - Expected container keys are .. :: - "true_energy" - "true_coszen" - "initial_weights" + Notes + ----- + + Expected container keys are:: + "true_energy", "true_coszen", "initial_weights" + TODO: flavor ratio as a parameter? Save for later. """ @@ -63,7 +64,6 @@ def setup_function(self): """ Setup the nominal flux """ - self.data.representation = self.calc_mode for container in self.data: container["astro_weights"] = np.ones(container.size, dtype=FTYPE) container["astro_flux"] = np.ones(container.size, dtype=FTYPE) @@ -91,8 +91,6 @@ def compute_function(self): """ Tilt it, scale it, bop it """ - self.data.representation = self.calc_mode - delta = self.params.astro_delta.value.m_as("dimensionless") norm = self.params.astro_norm.value diff --git a/pisa/stages/flux/barr_simple.py b/pisa/stages/flux/barr_simple.py index 310c075e5..19622ac4a 100644 --- a/pisa/stages/flux/barr_simple.py +++ b/pisa/stages/flux/barr_simple.py @@ -27,8 +27,8 @@ class barr_simple(Stage): # pylint: disable=invalid-name Parameters ---------- - params - Expected params are .. :: + params : ParamSet + Must have parameters:: nue_numu_ratio : quantity (dimensionless) nu_nubar_ratio : quantity (dimensionless) @@ -36,15 +36,15 @@ class barr_simple(Stage): # pylint: disable=invalid-name Barr_uphor_ratio : quantity (dimensionless) Barr_nu_nubar_ratio : quantity (dimensionless) - Expected container keys are .. :: + Notes + ----- - "true_energy" - "true_coszen" - "nu_flux_nominal" - "nubar_flux_nominal" - "nubar" + Expected container keys are:: + "true_energy", "true_coszen", "nu_flux_nominal", "nubar_flux_nominal", + "nubar" """ + def __init__( self, **std_kwargs, @@ -56,7 +56,6 @@ def __init__( "Barr_uphor_ratio", "Barr_nu_nubar_ratio", ) - expected_container_keys = ( "true_energy", "true_coszen", @@ -64,22 +63,24 @@ def __init__( "nubar_flux_nominal", "nubar" ) - + # Implements no apply_function (implicit caching! FIXME) + supported_reps = { + 'apply_mode': [None], + } # init base class super().__init__( expected_params=expected_params, expected_container_keys=expected_container_keys, + supported_reps=supported_reps, **std_kwargs, ) def setup_function(self): - self.data.representation = self.calc_mode for container in self.data: container["nu_flux"] = np.empty((container.size, 2), dtype=FTYPE) @profile def compute_function(self): - self.data.representation = self.calc_mode # If a parameter below has not been modified by minimizer, # its magnitude below will be a native float, otherwise np.float64, diff --git a/pisa/stages/flux/barr_simple_backup.py b/pisa/stages/flux/barr_simple_backup.py new file mode 100644 index 000000000..ec4920702 --- /dev/null +++ b/pisa/stages/flux/barr_simple_backup.py @@ -0,0 +1,293 @@ +""" +Stage to implement the old PISA/oscfit flux systematics +""" + +from __future__ import absolute_import, print_function, division + +import math + +import numpy as np +from numba import guvectorize, cuda, jit, njit, void + +from pisa import FTYPE, TARGET +from pisa.core.param import Param, ParamSet +from pisa.core.stage import Stage +from pisa.utils.profiler import profile +from pisa.utils.numba_tools import myjit, myjit_2, ftype, FX, IX +from pisa.utils.barr_parameterization import modRatioNuBar, modRatioUpHor + +__all__ = ['barr_simple', 'apply_ratio_scale', 'spectral_index_scale', + 'apply_sys_kernel', 'apply_sys_vectorized', 'init_test'] + + +class barr_simple(Stage): # pylint: disable=invalid-name + """ + stage to apply Barr style flux uncertainties + uses parameterisations of plots from Barr 2006 paper + + Parameters + ---------- + params + Expected params are .. :: + + nue_numu_ratio : quantity (dimensionless) + nu_nubar_ratio : quantity (dimensionless) + delta_index : quantity (dimensionless) + Barr_uphor_ratio : quantity (dimensionless) + Barr_nu_nubar_ratio : quantity (dimensionless) + + Expected container keys are .. :: + + "true_energy" + "true_coszen" + "nu_flux_nominal" + "nubar_flux_nominal" + "nubar" + + """ + def __init__( + self, + **std_kwargs, + ): + expected_params = ( + "nue_numu_ratio", + "nu_nubar_ratio", + "delta_index", + "Barr_uphor_ratio", + "Barr_nu_nubar_ratio", + ) + + expected_container_keys = ( + "true_energy", + "true_coszen", + "nu_flux_nominal", + "nubar_flux_nominal", + "nubar" + ) + + # init base class + super().__init__( + expected_params=expected_params, + expected_container_keys=expected_container_keys, + **std_kwargs, + ) + + def setup_function(self): + self.data.representation = self.calc_mode + for container in self.data: + container["nu_flux"] = np.empty((container.size, 2), dtype=FTYPE) + + @profile + def compute_function(self): + self.data.representation = self.calc_mode + + # If a parameter below has not been modified by minimizer, + # its magnitude below will be a native float, otherwise np.float64, + # so convert to expected FTYPE + nue_numu_ratio = FTYPE(self.params.nue_numu_ratio.value.m_as("dimensionless")) + nu_nubar_ratio = FTYPE(self.params.nu_nubar_ratio.value.m_as("dimensionless")) + delta_index = FTYPE(self.params.delta_index.value.m_as("dimensionless")) + Barr_uphor_ratio = FTYPE(self.params.Barr_uphor_ratio.value.m_as("dimensionless")) + Barr_nu_nubar_ratio = FTYPE(self.params.Barr_nu_nubar_ratio.value.m_as("dimensionless")) + + for container in self.data: + apply_sys_vectorized( + container["true_energy"], + container["true_coszen"], + container["nu_flux_nominal"], + container["nubar_flux_nominal"], + container["nubar"], + nue_numu_ratio, + nu_nubar_ratio, + delta_index, + Barr_uphor_ratio, + Barr_nu_nubar_ratio, + out=container["nu_flux"], + ) + container.mark_changed('nu_flux') + + +#@njit(f"void({FX}, b1, {FX}, {FX}, {FX}[:])", inline='always') +@myjit_2(f"void({FX}, b1, {FX}, {FX}, {FX}[:])", inline="always") +def apply_ratio_scale(ratio_scale, sum_constant, in1, in2, out): + """ apply ratio scale to flux values + + Parameters + ---------- + ratio_scale : float + + sum_constant : bool + if Ture, then the sum of the new flux will be identical to the old flux + + in1 : float + + in2 : float + + out : array + + """ + if in1 == 0. and in2 == 0.: + out[0] = 0. + out[1] = 0. + return + + flag = 1 if sum_constant else 0 + + # when sum_constant = True + # just a single division operation + single_denom = in2 + ratio_scale * in1 + inv_denom = 1.0 / single_denom + + orig_sum = in1 + in2 + new = orig_sum * inv_denom + out0 = ratio_scale * in1 * new + out1 = new + + # sum_constant = False + out0_sum_not_const = ratio_scale * in1 + out1_sum_not_const = in2 + + # finally assign + out[0] = (1 - flag) * out0_sum_not_const + flag * out0 + out[1] = (1 - flag) * out1_sum_not_const + flag * out1 + + +@myjit +def spectral_index_scale(true_energy, egy_pivot, delta_index): + """ calculate spectral index scale """ + return math.pow((true_energy / egy_pivot), delta_index) + + +@myjit +def apply_sys_kernel( + true_energy, + true_coszen, + nu_flux_nominal, + nubar_flux_nominal, + nubar, + nue_numu_ratio, + nu_nubar_ratio, + delta_index, + Barr_uphor_ratio, + Barr_nu_nubar_ratio, + out, +): + # nue/numu ratio + new_nu_flux = cuda.local.array(shape=(2), dtype=ftype) + new_nubar_flux = cuda.local.array(2, dtype=ftype) + apply_ratio_scale( + nue_numu_ratio, True, nu_flux_nominal[0], nu_flux_nominal[1], new_nu_flux + ) + apply_ratio_scale( + nue_numu_ratio, + True, + nubar_flux_nominal[0], + nubar_flux_nominal[1], + new_nubar_flux, + ) + + # apply flux systematics + # spectral idx + idx_scale = spectral_index_scale(true_energy, 24.0900951261, delta_index) + new_nu_flux[0] *= idx_scale + new_nu_flux[1] *= idx_scale + new_nubar_flux[0] *= idx_scale + new_nubar_flux[1] *= idx_scale + + # nu/nubar ratio + new_nue_flux = cuda.local.array(2, dtype=ftype) + new_numu_flux = cuda.local.array(2, dtype=ftype) + apply_ratio_scale( + nu_nubar_ratio, True, new_nu_flux[0], new_nubar_flux[0], new_nue_flux + ) + apply_ratio_scale( + nu_nubar_ratio, True, new_nu_flux[1], new_nubar_flux[1], new_numu_flux + ) + if nubar < 0: + out[0] = new_nue_flux[1] + out[1] = new_numu_flux[1] + else: + out[0] = new_nue_flux[0] + out[1] = new_numu_flux[0] + + # Barr flux + out[0] *= modRatioNuBar(nubar, 0, true_energy, true_coszen, Barr_nu_nubar_ratio) + out[1] *= modRatioNuBar(nubar, 1, true_energy, true_coszen, Barr_nu_nubar_ratio) + + out[0] *= modRatioUpHor(0, true_energy, true_coszen, Barr_uphor_ratio) + out[1] *= modRatioUpHor(1, true_energy, true_coszen, Barr_uphor_ratio) + + +@guvectorize([f"({FX}, {FX}, {FX}[:], {FX}[:], {IX}, {FX}, {FX}, {FX}, {FX}, {FX}, {FX}[:])"], "(),(),(d),(d),(),(),(),(),(),()->(d)", target=TARGET) +def apply_sys_vectorized( + true_energy, + true_coszen, + nu_flux_nominal, + nubar_flux_nominal, + nubar, + nue_numu_ratio, + nu_nubar_ratio, + delta_index, + Barr_uphor_ratio, + Barr_nu_nubar_ratio, + out, +): + # nue/numu ratio + new_nu_flux = np.empty(shape=(2), dtype=ftype) + new_nubar_flux = np.empty(2, dtype=ftype) + apply_ratio_scale( + nue_numu_ratio, True, nu_flux_nominal[0], nu_flux_nominal[1], new_nu_flux + ) + apply_ratio_scale( + nue_numu_ratio, + True, + nubar_flux_nominal[0], + nubar_flux_nominal[1], + new_nubar_flux, + ) + + # apply flux systematics + # spectral idx + #idx_scale = spectral_index_scale(true_energy, 24.0900951261, delta_index) + energy_pivot = 24.0900951261 + idx_scale = math.exp(delta_index * math.log(true_energy / energy_pivot)) + new_nu_flux[0] *= idx_scale + new_nu_flux[1] *= idx_scale + new_nubar_flux[0] *= idx_scale + new_nubar_flux[1] *= idx_scale + + # nu/nubar ratio + new_nue_flux = np.empty(2, dtype=ftype) + new_numu_flux = np.empty(2, dtype=ftype) + apply_ratio_scale( + nu_nubar_ratio, True, new_nu_flux[0], new_nubar_flux[0], new_nue_flux + ) + apply_ratio_scale( + nu_nubar_ratio, True, new_nu_flux[1], new_nubar_flux[1], new_numu_flux + ) + if nubar < 0: + out[0] = new_nue_flux[1] + out[1] = new_numu_flux[1] + else: + out[0] = new_nue_flux[0] + out[1] = new_numu_flux[0] + + # Barr flux + out[0] *= modRatioNuBar(nubar, 0, true_energy, true_coszen, Barr_nu_nubar_ratio) + out[1] *= modRatioNuBar(nubar, 1, true_energy, true_coszen, Barr_nu_nubar_ratio) + + out[0] *= modRatioUpHor(0, true_energy, true_coszen, Barr_uphor_ratio) + out[1] *= modRatioUpHor(1, true_energy, true_coszen, Barr_uphor_ratio) + + +def init_test(**param_kwargs): + """Instantiation example""" + param_set = ParamSet([ + Param(name="nue_numu_ratio", value=1.0, **param_kwargs), + Param(name="nu_nubar_ratio", value=1.0, **param_kwargs), + Param(name="delta_index", value=0.0, **param_kwargs), + Param(name="Barr_uphor_ratio", value=0.0, **param_kwargs), + Param(name="Barr_nu_nubar_ratio", value=0.0, **param_kwargs) + ]) + + return barr_simple(params=param_set) diff --git a/pisa/stages/flux/distribution_maker_outputs.json.bz2 b/pisa/stages/flux/distribution_maker_outputs.json.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..133eefbeb84a414423931b081662bfde3dfe5204 GIT binary patch literal 27021 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 literal 0 HcmV?d00001 diff --git a/pisa/stages/flux/hillasg.py b/pisa/stages/flux/hillasg.py index 696a98bef..7a77094ef 100644 --- a/pisa/stages/flux/hillasg.py +++ b/pisa/stages/flux/hillasg.py @@ -21,16 +21,17 @@ class hillasg(Stage): # pylint: disable=invalid-name Parameters ---------- - params - Expected params .. :: + params : ParamSet + Must have parameters:: flux_table : str - Expected container keys are .. :: + Notes + ----- - "true_energy" - "true_coszen" + Expected container keys are:: + "true_energy", "true_coszen" """ def __init__(self, **std_kwargs): @@ -38,16 +39,19 @@ def __init__(self, **std_kwargs): expected_params = ( "flux_table", ) - expected_container_keys = ( 'true_energy', 'true_coszen', ) - + # Implements no apply_function + supported_reps = { + 'apply_mode': [None], + } # init base class super().__init__( expected_params=expected_params, expected_container_keys=expected_container_keys, + supported_reps=supported_reps, **std_kwargs, ) @@ -55,7 +59,6 @@ def setup_function(self): self.flux_table = load_2d_table(self.params.flux_table.value) - self.data.representation = self.calc_mode if self.data.is_map: # speed up calculation by adding links # as nominal flux doesn't depend on the (outgoing) flavour @@ -87,8 +90,6 @@ def setup_function(self): @profile def compute_function(self): - self.data.representation = self.calc_mode - if self.data.is_map: # speed up calculation by adding links # as nominal flux doesn't depend on the (outgoing) flavour diff --git a/pisa/stages/flux/honda_ip.py b/pisa/stages/flux/honda_ip.py index 95157eb50..a57d5b480 100644 --- a/pisa/stages/flux/honda_ip.py +++ b/pisa/stages/flux/honda_ip.py @@ -23,15 +23,17 @@ class honda_ip(Stage): # pylint: disable=invalid-name Parameters ---------- - params - Expected params .. :: + params : ParamSet + Must have parameters:: + flux_table : str - Expected container keys are .. :: + Notes + ----- - "true_energy" - "true_coszen" + Expected container keys are:: + "true_energy", "true_coszen" """ def __init__( @@ -42,16 +44,19 @@ def __init__( expected_params = ( 'flux_table', ) - expected_container_keys = ( 'true_energy', 'true_coszen', ) - + # Implements no apply_function + supported_reps = { + 'apply_mode': [None], + } # init base class super().__init__( expected_params=expected_params, expected_container_keys=expected_container_keys, + supported_reps=supported_reps, **std_kwargs, ) @@ -59,7 +64,6 @@ def setup_function(self): self.flux_table = load_2d_table(self.params.flux_table.value) - self.data.representation = self.calc_mode if self.data.is_map: # speed up calculation by adding links # as nominal flux doesn't depend on the (outgoing) flavour @@ -78,8 +82,6 @@ def setup_function(self): @profile def compute_function(self): - self.data.representation = self.calc_mode - if self.data.is_map: # speed up calculation by adding links # as nominal flux doesn't depend on the (outgoing) flavour diff --git a/pisa/stages/flux/mceq_barr.py b/pisa/stages/flux/mceq_barr.py index 1b7b0fd9a..09888f850 100644 --- a/pisa/stages/flux/mceq_barr.py +++ b/pisa/stages/flux/mceq_barr.py @@ -48,8 +48,10 @@ class mceq_barr(Stage): # pylint: disable=invalid-name nominal flux (since MCEq isued to derive these gradients). This is only relevent if using a different nominal flux, e.g. Honda et al 2025 + Parameters + ---------- params : ParamSet - Must exclusively have parameters: .. :: + Must have parameters:: delta_index : quantity (dimensionless) Shift in the spectral index of the neutrino flux. Prior with a mean of 0. @@ -78,15 +80,13 @@ class mceq_barr(Stage): # pylint: disable=invalid-name Uncertainty on K- and K+ production is assumed to be uncorrelated as the ratio is badly determined. - Expected container keys are .. :: - - "true_energy" - "true_coszen" - "nubar_flux_nominal" - "nubar" - Notes ----- + + Expected container keys are:: + + "true_energy", "true_coszen", "nubar_flux_nominal", "nubar" + The nominal flux is calculated ahead of time using MCEq, then multiplied with a shift in spectral index, and then modifications due to meson production (barr variables) are added. @@ -179,7 +179,6 @@ def __init__( "delta_index", "energy_pivot", ) - expected_container_keys = [ 'true_energy', 'true_coszen', @@ -187,6 +186,10 @@ def __init__( ] if use_honda_nominal_flux: expected_container_keys.append('nubar_flux_nominal') + # Implements no apply_function (implicit caching! FIXME) + supported_reps = { + 'apply_mode': [None], + } # store args self.table_file = table_file @@ -198,10 +201,10 @@ def __init__( super().__init__( expected_params=expected_params, expected_container_keys=expected_container_keys, + supported_reps=supported_reps, **std_kwargs, ) - def setup_function(self): self.data.representation = self.calc_mode diff --git a/pisa/stages/flux/mceq_barr_red.py b/pisa/stages/flux/mceq_barr_red.py index 48ef94070..91d9312c0 100644 --- a/pisa/stages/flux/mceq_barr_red.py +++ b/pisa/stages/flux/mceq_barr_red.py @@ -40,7 +40,7 @@ class mceq_barr_red(Stage): # pylint: disable=invalid-name table_file : pickle file containing pre-generated tables from MCEq params : ParamSet - Must exclusively have parameters: .. :: + Must have parameters:: delta_index : quantity (dimensionless) Shift in the spectral index of the neutrino flux. Prior with a mean of 0. @@ -69,17 +69,15 @@ class mceq_barr_red(Stage): # pylint: disable=invalid-name Uncertainty on K- and K+ production is assumed to be uncorrelated as the ratio is badly determined. - Expected container keys are .. :: - - "true_energy" - "true_coszen" - "nu_flux_nominal" - "nubar_flux_nominal" - "nubar" - Notes ----- - The nominal flux is calculated ahead of time using the honda_ip stage, + + Expected container keys are:: + + "true_energy", "true_coszen", "nu_flux_nominal", "nubar_flux_nominal", + "nubar" + + The nominal flux is calculated ahead of time using the :py:class:`.honda_ip` stage, then multiplied with a shift in spectral index, and then modifications due to meson production (barr variables) are added. @@ -160,7 +158,6 @@ def __init__( "delta_index", "energy_pivot", ) - expected_container_keys = ( "true_energy", "true_coszen", @@ -168,6 +165,10 @@ def __init__( "nubar_flux_nominal", "nubar" ) + # Implements no apply_function (implicit caching! FIXME) + supported_reps = { + 'apply_mode': [None], + } # Using Honda for nominal flux. Keys should already exist # what are keys added or altered in the calculation used during apply @@ -180,14 +181,12 @@ def __init__( super().__init__( expected_params=expected_params, expected_container_keys=expected_container_keys, + supported_reps=supported_reps, **std_kwargs, ) def setup_function(self): - - self.data.representation = self.calc_mode - # # Init arrays # @@ -339,8 +338,6 @@ def antipion_production(self, barr_var, pion_ratio): @profile def compute_function(self): - self.data.representation = self.calc_mode - if self.data.is_map: # speed up calculation by adding links # as nominal flux doesn't depend on the (outgoing) flavour diff --git a/pisa/stages/likelihood/generalized_llh_params.py b/pisa/stages/likelihood/generalized_llh_params.py index f960843ff..82c610631 100644 --- a/pisa/stages/likelihood/generalized_llh_params.py +++ b/pisa/stages/likelihood/generalized_llh_params.py @@ -75,7 +75,7 @@ def __init__(self, expected_container_keys = [ 'weights', ] - + # TODO: uses custom representations in setup_function supported_reps = { 'apply_mode' : [MultiDimBinning] } diff --git a/pisa/stages/osc/decoherence.py b/pisa/stages/osc/decoherence.py index 529daf320..5e60fbff1 100644 --- a/pisa/stages/osc/decoherence.py +++ b/pisa/stages/osc/decoherence.py @@ -249,12 +249,12 @@ def _calc_numu_disappearance_prob_3flav(decoh_params, E, L): class decoherence(Stage): """ - PISA Pi stage representing oscillations in the presence of decoherence + Stage representing oscillations in the presence of decoherence Parameters ---------- - params - Expected contents of `params` ParamSet: .. :: + params : ParamSet + Must have parameters:: detector_depth : float earth_model : PREM file path @@ -268,20 +268,18 @@ class decoherence(Stage): deltam21 : quantity (mass^2) deltam31 : quantity (mass^2) deltacp : quantity (angle) - gamma12 : quantity (energy) - gamma13 : quantity (energy) - gamma23 : quantity (energy) + gamma21 : quantity (energy) + gamma31 : quantity (energy) + gamma32 : quantity (energy) - Expected container keys are .. :: + Notes + ----- - "true_energy" - "true_coszen" - "weights" - "nubar" - "flav" - "sys_flux" + Expected container keys are:: + "true_energy", "true_coszen", "weights", "nubar", "flav", "sys_flux" """ + def __init__(self, **std_kwargs, ): @@ -392,9 +390,6 @@ def setup_function(self): @profile def compute_function(self): - # set the correct data mode - self.data.representation = self.calc_mode - if self.data.is_map: # speed up calculation by adding links self.data.link_containers('nu', ['nue_cc', 'numu_cc', 'nutau_cc', diff --git a/pisa/stages/osc/external.py b/pisa/stages/osc/external.py index 145f8836b..2fefdd462 100644 --- a/pisa/stages/osc/external.py +++ b/pisa/stages/osc/external.py @@ -23,12 +23,8 @@ class external(Stage): Parameters ---------- - params - - osc_prob : callable - the external function - - Expected params .. :: + params : ParamSet + Must have parameters:: detector_depth : float earth_model : PREM file path @@ -37,18 +33,22 @@ class external(Stage): YeO : quantity (dimensionless) YeM : quantity (dimensionless) - Expected container keys are .. :: + Attributes + ---------- + osc_prob : callable + the external function + external_params : + layers : :py:class:`~.layers.Layers` + YeI : quantity (dimensionless) + YeO : quantity (dimensionless) + YeM : quantity (dimensionless) + + Notes + ----- - "true_energy" - "true_coszen" - "nubar" - "flav" - "nu_flux" - "weights" + Expected container keys are:: - **kwargs - Other kwargs are handled by Stage - ----- + "true_energy", "true_coszen", "nubar", "flav", "nu_flux", "weights" """ def __init__( @@ -64,7 +64,6 @@ def __init__( 'YeO', 'YeM', ) - expected_container_keys = ( 'true_energy', 'true_coszen', @@ -73,8 +72,6 @@ def __init__( 'nu_flux', 'weights' ) - - # init base class super().__init__( expected_params=expected_params, diff --git a/pisa/stages/osc/globes.py b/pisa/stages/osc/globes.py index be7a5d94d..07b5549b2 100644 --- a/pisa/stages/osc/globes.py +++ b/pisa/stages/osc/globes.py @@ -1,5 +1,5 @@ """ -PISA pi stage wrapping GLoBES for the calculation of neutrino oscillation probabilities. +Stage wrapping GLoBES for the calculation of neutrino oscillation probabilities. Allows for the calculation of sterile neutrino oscillation probabilities. This needs Andrii's GLoBES wrapper, which has been forked to be @@ -32,16 +32,20 @@ class globes(Stage): # pylint: disable=invalid-name """ - GLoBES PISA Pi class + GLoBES class Parameters ---------- earth_model : PREM file path + globes_wrapper : path to globes wrapper + detector_depth : float + prop_height : quantity (dimensionless) + params : ParamSet or sequence with which to instantiate a ParamSet. - Expected params .. :: + Must have parameters:: theta12 : quantity (angle) theta13 : quantity (angle) @@ -53,16 +57,13 @@ class globes(Stage): # pylint: disable=invalid-name theta34 : quantity (angle) deltacp : quantity (angle) - Expected container keys are .. :: - - "true_energy" - "true_coszen" - "nubar" - "flav" - "nu_flux" - "weights" + Notes + ----- + Expected container keys are:: + "true_energy", "true_coszen", "nubar", "flav", "nu_flux", "weights" """ + def __init__( self, earth_model, @@ -132,9 +133,6 @@ def setup_function(self): # one to give GLoBES the raw densities. self.layers.setElecFrac(1., 1., 1.) - # set the correct data mode - self.data.representation = self.calc_mode - # --- calculate the layers --- if self.data.is_map: # speed up calculation by adding links @@ -229,8 +227,6 @@ def compute_function(self): 0.0 ] self.globes_calc.SetParametersArr(params) - # set the correct data mode - self.data.representation = self.calc_mode for container in self.data: # standard oscillations are only applied to charged current events, diff --git a/pisa/stages/osc/nusquids.py b/pisa/stages/osc/nusquids.py index ebae646c7..644063856 100644 --- a/pisa/stages/osc/nusquids.py +++ b/pisa/stages/osc/nusquids.py @@ -35,7 +35,7 @@ class `nuSQUIDSLayers` in nuSQuIDS as well as low-pass filtering and range avera class nusquids(Stage): # pylint: disable=invalid-name """ - PISA Pi stage for weighting events due to the effect of neutrino oscillations, using + Stage for weighting events due to the effect of neutrino oscillations, using nuSQuIDS as the oscillation probability calculator. One specialty here is that we have to specify an additional binning to determine where to place nodes for the exact calculation. The points where the actual probability is evaluated is @@ -45,8 +45,7 @@ class nusquids(Stage): # pylint: disable=invalid-name Parameters ---------- - Uses the standard parameters as required by a PISA pi stage - (see `pisa/core/stage.py`) + Uses the standard parameters as required by a :py:class:`.Stage` node_mode : MultiDimBinning Binning to determine where to place nodes at which the evaluation of interaction @@ -157,38 +156,43 @@ class nusquids(Stage): # pylint: disable=invalid-name Do not include matter effects. Greatly increases evaluation speed. params : ParamSet or sequence with which to instantiate a ParamSet. - Expected params .. :: + Must have parameters:: + theta12 : quantity (angle) theta13 : quantity (angle) theta23 : quantity (angle) deltam21 : quantity (mass^2) deltam31 : quantity (mass^2) deltacp : quantity (angle) - Additional expected params if `num_neutrinos == 4` .. :: + + Additional expected params if `num_neutrinos == 4`:: + theta14 : quantity (angle) theta24 : quantity (angle) deltam41 : quantity (mass^2) deltacp14 : quantity (angle) deltacp24 : quantity (angle) - Additional ParamSet params expected when using the `use_decoherence` argument: - n_energy : quantity (dimensionless) - * If using `num_decoherence_gamma` == 1: + Additional expected params when using the `use_decoherence` argument:: + + n_energy : quantity (dimensionless) + + If using `num_decoherence_gamma` == 1:: + gamma : quantity (energy) - * If using `num_decoherence_gamma` == 3: + + If using `num_decoherence_gamma` == 3:: + gamma12 : quantity (energy) gamma13 : quantity (energy) gamma23 : quantity (energy) - - Expected container keys are .. :: - "true_energy" - "true_coszen" - "nubar" - "flav" - "nu_flux" - "weights" + Notes + ----- + Expected container keys are:: + + "true_energy", "true_coszen", "nubar", "flav", "nu_flux", "weights" """ def __init__( @@ -337,7 +341,7 @@ def __init__( 'nu_flux', 'weights' ) - + #TODO: supported_reps? # init base class super().__init__( expected_params=expected_params, diff --git a/pisa/stages/osc/two_nu_osc.py b/pisa/stages/osc/two_nu_osc.py index a9ff857f3..1a74bf3f8 100644 --- a/pisa/stages/osc/two_nu_osc.py +++ b/pisa/stages/osc/two_nu_osc.py @@ -1,5 +1,5 @@ """ -PISA pi stage for the calculation osc. probabilities assuming two-neutrino model +Stage for the calculation osc. probabilities assuming two-neutrino model """ from __future__ import absolute_import, print_function, division @@ -17,28 +17,27 @@ class two_nu_osc(Stage): # pylint: disable=invalid-name """ - two neutrino osc PISA Pi class + two neutrino osc class Parameters ---------- - Expected params .. :: + params : ParamSet + Must have parameters:: theta : quantity (angle) deltam31 : quantity (mass^2) - - Expected container keys are .. :: - - "true_energy" - "true_coszen" - "nu_flux" - "weights" Notes ----- + + Expected container keys are:: + + "true_energy", "true_coszen", "nu_flux", "weights" + For two-neutrino model, there is only one mass-splitting term Atmospheric mixing angle is approximated by theta (sin^2(2*theta)) - """ + def __init__(self, **std_kwargs, ): @@ -47,22 +46,24 @@ def __init__(self, 'theta23', 'deltam31', ) - expected_container_keys = ( 'true_energy', 'true_coszen', 'nu_flux', 'weights' ) - + # Implements no setup_function+compute_function + supported_reps = { + 'calc_mode': [None], + } # init base class super().__init__( expected_params=expected_params, expected_container_keys=expected_container_keys, + supported_reps=supported_reps, **std_kwargs, ) - @profile def apply_function(self): diff --git a/pisa/stages/reco/resolutions.py b/pisa/stages/reco/resolutions.py index 996f42190..0b48da064 100644 --- a/pisa/stages/reco/resolutions.py +++ b/pisa/stages/reco/resolutions.py @@ -15,14 +15,14 @@ class resolutions(Stage): # pylint: disable=invalid-name """ - stage to change the reconstructed information by a given amount - This can be used to esimate the impact of improved recosntruction - resolutions for instance + Stage to change the reconstructed information by a given amount. + This can be used to estimate the impact of improved reconstruction + resolutions for instance. Parameters ---------- - params - Expected params .. :: + params : ParamSet + Must have parameters:: energy_improvement : quantity (dimensionless) scale the reco error down by this fraction @@ -32,27 +32,25 @@ class resolutions(Stage): # pylint: disable=invalid-name applies a shift to the classification parameter [if relative_pid=False] scales the pid error down by this fraction [if relative_pid=True] - Expected container keys are .. :: + Notes + ----- - "true_energy" - "true_coszen" - "reco_energy" - "reco_coszen" - "pid" + Expected container keys are:: + "true_energy", "true_coszen", "reco_energy", "reco_coszen", "pid" """ + def __init__( self, relative_pid=False, **std_kwargs ): - + # FIXME: not meant to be expected_params, as only setup_function implemented expected_params = ( 'energy_improvement', 'coszen_improvement', 'pid_improvement', ) - expected_container_keys = ( 'true_energy', 'true_coszen', @@ -60,11 +58,14 @@ def __init__( 'reco_coszen', 'pid', ) - - # init base class + supported_reps = { + "calc_mode": ["events"], + "apply_mode": [None] + } super().__init__( expected_params=expected_params, expected_container_keys=expected_container_keys, + supported_reps=supported_reps, **std_kwargs, ) @@ -72,8 +73,6 @@ def __init__( def setup_function(self): - self.data.representation = self.apply_mode - for container in self.data: logging.info('Changing energy resolutions') container['reco_energy'] += (container['true_energy'] - container['reco_energy']) * self.params.energy_improvement.m_as('dimensionless') diff --git a/pisa/stages/reco/simple_param.py b/pisa/stages/reco/simple_param.py index f07592f39..3c56f7e17 100644 --- a/pisa/stages/reco/simple_param.py +++ b/pisa/stages/reco/simple_param.py @@ -386,7 +386,7 @@ class simple_param(Stage): # pylint: disable=invalid-name Parameters ---------- params : ParamSet - Must exclusively have parameters: + Must have parameters:: perfect_reco : bool If True, use "perfect reco": reco == true, numu(bar)_cc -> tracks, rest to cascades @@ -410,11 +410,12 @@ class simple_param(Stage): # pylint: disable=invalid-name cascade_pid : float The numerical 'pid' variable value to assign for cascades - Expected container keys are .. :: + Notes + ----- - "true_energy" - "true_coszen" + Expected container keys are:: + "true_energy", "true_coszen" """ def __init__(self, @@ -422,23 +423,26 @@ def __init__(self, ): expected_params = ( - "perfect_reco", #TODO move these to constructor args? (yes, please) + "perfect_reco", #FIXME move these to constructor args? (yes, please) "reco_energy_params", "reco_coszen_params", "pid_track_params", "track_pid", "cascade_pid", ) - expected_container_keys = ( 'true_energy', 'true_coszen', ) - + # Implements no apply_function (TODO: does any calc_mode work?) + supported_reps = { + 'apply_mode': [None], + } # init base class super().__init__( expected_params=expected_params, expected_container_keys=expected_container_keys, + supported_reps=supported_reps, **std_kwargs, ) diff --git a/pisa/stages/utils/add_indices.py b/pisa/stages/utils/add_indices.py index d17aab12b..951d4e562 100644 --- a/pisa/stages/utils/add_indices.py +++ b/pisa/stages/utils/add_indices.py @@ -1,5 +1,5 @@ ''' -PISA module to prep incoming data into formats that are +Module to prep incoming data into formats that are compatible with the mc_uncertainty likelihood formulation This module takes in events containers from the pipeline, and @@ -24,41 +24,34 @@ class add_indices(Stage): # pylint: disable=invalid-name """ - PISA Pi stage to map out the index of the analysis + Stage to map out the index of the analysis binning where each event falls into. - Parameters - ---------- - params - foo : Quantity - bar : Quanitiy with time dimension - - Notes: - ------ + Notes + ----- - input and calc specs are predetermined in the module - (inputs from the config files will be disregarded) - + (inputs from the config files will be disregarded) - stage appends an array quantity called bin_indices - stage also appends an array mask to access events by bin index later in the pipeline - """ - # this is the constructor with default arguments - def __init__(self, **std_kwargs, ): - - + # has no apply_function, but uses both in setup_function + supported_reps = { + "calc_mode": ["events"], + "apply_mode": [MultiDimBinning], + } # init base class super().__init__( expected_params=(), expected_container_keys=(), + supported_reps=supported_reps, **std_kwargs, ) - def setup_function(self): ''' Calculate the bin index where each event falls into diff --git a/pisa/stages/utils/adhoc_sys.py b/pisa/stages/utils/adhoc_sys.py index 996254d50..e3c141cdf 100644 --- a/pisa/stages/utils/adhoc_sys.py +++ b/pisa/stages/utils/adhoc_sys.py @@ -27,7 +27,6 @@ class adhoc_sys(Stage): # pylint: disable=invalid-name Parameters ---------- - variable_name : str Name of the variable to correct data/MC agreement for. The variable must be loaded in the data loading stage and it must be present in the loaded JSON file. @@ -36,7 +35,15 @@ class adhoc_sys(Stage): # pylint: disable=invalid-name Path to the file which contains the binning and the scale factors. The JSON file must contain a dictionary in which, for each variable, a 1D binning and an array of factors. This file is produced externally from PISA. + + Notes + ----- + + Expected container keys are:: + + "weights", `variable_name` """ + def __init__( self, data=None, @@ -47,16 +54,13 @@ def __init__( ): expected_params = () - expected_container_keys = [ 'weights', variable_name ] - supported_reps = { - 'calc_mode': 'events', - 'apply_mode': 'events' + 'calc_mode': ['events'], + 'apply_mode': ['events'] } - # init base class super().__init__( expected_params=expected_params, diff --git a/pisa/stages/utils/bootstrap.py b/pisa/stages/utils/bootstrap.py index 3b2e72290..a3210df81 100644 --- a/pisa/stages/utils/bootstrap.py +++ b/pisa/stages/utils/bootstrap.py @@ -17,7 +17,7 @@ __author__ = "A. Trettin" -__license__ = """Copyright (c) 2022, The IceCube Collaboration +__license__ = """Copyright (c) 2014-2026, The IceCube Collaboration Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -43,6 +43,13 @@ class bootstrap(Stage): # pylint: disable=invalid-name ---------- seed : int, optional Seed for the random number generator. + + Notes + ----- + + Expected container keys are:: + + "weights" """ def __init__( @@ -54,11 +61,14 @@ def __init__( expected_container_keys = ( 'weights', ) - + supported_reps = { + 'calc_mode': ["events"], + } # init base class super().__init__( expected_params=(), expected_container_keys=expected_container_keys, + supported_reps=supported_reps, **std_kwargs, ) diff --git a/pisa/stages/utils/fix_error.py b/pisa/stages/utils/fix_error.py index ef1794051..b708fd03e 100644 --- a/pisa/stages/utils/fix_error.py +++ b/pisa/stages/utils/fix_error.py @@ -15,8 +15,16 @@ class fix_error(Stage): # pylint: disable=invalid-name """ - stage to fix the error returned by template_maker. + Stage to fix the error returned by template_maker. + + Notes + ----- + + Expected container keys are:: + + "errors" """ + def __init__( self, **std_kwargs, @@ -25,7 +33,6 @@ def __init__( expected_container_keys = ( 'errors', ) - # init base class super().__init__( expected_params=(), diff --git a/pisa/stages/utils/hist.py b/pisa/stages/utils/hist.py index e6c0648fb..b02ecbd35 100644 --- a/pisa/stages/utils/hist.py +++ b/pisa/stages/utils/hist.py @@ -23,10 +23,12 @@ class hist(Stage): # pylint: disable=invalid-name Return un-weighted event counts in each bin apply_unc_weights : bool, default False - Expected container keys are .. :: + Notes + ----- - "weights" - "unc_weights" (if `apply_unc_weights`) + Expected container keys are:: + + "weights", "unc_weights" (if `apply_unc_weights`) """ def __init__( @@ -45,7 +47,6 @@ def __init__( 'calc_mode': [MultiDimBinning, "events"], 'apply_mode': [None, MultiDimBinning], } - # init base class super().__init__( expected_params=(), diff --git a/pisa/stages/utils/kfold.py b/pisa/stages/utils/kfold.py index 493be5b74..124686285 100644 --- a/pisa/stages/utils/kfold.py +++ b/pisa/stages/utils/kfold.py @@ -51,6 +51,12 @@ class kfold(Stage): # pylint: disable=invalid-name by the number of splits shuffle (bool, optional): shuffle indeces before splitting + Notes + ----- + + Expected container keys are:: + + "weights" """ def __init__( @@ -67,11 +73,14 @@ def __init__( expected_container_keys = ( 'weights', ) - + supported_reps = { + 'calc_mode': ["events"], + } # init base class super().__init__( expected_params=(), expected_container_keys=expected_container_keys, + supported_reps=supported_reps, **std_kwargs, ) diff --git a/pisa/stages/xsec/correct_charm_y.py b/pisa/stages/xsec/correct_charm_y.py index 71c7aeefd..52b26adc1 100644 --- a/pisa/stages/xsec/correct_charm_y.py +++ b/pisa/stages/xsec/correct_charm_y.py @@ -30,6 +30,9 @@ class correct_charm_y(Stage): ------ THIS STAGE IS FOR MC TESTING ONLY - do *NOT* use in real analysis!!! + Expected container keys are:: + + 'true_energy', 'true_coszen', 'bjorken_y', 'weights' References ---------- @@ -38,8 +41,8 @@ class correct_charm_y(Stage): Slides showing use for check with oscNext VS (osc. call, 19 Dec 2022): https://drive.google.com/file/d/14h0WYWPWn7yS7wLQpyMAPTenfKfFAq3k/view?usp=drive_link - """ + def __init__( self, nu_cc_container_keys = ['nue_cc', 'numu_cc', 'nutau_cc'], diff --git a/pisa/stages/xsec/dis_sys.py b/pisa/stages/xsec/dis_sys.py index 7d88829c2..fe93fb05e 100644 --- a/pisa/stages/xsec/dis_sys.py +++ b/pisa/stages/xsec/dis_sys.py @@ -24,23 +24,6 @@ class dis_sys(Stage): # pylint: disable=invalid-name Parameters ---------- - data - params - Must contain :: - dis_csms : quantity (dimensionless) [if combine_components=True] - or - dis_csms_tot, dis_csms_diff : quantity (dimensionless) [if combine_components=False] - - Expected container keys are .. :: - - "true_energy" - "bjorken_y" - "dis" - "nubar" - "weights" - - - combine_components : bool False -> allow the total and differential components to fit individually (params will then be: dis_csms_tot, dis_csms_diff) True -> vary the total and differential components together (param will then be: dis_csms) @@ -52,17 +35,20 @@ class dis_sys(Stage): # pylint: disable=invalid-name Below what energy (in GeV) to extrapolate Defaults to 100. CSMS not considered reliable below 50-100 GeV + params : ParamSet + Must have parameters:: + dis_csms : quantity (dimensionless) [if combine_components=True] + or + dis_csms_tot, dis_csms_diff : quantity (dimensionless) [if combine_components=False] + Notes ----- - Requires the events have the following keys :: - true_energy - Neutrino energy in GeV - bjorken_y - Inelasticity - dis - 1 if event is DIS, else 0 + Expected container keys are:: + + "true_energy", "bjorken_y", "dis", "nubar", "weights" """ + def __init__( self, extrapolation_type='constant', @@ -80,7 +66,6 @@ def __init__( 'dis_csms_tot', 'dis_csms_diff', ) - expected_container_keys = ( 'true_energy', 'bjorken_y', @@ -88,11 +73,15 @@ def __init__( 'nubar', 'weights', ) - + # explicitly sets "events" rep. in setup_function -> be transparent + supported_reps = { + 'calc_mode': ["events"], + } # init base class super().__init__( expected_params=expected_params, expected_container_keys=expected_container_keys, + supported_reps=supported_reps, **std_kwargs, ) diff --git a/pisa/stages/xsec/genie_sys.py b/pisa/stages/xsec/genie_sys.py index 30512a399..81879413a 100644 --- a/pisa/stages/xsec/genie_sys.py +++ b/pisa/stages/xsec/genie_sys.py @@ -20,21 +20,21 @@ class genie_sys(Stage): # pylint: disable=invalid-name Parameters ---------- - params - Must contain :: + params : ParamSet + Must have parameters:: - parameters specified in interactions (dimensionless) + parameters specified in `interactions` (dimensionless) Notes ----- - Requires the events have the following keys for each included interaction :: - linear_fit_{name} - Genie linear coefficient for interaction {name} - quad_fit_{name} - Genie quadratic coefficient for interaction {name} + Expected container keys are:: + "linear_fit_{name}" (Genie linear coefficient for interaction {name}), + "quad_fit_{name}" (Genie quadratic coefficient for interaction {name}), + "weights" """ + def __init__( self, interactions="Genie_Ma_QE, Genie_Ma_RES", diff --git a/pisa/stages/xsec/nutau_xsec.py b/pisa/stages/xsec/nutau_xsec.py index 5801a1473..1bbac57ae 100644 --- a/pisa/stages/xsec/nutau_xsec.py +++ b/pisa/stages/xsec/nutau_xsec.py @@ -32,18 +32,19 @@ class nutau_xsec(Stage): # pylint: disable=invalid-name `pisa_examples/resources/cross_sections/interp_nutau_xsec_protocol2.pckl` params : ParamSet or sequence with which to instantiate a ParamSet. - Expected params .. :: + Must have parameters:: nutau_xsec_scale : quantity (dimensionless) Scaling between different cross-section models. The range [-1, 1] covers all models tested in the paper. - Expected container keys are .. :: - - "true_energy" - "weights" + Notes + ----- + Expected container keys are:: + "true_energy", "weights" """ + def __init__( self, xsec_file="cross_sections/interp_nutau_xsec_protocol2.pckl", @@ -53,12 +54,11 @@ def __init__( expected_params = ( "nutau_xsec_scale", ) - expected_container_keys = ( 'true_energy', 'weights', ) - + #TODO: supported_reps? (temporarily sets rep. to apply_mode in setup_function) # init base class super(nutau_xsec, self).__init__( expected_params=expected_params, @@ -74,7 +74,6 @@ def setup_function(self): interp_nutau = interp_dict["NuTau"] interp_nutaubar = interp_dict["NuTauBar"] - self.data.representation = self.calc_mode for container in self.data: if container.name == "nutau_cc": energy = container["true_energy"] From f85ca04381accc4d3417c3eaeaa92096117f5c71 Mon Sep 17 00:00:00 2001 From: T Ehrhardt Date: Sat, 25 Apr 2026 02:32:37 +0200 Subject: [PATCH 02/22] Let Stage class listify supported_reps values if necessary, so that individual services don't need to --- pisa/core/stage.py | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/pisa/core/stage.py b/pisa/core/stage.py index 9988e00d0..2ae6d8947 100644 --- a/pisa/core/stage.py +++ b/pisa/core/stage.py @@ -6,7 +6,7 @@ from __future__ import absolute_import, division from copy import deepcopy -from collections.abc import Mapping +from collections.abc import Mapping, Sequence import inspect from time import time @@ -56,8 +56,8 @@ class Stage(): supported_reps : dict Dictionary containing the representations allowed for calc_mode and apply_mode. If nothing is specified, Container.array_representations - plus MultiDimBinning is assumed. Should have keys `calc_mode` and/or - `apply_mode`, they will be created if not there. + plus MultiDimBinning is assumed. Should have keys "calc_mode" and/or + "apply_mode", they will be created if not there. calc_mode : pisa.core.binning.MultiDimBinning, str, or None Specify the default data representation for `setup()` and `compute()` @@ -150,11 +150,18 @@ def __init__( if supported_reps is None: supported_reps = {} + assert isinstance(supported_reps, Mapping) - if 'calc_mode' not in supported_reps: - supported_reps['calc_mode'] = list(Container.array_representations) + [MultiDimBinning] - if 'apply_mode' not in supported_reps: - supported_reps['apply_mode'] = list(Container.array_representations) + [MultiDimBinning] + for mode_str in ['calc_mode', 'apply_mode']: + if mode_str not in supported_reps: + # reps for this mode not yet defined -> allow all + supported_reps[mode_str] = list(Container.array_representations) + [MultiDimBinning] + else: + # reps for this mode already defined -> listify + if (isinstance(supported_reps[mode_str], str) + or not isinstance(supported_reps[mode_str], Sequence)): + supported_reps[mode_str] = [supported_reps[mode_str]] + self.supported_reps = supported_reps self._check_representation(rep=calc_mode, mode='calc_mode', allow_None=True) @@ -317,18 +324,18 @@ def _check_representation(self, rep, mode, allow_None=False): # Should be removed once stages explicitely set modes. if None not in self.supported_reps[mode] and not allow_None: raise ValueError( - f"{mode} {rep} is not supported by {self.stage_name}" + f"{mode}='{rep}' is not supported by {self.stage_name}" f".{self.service_name}" ) elif isinstance(rep, str): if rep not in self.supported_reps[mode]: raise ValueError( - f"{mode} {rep} is not supported by {self.stage_name}" + f"{mode}='{rep}' is not supported by {self.stage_name}" f".{self.service_name}" ) elif type(rep) not in self.supported_reps[mode]: raise ValueError( - f"{mode} {type(rep)} is not supported by {self.stage_name}" + f"{mode} of type {type(rep)} is not supported by {self.stage_name}" f".{self.service_name}" ) From 9c75ee6abde9d2e469bf813e923ad3d22f7929b9 Mon Sep 17 00:00:00 2001 From: T Ehrhardt Date: Sat, 25 Apr 2026 02:34:43 +0200 Subject: [PATCH 03/22] second pass: delistify supported_reps values in individual services where possible --- pisa/stages/aeff/aeff.py | 2 +- pisa/stages/aeff/param.py | 2 +- pisa/stages/aeff/weight.py | 2 +- pisa/stages/aeff/weight_hnl.py | 2 +- pisa/stages/cont_sys/snowstorm_hist.py | 8 ++++---- pisa/stages/data/csv_data_hist.py | 2 +- pisa/stages/data/csv_loader.py | 4 ++-- pisa/stages/data/grid.py | 2 +- pisa/stages/data/meows_loader.py | 2 +- pisa/stages/data/simple_data_loader.py | 8 ++++++-- pisa/stages/data/simple_signal.py | 7 +++---- pisa/stages/discr_sys/csv_hypersurfaces.py | 2 +- pisa/stages/discr_sys/hypersurfaces.py | 2 +- pisa/stages/discr_sys/ultrasurfaces.py | 2 +- pisa/stages/flux/barr_simple.py | 2 +- pisa/stages/flux/hillasg.py | 2 +- pisa/stages/flux/honda_ip.py | 2 +- pisa/stages/flux/mceq_barr.py | 2 +- pisa/stages/flux/mceq_barr_red.py | 2 +- pisa/stages/likelihood/generalized_llh_params.py | 2 +- pisa/stages/osc/two_nu_osc.py | 2 +- pisa/stages/reco/resolutions.py | 5 +++-- pisa/stages/reco/simple_param.py | 2 +- pisa/stages/utils/add_indices.py | 4 ++-- pisa/stages/utils/adhoc_sys.py | 4 ++-- pisa/stages/utils/bootstrap.py | 2 +- pisa/stages/utils/kde.py | 4 ++-- pisa/stages/utils/kfold.py | 2 +- pisa/stages/utils/set_variance.py | 5 ++--- pisa/stages/xsec/dis_sys.py | 2 +- 30 files changed, 47 insertions(+), 44 deletions(-) diff --git a/pisa/stages/aeff/aeff.py b/pisa/stages/aeff/aeff.py index f0cce23d4..255c94e9b 100644 --- a/pisa/stages/aeff/aeff.py +++ b/pisa/stages/aeff/aeff.py @@ -58,7 +58,7 @@ def __init__( ) # Implements no setup_function+compute_function supported_reps = { - 'calc_mode': [None], + 'calc_mode': None, } # init base class super().__init__( diff --git a/pisa/stages/aeff/param.py b/pisa/stages/aeff/param.py index 880d57878..8e3901115 100644 --- a/pisa/stages/aeff/param.py +++ b/pisa/stages/aeff/param.py @@ -169,7 +169,7 @@ def __init__( ) # Implements no setup_function+compute_function supported_reps = { - 'calc_mode': [None], + 'calc_mode': None, } # init base class super().__init__( diff --git a/pisa/stages/aeff/weight.py b/pisa/stages/aeff/weight.py index 3ab560731..7309199a5 100644 --- a/pisa/stages/aeff/weight.py +++ b/pisa/stages/aeff/weight.py @@ -47,7 +47,7 @@ def __init__( ) # Implements no setup_function+compute_function supported_reps = { - 'calc_mode': [None], + 'calc_mode': None, } # init base class super().__init__( diff --git a/pisa/stages/aeff/weight_hnl.py b/pisa/stages/aeff/weight_hnl.py index 3e282755d..c2106227a 100644 --- a/pisa/stages/aeff/weight_hnl.py +++ b/pisa/stages/aeff/weight_hnl.py @@ -113,7 +113,7 @@ def __init__( ) # Implements no setup_function+compute_function supported_reps = { - 'calc_mode': [None], + 'calc_mode': None, } # init base class super().__init__( diff --git a/pisa/stages/cont_sys/snowstorm_hist.py b/pisa/stages/cont_sys/snowstorm_hist.py index a7637de85..cc4d7bd9b 100644 --- a/pisa/stages/cont_sys/snowstorm_hist.py +++ b/pisa/stages/cont_sys/snowstorm_hist.py @@ -39,9 +39,9 @@ class snowstorm_hist(Stage): # pylint: disable=invalid-name Service to apply detector systematics through splitting and histogramming of snowstorm simulation. - Expected container keys are: - "weights" - All detector systematics that should be used + Expected container keys are:: + + "weights" + all detector systematics that should be used The stage also expects that "regularized_output_binning" is part of the global auxilary variables of the `data` container set. This key is added by the @@ -113,7 +113,7 @@ def __init__( # evaluation only works on event-by-event basis supported_reps = { - 'calc_mode': ["events"], + 'calc_mode': "events", 'apply_mode': [None, MultiDimBinning], } diff --git a/pisa/stages/data/csv_data_hist.py b/pisa/stages/data/csv_data_hist.py index 07dec8226..4e8f30a5c 100644 --- a/pisa/stages/data/csv_data_hist.py +++ b/pisa/stages/data/csv_data_hist.py @@ -36,7 +36,7 @@ def __init__(self, expected_container_keys = () # Implements no apply_function supported_reps = { - 'apply_mode': [None], + 'apply_mode': None, } # init base class super().__init__( diff --git a/pisa/stages/data/csv_loader.py b/pisa/stages/data/csv_loader.py index 3b118b099..9987f63fc 100644 --- a/pisa/stages/data/csv_loader.py +++ b/pisa/stages/data/csv_loader.py @@ -93,9 +93,9 @@ def __init__( self.scale_aeff = scale_aeff # apply_function sets representation to "events", so only accept that - # to be transparent + # to be transparent (TODO: any calc_mode fine?) supported_reps = { - 'apply_mode': ["events"], + 'apply_mode': "events", } # init base class super().__init__( diff --git a/pisa/stages/data/grid.py b/pisa/stages/data/grid.py index 521a35ce8..3c330e7f8 100644 --- a/pisa/stages/data/grid.py +++ b/pisa/stages/data/grid.py @@ -46,7 +46,7 @@ def __init__( # only intended to work with calc_mode="events" supported_reps = { - 'calc_mode': ["events"], + 'calc_mode': "events", } # init base class super(grid, self).__init__( diff --git a/pisa/stages/data/meows_loader.py b/pisa/stages/data/meows_loader.py index c26b66dae..05d363688 100644 --- a/pisa/stages/data/meows_loader.py +++ b/pisa/stages/data/meows_loader.py @@ -16,7 +16,7 @@ class meows_loader(Stage): # pylint: disable=invalid-name """ - Docstring incoming... + Docstring incoming... (FIXME) """ def __init__(self, events_file: str, n_files: int, output_names, **std_kwargs): diff --git a/pisa/stages/data/simple_data_loader.py b/pisa/stages/data/simple_data_loader.py index 266c00c2b..af3cb0077 100644 --- a/pisa/stages/data/simple_data_loader.py +++ b/pisa/stages/data/simple_data_loader.py @@ -102,9 +102,13 @@ def __init__(self, # their values expected_params = () + # Even though service implements setup_function (recording event + # properties), representations of new containers in there are explicitly + # set to "events" (naturally). Hence, choice of calc_mode has no impact. + # Make decision not to accept setting calc_mode. supported_reps = { - 'calc_mode': [None], - 'apply_mode': ["events"], + 'calc_mode': None, + 'apply_mode': "events", } # init base class diff --git a/pisa/stages/data/simple_signal.py b/pisa/stages/data/simple_signal.py index 9ef48eafa..94c93300f 100644 --- a/pisa/stages/data/simple_signal.py +++ b/pisa/stages/data/simple_signal.py @@ -23,7 +23,7 @@ class simple_signal(Stage): # pylint: disable=invalid-name """ - random toy event generator class + random toy event generator class (FIXME) Parameters ---------- @@ -35,7 +35,6 @@ class simple_signal(Stage): # pylint: disable=invalid-name random seed : int Seed to be used for random - """ def __init__( @@ -61,8 +60,8 @@ def __init__( # FIXME: apply_mode=MultiDimBinning is assumed in setup_function, but # apply_function sets rep. to "events" supported_reps = { - 'calc_mode': ["events"], - 'apply_mode': [MultiDimBinning] + 'calc_mode': "events", + 'apply_mode': MultiDimBinning } # init base class super().__init__( diff --git a/pisa/stages/discr_sys/csv_hypersurfaces.py b/pisa/stages/discr_sys/csv_hypersurfaces.py index 327f8ed1b..c919d3490 100644 --- a/pisa/stages/discr_sys/csv_hypersurfaces.py +++ b/pisa/stages/discr_sys/csv_hypersurfaces.py @@ -104,7 +104,7 @@ def __init__( expected_container_keys.append('errors') supported_reps = { - 'calc_mode': [MultiDimBinning], + 'calc_mode': MultiDimBinning, 'apply_mode': [MultiDimBinning, 'events'], } diff --git a/pisa/stages/discr_sys/hypersurfaces.py b/pisa/stages/discr_sys/hypersurfaces.py index 93e997ed9..de9b90c8d 100644 --- a/pisa/stages/discr_sys/hypersurfaces.py +++ b/pisa/stages/discr_sys/hypersurfaces.py @@ -115,7 +115,7 @@ def __init__( # this will cause a warning about missing presence of 'errors' # because hist adds this key during apply supported_reps = { - 'calc_mode': [MultiDimBinning], + 'calc_mode': MultiDimBinning, } # -- Initialize base class -- # super().__init__( diff --git a/pisa/stages/discr_sys/ultrasurfaces.py b/pisa/stages/discr_sys/ultrasurfaces.py index bf116777e..83534b558 100644 --- a/pisa/stages/discr_sys/ultrasurfaces.py +++ b/pisa/stages/discr_sys/ultrasurfaces.py @@ -190,7 +190,7 @@ def __init__( # pylint: disable=dangerous-default-value # evaluation only works on event-by-event basis supported_reps = { - 'calc_mode': ["events"], + 'calc_mode': "events", } # -- Initialize base class -- # super().__init__( diff --git a/pisa/stages/flux/barr_simple.py b/pisa/stages/flux/barr_simple.py index 19622ac4a..ebd3f8d1d 100644 --- a/pisa/stages/flux/barr_simple.py +++ b/pisa/stages/flux/barr_simple.py @@ -65,7 +65,7 @@ def __init__( ) # Implements no apply_function (implicit caching! FIXME) supported_reps = { - 'apply_mode': [None], + 'apply_mode': None, } # init base class super().__init__( diff --git a/pisa/stages/flux/hillasg.py b/pisa/stages/flux/hillasg.py index 7a77094ef..42d6ebf82 100644 --- a/pisa/stages/flux/hillasg.py +++ b/pisa/stages/flux/hillasg.py @@ -45,7 +45,7 @@ def __init__(self, **std_kwargs): ) # Implements no apply_function supported_reps = { - 'apply_mode': [None], + 'apply_mode': None, } # init base class super().__init__( diff --git a/pisa/stages/flux/honda_ip.py b/pisa/stages/flux/honda_ip.py index a57d5b480..b0ea296ef 100644 --- a/pisa/stages/flux/honda_ip.py +++ b/pisa/stages/flux/honda_ip.py @@ -50,7 +50,7 @@ def __init__( ) # Implements no apply_function supported_reps = { - 'apply_mode': [None], + 'apply_mode': None, } # init base class super().__init__( diff --git a/pisa/stages/flux/mceq_barr.py b/pisa/stages/flux/mceq_barr.py index 09888f850..ce6894a6b 100644 --- a/pisa/stages/flux/mceq_barr.py +++ b/pisa/stages/flux/mceq_barr.py @@ -188,7 +188,7 @@ def __init__( expected_container_keys.append('nubar_flux_nominal') # Implements no apply_function (implicit caching! FIXME) supported_reps = { - 'apply_mode': [None], + 'apply_mode': None, } # store args diff --git a/pisa/stages/flux/mceq_barr_red.py b/pisa/stages/flux/mceq_barr_red.py index 91d9312c0..9bed306c2 100644 --- a/pisa/stages/flux/mceq_barr_red.py +++ b/pisa/stages/flux/mceq_barr_red.py @@ -167,7 +167,7 @@ def __init__( ) # Implements no apply_function (implicit caching! FIXME) supported_reps = { - 'apply_mode': [None], + 'apply_mode': None, } # Using Honda for nominal flux. Keys should already exist diff --git a/pisa/stages/likelihood/generalized_llh_params.py b/pisa/stages/likelihood/generalized_llh_params.py index 82c610631..de2aee883 100644 --- a/pisa/stages/likelihood/generalized_llh_params.py +++ b/pisa/stages/likelihood/generalized_llh_params.py @@ -77,7 +77,7 @@ def __init__(self, ] # TODO: uses custom representations in setup_function supported_reps = { - 'apply_mode' : [MultiDimBinning] + 'apply_mode': MultiDimBinning } if not 'apply_mode' in std_kwargs: diff --git a/pisa/stages/osc/two_nu_osc.py b/pisa/stages/osc/two_nu_osc.py index 1a74bf3f8..ecb248388 100644 --- a/pisa/stages/osc/two_nu_osc.py +++ b/pisa/stages/osc/two_nu_osc.py @@ -54,7 +54,7 @@ def __init__(self, ) # Implements no setup_function+compute_function supported_reps = { - 'calc_mode': [None], + 'calc_mode': None, } # init base class super().__init__( diff --git a/pisa/stages/reco/resolutions.py b/pisa/stages/reco/resolutions.py index 0b48da064..82e63858d 100644 --- a/pisa/stages/reco/resolutions.py +++ b/pisa/stages/reco/resolutions.py @@ -58,9 +58,10 @@ def __init__( 'reco_coszen', 'pid', ) + # Implements no apply_function supported_reps = { - "calc_mode": ["events"], - "apply_mode": [None] + "calc_mode": "events", + "apply_mode": None } super().__init__( expected_params=expected_params, diff --git a/pisa/stages/reco/simple_param.py b/pisa/stages/reco/simple_param.py index 3c56f7e17..940868cf8 100644 --- a/pisa/stages/reco/simple_param.py +++ b/pisa/stages/reco/simple_param.py @@ -436,7 +436,7 @@ def __init__(self, ) # Implements no apply_function (TODO: does any calc_mode work?) supported_reps = { - 'apply_mode': [None], + 'apply_mode': None, } # init base class super().__init__( diff --git a/pisa/stages/utils/add_indices.py b/pisa/stages/utils/add_indices.py index 951d4e562..f778c9444 100644 --- a/pisa/stages/utils/add_indices.py +++ b/pisa/stages/utils/add_indices.py @@ -41,8 +41,8 @@ def __init__(self, ): # has no apply_function, but uses both in setup_function supported_reps = { - "calc_mode": ["events"], - "apply_mode": [MultiDimBinning], + "calc_mode": "events", + "apply_mode": MultiDimBinning, } # init base class super().__init__( diff --git a/pisa/stages/utils/adhoc_sys.py b/pisa/stages/utils/adhoc_sys.py index e3c141cdf..121f7f8b3 100644 --- a/pisa/stages/utils/adhoc_sys.py +++ b/pisa/stages/utils/adhoc_sys.py @@ -58,8 +58,8 @@ def __init__( 'weights', variable_name ] supported_reps = { - 'calc_mode': ['events'], - 'apply_mode': ['events'] + 'calc_mode': 'events', + 'apply_mode': 'events' } # init base class super().__init__( diff --git a/pisa/stages/utils/bootstrap.py b/pisa/stages/utils/bootstrap.py index a3210df81..ed37cd72a 100644 --- a/pisa/stages/utils/bootstrap.py +++ b/pisa/stages/utils/bootstrap.py @@ -62,7 +62,7 @@ def __init__( 'weights', ) supported_reps = { - 'calc_mode': ["events"], + 'calc_mode': "events", } # init base class super().__init__( diff --git a/pisa/stages/utils/kde.py b/pisa/stages/utils/kde.py index 669c82634..05078c454 100644 --- a/pisa/stages/utils/kde.py +++ b/pisa/stages/utils/kde.py @@ -89,8 +89,8 @@ def __init__( self.stashed_errors = None supported_reps = { - 'calc_mode': ['events'], - 'apply_mode': [MultiDimBinning], + 'calc_mode': 'events', + 'apply_mode': MultiDimBinning, } # init base class diff --git a/pisa/stages/utils/kfold.py b/pisa/stages/utils/kfold.py index 124686285..9a9e67173 100644 --- a/pisa/stages/utils/kfold.py +++ b/pisa/stages/utils/kfold.py @@ -74,7 +74,7 @@ def __init__( 'weights', ) supported_reps = { - 'calc_mode': ["events"], + 'calc_mode': "events", } # init base class super().__init__( diff --git a/pisa/stages/utils/set_variance.py b/pisa/stages/utils/set_variance.py index 59c60af0a..67cde3c90 100644 --- a/pisa/stages/utils/set_variance.py +++ b/pisa/stages/utils/set_variance.py @@ -33,10 +33,9 @@ def __init__( ): supported_reps = { - 'calc_mode': [MultiDimBinning], - 'apply_mode': [MultiDimBinning] + 'calc_mode': MultiDimBinning, + 'apply_mode': MultiDimBinning } - # init base class super().__init__( expected_params=(), diff --git a/pisa/stages/xsec/dis_sys.py b/pisa/stages/xsec/dis_sys.py index fe93fb05e..7a1259a16 100644 --- a/pisa/stages/xsec/dis_sys.py +++ b/pisa/stages/xsec/dis_sys.py @@ -75,7 +75,7 @@ def __init__( ) # explicitly sets "events" rep. in setup_function -> be transparent supported_reps = { - 'calc_mode': ["events"], + 'calc_mode': "events", } # init base class super().__init__( From f7735ebfcc02fea40cb8abde6b00470f6407ef06 Mon Sep 17 00:00:00 2001 From: T Ehrhardt Date: Sat, 25 Apr 2026 02:36:39 +0200 Subject: [PATCH 04/22] adapt all example pipeline configs and let Pipeline class accept their new configurations --- pisa/core/pipeline.py | 16 ++++++++++++---- .../settings/pipeline/IceCube_3y_data.cfg | 2 +- .../settings/pipeline/IceCube_3y_neutrinos.cfg | 5 ++--- .../pipeline/IceCube_3y_neutrinos_daemon.cfg | 2 +- .../resources/settings/pipeline/example.cfg | 4 ++-- .../resources/settings/pipeline/fast_example.cfg | 4 ++-- .../resources/settings/pipeline/osc_example.cfg | 4 ++-- .../settings/pipeline/varbin_example.cfg | 4 ++-- 8 files changed, 24 insertions(+), 17 deletions(-) diff --git a/pisa/core/pipeline.py b/pisa/core/pipeline.py index dd220a7f2..32a913027 100755 --- a/pisa/core/pipeline.py +++ b/pisa/core/pipeline.py @@ -701,13 +701,17 @@ def assert_apply_modes_consistency(self): if isinstance(s.apply_mode, MultiDimBinning) and ref_binning is None: ref_binning = s.apply_mode ref_name = f"{s.stage_name}.{s.service_name}" - if isinstance(self.output_binning, MultiDimBinning) and ref_binning != self.output_binning: + if (isinstance(self.output_binning, MultiDimBinning) and + ref_binning != self.output_binning): raise ValueError( f"Stage {ref_name} has '{s.apply_mode}' as apply_mode, which " f"deviates from the pipeline output binning {self.output_binning}. " "This configuration would result in an unreliable pipeline output." ) - elif ref_binning is not None and s.apply_mode != ref_binning: + elif (ref_binning is not None and s.apply_mode is not None and + s.apply_mode != ref_binning): + # TODO: In case apply_mode=None, check whether calc_mode == ref_binning? + # (see also TODO in assert_varbinning_compat). raise ValueError( f"Stage {s.stage_name}.{s.service_name} has '{s.apply_mode}'" " as apply_mode, which deviates from a previously detected " @@ -724,11 +728,15 @@ def assert_varbinning_compat(self): ------ ValueError if at least one stage has apply_mode!='events' - """ incompat = [] for s in self.stages: - if not s.apply_mode == 'events': + # TODO: Check below still allows pipeline setups with any calc_mode, + # even though we cannot prevent compute to produce the service's + # output in a binned representation. Is this all we can and should + # do in terms of validating the general setup? + if s.apply_mode is not None and s.apply_mode != 'events': + # not None: apply_function is implemented -> require 'events' incompat.append(s) if len(incompat) >= 1: str_incompat = ", ".join( diff --git a/pisa_examples/resources/settings/pipeline/IceCube_3y_data.cfg b/pisa_examples/resources/settings/pipeline/IceCube_3y_data.cfg index f1c44a704..17e5d5c62 100644 --- a/pisa_examples/resources/settings/pipeline/IceCube_3y_data.cfg +++ b/pisa_examples/resources/settings/pipeline/IceCube_3y_data.cfg @@ -23,5 +23,5 @@ output_key = weights events_file = events/IceCube_3y_oscillations/data.csv.bz2 +# apply_mode must be None calc_mode = events -apply_mode = dragon_datarelease \ No newline at end of file diff --git a/pisa_examples/resources/settings/pipeline/IceCube_3y_neutrinos.cfg b/pisa_examples/resources/settings/pipeline/IceCube_3y_neutrinos.cfg index f6fa5b46f..493d1fdc5 100644 --- a/pisa_examples/resources/settings/pipeline/IceCube_3y_neutrinos.cfg +++ b/pisa_examples/resources/settings/pipeline/IceCube_3y_neutrinos.cfg @@ -47,14 +47,13 @@ data_dict = {'true_energy':'true_energy', \ [flux.honda_ip] calc_mode = true_allsky_fine -apply_mode = events param.flux_table = flux/honda-2015-spl-solmin-aa.d [flux.barr_simple] +# apply_mode must be None calc_mode = true_allsky_fine -apply_mode = events # * nu/nubar ratio param.nu_nubar_ratio = 1.0 +/- 0.1 @@ -137,7 +136,7 @@ param.ih.deltam31.range = [-0.007, -0.001] * units.eV**2 [aeff.aeff] -calc_mode = events +# calc_mode must be None apply_mode = events param.livetime = 2.5 * units.common_year diff --git a/pisa_examples/resources/settings/pipeline/IceCube_3y_neutrinos_daemon.cfg b/pisa_examples/resources/settings/pipeline/IceCube_3y_neutrinos_daemon.cfg index 102088d61..c52132be4 100644 --- a/pisa_examples/resources/settings/pipeline/IceCube_3y_neutrinos_daemon.cfg +++ b/pisa_examples/resources/settings/pipeline/IceCube_3y_neutrinos_daemon.cfg @@ -203,7 +203,7 @@ param.ih.deltam31.range = [-0.007, -0.001] * units.eV**2 [aeff.aeff] -calc_mode = events +# calc_mode must be None apply_mode = events param.livetime = 2.5 * units.common_year diff --git a/pisa_examples/resources/settings/pipeline/example.cfg b/pisa_examples/resources/settings/pipeline/example.cfg index b5f7587ee..6bcd093ba 100644 --- a/pisa_examples/resources/settings/pipeline/example.cfg +++ b/pisa_examples/resources/settings/pipeline/example.cfg @@ -83,8 +83,8 @@ data_dict = { [flux.barr_simple] +# apply_mode must be None calc_mode = events -apply_mode = events # nu/nubar ratio param.nu_nubar_ratio = 1.0 +/- 0.1 @@ -212,7 +212,7 @@ param.ih.deltam31.range = [-0.007, -0.001] * units.eV**2 [aeff.aeff] -calc_mode = events +# calc_mode must be None apply_mode = events # Detector livetime this template should be weighted to represent diff --git a/pisa_examples/resources/settings/pipeline/fast_example.cfg b/pisa_examples/resources/settings/pipeline/fast_example.cfg index 68385ba7d..06c6d2e26 100644 --- a/pisa_examples/resources/settings/pipeline/fast_example.cfg +++ b/pisa_examples/resources/settings/pipeline/fast_example.cfg @@ -83,8 +83,8 @@ data_dict = { [flux.barr_simple] +# apply_mode must be None calc_mode = events -apply_mode = events # nu/nubar ratio param.nu_nubar_ratio = 1.0 +/- 0.1 @@ -212,7 +212,7 @@ param.ih.deltam31.range = [-0.007, -0.001] * units.eV**2 [aeff.aeff] -calc_mode = events +# calc_mode must be None apply_mode = events # Detector livetime this template should be weighted to represent diff --git a/pisa_examples/resources/settings/pipeline/osc_example.cfg b/pisa_examples/resources/settings/pipeline/osc_example.cfg index dbeab52ca..511821134 100644 --- a/pisa_examples/resources/settings/pipeline/osc_example.cfg +++ b/pisa_examples/resources/settings/pipeline/osc_example.cfg @@ -11,7 +11,7 @@ [pipeline] -# Define order of stages to be excecuted one after another, and specify the +# Define order of stages to be executed one after another, and specify the # service to use for each of them as stage1:serviceA, stage2:serviceB, ... name = neutrinos @@ -46,8 +46,8 @@ param.random = False [flux.barr_simple] +# apply_mode must be None calc_mode = calc_grid -apply_mode = calc_grid # nu/nubar ratio param.nu_nubar_ratio = 1.0 +/- 0.1 diff --git a/pisa_examples/resources/settings/pipeline/varbin_example.cfg b/pisa_examples/resources/settings/pipeline/varbin_example.cfg index af85d977d..3fcb07efb 100644 --- a/pisa_examples/resources/settings/pipeline/varbin_example.cfg +++ b/pisa_examples/resources/settings/pipeline/varbin_example.cfg @@ -43,8 +43,8 @@ data_dict = { [flux.barr_simple] +# apply_mode must be None calc_mode = events -apply_mode = events param.nu_nubar_ratio = 1.0 +/- 0.1 param.nu_nubar_ratio.fixed = True @@ -130,7 +130,7 @@ param.ih.deltam31.range = [-0.007, -0.001] * units.eV**2 [aeff.aeff] -calc_mode = events +# calc_mode must be None apply_mode = events param.livetime = 2.5 * units.common_year From 5643a6ba219bb3a4ae5794a94a5371fbd5031641 Mon Sep 17 00:00:00 2001 From: T Ehrhardt Date: Sat, 25 Apr 2026 03:01:40 +0200 Subject: [PATCH 05/22] few small doc fixes --- pisa/stages/flux/astrophysical.py | 2 +- pisa/stages/osc/globes.py | 1 + pisa/stages/osc/prob3.py | 15 +++++---------- pisa/stages/osc/two_nu_osc.py | 2 +- pisa/stages/xsec/correct_charm_y.py | 4 ++-- pisa/stages/xsec/dis_sys.py | 1 + pisa/stages/xsec/nutau_xsec.py | 7 ++++--- 7 files changed, 15 insertions(+), 17 deletions(-) diff --git a/pisa/stages/flux/astrophysical.py b/pisa/stages/flux/astrophysical.py index ebd496b3d..6603d9bef 100644 --- a/pisa/stages/flux/astrophysical.py +++ b/pisa/stages/flux/astrophysical.py @@ -29,8 +29,8 @@ class astrophysical(Stage): # pylint: disable=invalid-name ----- Expected container keys are:: - "true_energy", "true_coszen", "initial_weights" + "true_energy", "true_coszen", "initial_weights" TODO: flavor ratio as a parameter? Save for later. """ diff --git a/pisa/stages/osc/globes.py b/pisa/stages/osc/globes.py index 07b5549b2..2e3a88ead 100644 --- a/pisa/stages/osc/globes.py +++ b/pisa/stages/osc/globes.py @@ -61,6 +61,7 @@ class globes(Stage): # pylint: disable=invalid-name ----- Expected container keys are:: + "true_energy", "true_coszen", "nubar", "flav", "nu_flux", "weights" """ diff --git a/pisa/stages/osc/prob3.py b/pisa/stages/osc/prob3.py index 05246111a..71f54c2a8 100644 --- a/pisa/stages/osc/prob3.py +++ b/pisa/stages/osc/prob3.py @@ -38,13 +38,9 @@ class prob3(Stage): # pylint: disable=invalid-name r""" Extended Prob3-like oscillations class. - Expected container keys are: - "true_energy", - "true_coszen", - "nubar", - "flav", - "nu_flux", - "weights" + Expected container keys are:: + + "true_energy", "true_coszen", "nubar", "flav", "nu_flux", "weights" Parameters ---------- @@ -125,8 +121,8 @@ class prob3(Stage): # pylint: disable=invalid-name one. See e.g. https://inspirehep.net/literature/2658147 (JHEP 08(2023)101) for such an analysis in the literature. - params - expected params are .. :: + params : ParamSet + Must have parameters:: detector_depth : float earth_model : PREM file path @@ -166,7 +162,6 @@ class prob3(Stage): # pylint: disable=invalid-name **std_kwargs Other kwargs are handled by Stage - """ def __init__( diff --git a/pisa/stages/osc/two_nu_osc.py b/pisa/stages/osc/two_nu_osc.py index ecb248388..99e6fba68 100644 --- a/pisa/stages/osc/two_nu_osc.py +++ b/pisa/stages/osc/two_nu_osc.py @@ -34,7 +34,7 @@ class two_nu_osc(Stage): # pylint: disable=invalid-name "true_energy", "true_coszen", "nu_flux", "weights" - For two-neutrino model, there is only one mass-splitting term + For two-neutrino model, there is only one mass-splitting term. Atmospheric mixing angle is approximated by theta (sin^2(2*theta)) """ diff --git a/pisa/stages/xsec/correct_charm_y.py b/pisa/stages/xsec/correct_charm_y.py index 52b26adc1..d9239f7de 100644 --- a/pisa/stages/xsec/correct_charm_y.py +++ b/pisa/stages/xsec/correct_charm_y.py @@ -26,8 +26,8 @@ class correct_charm_y(Stage): nubar_cc_container_keys : list of strings list of all anti-neutrino charged current container keys - Notes: - ------ + Notes + ----- THIS STAGE IS FOR MC TESTING ONLY - do *NOT* use in real analysis!!! Expected container keys are:: diff --git a/pisa/stages/xsec/dis_sys.py b/pisa/stages/xsec/dis_sys.py index 7a1259a16..e770d6b0a 100644 --- a/pisa/stages/xsec/dis_sys.py +++ b/pisa/stages/xsec/dis_sys.py @@ -37,6 +37,7 @@ class dis_sys(Stage): # pylint: disable=invalid-name params : ParamSet Must have parameters:: + dis_csms : quantity (dimensionless) [if combine_components=True] or dis_csms_tot, dis_csms_diff : quantity (dimensionless) [if combine_components=False] diff --git a/pisa/stages/xsec/nutau_xsec.py b/pisa/stages/xsec/nutau_xsec.py index 1bbac57ae..5615be29f 100644 --- a/pisa/stages/xsec/nutau_xsec.py +++ b/pisa/stages/xsec/nutau_xsec.py @@ -1,9 +1,9 @@ """ A stage to apply nutau cross-section uncertainties as implemented in -https://github.com/marialiubarska/nutau_xsec +https://github.com/marialiubarska/nutau_xsec. It interpolates between different nutau CC cross section models as compared in this paper: -https://arxiv.org/pdf/1008.2984.pdf?fname=cm&font=TypeI +https://arxiv.org/pdf/1008.2984.pdf """ import pickle @@ -27,7 +27,7 @@ class nutau_xsec(Stage): # pylint: disable=invalid-name Parameters ---------- - xsec_file : (string) + xsec_file : string Path to pickled interpolated function. Default is included in PISA in `pisa_examples/resources/cross_sections/interp_nutau_xsec_protocol2.pckl` @@ -42,6 +42,7 @@ class nutau_xsec(Stage): # pylint: disable=invalid-name ----- Expected container keys are:: + "true_energy", "weights" """ From 9ef0965b16d0144951057f3aeea05eabf1b03cdc Mon Sep 17 00:00:00 2001 From: T Ehrhardt Date: Wed, 29 Apr 2026 19:11:52 +0200 Subject: [PATCH 06/22] these shouldn't have been there --- pisa/stages/flux/barr_simple_backup.py | 293 ------------------ .../flux/distribution_maker_outputs.json.bz2 | Bin 27021 -> 0 bytes 2 files changed, 293 deletions(-) delete mode 100644 pisa/stages/flux/barr_simple_backup.py delete mode 100644 pisa/stages/flux/distribution_maker_outputs.json.bz2 diff --git a/pisa/stages/flux/barr_simple_backup.py b/pisa/stages/flux/barr_simple_backup.py deleted file mode 100644 index ec4920702..000000000 --- a/pisa/stages/flux/barr_simple_backup.py +++ /dev/null @@ -1,293 +0,0 @@ -""" -Stage to implement the old PISA/oscfit flux systematics -""" - -from __future__ import absolute_import, print_function, division - -import math - -import numpy as np -from numba import guvectorize, cuda, jit, njit, void - -from pisa import FTYPE, TARGET -from pisa.core.param import Param, ParamSet -from pisa.core.stage import Stage -from pisa.utils.profiler import profile -from pisa.utils.numba_tools import myjit, myjit_2, ftype, FX, IX -from pisa.utils.barr_parameterization import modRatioNuBar, modRatioUpHor - -__all__ = ['barr_simple', 'apply_ratio_scale', 'spectral_index_scale', - 'apply_sys_kernel', 'apply_sys_vectorized', 'init_test'] - - -class barr_simple(Stage): # pylint: disable=invalid-name - """ - stage to apply Barr style flux uncertainties - uses parameterisations of plots from Barr 2006 paper - - Parameters - ---------- - params - Expected params are .. :: - - nue_numu_ratio : quantity (dimensionless) - nu_nubar_ratio : quantity (dimensionless) - delta_index : quantity (dimensionless) - Barr_uphor_ratio : quantity (dimensionless) - Barr_nu_nubar_ratio : quantity (dimensionless) - - Expected container keys are .. :: - - "true_energy" - "true_coszen" - "nu_flux_nominal" - "nubar_flux_nominal" - "nubar" - - """ - def __init__( - self, - **std_kwargs, - ): - expected_params = ( - "nue_numu_ratio", - "nu_nubar_ratio", - "delta_index", - "Barr_uphor_ratio", - "Barr_nu_nubar_ratio", - ) - - expected_container_keys = ( - "true_energy", - "true_coszen", - "nu_flux_nominal", - "nubar_flux_nominal", - "nubar" - ) - - # init base class - super().__init__( - expected_params=expected_params, - expected_container_keys=expected_container_keys, - **std_kwargs, - ) - - def setup_function(self): - self.data.representation = self.calc_mode - for container in self.data: - container["nu_flux"] = np.empty((container.size, 2), dtype=FTYPE) - - @profile - def compute_function(self): - self.data.representation = self.calc_mode - - # If a parameter below has not been modified by minimizer, - # its magnitude below will be a native float, otherwise np.float64, - # so convert to expected FTYPE - nue_numu_ratio = FTYPE(self.params.nue_numu_ratio.value.m_as("dimensionless")) - nu_nubar_ratio = FTYPE(self.params.nu_nubar_ratio.value.m_as("dimensionless")) - delta_index = FTYPE(self.params.delta_index.value.m_as("dimensionless")) - Barr_uphor_ratio = FTYPE(self.params.Barr_uphor_ratio.value.m_as("dimensionless")) - Barr_nu_nubar_ratio = FTYPE(self.params.Barr_nu_nubar_ratio.value.m_as("dimensionless")) - - for container in self.data: - apply_sys_vectorized( - container["true_energy"], - container["true_coszen"], - container["nu_flux_nominal"], - container["nubar_flux_nominal"], - container["nubar"], - nue_numu_ratio, - nu_nubar_ratio, - delta_index, - Barr_uphor_ratio, - Barr_nu_nubar_ratio, - out=container["nu_flux"], - ) - container.mark_changed('nu_flux') - - -#@njit(f"void({FX}, b1, {FX}, {FX}, {FX}[:])", inline='always') -@myjit_2(f"void({FX}, b1, {FX}, {FX}, {FX}[:])", inline="always") -def apply_ratio_scale(ratio_scale, sum_constant, in1, in2, out): - """ apply ratio scale to flux values - - Parameters - ---------- - ratio_scale : float - - sum_constant : bool - if Ture, then the sum of the new flux will be identical to the old flux - - in1 : float - - in2 : float - - out : array - - """ - if in1 == 0. and in2 == 0.: - out[0] = 0. - out[1] = 0. - return - - flag = 1 if sum_constant else 0 - - # when sum_constant = True - # just a single division operation - single_denom = in2 + ratio_scale * in1 - inv_denom = 1.0 / single_denom - - orig_sum = in1 + in2 - new = orig_sum * inv_denom - out0 = ratio_scale * in1 * new - out1 = new - - # sum_constant = False - out0_sum_not_const = ratio_scale * in1 - out1_sum_not_const = in2 - - # finally assign - out[0] = (1 - flag) * out0_sum_not_const + flag * out0 - out[1] = (1 - flag) * out1_sum_not_const + flag * out1 - - -@myjit -def spectral_index_scale(true_energy, egy_pivot, delta_index): - """ calculate spectral index scale """ - return math.pow((true_energy / egy_pivot), delta_index) - - -@myjit -def apply_sys_kernel( - true_energy, - true_coszen, - nu_flux_nominal, - nubar_flux_nominal, - nubar, - nue_numu_ratio, - nu_nubar_ratio, - delta_index, - Barr_uphor_ratio, - Barr_nu_nubar_ratio, - out, -): - # nue/numu ratio - new_nu_flux = cuda.local.array(shape=(2), dtype=ftype) - new_nubar_flux = cuda.local.array(2, dtype=ftype) - apply_ratio_scale( - nue_numu_ratio, True, nu_flux_nominal[0], nu_flux_nominal[1], new_nu_flux - ) - apply_ratio_scale( - nue_numu_ratio, - True, - nubar_flux_nominal[0], - nubar_flux_nominal[1], - new_nubar_flux, - ) - - # apply flux systematics - # spectral idx - idx_scale = spectral_index_scale(true_energy, 24.0900951261, delta_index) - new_nu_flux[0] *= idx_scale - new_nu_flux[1] *= idx_scale - new_nubar_flux[0] *= idx_scale - new_nubar_flux[1] *= idx_scale - - # nu/nubar ratio - new_nue_flux = cuda.local.array(2, dtype=ftype) - new_numu_flux = cuda.local.array(2, dtype=ftype) - apply_ratio_scale( - nu_nubar_ratio, True, new_nu_flux[0], new_nubar_flux[0], new_nue_flux - ) - apply_ratio_scale( - nu_nubar_ratio, True, new_nu_flux[1], new_nubar_flux[1], new_numu_flux - ) - if nubar < 0: - out[0] = new_nue_flux[1] - out[1] = new_numu_flux[1] - else: - out[0] = new_nue_flux[0] - out[1] = new_numu_flux[0] - - # Barr flux - out[0] *= modRatioNuBar(nubar, 0, true_energy, true_coszen, Barr_nu_nubar_ratio) - out[1] *= modRatioNuBar(nubar, 1, true_energy, true_coszen, Barr_nu_nubar_ratio) - - out[0] *= modRatioUpHor(0, true_energy, true_coszen, Barr_uphor_ratio) - out[1] *= modRatioUpHor(1, true_energy, true_coszen, Barr_uphor_ratio) - - -@guvectorize([f"({FX}, {FX}, {FX}[:], {FX}[:], {IX}, {FX}, {FX}, {FX}, {FX}, {FX}, {FX}[:])"], "(),(),(d),(d),(),(),(),(),(),()->(d)", target=TARGET) -def apply_sys_vectorized( - true_energy, - true_coszen, - nu_flux_nominal, - nubar_flux_nominal, - nubar, - nue_numu_ratio, - nu_nubar_ratio, - delta_index, - Barr_uphor_ratio, - Barr_nu_nubar_ratio, - out, -): - # nue/numu ratio - new_nu_flux = np.empty(shape=(2), dtype=ftype) - new_nubar_flux = np.empty(2, dtype=ftype) - apply_ratio_scale( - nue_numu_ratio, True, nu_flux_nominal[0], nu_flux_nominal[1], new_nu_flux - ) - apply_ratio_scale( - nue_numu_ratio, - True, - nubar_flux_nominal[0], - nubar_flux_nominal[1], - new_nubar_flux, - ) - - # apply flux systematics - # spectral idx - #idx_scale = spectral_index_scale(true_energy, 24.0900951261, delta_index) - energy_pivot = 24.0900951261 - idx_scale = math.exp(delta_index * math.log(true_energy / energy_pivot)) - new_nu_flux[0] *= idx_scale - new_nu_flux[1] *= idx_scale - new_nubar_flux[0] *= idx_scale - new_nubar_flux[1] *= idx_scale - - # nu/nubar ratio - new_nue_flux = np.empty(2, dtype=ftype) - new_numu_flux = np.empty(2, dtype=ftype) - apply_ratio_scale( - nu_nubar_ratio, True, new_nu_flux[0], new_nubar_flux[0], new_nue_flux - ) - apply_ratio_scale( - nu_nubar_ratio, True, new_nu_flux[1], new_nubar_flux[1], new_numu_flux - ) - if nubar < 0: - out[0] = new_nue_flux[1] - out[1] = new_numu_flux[1] - else: - out[0] = new_nue_flux[0] - out[1] = new_numu_flux[0] - - # Barr flux - out[0] *= modRatioNuBar(nubar, 0, true_energy, true_coszen, Barr_nu_nubar_ratio) - out[1] *= modRatioNuBar(nubar, 1, true_energy, true_coszen, Barr_nu_nubar_ratio) - - out[0] *= modRatioUpHor(0, true_energy, true_coszen, Barr_uphor_ratio) - out[1] *= modRatioUpHor(1, true_energy, true_coszen, Barr_uphor_ratio) - - -def init_test(**param_kwargs): - """Instantiation example""" - param_set = ParamSet([ - Param(name="nue_numu_ratio", value=1.0, **param_kwargs), - Param(name="nu_nubar_ratio", value=1.0, **param_kwargs), - Param(name="delta_index", value=0.0, **param_kwargs), - Param(name="Barr_uphor_ratio", value=0.0, **param_kwargs), - Param(name="Barr_nu_nubar_ratio", value=0.0, **param_kwargs) - ]) - - return barr_simple(params=param_set) diff --git a/pisa/stages/flux/distribution_maker_outputs.json.bz2 b/pisa/stages/flux/distribution_maker_outputs.json.bz2 deleted file mode 100644 index 133eefbeb84a414423931b081662bfde3dfe5204..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27021 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 From 41311aeee9743854a1f379e931360dc78171d190 Mon Sep 17 00:00:00 2001 From: T Ehrhardt Date: Wed, 29 Apr 2026 21:57:53 +0200 Subject: [PATCH 07/22] adapt test_Pipeline() function --- pisa/core/pipeline.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/pisa/core/pipeline.py b/pisa/core/pipeline.py index 32a913027..c88c046ea 100755 --- a/pisa/core/pipeline.py +++ b/pisa/core/pipeline.py @@ -42,7 +42,7 @@ __author__ = "J.L. Lanfranchi, P. Eller" -__license__ = """Copyright (c) 2014-2025, The IceCube Collaboration +__license__ = """Copyright (c) 2014-2026, The IceCube Collaboration Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -898,12 +898,13 @@ def test_Pipeline(): # binned_apply_mode = pipeline.output_binning assert isinstance(binned_apply_mode, MultiDimBinning) - pipeline.stages[1].apply_mode = binned_apply_mode + # osc.prob3 apply_mode: + pipeline.stages[2].apply_mode = binned_apply_mode try: out = pipeline.get_outputs() except ValueError: - # Needs to fail: going from a binned output (after flux) to events - # (after osc.) + # Needs to fail: going from a binned output (after osc.) to events + # (after aeff) pass else: assert False @@ -911,7 +912,8 @@ def test_Pipeline(): # # Test: passing a custom output binning to get_outputs # - pipeline.stages[1].apply_mode = "events" + # reset apply mode + pipeline.stages[2].apply_mode = "events" # first get the original event distribution as reference out = pipeline.get_outputs() counts_tot = sum(out.num_entries.values()) @@ -928,7 +930,7 @@ def test_Pipeline(): # a split into two event selections has to result in two MapSets assert len(out) == 2 # a binned apply_mode has to result in a ValueError - # first get a pre-existing binning + # first get a pre-existing binning (set calc_mode of osc.prob3 as apply_mode) binned_calc_mode = p.stages[2].calc_mode assert isinstance(binned_calc_mode, MultiDimBinning) p.stages[2].apply_mode = binned_calc_mode From 7aa6365be22f05649efaba243cd0469152a48b83 Mon Sep 17 00:00:00 2001 From: T Ehrhardt Date: Fri, 15 May 2026 19:06:01 +0200 Subject: [PATCH 08/22] fix bug that allowed running pipeline with invalid (None) stage modes --- pisa/core/pipeline.py | 29 ++++++++++++++++++++++++++++- pisa/core/stage.py | 27 +++++++++++++++++++-------- 2 files changed, 47 insertions(+), 9 deletions(-) diff --git a/pisa/core/pipeline.py b/pisa/core/pipeline.py index dd220a7f2..f7c19a553 100755 --- a/pisa/core/pipeline.py +++ b/pisa/core/pipeline.py @@ -899,11 +899,38 @@ def test_Pipeline(): pass else: assert False + # reset apply_mode + pipeline.stages[1].apply_mode = "events" + + # + # Test: prevent computing outputs with representations deviating + # from supported ones in simple_data_loader + # First, setter mustn't accept apply_mode = None when it was != None + try: + pipeline.stages[0].apply_mode = None + except ValueError: + pass + else: + assert False + # now we initialise with simple_data_loader apply_mode set to None (has to work) + config = parse_pipeline_config("settings/pipeline/example.cfg") + config[list(config.keys())[1]]['apply_mode'] = None + invalid_pipeline = Pipeline(config) + # try to get outputs: has to fail, as apply_mode = None not supported by + # simple_data_loader + try: + _ = invalid_pipeline.get_outputs() + except ValueError: + pass + else: + assert False + # need to be able to set from None -> "events" and then get outputs + invalid_pipeline.stages[0].apply_mode = "events" + _ = invalid_pipeline.get_outputs() # # Test: passing a custom output binning to get_outputs # - pipeline.stages[1].apply_mode = "events" # first get the original event distribution as reference out = pipeline.get_outputs() counts_tot = sum(out.num_entries.values()) diff --git a/pisa/core/stage.py b/pisa/core/stage.py index 9988e00d0..c504a2eb8 100644 --- a/pisa/core/stage.py +++ b/pisa/core/stage.py @@ -157,10 +157,10 @@ def __init__( supported_reps['apply_mode'] = list(Container.array_representations) + [MultiDimBinning] self.supported_reps = supported_reps - self._check_representation(rep=calc_mode, mode='calc_mode', allow_None=True) + self._check_representation(rep=calc_mode, mode='calc_mode', always_allow_none=True) self._calc_mode = calc_mode - self._check_representation(rep=apply_mode, mode='apply_mode', allow_None=True) + self._check_representation(rep=apply_mode, mode='apply_mode', always_allow_none=True) self._apply_mode = apply_mode self._error_method = error_method @@ -274,7 +274,8 @@ def calc_mode(self, value): in standalone mode, rerun `setup()` if has already been executed at least once.""" if value != self.calc_mode: - self._check_representation(rep=value, mode='calc_mode') + self._check_representation(rep=value, mode='calc_mode', + always_allow_none=False) self._calc_mode = value if self.in_standalone_mode and self.param_hash is not None: # Only in standalone mode: repeat setup automatically only if @@ -308,14 +309,15 @@ def apply_mode(self): def apply_mode(self, value): """Set `apply_mode` after checking the validity of `value`""" if value != self.apply_mode: - self._check_representation(rep=value, mode='apply_mode') + self._check_representation(rep=value, mode='apply_mode', + always_allow_none=False) self._apply_mode = value - def _check_representation(self, rep, mode, allow_None=False): + def _check_representation(self, rep, mode, always_allow_none=False): if rep is None: - # allow_None is used to always allow None in the init of a stage. - # Should be removed once stages explicitely set modes. - if None not in self.supported_reps[mode] and not allow_None: + # `always_allow_none` is used to always allow None in the init of a stage + # (allows writing init_test functions that don't already decide on modes) + if None not in self.supported_reps[mode] and not always_allow_none: raise ValueError( f"{mode} {rep} is not supported by {self.stage_name}" f".{self.service_name}" @@ -465,6 +467,9 @@ def setup(self): self._check_exp_keys_in_data(error_on_missing=False) + # check that current calc_mode is compatible with supported reps. at all + self._check_representation(rep=self.calc_mode, mode='calc_mode', + always_allow_none=False) if self.calc_mode is not None: self.data.representation = self.calc_mode @@ -492,6 +497,9 @@ def compute(self): logging.trace("cached output") return + # be overly cautious and check consistency of current calc_mode + self._check_representation(rep=self.calc_mode, mode='calc_mode', + always_allow_none=False) if self.calc_mode is not None: self.data.representation = self.calc_mode @@ -510,6 +518,9 @@ def compute_function(self): def apply(self): + # be overly cautious and check consistency of current apply_mode + self._check_representation(rep=self.apply_mode, mode='apply_mode', + always_allow_none=False) if self.apply_mode is not None: self.data.representation = self.apply_mode From 138f0847d5990ef9764068edb17abc2ee56bdece Mon Sep 17 00:00:00 2001 From: T Ehrhardt Date: Fri, 15 May 2026 19:46:54 +0200 Subject: [PATCH 09/22] minor fixes --- pisa/core/pipeline.py | 6 ++---- pisa/stages/data/csv_loader.py | 8 ++------ .../resources/settings/pipeline/IceCube_3y_neutrinos.cfg | 1 + 3 files changed, 5 insertions(+), 10 deletions(-) diff --git a/pisa/core/pipeline.py b/pisa/core/pipeline.py index eac2aefe8..e97b3e10f 100755 --- a/pisa/core/pipeline.py +++ b/pisa/core/pipeline.py @@ -908,8 +908,8 @@ def test_Pipeline(): pass else: assert False - # reset apply_mode - pipeline.stages[1].apply_mode = "events" + # reset apply mode + pipeline.stages[2].apply_mode = "events" # # Test: prevent computing outputs with representations deviating @@ -940,8 +940,6 @@ def test_Pipeline(): # # Test: passing a custom output binning to get_outputs # - # reset apply mode - pipeline.stages[2].apply_mode = "events" # first get the original event distribution as reference out = pipeline.get_outputs() counts_tot = sum(out.num_entries.values()) diff --git a/pisa/stages/data/csv_loader.py b/pisa/stages/data/csv_loader.py index 9987f63fc..00e028b28 100644 --- a/pisa/stages/data/csv_loader.py +++ b/pisa/stages/data/csv_loader.py @@ -92,10 +92,9 @@ def __init__( self.dis_idx = None self.scale_aeff = scale_aeff - # apply_function sets representation to "events", so only accept that - # to be transparent (TODO: any calc_mode fine?) supported_reps = { - 'apply_mode': "events", + "calc_mode": "events", + "apply_mode": "events", } # init base class super().__init__( @@ -167,9 +166,6 @@ def setup_function(self): ) def apply_function(self): - # reset data representation to events - self.data.representation = "events" - # reset weights to initial weights prior to downstream stages running for container in self.data: container['weights'] = np.copy(container['initial_weights']) diff --git a/pisa_examples/resources/settings/pipeline/IceCube_3y_neutrinos.cfg b/pisa_examples/resources/settings/pipeline/IceCube_3y_neutrinos.cfg index 493d1fdc5..286c248a3 100644 --- a/pisa_examples/resources/settings/pipeline/IceCube_3y_neutrinos.cfg +++ b/pisa_examples/resources/settings/pipeline/IceCube_3y_neutrinos.cfg @@ -31,6 +31,7 @@ output_key = weights, errors [data.csv_loader] +calc_mode = events apply_mode = events output_names = nue_cc, numu_cc, nutau_cc, nue_nc, numu_nc, nutau_nc, nuebar_cc, numubar_cc, nutaubar_cc, nuebar_nc, numubar_nc, nutaubar_nc From 70b0ad9c9111cdf1ea458335456e7ce1e181c585 Mon Sep 17 00:00:00 2001 From: T Ehrhardt Date: Sun, 24 May 2026 01:12:33 +0200 Subject: [PATCH 10/22] new Stage attributes (has_setup, has_compute, has_apply) indicating overriding of abstract base methods --- pisa/core/pipeline.py | 4 +--- pisa/core/stage.py | 7 +++++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/pisa/core/pipeline.py b/pisa/core/pipeline.py index e97b3e10f..8f2bb9224 100755 --- a/pisa/core/pipeline.py +++ b/pisa/core/pipeline.py @@ -143,9 +143,7 @@ def tabulate(self, tablefmt="plain"): table = [] for i, s in enumerate(self.stages): table.append([i, s.__class__.__name__, s.calc_mode, s.apply_mode]) - table[-1].append(s.setup_function.__func__.__module__ == s.__class__.__module__) - table[-1].append(s.compute_function.__func__.__module__ == s.__class__.__module__) - table[-1].append(s.apply_function.__func__.__module__ == s.__class__.__module__) + table[-1] += [s.has_setup, s.has_compute, s.has_apply] table[-1] += [len(s.params.fixed), len(s.params.free)] return tabulate(table, headers, tablefmt=tablefmt, colalign=colalign) diff --git a/pisa/core/stage.py b/pisa/core/stage.py index 320d55c49..6a32af9ea 100644 --- a/pisa/core/stage.py +++ b/pisa/core/stage.py @@ -190,6 +190,13 @@ def __init__( """Data based on which stage may make computations and which it may modify""" + self.has_setup = type(self).setup_function is not Stage.setup_function + """Whether subclass overrides :py:meth:`setup_function`""" + self.has_compute = type(self).compute_function is not Stage.compute_function + """Whether subclass overrides :py:meth:`compute_function`""" + self.has_apply = type(self).apply_function is not Stage.apply_function + """Whether subclass overrides :py:meth:`apply_function`""" + def __repr__(self): return 'Stage "%s"'%(self.__class__.__name__) From f71437e354405401d047897ff86a1012c80455ae Mon Sep 17 00:00:00 2001 From: T Ehrhardt Date: Sun, 24 May 2026 02:13:50 +0200 Subject: [PATCH 11/22] use new Stage attributes to set supported reps. for given Stage mode by default, unless already set by subclass --- pisa/core/stage.py | 40 ++++++++++++++----- .../pipeline/IceCube_3y_neutrinos_daemon.cfg | 1 - 2 files changed, 29 insertions(+), 12 deletions(-) diff --git a/pisa/core/stage.py b/pisa/core/stage.py index 6a32af9ea..a9142117b 100644 --- a/pisa/core/stage.py +++ b/pisa/core/stage.py @@ -148,22 +148,47 @@ def __init__( else: self._debug_mode = None + self.has_setup = type(self).setup_function is not Stage.setup_function + """Whether subclass overrides :py:meth:`setup_function`""" + self.has_compute = type(self).compute_function is not Stage.compute_function + """Whether subclass overrides :py:meth:`compute_function`""" + self.has_apply = type(self).apply_function is not Stage.apply_function + """Whether subclass overrides :py:meth:`apply_function`""" + + # Subclass might not have set supported_reps attribute if supported_reps is None: supported_reps = {} assert isinstance(supported_reps, Mapping) - for mode_str in ['calc_mode', 'apply_mode']: + mode_keys = ('calc_mode', 'apply_mode') + assert set(supported_reps.keys()).issubset(mode_keys) + # Default configuration of supported representations, using information + # about overridden methods, unless subclass already defined them + # (don't question the values chosen by the subclass) + for mode_str in mode_keys: if mode_str not in supported_reps: - # reps for this mode not yet defined -> allow all - supported_reps[mode_str] = list(Container.array_representations) + [MultiDimBinning] + # Reps. for this mode not yet defined -> use information about + # overridden methods + mode_allowed = ( + self.has_setup or self.has_compute if mode_str == 'calc_mode' + else self.has_apply + ) + # either allow all representations or require setting mode to None + supported_reps[mode_str] = ( + list(Container.array_representations) + [MultiDimBinning] + if mode_allowed else [None] + ) else: - # reps for this mode already defined -> listify + # Reps. for this mode defined by subclass -> listify if needed if (isinstance(supported_reps[mode_str], str) or not isinstance(supported_reps[mode_str], Sequence)): supported_reps[mode_str] = [supported_reps[mode_str]] self.supported_reps = supported_reps + """Dictionary of supported representations. Override in subclass if desired.""" + # Check consistency of requested modes, allowing None in any case + # (inconsequential while we're only at initialisation) self._check_representation(rep=calc_mode, mode='calc_mode', always_allow_none=True) self._calc_mode = calc_mode @@ -190,13 +215,6 @@ def __init__( """Data based on which stage may make computations and which it may modify""" - self.has_setup = type(self).setup_function is not Stage.setup_function - """Whether subclass overrides :py:meth:`setup_function`""" - self.has_compute = type(self).compute_function is not Stage.compute_function - """Whether subclass overrides :py:meth:`compute_function`""" - self.has_apply = type(self).apply_function is not Stage.apply_function - """Whether subclass overrides :py:meth:`apply_function`""" - def __repr__(self): return 'Stage "%s"'%(self.__class__.__name__) diff --git a/pisa_examples/resources/settings/pipeline/IceCube_3y_neutrinos_daemon.cfg b/pisa_examples/resources/settings/pipeline/IceCube_3y_neutrinos_daemon.cfg index c52132be4..6d471fcc0 100644 --- a/pisa_examples/resources/settings/pipeline/IceCube_3y_neutrinos_daemon.cfg +++ b/pisa_examples/resources/settings/pipeline/IceCube_3y_neutrinos_daemon.cfg @@ -48,7 +48,6 @@ data_dict = {'true_energy':'true_energy', \ [flux.daemon_flux] calc_mode = events -apply_mode = events param.daemon_K_158G = 0.0 +/- 1.0 param.daemon_K_158G.fixed = False From 0e636822994feba1ec741120df1f24b53cfc2e4f Mon Sep 17 00:00:00 2001 From: T Ehrhardt Date: Sun, 24 May 2026 14:55:59 +0200 Subject: [PATCH 12/22] remove explicit definition of supported_reps where not necessary any longer; add docstring note about absence of setup+compute/apply instead --- pisa/stages/absorption/earth_absorption.py | 10 +- pisa/stages/aeff/aeff.py | 6 +- pisa/stages/aeff/param.py | 6 +- pisa/stages/aeff/weight.py | 6 +- pisa/stages/aeff/weight_hnl.py | 6 +- pisa/stages/background/atm_muons.py | 2 - pisa/stages/cont_sys/snowstorm_hist.py | 3 +- pisa/stages/data/csv_data_hist.py | 9 +- pisa/stages/data/licloader_weighter.py | 2 + pisa/stages/data/simple_data_loader.py | 1 + pisa/stages/flux/barr_simple.py | 6 +- pisa/stages/flux/barr_simple_bckup.py | 293 +++++++++++++++++++++ pisa/stages/flux/daemon_flux.py | 8 +- pisa/stages/flux/hillasg.py | 6 +- pisa/stages/flux/honda_ip.py | 6 +- pisa/stages/flux/mceq_barr.py | 6 +- pisa/stages/flux/mceq_barr_red.py | 6 +- pisa/stages/osc/two_nu_osc.py | 6 +- pisa/stages/reco/resolutions.py | 3 +- pisa/stages/reco/simple_param.py | 7 +- pisa/stages/utils/hist.py | 1 + 21 files changed, 327 insertions(+), 72 deletions(-) create mode 100644 pisa/stages/flux/barr_simple_bckup.py diff --git a/pisa/stages/absorption/earth_absorption.py b/pisa/stages/absorption/earth_absorption.py index 22995d89b..ed0ab1390 100644 --- a/pisa/stages/absorption/earth_absorption.py +++ b/pisa/stages/absorption/earth_absorption.py @@ -1,5 +1,5 @@ """ -PISA pi stage for the calculation of earth layers and survival probabilities. +Stage for the calculation of earth layers and survival probabilities. The stage calculates first the depth of a water column that is mass-equivalent to the path traversed by the neutrino through the earth. This is done @@ -53,7 +53,7 @@ class earth_absorption(Stage): # pylint: disable=invalid-name """ - earth absorption PISA Pi class + earth absorption stage Parameters ---------- @@ -66,6 +66,12 @@ class earth_absorption(Stage): # pylint: disable=invalid-name prop_height : quantity (distance), optional height of neutrino production in the atmosphere + Notes + ----- + + Expected container keys are:: + + "true_coszen", "true_energy", "flav", "nubar", "weights" """ def __init__( self, diff --git a/pisa/stages/aeff/aeff.py b/pisa/stages/aeff/aeff.py index 255c94e9b..db29a4ac3 100644 --- a/pisa/stages/aeff/aeff.py +++ b/pisa/stages/aeff/aeff.py @@ -35,6 +35,7 @@ class aeff(Stage): # pylint: disable=invalid-name Notes ----- + Implements neither setup nor compute. Expected container keys are:: @@ -56,15 +57,10 @@ def __init__( 'weights', 'weighted_aeff', ) - # Implements no setup_function+compute_function - supported_reps = { - 'calc_mode': None, - } # init base class super().__init__( expected_params=expected_params, expected_container_keys=expected_container_keys, - supported_reps=supported_reps, **std_kwargs, ) diff --git a/pisa/stages/aeff/param.py b/pisa/stages/aeff/param.py index 8e3901115..153def752 100644 --- a/pisa/stages/aeff/param.py +++ b/pisa/stages/aeff/param.py @@ -146,6 +146,7 @@ class param(Stage): # pylint: disable=invalid-name Notes ----- + Implements neither setup nor compute. Expected container keys are:: @@ -167,15 +168,10 @@ def __init__( 'true_coszen', 'weights', ) - # Implements no setup_function+compute_function - supported_reps = { - 'calc_mode': None, - } # init base class super().__init__( expected_params=expected_params, expected_container_keys=expected_container_keys, - supported_reps=supported_reps, **std_kwargs, ) diff --git a/pisa/stages/aeff/weight.py b/pisa/stages/aeff/weight.py index 7309199a5..f1ef61343 100644 --- a/pisa/stages/aeff/weight.py +++ b/pisa/stages/aeff/weight.py @@ -29,6 +29,7 @@ class weight(Stage): # pylint: disable=invalid-name Notes ----- + Implements neither setup nor compute. Expected container keys are:: @@ -45,15 +46,10 @@ def __init__( expected_container_keys = ( 'weights', ) - # Implements no setup_function+compute_function - supported_reps = { - 'calc_mode': None, - } # init base class super().__init__( expected_params=expected_params, expected_container_keys=expected_container_keys, - supported_reps=supported_reps, **std_kwargs, ) diff --git a/pisa/stages/aeff/weight_hnl.py b/pisa/stages/aeff/weight_hnl.py index c2106227a..12af975c2 100644 --- a/pisa/stages/aeff/weight_hnl.py +++ b/pisa/stages/aeff/weight_hnl.py @@ -90,6 +90,7 @@ class weight_hnl(Stage): # pylint: disable=invalid-name Notes ----- + Implements neither setup nor compute. Expected container keys are:: @@ -111,15 +112,10 @@ def __init__( 'hnl_decay_width', 'weights', ) - # Implements no setup_function+compute_function - supported_reps = { - 'calc_mode': None, - } # init base class super().__init__( expected_params=expected_params, expected_container_keys=expected_container_keys, - supported_reps=supported_reps, **std_kwargs, ) diff --git a/pisa/stages/background/atm_muons.py b/pisa/stages/background/atm_muons.py index eef564297..c9e3c8592 100644 --- a/pisa/stages/background/atm_muons.py +++ b/pisa/stages/background/atm_muons.py @@ -96,8 +96,6 @@ def setup_function(self): @profile def apply_function(self): - #self.data.representation = self.calc_mode - # Apply muon normalisation/scaling atm_muon_scale = self.params['atm_muon_scale'].value.m_as("dimensionless") diff --git a/pisa/stages/cont_sys/snowstorm_hist.py b/pisa/stages/cont_sys/snowstorm_hist.py index cc4d7bd9b..23bd45870 100644 --- a/pisa/stages/cont_sys/snowstorm_hist.py +++ b/pisa/stages/cont_sys/snowstorm_hist.py @@ -111,7 +111,8 @@ def __init__( self.central_values = [] """Central values of the systematic parameters in the snowstorm set.""" - # evaluation only works on event-by-event basis + # Evaluation only works on event-by-event basis, and apply_mode can be + # detected automatically for convenience supported_reps = { 'calc_mode': "events", 'apply_mode': [None, MultiDimBinning], diff --git a/pisa/stages/data/csv_data_hist.py b/pisa/stages/data/csv_data_hist.py index 4e8f30a5c..518665539 100644 --- a/pisa/stages/data/csv_data_hist.py +++ b/pisa/stages/data/csv_data_hist.py @@ -22,6 +22,10 @@ class csv_data_hist(Stage): # pylint: disable=invalid-name ---------- events_file : str csv file path + + Notes + ----- + Implements no apply. """ def __init__(self, @@ -34,15 +38,10 @@ def __init__(self, expected_params = () expected_container_keys = () - # Implements no apply_function - supported_reps = { - 'apply_mode': None, - } # init base class super().__init__( expected_params=expected_params, expected_container_keys=expected_container_keys, - supported_reps=supported_reps, **std_kwargs, ) diff --git a/pisa/stages/data/licloader_weighter.py b/pisa/stages/data/licloader_weighter.py index cfba523c3..544479786 100644 --- a/pisa/stages/data/licloader_weighter.py +++ b/pisa/stages/data/licloader_weighter.py @@ -76,6 +76,8 @@ def __init__( LW.ConstantFlux(1.0 / n_files), self.xs_obj, self.lic_files ) + #FIXME: why no call to Stage init? + def setup_function(self): """ Load in the lic files, build the weighters, and get all the one-weights. To get the true diff --git a/pisa/stages/data/simple_data_loader.py b/pisa/stages/data/simple_data_loader.py index af3cb0077..d32f8b3a9 100644 --- a/pisa/stages/data/simple_data_loader.py +++ b/pisa/stages/data/simple_data_loader.py @@ -66,6 +66,7 @@ class simple_data_loader(Stage): # pylint: disable=invalid-name Looks for `initial_weights` fields in events file, which will serve as nominal weights for all events included. No fields named `weights` may already be present. + Setting of `calc_mode` is not accepted. """ def __init__(self, diff --git a/pisa/stages/flux/barr_simple.py b/pisa/stages/flux/barr_simple.py index ebd3f8d1d..b186721ae 100644 --- a/pisa/stages/flux/barr_simple.py +++ b/pisa/stages/flux/barr_simple.py @@ -38,6 +38,7 @@ class barr_simple(Stage): # pylint: disable=invalid-name Notes ----- + Implements no apply, so assumes implicit caching of nominal fluxes (FIXME). Expected container keys are:: @@ -63,15 +64,10 @@ def __init__( "nubar_flux_nominal", "nubar" ) - # Implements no apply_function (implicit caching! FIXME) - supported_reps = { - 'apply_mode': None, - } # init base class super().__init__( expected_params=expected_params, expected_container_keys=expected_container_keys, - supported_reps=supported_reps, **std_kwargs, ) diff --git a/pisa/stages/flux/barr_simple_bckup.py b/pisa/stages/flux/barr_simple_bckup.py new file mode 100644 index 000000000..ec4920702 --- /dev/null +++ b/pisa/stages/flux/barr_simple_bckup.py @@ -0,0 +1,293 @@ +""" +Stage to implement the old PISA/oscfit flux systematics +""" + +from __future__ import absolute_import, print_function, division + +import math + +import numpy as np +from numba import guvectorize, cuda, jit, njit, void + +from pisa import FTYPE, TARGET +from pisa.core.param import Param, ParamSet +from pisa.core.stage import Stage +from pisa.utils.profiler import profile +from pisa.utils.numba_tools import myjit, myjit_2, ftype, FX, IX +from pisa.utils.barr_parameterization import modRatioNuBar, modRatioUpHor + +__all__ = ['barr_simple', 'apply_ratio_scale', 'spectral_index_scale', + 'apply_sys_kernel', 'apply_sys_vectorized', 'init_test'] + + +class barr_simple(Stage): # pylint: disable=invalid-name + """ + stage to apply Barr style flux uncertainties + uses parameterisations of plots from Barr 2006 paper + + Parameters + ---------- + params + Expected params are .. :: + + nue_numu_ratio : quantity (dimensionless) + nu_nubar_ratio : quantity (dimensionless) + delta_index : quantity (dimensionless) + Barr_uphor_ratio : quantity (dimensionless) + Barr_nu_nubar_ratio : quantity (dimensionless) + + Expected container keys are .. :: + + "true_energy" + "true_coszen" + "nu_flux_nominal" + "nubar_flux_nominal" + "nubar" + + """ + def __init__( + self, + **std_kwargs, + ): + expected_params = ( + "nue_numu_ratio", + "nu_nubar_ratio", + "delta_index", + "Barr_uphor_ratio", + "Barr_nu_nubar_ratio", + ) + + expected_container_keys = ( + "true_energy", + "true_coszen", + "nu_flux_nominal", + "nubar_flux_nominal", + "nubar" + ) + + # init base class + super().__init__( + expected_params=expected_params, + expected_container_keys=expected_container_keys, + **std_kwargs, + ) + + def setup_function(self): + self.data.representation = self.calc_mode + for container in self.data: + container["nu_flux"] = np.empty((container.size, 2), dtype=FTYPE) + + @profile + def compute_function(self): + self.data.representation = self.calc_mode + + # If a parameter below has not been modified by minimizer, + # its magnitude below will be a native float, otherwise np.float64, + # so convert to expected FTYPE + nue_numu_ratio = FTYPE(self.params.nue_numu_ratio.value.m_as("dimensionless")) + nu_nubar_ratio = FTYPE(self.params.nu_nubar_ratio.value.m_as("dimensionless")) + delta_index = FTYPE(self.params.delta_index.value.m_as("dimensionless")) + Barr_uphor_ratio = FTYPE(self.params.Barr_uphor_ratio.value.m_as("dimensionless")) + Barr_nu_nubar_ratio = FTYPE(self.params.Barr_nu_nubar_ratio.value.m_as("dimensionless")) + + for container in self.data: + apply_sys_vectorized( + container["true_energy"], + container["true_coszen"], + container["nu_flux_nominal"], + container["nubar_flux_nominal"], + container["nubar"], + nue_numu_ratio, + nu_nubar_ratio, + delta_index, + Barr_uphor_ratio, + Barr_nu_nubar_ratio, + out=container["nu_flux"], + ) + container.mark_changed('nu_flux') + + +#@njit(f"void({FX}, b1, {FX}, {FX}, {FX}[:])", inline='always') +@myjit_2(f"void({FX}, b1, {FX}, {FX}, {FX}[:])", inline="always") +def apply_ratio_scale(ratio_scale, sum_constant, in1, in2, out): + """ apply ratio scale to flux values + + Parameters + ---------- + ratio_scale : float + + sum_constant : bool + if Ture, then the sum of the new flux will be identical to the old flux + + in1 : float + + in2 : float + + out : array + + """ + if in1 == 0. and in2 == 0.: + out[0] = 0. + out[1] = 0. + return + + flag = 1 if sum_constant else 0 + + # when sum_constant = True + # just a single division operation + single_denom = in2 + ratio_scale * in1 + inv_denom = 1.0 / single_denom + + orig_sum = in1 + in2 + new = orig_sum * inv_denom + out0 = ratio_scale * in1 * new + out1 = new + + # sum_constant = False + out0_sum_not_const = ratio_scale * in1 + out1_sum_not_const = in2 + + # finally assign + out[0] = (1 - flag) * out0_sum_not_const + flag * out0 + out[1] = (1 - flag) * out1_sum_not_const + flag * out1 + + +@myjit +def spectral_index_scale(true_energy, egy_pivot, delta_index): + """ calculate spectral index scale """ + return math.pow((true_energy / egy_pivot), delta_index) + + +@myjit +def apply_sys_kernel( + true_energy, + true_coszen, + nu_flux_nominal, + nubar_flux_nominal, + nubar, + nue_numu_ratio, + nu_nubar_ratio, + delta_index, + Barr_uphor_ratio, + Barr_nu_nubar_ratio, + out, +): + # nue/numu ratio + new_nu_flux = cuda.local.array(shape=(2), dtype=ftype) + new_nubar_flux = cuda.local.array(2, dtype=ftype) + apply_ratio_scale( + nue_numu_ratio, True, nu_flux_nominal[0], nu_flux_nominal[1], new_nu_flux + ) + apply_ratio_scale( + nue_numu_ratio, + True, + nubar_flux_nominal[0], + nubar_flux_nominal[1], + new_nubar_flux, + ) + + # apply flux systematics + # spectral idx + idx_scale = spectral_index_scale(true_energy, 24.0900951261, delta_index) + new_nu_flux[0] *= idx_scale + new_nu_flux[1] *= idx_scale + new_nubar_flux[0] *= idx_scale + new_nubar_flux[1] *= idx_scale + + # nu/nubar ratio + new_nue_flux = cuda.local.array(2, dtype=ftype) + new_numu_flux = cuda.local.array(2, dtype=ftype) + apply_ratio_scale( + nu_nubar_ratio, True, new_nu_flux[0], new_nubar_flux[0], new_nue_flux + ) + apply_ratio_scale( + nu_nubar_ratio, True, new_nu_flux[1], new_nubar_flux[1], new_numu_flux + ) + if nubar < 0: + out[0] = new_nue_flux[1] + out[1] = new_numu_flux[1] + else: + out[0] = new_nue_flux[0] + out[1] = new_numu_flux[0] + + # Barr flux + out[0] *= modRatioNuBar(nubar, 0, true_energy, true_coszen, Barr_nu_nubar_ratio) + out[1] *= modRatioNuBar(nubar, 1, true_energy, true_coszen, Barr_nu_nubar_ratio) + + out[0] *= modRatioUpHor(0, true_energy, true_coszen, Barr_uphor_ratio) + out[1] *= modRatioUpHor(1, true_energy, true_coszen, Barr_uphor_ratio) + + +@guvectorize([f"({FX}, {FX}, {FX}[:], {FX}[:], {IX}, {FX}, {FX}, {FX}, {FX}, {FX}, {FX}[:])"], "(),(),(d),(d),(),(),(),(),(),()->(d)", target=TARGET) +def apply_sys_vectorized( + true_energy, + true_coszen, + nu_flux_nominal, + nubar_flux_nominal, + nubar, + nue_numu_ratio, + nu_nubar_ratio, + delta_index, + Barr_uphor_ratio, + Barr_nu_nubar_ratio, + out, +): + # nue/numu ratio + new_nu_flux = np.empty(shape=(2), dtype=ftype) + new_nubar_flux = np.empty(2, dtype=ftype) + apply_ratio_scale( + nue_numu_ratio, True, nu_flux_nominal[0], nu_flux_nominal[1], new_nu_flux + ) + apply_ratio_scale( + nue_numu_ratio, + True, + nubar_flux_nominal[0], + nubar_flux_nominal[1], + new_nubar_flux, + ) + + # apply flux systematics + # spectral idx + #idx_scale = spectral_index_scale(true_energy, 24.0900951261, delta_index) + energy_pivot = 24.0900951261 + idx_scale = math.exp(delta_index * math.log(true_energy / energy_pivot)) + new_nu_flux[0] *= idx_scale + new_nu_flux[1] *= idx_scale + new_nubar_flux[0] *= idx_scale + new_nubar_flux[1] *= idx_scale + + # nu/nubar ratio + new_nue_flux = np.empty(2, dtype=ftype) + new_numu_flux = np.empty(2, dtype=ftype) + apply_ratio_scale( + nu_nubar_ratio, True, new_nu_flux[0], new_nubar_flux[0], new_nue_flux + ) + apply_ratio_scale( + nu_nubar_ratio, True, new_nu_flux[1], new_nubar_flux[1], new_numu_flux + ) + if nubar < 0: + out[0] = new_nue_flux[1] + out[1] = new_numu_flux[1] + else: + out[0] = new_nue_flux[0] + out[1] = new_numu_flux[0] + + # Barr flux + out[0] *= modRatioNuBar(nubar, 0, true_energy, true_coszen, Barr_nu_nubar_ratio) + out[1] *= modRatioNuBar(nubar, 1, true_energy, true_coszen, Barr_nu_nubar_ratio) + + out[0] *= modRatioUpHor(0, true_energy, true_coszen, Barr_uphor_ratio) + out[1] *= modRatioUpHor(1, true_energy, true_coszen, Barr_uphor_ratio) + + +def init_test(**param_kwargs): + """Instantiation example""" + param_set = ParamSet([ + Param(name="nue_numu_ratio", value=1.0, **param_kwargs), + Param(name="nu_nubar_ratio", value=1.0, **param_kwargs), + Param(name="delta_index", value=0.0, **param_kwargs), + Param(name="Barr_uphor_ratio", value=0.0, **param_kwargs), + Param(name="Barr_nu_nubar_ratio", value=0.0, **param_kwargs) + ]) + + return barr_simple(params=param_set) diff --git a/pisa/stages/flux/daemon_flux.py b/pisa/stages/flux/daemon_flux.py index edd38515b..3b3dbfe1e 100644 --- a/pisa/stages/flux/daemon_flux.py +++ b/pisa/stages/flux/daemon_flux.py @@ -60,12 +60,12 @@ class daemon_flux(Stage): # pylint: disable=invalid-name daemon_GSF_5 : quantity (dimensionless) daemon_GSF_6 : quantity (dimensionless) - Expected container keys are .. :: + Notes + ----- - "true_energy" - "true_coszen" - "nubar" + Expected container keys are:: + "true_energy", "true_coszen", "nubar" """ def __init__( diff --git a/pisa/stages/flux/hillasg.py b/pisa/stages/flux/hillasg.py index 42d6ebf82..ed40d6273 100644 --- a/pisa/stages/flux/hillasg.py +++ b/pisa/stages/flux/hillasg.py @@ -28,6 +28,7 @@ class hillasg(Stage): # pylint: disable=invalid-name Notes ----- + Implements no apply. Expected container keys are:: @@ -43,15 +44,10 @@ def __init__(self, **std_kwargs): 'true_energy', 'true_coszen', ) - # Implements no apply_function - supported_reps = { - 'apply_mode': None, - } # init base class super().__init__( expected_params=expected_params, expected_container_keys=expected_container_keys, - supported_reps=supported_reps, **std_kwargs, ) diff --git a/pisa/stages/flux/honda_ip.py b/pisa/stages/flux/honda_ip.py index b0ea296ef..a2413ee80 100644 --- a/pisa/stages/flux/honda_ip.py +++ b/pisa/stages/flux/honda_ip.py @@ -30,6 +30,7 @@ class honda_ip(Stage): # pylint: disable=invalid-name Notes ----- + Implements no apply. Expected container keys are:: @@ -48,15 +49,10 @@ def __init__( 'true_energy', 'true_coszen', ) - # Implements no apply_function - supported_reps = { - 'apply_mode': None, - } # init base class super().__init__( expected_params=expected_params, expected_container_keys=expected_container_keys, - supported_reps=supported_reps, **std_kwargs, ) diff --git a/pisa/stages/flux/mceq_barr.py b/pisa/stages/flux/mceq_barr.py index ce6894a6b..56408959a 100644 --- a/pisa/stages/flux/mceq_barr.py +++ b/pisa/stages/flux/mceq_barr.py @@ -82,6 +82,7 @@ class mceq_barr(Stage): # pylint: disable=invalid-name Notes ----- + Implements no apply, so assumes implicit caching of nominal fluxes (FIXME). Expected container keys are:: @@ -186,10 +187,6 @@ def __init__( ] if use_honda_nominal_flux: expected_container_keys.append('nubar_flux_nominal') - # Implements no apply_function (implicit caching! FIXME) - supported_reps = { - 'apply_mode': None, - } # store args self.table_file = table_file @@ -201,7 +198,6 @@ def __init__( super().__init__( expected_params=expected_params, expected_container_keys=expected_container_keys, - supported_reps=supported_reps, **std_kwargs, ) diff --git a/pisa/stages/flux/mceq_barr_red.py b/pisa/stages/flux/mceq_barr_red.py index 9bed306c2..4ee27169c 100644 --- a/pisa/stages/flux/mceq_barr_red.py +++ b/pisa/stages/flux/mceq_barr_red.py @@ -71,6 +71,7 @@ class mceq_barr_red(Stage): # pylint: disable=invalid-name Notes ----- + Implements no apply, so assumes implicit caching of nominal fluxes (FIXME). Expected container keys are:: @@ -165,10 +166,6 @@ def __init__( "nubar_flux_nominal", "nubar" ) - # Implements no apply_function (implicit caching! FIXME) - supported_reps = { - 'apply_mode': None, - } # Using Honda for nominal flux. Keys should already exist # what are keys added or altered in the calculation used during apply @@ -181,7 +178,6 @@ def __init__( super().__init__( expected_params=expected_params, expected_container_keys=expected_container_keys, - supported_reps=supported_reps, **std_kwargs, ) diff --git a/pisa/stages/osc/two_nu_osc.py b/pisa/stages/osc/two_nu_osc.py index 99e6fba68..83e7a50d5 100644 --- a/pisa/stages/osc/two_nu_osc.py +++ b/pisa/stages/osc/two_nu_osc.py @@ -29,6 +29,7 @@ class two_nu_osc(Stage): # pylint: disable=invalid-name Notes ----- + Implements neither setup nor compute. Expected container keys are:: @@ -52,15 +53,10 @@ def __init__(self, 'nu_flux', 'weights' ) - # Implements no setup_function+compute_function - supported_reps = { - 'calc_mode': None, - } # init base class super().__init__( expected_params=expected_params, expected_container_keys=expected_container_keys, - supported_reps=supported_reps, **std_kwargs, ) diff --git a/pisa/stages/reco/resolutions.py b/pisa/stages/reco/resolutions.py index 82e63858d..2c9195a14 100644 --- a/pisa/stages/reco/resolutions.py +++ b/pisa/stages/reco/resolutions.py @@ -34,6 +34,7 @@ class resolutions(Stage): # pylint: disable=invalid-name Notes ----- + Implements no apply. Expected container keys are:: @@ -58,10 +59,8 @@ def __init__( 'reco_coszen', 'pid', ) - # Implements no apply_function supported_reps = { "calc_mode": "events", - "apply_mode": None } super().__init__( expected_params=expected_params, diff --git a/pisa/stages/reco/simple_param.py b/pisa/stages/reco/simple_param.py index 940868cf8..331ff9629 100644 --- a/pisa/stages/reco/simple_param.py +++ b/pisa/stages/reco/simple_param.py @@ -412,6 +412,7 @@ class simple_param(Stage): # pylint: disable=invalid-name Notes ----- + Implements no apply. Expected container keys are:: @@ -434,15 +435,10 @@ def __init__(self, 'true_energy', 'true_coszen', ) - # Implements no apply_function (TODO: does any calc_mode work?) - supported_reps = { - 'apply_mode': None, - } # init base class super().__init__( expected_params=expected_params, expected_container_keys=expected_container_keys, - supported_reps=supported_reps, **std_kwargs, ) @@ -450,7 +446,6 @@ def setup_function(self): #TODO Could add a number of discrete cases here that can be selected betweeen, e.g. ICU baseline (LoI?), DeepCore current best, etc... - # Get params perfect_reco = self.params.perfect_reco.value reco_energy_params = eval(self.params.reco_energy_params.value) diff --git a/pisa/stages/utils/hist.py b/pisa/stages/utils/hist.py index b02ecbd35..459cc4b5d 100644 --- a/pisa/stages/utils/hist.py +++ b/pisa/stages/utils/hist.py @@ -43,6 +43,7 @@ def __init__( if apply_unc_weights: expected_container_keys.append('unc_weights') + # apply_mode can be detected automatically for convenience supported_reps = { 'calc_mode': [MultiDimBinning, "events"], 'apply_mode': [None, MultiDimBinning], From a329272058a64abb5a1e01a121e5f9e12e988cff Mon Sep 17 00:00:00 2001 From: T Ehrhardt Date: Sun, 24 May 2026 15:03:31 +0200 Subject: [PATCH 13/22] accidentally added file --- pisa/stages/flux/barr_simple_bckup.py | 293 -------------------------- 1 file changed, 293 deletions(-) delete mode 100644 pisa/stages/flux/barr_simple_bckup.py diff --git a/pisa/stages/flux/barr_simple_bckup.py b/pisa/stages/flux/barr_simple_bckup.py deleted file mode 100644 index ec4920702..000000000 --- a/pisa/stages/flux/barr_simple_bckup.py +++ /dev/null @@ -1,293 +0,0 @@ -""" -Stage to implement the old PISA/oscfit flux systematics -""" - -from __future__ import absolute_import, print_function, division - -import math - -import numpy as np -from numba import guvectorize, cuda, jit, njit, void - -from pisa import FTYPE, TARGET -from pisa.core.param import Param, ParamSet -from pisa.core.stage import Stage -from pisa.utils.profiler import profile -from pisa.utils.numba_tools import myjit, myjit_2, ftype, FX, IX -from pisa.utils.barr_parameterization import modRatioNuBar, modRatioUpHor - -__all__ = ['barr_simple', 'apply_ratio_scale', 'spectral_index_scale', - 'apply_sys_kernel', 'apply_sys_vectorized', 'init_test'] - - -class barr_simple(Stage): # pylint: disable=invalid-name - """ - stage to apply Barr style flux uncertainties - uses parameterisations of plots from Barr 2006 paper - - Parameters - ---------- - params - Expected params are .. :: - - nue_numu_ratio : quantity (dimensionless) - nu_nubar_ratio : quantity (dimensionless) - delta_index : quantity (dimensionless) - Barr_uphor_ratio : quantity (dimensionless) - Barr_nu_nubar_ratio : quantity (dimensionless) - - Expected container keys are .. :: - - "true_energy" - "true_coszen" - "nu_flux_nominal" - "nubar_flux_nominal" - "nubar" - - """ - def __init__( - self, - **std_kwargs, - ): - expected_params = ( - "nue_numu_ratio", - "nu_nubar_ratio", - "delta_index", - "Barr_uphor_ratio", - "Barr_nu_nubar_ratio", - ) - - expected_container_keys = ( - "true_energy", - "true_coszen", - "nu_flux_nominal", - "nubar_flux_nominal", - "nubar" - ) - - # init base class - super().__init__( - expected_params=expected_params, - expected_container_keys=expected_container_keys, - **std_kwargs, - ) - - def setup_function(self): - self.data.representation = self.calc_mode - for container in self.data: - container["nu_flux"] = np.empty((container.size, 2), dtype=FTYPE) - - @profile - def compute_function(self): - self.data.representation = self.calc_mode - - # If a parameter below has not been modified by minimizer, - # its magnitude below will be a native float, otherwise np.float64, - # so convert to expected FTYPE - nue_numu_ratio = FTYPE(self.params.nue_numu_ratio.value.m_as("dimensionless")) - nu_nubar_ratio = FTYPE(self.params.nu_nubar_ratio.value.m_as("dimensionless")) - delta_index = FTYPE(self.params.delta_index.value.m_as("dimensionless")) - Barr_uphor_ratio = FTYPE(self.params.Barr_uphor_ratio.value.m_as("dimensionless")) - Barr_nu_nubar_ratio = FTYPE(self.params.Barr_nu_nubar_ratio.value.m_as("dimensionless")) - - for container in self.data: - apply_sys_vectorized( - container["true_energy"], - container["true_coszen"], - container["nu_flux_nominal"], - container["nubar_flux_nominal"], - container["nubar"], - nue_numu_ratio, - nu_nubar_ratio, - delta_index, - Barr_uphor_ratio, - Barr_nu_nubar_ratio, - out=container["nu_flux"], - ) - container.mark_changed('nu_flux') - - -#@njit(f"void({FX}, b1, {FX}, {FX}, {FX}[:])", inline='always') -@myjit_2(f"void({FX}, b1, {FX}, {FX}, {FX}[:])", inline="always") -def apply_ratio_scale(ratio_scale, sum_constant, in1, in2, out): - """ apply ratio scale to flux values - - Parameters - ---------- - ratio_scale : float - - sum_constant : bool - if Ture, then the sum of the new flux will be identical to the old flux - - in1 : float - - in2 : float - - out : array - - """ - if in1 == 0. and in2 == 0.: - out[0] = 0. - out[1] = 0. - return - - flag = 1 if sum_constant else 0 - - # when sum_constant = True - # just a single division operation - single_denom = in2 + ratio_scale * in1 - inv_denom = 1.0 / single_denom - - orig_sum = in1 + in2 - new = orig_sum * inv_denom - out0 = ratio_scale * in1 * new - out1 = new - - # sum_constant = False - out0_sum_not_const = ratio_scale * in1 - out1_sum_not_const = in2 - - # finally assign - out[0] = (1 - flag) * out0_sum_not_const + flag * out0 - out[1] = (1 - flag) * out1_sum_not_const + flag * out1 - - -@myjit -def spectral_index_scale(true_energy, egy_pivot, delta_index): - """ calculate spectral index scale """ - return math.pow((true_energy / egy_pivot), delta_index) - - -@myjit -def apply_sys_kernel( - true_energy, - true_coszen, - nu_flux_nominal, - nubar_flux_nominal, - nubar, - nue_numu_ratio, - nu_nubar_ratio, - delta_index, - Barr_uphor_ratio, - Barr_nu_nubar_ratio, - out, -): - # nue/numu ratio - new_nu_flux = cuda.local.array(shape=(2), dtype=ftype) - new_nubar_flux = cuda.local.array(2, dtype=ftype) - apply_ratio_scale( - nue_numu_ratio, True, nu_flux_nominal[0], nu_flux_nominal[1], new_nu_flux - ) - apply_ratio_scale( - nue_numu_ratio, - True, - nubar_flux_nominal[0], - nubar_flux_nominal[1], - new_nubar_flux, - ) - - # apply flux systematics - # spectral idx - idx_scale = spectral_index_scale(true_energy, 24.0900951261, delta_index) - new_nu_flux[0] *= idx_scale - new_nu_flux[1] *= idx_scale - new_nubar_flux[0] *= idx_scale - new_nubar_flux[1] *= idx_scale - - # nu/nubar ratio - new_nue_flux = cuda.local.array(2, dtype=ftype) - new_numu_flux = cuda.local.array(2, dtype=ftype) - apply_ratio_scale( - nu_nubar_ratio, True, new_nu_flux[0], new_nubar_flux[0], new_nue_flux - ) - apply_ratio_scale( - nu_nubar_ratio, True, new_nu_flux[1], new_nubar_flux[1], new_numu_flux - ) - if nubar < 0: - out[0] = new_nue_flux[1] - out[1] = new_numu_flux[1] - else: - out[0] = new_nue_flux[0] - out[1] = new_numu_flux[0] - - # Barr flux - out[0] *= modRatioNuBar(nubar, 0, true_energy, true_coszen, Barr_nu_nubar_ratio) - out[1] *= modRatioNuBar(nubar, 1, true_energy, true_coszen, Barr_nu_nubar_ratio) - - out[0] *= modRatioUpHor(0, true_energy, true_coszen, Barr_uphor_ratio) - out[1] *= modRatioUpHor(1, true_energy, true_coszen, Barr_uphor_ratio) - - -@guvectorize([f"({FX}, {FX}, {FX}[:], {FX}[:], {IX}, {FX}, {FX}, {FX}, {FX}, {FX}, {FX}[:])"], "(),(),(d),(d),(),(),(),(),(),()->(d)", target=TARGET) -def apply_sys_vectorized( - true_energy, - true_coszen, - nu_flux_nominal, - nubar_flux_nominal, - nubar, - nue_numu_ratio, - nu_nubar_ratio, - delta_index, - Barr_uphor_ratio, - Barr_nu_nubar_ratio, - out, -): - # nue/numu ratio - new_nu_flux = np.empty(shape=(2), dtype=ftype) - new_nubar_flux = np.empty(2, dtype=ftype) - apply_ratio_scale( - nue_numu_ratio, True, nu_flux_nominal[0], nu_flux_nominal[1], new_nu_flux - ) - apply_ratio_scale( - nue_numu_ratio, - True, - nubar_flux_nominal[0], - nubar_flux_nominal[1], - new_nubar_flux, - ) - - # apply flux systematics - # spectral idx - #idx_scale = spectral_index_scale(true_energy, 24.0900951261, delta_index) - energy_pivot = 24.0900951261 - idx_scale = math.exp(delta_index * math.log(true_energy / energy_pivot)) - new_nu_flux[0] *= idx_scale - new_nu_flux[1] *= idx_scale - new_nubar_flux[0] *= idx_scale - new_nubar_flux[1] *= idx_scale - - # nu/nubar ratio - new_nue_flux = np.empty(2, dtype=ftype) - new_numu_flux = np.empty(2, dtype=ftype) - apply_ratio_scale( - nu_nubar_ratio, True, new_nu_flux[0], new_nubar_flux[0], new_nue_flux - ) - apply_ratio_scale( - nu_nubar_ratio, True, new_nu_flux[1], new_nubar_flux[1], new_numu_flux - ) - if nubar < 0: - out[0] = new_nue_flux[1] - out[1] = new_numu_flux[1] - else: - out[0] = new_nue_flux[0] - out[1] = new_numu_flux[0] - - # Barr flux - out[0] *= modRatioNuBar(nubar, 0, true_energy, true_coszen, Barr_nu_nubar_ratio) - out[1] *= modRatioNuBar(nubar, 1, true_energy, true_coszen, Barr_nu_nubar_ratio) - - out[0] *= modRatioUpHor(0, true_energy, true_coszen, Barr_uphor_ratio) - out[1] *= modRatioUpHor(1, true_energy, true_coszen, Barr_uphor_ratio) - - -def init_test(**param_kwargs): - """Instantiation example""" - param_set = ParamSet([ - Param(name="nue_numu_ratio", value=1.0, **param_kwargs), - Param(name="nu_nubar_ratio", value=1.0, **param_kwargs), - Param(name="delta_index", value=0.0, **param_kwargs), - Param(name="Barr_uphor_ratio", value=0.0, **param_kwargs), - Param(name="Barr_nu_nubar_ratio", value=0.0, **param_kwargs) - ]) - - return barr_simple(params=param_set) From 171746e76e70c1bba983340e7661d519b5e2ebd9 Mon Sep 17 00:00:00 2001 From: T Ehrhardt Date: Wed, 27 May 2026 03:33:34 +0200 Subject: [PATCH 14/22] expand and update service howto and add trace-level logging to Container.mark_changed [no ci] --- pisa/core/container.py | 2 + pisa/stages/how_to_service.md | 76 ++++++++++++++++++++++++----------- 2 files changed, 55 insertions(+), 23 deletions(-) diff --git a/pisa/core/container.py b/pisa/core/container.py index 94a787ceb..2e065ec15 100644 --- a/pisa/core/container.py +++ b/pisa/core/container.py @@ -426,6 +426,8 @@ def mark_changed(self, key): if key in self.current_data.keys(): self.mark_valid(key) + logging.trace("Marked changed variable '%s' in current representation '%s'.", + key, self.representation) def mark_valid(self, key): '''validate data as is in current representation, regardless''' diff --git a/pisa/stages/how_to_service.md b/pisa/stages/how_to_service.md index f5c909dda..ecd748094 100644 --- a/pisa/stages/how_to_service.md +++ b/pisa/stages/how_to_service.md @@ -75,26 +75,36 @@ Refer to the [general conventions](https://github.com/icecube/pisa/blob/master/p What is the purpose of this stage? Short 1-2 sentence description - Parameters: - ----------- + Parameters + ---------- params : ParamSet - Expected parameters are .. :: + Must have parameters:: + a : dimensionless Quantity b : dimensionless Quantity something_else : float Description + some_arg_with_default : bool (default: True) + Description + + + Notes + ----- + If you want to use both foo and bar, blah blah. + Does not implement setup/compute/apply because ... + Only allowed apply_mode is ... + More info, etc... + + Expected container keys are:: - Notes: - ------ - If you want to use both foo and bar, blah blah. More info, etc... + 'true_energy', 'true_coszen', 'weights' References ---------- Einstein, Albert. "The photoelectric effect." Ann. Phys 17.132 (1905): 4. - """ ``` @@ -102,6 +112,7 @@ Note that the "Parameters" section has parameter names optionally followed by ` This turns out to be quite useful for both developers and users, so include what type(s) your code expects here! The further-indented line(s) beneath the `name : type` specification then describe the parameters (arguments) for instantiating the class. This same convention is followed for method docstrings. +How to determine which parameters belong to the `ParamSet` (`params`) and which ones serve as class instantiation arguments is outlined below. ### The `__init__` method definition The definition of the init method is how the class must be called to be instantiated. @@ -110,20 +121,26 @@ The definition of the init method is how the class must be called to be instanti expected_params = ('a', 'b') expected_container_keys = ('true_energy', 'true_coszen', 'weights') + supported_reps = { + 'calc_mode': MultiDimBinning, + 'apply_mode': 'events' + } super().__init__( expected_params=expected_params, expected_container_keys=expected_container_keys, + supported_reps=supported_reps, **std_kwargs ) self.foo = something_else + """Description""" self.bar = some_arg_with_default + """Description""" ``` -The `std_kwargs` can only contain `data`, `params`, `expected_params`, `debug_mode`, `error_mode`, `calc_mode`, `apply_mode`, and `profile`. -Of these, `data` and `params` will be automatically populated. +The `std_kwargs` can only contain `data`, `params`, `expected_params`, `expected_container_keys`, `debug_mode`, `error_method`, `supported_reps`, `calc_mode`, `apply_mode`, `profile`, and `in_standalone_mode`. Of these, `data` and `params` will be automatically populated when a `Pipeline` containing the service is instantiated. -This means that a minimal example for the code instantiating the service will look something like +In turn, a minimal example for the code instantiating the service will look something like ```python from pisa.stages.osc.dummy import dummy as osc_dummy instantiated_dummy = osc_dummy(params=my_paramset, something_else=0.42) @@ -131,63 +148,76 @@ instantiated_dummy = osc_dummy(params=my_paramset, something_else=0.42) (of course there's code that would have to be written to instantiate `my_paramset`). In fact, we expect you to instantiate the service with some reasonable assumptions about params it expects in a test function at the bottom of the file (more on that below). -Note two important things about how this service is being instantiated above: +Note a few important things about how this service is being instantiated above: 1. All arguments are passed by keyword. Python allows you to just send arguments in order (positional args), but ***don't do this***. It's far better to be explicit than to save a few keystrokes. With a "duck-typed" language like Python, using the names explicitly provides a useful check that what the user sends to a function/method is what the user intends, and that the function/method receives what it expects to get. 1. Arguments like `some_arg_with_default=True` have default values set in the definition of init. These needn't be specified by the user (since they have default values set), but can be, for the user to override the defaults. The arguments without defaults (such as `something_else`) *must* be specified by the user. +1. Since the superclass `Stage` exclusively has keyword arguments, with default values of `None` or `False`, and since the service is not part of a pipeline, `instantiated_dummy.data` returns `None`. (We could in principle choose to pass `data` as an instantiation argument to `osc_dummy`, but it isn't required at `__init__` time). -The init method body is broken down into four parts in the example to hopefully make it easier to see what you have to do to implement your own. For example, you don't *need* to create the temporary variables of steps 1 and 2, but this format makes it very clear what's going on and makes the code much cleaner than trying to stuff those tuples into step 3 where they are passed to the superclass's init method. +The init method body is broken down into four parts in the example to hopefully make it easier to see what you have to do to implement your own. For example, you don't *need* to create the temporary variables of steps 1, 2, 3, but this format makes it very clear what's going on and makes the code much cleaner than trying to stuff those objects into step 4 where they are passed to the superclass's init method. 1. Define a temporary variable containing `expected_params`, the parameter names your service requires to be passed via the `params` argument. 1. Define a temporary variable `expected_container_keys`, the container keys expected to be present in each container in the `data` object assigned to this service. -1. Call the `__init__` method of the superclass (the service's superclass is `Stage`). See the `Stage`'s init method definition (and corresponding class docstring) in [stage.py](https://github.com/icecube/pisa/blob/master/pisa/core/stage.py) for details of the arguments it expects. +1. If desired, define a temporary variable `supported_reps`, containing the data representations (`calc_mode` and `apply_mode`) you want to allow. If you don't, PISA will populate `supported_reps` with sensible defaults. +1. Call the `__init__` method of the superclass (`Stage`). Don't forget to pass the above arguments. For details of all the arguments it accepts, see the `Stage`'s init method definition (and corresponding class docstring) in [stage.py](https://github.com/icecube/pisa/blob/master/pisa/core/stage.py). 1. Do any custom things that your class requires for setting itself up. +#### Defining service parameters: instantiation argument or `Param` object? +Instantiation arguments (`something_else` and `some_arg_with_default` in the dummy service above) configure the service and will *never* be passed to a fitter (minimizer, sampling algorithm, etc.). Within the corresponding section of a pipeline config file, they are specified simply by `name = value` or `name = value * units.xyz`. + +In contrast, `Param` objects *are modified* by a fitter. They correspond to the entries of `expected_params` (`a` and `b` in the dummy service above). They are characterized by (at least) a name, a value with units, a finite range, a flag indicating whether they are to be kept fixed or not, and a prior. In the pipeline config file, these properties are specified with a `param.name` prefix. + + ### Implementing the physics: three `{...}_function`s There are three abstract methods provided by the `Stage` class where the actual work of computing things should be implemented: * `setup_function` : executed upon instantiation -* `compute_function` : executed in a run if parameters changed (and first run) +* `compute_function` : executed in the first run and then only *whenever parameters change* (**caching**) * `apply_function` : executed in every run The `Stage` class implements some default logic before or after the execution of each of these methods, but for any service at least one of the above will need to be implemented (i.e. implemented in the service you're writing) in order to do anything non-trivial. -More specifically, the `Stage` class by default sets the data representation to `calc_mode` before calling the first two, and to `apply_mode` before the third. +More specifically, the `Stage` class by default sets the data representation to `calc_mode` before calling each of the first two, and to `apply_mode` before the third. Considering which of the abstract methods above should perform a given task for your service to output correct physics results in an efficient manner whenever parameter values change is of paramount importance. -In the following, "transform" shall refer to the result of any computation (e.g., multidimensional function based on external simulation, based on a parameterisation, etc.) with which the contents of the `data` object passed to the service are modified (create new arrays representing some physical quantities, manipulate existing ones, etc.). +In the following, "transform" shall refer to the result of any computation (e.g., multidimensional function based on external simulation, based on a parameterization, etc.) with which the contents of the `data` object passed to the service are modified (create new arrays representing some physical quantities, manipulate existing ones, etc.). #### Services that use nominal transforms -Implement **`setup_function`** and **`apply_function`** in your service's class +🠚 Implement **`setup_function`** and **`apply_function`** in your service's class Nominal transforms are generated e.g. when all params (if any) are set to their nominal values. It is useful to generate nominal transforms if it is slow to compute them or read them from a file, and the params modify these in some comparably cheap way to arrive at the final transform. #### Services that use transforms -Implement **`compute_function`** and **`apply_function`** in your service's class +🠚 Implement **`compute_function`** and **`apply_function`** in your service's class Even when there are no nominal transforms, it might be efficient to transfer any universal parts of the calculation to the `setup_function` and to store the results in `data` for use by the other two methods. #### Services that do not use transforms -Implement **`apply_function`** in your service's class +🠚 Implement **`apply_function`** in your service's class Consider an example in which the params of the service are directly applied to some contents of `data`, for instance as scaling factors. -An example of such an above function could look like: +#### `apply_function` example +An example of an `apply_function`—which performs some non-sensical scaling of 'weights'—could look like this: ```python def apply_function(self): - a_magnitude = self.params.b.m_as('dimensionless') + a_magnitude = self.params.a.m_as('dimensionless') b_magnitude = self.params.b.m_as('dimensionless') for container in self.data: container['weights'] *= a_magnitude * b_magnitude * container['true_energy'] * container['true_coszen'] container.mark_changed('weights') ``` -**N.B.:** If you use in-place array operations on your containers (e.g. `container['weights'][mask] = 0.0`, you need to mark theses changes via `container.mark_changed('weights')`) +```{admonition} Marking changes +:class: important + +If you use operations on your containers that do not result in execution of the `Container.__setitem__` dunder method (e.g. `container['weights'][mask] = 0.0`), you need to *mark these changes* via `container.mark_changed('weights')` *manually*. This will ensure that the variable 'weights' is invalidated in all other representations than the current one (namely that given by `apply_mode` in the case of the `apply_function` example). If 'weights' are ever requested in another representation, a transformation from a valid source representation to the target representation will first be performed. If in doubt, there is no harm in performing the manual call as in the example above. Alternatively, look for messages about marked changes in trace-level log outputs. +``` -### Service testing +## Testing At the bottom of the file, add a function called `init_test` which successfully creates and returns an instance of the service (consider this an important part of its documentation). This will be detected and called by the service-testing script that attempts to run every service existing within PISA. From 16d95bb80333eea672b8c67c22bf5cbb922845ff Mon Sep 17 00:00:00 2001 From: T Ehrhardt Date: Wed, 27 May 2026 19:59:50 +0200 Subject: [PATCH 15/22] warn when non-trivial supported rep. is detected even though corresponding function isn't implemented (for now, possibly change later) [no ci] --- pisa/core/stage.py | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/pisa/core/stage.py b/pisa/core/stage.py index a9142117b..37fe99faf 100644 --- a/pisa/core/stage.py +++ b/pisa/core/stage.py @@ -164,15 +164,14 @@ def __init__( assert set(supported_reps.keys()).issubset(mode_keys) # Default configuration of supported representations, using information # about overridden methods, unless subclass already defined them - # (don't question the values chosen by the subclass) for mode_str in mode_keys: + mode_allowed = ( + self.has_setup or self.has_compute if mode_str == 'calc_mode' + else self.has_apply + ) if mode_str not in supported_reps: # Reps. for this mode not yet defined -> use information about # overridden methods - mode_allowed = ( - self.has_setup or self.has_compute if mode_str == 'calc_mode' - else self.has_apply - ) # either allow all representations or require setting mode to None supported_reps[mode_str] = ( list(Container.array_representations) + [MultiDimBinning] @@ -184,6 +183,19 @@ def __init__( or not isinstance(supported_reps[mode_str], Sequence)): supported_reps[mode_str] = [supported_reps[mode_str]] + if not mode_allowed and supported_reps[mode_str] != [None]: + # TODO: Pipeline currently only checks apply_modes + # for consistency + logging.warning( + "Service %s.%s purports to support %ss=%s," + " even though it does not implement the corresponding" + " functions. As a result, PISA could be tricked into" + " accepting a pipeline configuration which performs unphysical" + " representation transformations. Only proceed if you understand" + " what you are doing.", self.stage_name, self.service_name, + mode_str, supported_reps[mode_str] + ) + self.supported_reps = supported_reps """Dictionary of supported representations. Override in subclass if desired.""" From e83d6eaaa984b92758dd40dc304f96719145afda Mon Sep 17 00:00:00 2001 From: T Ehrhardt Date: Thu, 28 May 2026 19:20:51 +0200 Subject: [PATCH 16/22] auto-generate a service implementation reference table (md or csv) and include md output in stage modes notebook for now (TODO: fix notebook) [no ci] --- pisa_examples/pisa_modes.ipynb | 358 ++++++++++----------------------- pisa_tests/test_services.py | 194 +++++++++++++++++- 2 files changed, 297 insertions(+), 255 deletions(-) diff --git a/pisa_examples/pisa_modes.ipynb b/pisa_examples/pisa_modes.ipynb index 92d6784ca..8a583def4 100644 --- a/pisa_examples/pisa_modes.ipynb +++ b/pisa_examples/pisa_modes.ipynb @@ -15,19 +15,74 @@ "If the output representation of a stage is different than what, for example, the next stage needs to have as input, the output is automatically translated by PISA (translation between data representations). So you can mix and match, but be aware that translations will introduce computational cost and hence may slow things down." ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Service implementation reference\n", + "This [auto-generated](https://github.com/icecube/pisa/blob/master/pisa_tests/test_services.py) table documents which methods each service implements, which representations it supports, as well as any deviant behavior or properties to be aware of.\n", + "It currently only contains services that can be **instantiated without importing optional PISA dependencies**.\n", + "\n", + "**Legend:**\n", + "- **has_setup/compute/apply**: whether the service overrides setup/compute/apply_function (✓ = yes, ✗ = no)\n", + "- **calc_mode support**: allowed representations during setup/compute steps\n", + "- **apply_mode support**: allowed representations during apply step\n", + "- **Notes**: special behaviors, restrictions, problems, etc.\n", + "\n", + "| Service | has_setup | has_compute | has_apply | calc_mode support | apply_mode support | Notes |\n", + "|---------|:---------:|:-----------:|:---------:|:-----------------:|:------------------:|-------|\n", + "| **absorption.earth_absorption** | ✓ | ✓ | ✓ | \"events\", \"log_events\", MultiDimBinning | \"events\", \"log_events\", MultiDimBinning | |\n", + "| **aeff.aeff** | ✗ | ✗ | ✓ | None | \"events\", \"log_events\", MultiDimBinning | |\n", + "| **aeff.param** | ✗ | ✗ | ✓ | None | \"events\", \"log_events\", MultiDimBinning | |\n", + "| **aeff.weight** | ✗ | ✗ | ✓ | None | \"events\", \"log_events\", MultiDimBinning | |\n", + "| **aeff.weight_hnl** | ✗ | ✗ | ✓ | None | \"events\", \"log_events\", MultiDimBinning | |\n", + "| **background.atm_muons** | ✓ | ✗ | ✓ | \"events\", \"log_events\", MultiDimBinning | \"events\", \"log_events\", MultiDimBinning | |\n", + "| **cont_sys.snowstorm_hist** | ✓ | ✓ | ✓ | \"events\" | None, MultiDimBinning | |\n", + "| **data.csv_data_hist** | ✓ | ✗ | ✗ | \"events\", \"log_events\", MultiDimBinning | None | ⚠ **Implicit caching ([#821](https://github.com/icecube/pisa/issues/821))**, setup only |\n", + "| **data.csv_icc_hist** | ✓ | ✗ | ✓ | \"events\", \"log_events\", MultiDimBinning | \"events\", \"log_events\", MultiDimBinning | |\n", + "| **data.csv_loader** | ✓ | ✗ | ✓ | \"events\" | \"events\" | |\n", + "| **data.grid** | ✓ | ✗ | ✓ | \"events\" | \"events\", \"log_events\", MultiDimBinning | |\n", + "| **data.meows_loader** | ✓ | ✗ | ✓ | \"events\", \"log_events\", MultiDimBinning | \"events\", \"log_events\", MultiDimBinning | |\n", + "| **data.simple_data_loader** | ✓ | ✗ | ✓ | None | \"events\" | |\n", + "| **data.simple_signal** | ✓ | ✗ | ✓ | \"events\" | MultiDimBinning | |\n", + "| **data.sqlite_loader** | ✓ | ✗ | ✓ | \"events\", \"log_events\", MultiDimBinning | \"events\", \"log_events\", MultiDimBinning | |\n", + "| **data.toy_event_generator** | ✓ | ✗ | ✓ | \"events\", \"log_events\", MultiDimBinning | \"events\", \"log_events\", MultiDimBinning | |\n", + "| **discr_sys.csv_hypersurfaces** | ✓ | ✓ | ✓ | MultiDimBinning | MultiDimBinning, \"events\" | |\n", + "| **discr_sys.hypersurfaces** | ✓ | ✓ | ✓ | MultiDimBinning | \"events\", \"log_events\", MultiDimBinning | |\n", + "| **discr_sys.ultrasurfaces** | ✓ | ✓ | ✓ | \"events\" | \"events\", \"log_events\", MultiDimBinning | |\n", + "| **flux.astrophysical** | ✓ | ✓ | ✓ | \"events\", \"log_events\", MultiDimBinning | \"events\", \"log_events\", MultiDimBinning | |\n", + "| **flux.barr_simple** | ✓ | ✓ | ✗ | \"events\", \"log_events\", MultiDimBinning | None | ⚠ **Implicit caching ([#821](https://github.com/icecube/pisa/issues/821))** |\n", + "| **flux.daemon_flux** | ✓ | ✓ | ✗ | \"events\", \"log_events\", MultiDimBinning | None | ⚠ **Implicit caching ([#821](https://github.com/icecube/pisa/issues/821))** |\n", + "| **flux.hillasg** | ✓ | ✓ | ✗ | \"events\", \"log_events\", MultiDimBinning | None | ⚠ **Implicit caching ([#821](https://github.com/icecube/pisa/issues/821))** |\n", + "| **flux.honda_ip** | ✓ | ✓ | ✗ | \"events\", \"log_events\", MultiDimBinning | None | ⚠ **Implicit caching ([#821](https://github.com/icecube/pisa/issues/821))** |\n", + "| **flux.mceq_barr** | ✓ | ✓ | ✗ | \"events\", \"log_events\", MultiDimBinning | None | ⚠ **Implicit caching ([#821](https://github.com/icecube/pisa/issues/821))** |\n", + "| **flux.mceq_barr_red** | ✓ | ✓ | ✗ | \"events\", \"log_events\", MultiDimBinning | None | ⚠ **Implicit caching ([#821](https://github.com/icecube/pisa/issues/821))** |\n", + "| **likelihood.generalized_llh_params** | ✓ | ✗ | ✓ | \"events\", \"log_events\", MultiDimBinning | MultiDimBinning | |\n", + "| **osc.decoherence** | ✓ | ✓ | ✓ | \"events\", \"log_events\", MultiDimBinning | \"events\", \"log_events\", MultiDimBinning | |\n", + "| **osc.globes** | ✓ | ✓ | ✓ | \"events\", \"log_events\", MultiDimBinning | \"events\", \"log_events\", MultiDimBinning | |\n", + "| **osc.prob3** | ✓ | ✓ | ✓ | \"events\", \"log_events\", MultiDimBinning | \"events\", \"log_events\", MultiDimBinning | |\n", + "| **osc.two_nu_osc** | ✗ | ✗ | ✓ | None | \"events\", \"log_events\", MultiDimBinning | |\n", + "| **reco.resolutions** | ✓ | ✗ | ✗ | \"events\" | None | ⚠ **Implicit caching ([#821](https://github.com/icecube/pisa/issues/821))**, setup only |\n", + "| **reco.simple_param** | ✓ | ✗ | ✗ | \"events\", \"log_events\", MultiDimBinning | None | ⚠ **Implicit caching ([#821](https://github.com/icecube/pisa/issues/821))**, setup only |\n", + "| **utils.add_indices** | ✓ | ✗ | ✗ | \"events\" | MultiDimBinning | ⚠ **Implicit caching ([#821](https://github.com/icecube/pisa/issues/821))**, setup only |\n", + "| **utils.adhoc_sys** | ✓ | ✗ | ✓ | \"events\" | \"events\" | |\n", + "| **utils.bootstrap** | ✓ | ✗ | ✓ | \"events\" | \"events\", \"log_events\", MultiDimBinning | |\n", + "| **utils.fix_error** | ✓ | ✓ | ✓ | \"events\", \"log_events\", MultiDimBinning | \"events\", \"log_events\", MultiDimBinning | |\n", + "| **utils.hist** | ✓ | ✗ | ✓ | MultiDimBinning, \"events\" | None, MultiDimBinning | |\n", + "| **utils.kde** | ✓ | ✗ | ✓ | \"events\" | MultiDimBinning | |\n", + "| **utils.kfold** | ✓ | ✗ | ✓ | \"events\" | \"events\", \"log_events\", MultiDimBinning | |\n", + "| **utils.set_variance** | ✓ | ✓ | ✓ | MultiDimBinning | MultiDimBinning | |\n", + "| **xsec.correct_charm_y** | ✓ | ✗ | ✓ | \"events\", \"log_events\", MultiDimBinning | \"events\", \"log_events\", MultiDimBinning | |\n", + "| **xsec.dis_sys** | ✓ | ✗ | ✓ | \"events\" | \"events\", \"log_events\", MultiDimBinning | |\n", + "| **xsec.genie_sys** | ✓ | ✗ | ✓ | \"events\", \"log_events\", MultiDimBinning | \"events\", \"log_events\", MultiDimBinning | |\n", + "| **xsec.nutau_xsec** | ✓ | ✓ | ✓ | \"events\", \"log_events\", MultiDimBinning | \"events\", \"log_events\", MultiDimBinning | |" + ] + }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "<< PISA is running in double precision (FP64) mode; numba is running on CPU (single core) >>\n" - ] - } - ], + "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", @@ -50,8 +105,7 @@ "metadata": {}, "outputs": [], "source": [ - "mixed_modes_model = Pipeline(\"settings/pipeline/IceCube_3y_neutrinos.cfg\")\n", - "mixed_modes_model.profile = True" + "mixed_modes_model = Pipeline(\"settings/pipeline/IceCube_3y_neutrinos.cfg\", profile=True)" ] }, { @@ -60,8 +114,7 @@ "metadata": {}, "outputs": [], "source": [ - "events_modes_model = Pipeline(\"settings/pipeline/IceCube_3y_neutrinos.cfg\")\n", - "events_modes_model.profile = True\n", + "events_modes_model = Pipeline(\"settings/pipeline/IceCube_3y_neutrinos.cfg\", profile=True)\n", "\n", "events_modes_model.stages[1].calc_mode = \"events\"\n", "events_modes_model.stages[2].calc_mode = \"events\"\n", @@ -74,10 +127,23 @@ "cell_type": "code", "execution_count": 4, "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "ValueError", + "evalue": "apply_mode of type is not supported by data.csv_loader", + "output_type": "error", + "traceback": [ + "\u001b[31m---------------------------------------------------------------------------\u001b[39m", + "\u001b[31mValueError\u001b[39m Traceback (most recent call last)", + "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[4]\u001b[39m\u001b[32m, line 5\u001b[39m\n\u001b[32m 1\u001b[39m grid_modes_model = Pipeline(\u001b[33m\"settings/pipeline/IceCube_3y_neutrinos.cfg\"\u001b[39m, profile=\u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[32m 2\u001b[39m \n\u001b[32m 3\u001b[39m true_binning = grid_modes_model.stages[\u001b[32m1\u001b[39m].calc_mode\n\u001b[32m 4\u001b[39m \n\u001b[32m----> \u001b[39m\u001b[32m5\u001b[39m grid_modes_model.stages[\u001b[32m0\u001b[39m].apply_mode = true_binning\n\u001b[32m 6\u001b[39m grid_modes_model.stages[\u001b[32m1\u001b[39m].apply_mode = true_binning\n\u001b[32m 7\u001b[39m grid_modes_model.stages[\u001b[32m2\u001b[39m].apply_mode = true_binning\n\u001b[32m 8\u001b[39m grid_modes_model.stages[\u001b[32m3\u001b[39m].apply_mode = true_binning\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/software/pisa/pisa/core/stage.py:356\u001b[39m, in \u001b[36mStage.apply_mode\u001b[39m\u001b[34m(self, value)\u001b[39m\n\u001b[32m 354\u001b[39m \u001b[38;5;250m\u001b[39m\u001b[33;03m\"\"\"Set `apply_mode` after checking the validity of `value`\"\"\"\u001b[39;00m\n\u001b[32m 355\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m value != \u001b[38;5;28mself\u001b[39m.apply_mode:\n\u001b[32m--> \u001b[39m\u001b[32m356\u001b[39m \u001b[30;43mself\u001b[39;49m\u001b[30;43m.\u001b[39;49m\u001b[30;43m_check_representation\u001b[39;49m\u001b[30;43m(\u001b[39;49m\u001b[30;43mrep\u001b[39;49m\u001b[30;43m=\u001b[39;49m\u001b[30;43mvalue\u001b[39;49m\u001b[30;43m,\u001b[39;49m\u001b[30;43m \u001b[39;49m\u001b[30;43mmode\u001b[39;49m\u001b[30;43m=\u001b[39;49m\u001b[30;43m'\u001b[39;49m\u001b[30;43mapply_mode\u001b[39;49m\u001b[30;43m'\u001b[39;49m\u001b[30;43m,\u001b[39;49m\n\u001b[32m 357\u001b[39m \u001b[30;43m \u001b[39;49m\u001b[30;43malways_allow_none\u001b[39;49m\u001b[30;43m=\u001b[39;49m\u001b[30;43;01mFalse\u001b[39;49;00m\u001b[30;43m)\u001b[39;49m\n\u001b[32m 358\u001b[39m \u001b[38;5;28mself\u001b[39m._apply_mode = value\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/software/pisa/pisa/core/stage.py:376\u001b[39m, in \u001b[36mStage._check_representation\u001b[39m\u001b[34m(self, rep, mode, always_allow_none)\u001b[39m\n\u001b[32m 371\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[32m 372\u001b[39m \u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mmode\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m=\u001b[39m\u001b[33m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mrep\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m'\u001b[39m\u001b[33m is not supported by \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m.stage_name\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m\"\u001b[39m\n\u001b[32m 373\u001b[39m \u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33m.\u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m.service_name\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m\"\u001b[39m\n\u001b[32m 374\u001b[39m )\n\u001b[32m 375\u001b[39m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28mtype\u001b[39m(rep) \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m.supported_reps[mode]:\n\u001b[32m--> \u001b[39m\u001b[32m376\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[32m 377\u001b[39m \u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mmode\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m of type \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mtype\u001b[39m(rep)\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m is not supported by \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m.stage_name\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m\"\u001b[39m\n\u001b[32m 378\u001b[39m \u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33m.\u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m.service_name\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m\"\u001b[39m\n\u001b[32m 379\u001b[39m )\n", + "\u001b[31mValueError\u001b[39m: apply_mode of type is not supported by data.csv_loader" + ] + } + ], "source": [ - "grid_modes_model = Pipeline(\"settings/pipeline/IceCube_3y_neutrinos.cfg\")\n", - "grid_modes_model.profile = True\n", + "grid_modes_model = Pipeline(\"settings/pipeline/IceCube_3y_neutrinos.cfg\", profile=True)\n", "\n", "true_binning = grid_modes_model.stages[1].calc_mode\n", "\n", @@ -94,168 +160,27 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
stage number name calc_mode apply_mode has setup has compute has apply # fixed params # free params
0 csv_loader events events True False True 0 0
1 honda_ip \"true_allsky_fine\":\n", - "200 (true_energy) x 200 (true_coszen) events True True False 1 0
2 barr_simple \"true_allsky_fine\":\n", - "200 (true_energy) x 200 (true_coszen) events True True False 1 4
3 prob3 \"true_allsky_fine\":\n", - "200 (true_energy) x 200 (true_coszen) events True True True 9 3
4 aeff events events False False True 2 3
5 hist events \"dragon_datarelease\":\n", - "8 (reco_energy) x 8 (reco_coszen) x 2 (pid) True False True 0 0
6hypersurfaces \"dragon_datarelease\":\n", - "8 (reco_energy) x 8 (reco_coszen) x 2 (pid) \"dragon_datarelease\":\n", - "8 (reco_energy) x 8 (reco_coszen) x 2 (pid) True True True 0 5
" - ], - "text/plain": [ - " stage number | name | calc_mode | apply_mode | has setup | has compute | has apply | # fixed params | # free params\n", - "----------------+---------------+---------------------------------------------+---------------------------------------------+-------------+---------------+-------------+------------------+-----------------\n", - " 0 | csv_loader | events | events | True | False | True | 0 | 0\n", - " 1 | honda_ip | \"true_allsky_fine\": | events | True | True | False | 1 | 0\n", - " | | 200 (true_energy) x 200 (true_coszen) | | | | | |\n", - " 2 | barr_simple | \"true_allsky_fine\": | events | True | True | False | 1 | 4\n", - " | | 200 (true_energy) x 200 (true_coszen) | | | | | |\n", - " 3 | prob3 | \"true_allsky_fine\": | events | True | True | True | 9 | 3\n", - " | | 200 (true_energy) x 200 (true_coszen) | | | | | |\n", - " 4 | aeff | events | events | False | False | True | 2 | 3\n", - " 5 | hist | events | \"dragon_datarelease\": | True | False | True | 0 | 0\n", - " | | | 8 (reco_energy) x 8 (reco_coszen) x 2 (pid) | | | | |\n", - " 6 | hypersurfaces | \"dragon_datarelease\": | \"dragon_datarelease\": | True | True | True | 0 | 5\n", - " | | 8 (reco_energy) x 8 (reco_coszen) x 2 (pid) | 8 (reco_energy) x 8 (reco_coszen) x 2 (pid) | | | | |" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "mixed_modes_model" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
stage number name calc_mode apply_mode has setup has compute has apply # fixed params # free params
0 csv_loader events events True False True 0 0
1 honda_ip events events True True False 1 0
2 barr_simple events events True True False 1 4
3 prob3 events events True True True 9 3
4 aeff events events False False True 2 3
5 hist events \"dragon_datarelease\":\n", - "8 (reco_energy) x 8 (reco_coszen) x 2 (pid) True False True 0 0
6hypersurfaces \"dragon_datarelease\":\n", - "8 (reco_energy) x 8 (reco_coszen) x 2 (pid) \"dragon_datarelease\":\n", - "8 (reco_energy) x 8 (reco_coszen) x 2 (pid) True True True 0 5
" - ], - "text/plain": [ - " stage number | name | calc_mode | apply_mode | has setup | has compute | has apply | # fixed params | # free params\n", - "----------------+---------------+---------------------------------------------+---------------------------------------------+-------------+---------------+-------------+------------------+-----------------\n", - " 0 | csv_loader | events | events | True | False | True | 0 | 0\n", - " 1 | honda_ip | events | events | True | True | False | 1 | 0\n", - " 2 | barr_simple | events | events | True | True | False | 1 | 4\n", - " 3 | prob3 | events | events | True | True | True | 9 | 3\n", - " 4 | aeff | events | events | False | False | True | 2 | 3\n", - " 5 | hist | events | \"dragon_datarelease\": | True | False | True | 0 | 0\n", - " | | | 8 (reco_energy) x 8 (reco_coszen) x 2 (pid) | | | | |\n", - " 6 | hypersurfaces | \"dragon_datarelease\": | \"dragon_datarelease\": | True | True | True | 0 | 5\n", - " | | 8 (reco_energy) x 8 (reco_coszen) x 2 (pid) | 8 (reco_energy) x 8 (reco_coszen) x 2 (pid) | | | | |" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "events_modes_model" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
stage number name calc_mode apply_mode has setup has compute has apply # fixed params # free params
0 csv_loader events \"true_allsky_fine\":\n", - "200 (true_energy) x 200 (true_coszen) True False True 0 0
1 honda_ip \"true_allsky_fine\":\n", - "200 (true_energy) x 200 (true_coszen) \"true_allsky_fine\":\n", - "200 (true_energy) x 200 (true_coszen) True True False 1 0
2 barr_simple \"true_allsky_fine\":\n", - "200 (true_energy) x 200 (true_coszen) \"true_allsky_fine\":\n", - "200 (true_energy) x 200 (true_coszen) True True False 1 4
3 prob3 \"true_allsky_fine\":\n", - "200 (true_energy) x 200 (true_coszen) \"true_allsky_fine\":\n", - "200 (true_energy) x 200 (true_coszen) True True True 9 3
4 aeff \"true_allsky_fine\":\n", - "200 (true_energy) x 200 (true_coszen) \"true_allsky_fine\":\n", - "200 (true_energy) x 200 (true_coszen) False False True 2 3
5 hist \"true_allsky_fine\":\n", - "200 (true_energy) x 200 (true_coszen) \"dragon_datarelease\":\n", - "8 (reco_energy) x 8 (reco_coszen) x 2 (pid) True False True 0 0
6hypersurfaces \"dragon_datarelease\":\n", - "8 (reco_energy) x 8 (reco_coszen) x 2 (pid) \"dragon_datarelease\":\n", - "8 (reco_energy) x 8 (reco_coszen) x 2 (pid) True True True 0 5
" - ], - "text/plain": [ - " stage number | name | calc_mode | apply_mode | has setup | has compute | has apply | # fixed params | # free params\n", - "----------------+---------------+---------------------------------------------+---------------------------------------------+-------------+---------------+-------------+------------------+-----------------\n", - " 0 | csv_loader | events | \"true_allsky_fine\": | True | False | True | 0 | 0\n", - " | | | 200 (true_energy) x 200 (true_coszen) | | | | |\n", - " 1 | honda_ip | \"true_allsky_fine\": | \"true_allsky_fine\": | True | True | False | 1 | 0\n", - " | | 200 (true_energy) x 200 (true_coszen) | 200 (true_energy) x 200 (true_coszen) | | | | |\n", - " 2 | barr_simple | \"true_allsky_fine\": | \"true_allsky_fine\": | True | True | False | 1 | 4\n", - " | | 200 (true_energy) x 200 (true_coszen) | 200 (true_energy) x 200 (true_coszen) | | | | |\n", - " 3 | prob3 | \"true_allsky_fine\": | \"true_allsky_fine\": | True | True | True | 9 | 3\n", - " | | 200 (true_energy) x 200 (true_coszen) | 200 (true_energy) x 200 (true_coszen) | | | | |\n", - " 4 | aeff | \"true_allsky_fine\": | \"true_allsky_fine\": | False | False | True | 2 | 3\n", - " | | 200 (true_energy) x 200 (true_coszen) | 200 (true_energy) x 200 (true_coszen) | | | | |\n", - " 5 | hist | \"true_allsky_fine\": | \"dragon_datarelease\": | True | False | True | 0 | 0\n", - " | | 200 (true_energy) x 200 (true_coszen) | 8 (reco_energy) x 8 (reco_coszen) x 2 (pid) | | | | |\n", - " 6 | hypersurfaces | \"dragon_datarelease\": | \"dragon_datarelease\": | True | True | True | 0 | 5\n", - " | | 8 (reco_energy) x 8 (reco_coszen) x 2 (pid) | 8 (reco_energy) x 8 (reco_coszen) x 2 (pid) | | | | |" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "grid_modes_model" ] @@ -264,23 +189,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We can compare timings. Event-by-event it takes around 8 minutes! The two other modes around 25 seconds." + "We can compare timings. Event-by-event it takes around 8 minutes! The two other modes around 25 seconds.\n", + "\n", + "**Note**: To speed up the following `get_outputs()` calls, consider running this notebook after having set the environment variables `PISA_TARGET=\"parallel\"` and `PISA_NUM_THREADS = 1>`." ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "CPU times: user 7min 28s, sys: 349 ms, total: 7min 28s\n", - "Wall time: 7min 28s\n" - ] - } - ], + "outputs": [], "source": [ "%%time\n", "events = events_modes_model.get_outputs()" @@ -288,18 +206,9 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "CPU times: user 23.5 s, sys: 51.9 ms, total: 23.6 s\n", - "Wall time: 23.6 s\n" - ] - } - ], + "outputs": [], "source": [ "%%time\n", "mixed = mixed_modes_model.get_outputs()" @@ -307,18 +216,9 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "CPU times: user 26.5 s, sys: 3.95 s, total: 30.4 s\n", - "Wall time: 23.7 s\n" - ] - } - ], + "outputs": [], "source": [ "%%time\n", "grid = grid_modes_model.get_outputs()" @@ -333,22 +233,9 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "

" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "fig, ax = plt.subplots(2, 3, figsize=(20, 7))\n", "plt.subplots_adjust(hspace=0.5)\n", @@ -375,22 +262,9 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "fig, axes = plt.subplots(3,4, figsize=(24,10))\n", "plt.subplots_adjust(hspace=0.5)\n", @@ -404,22 +278,9 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "fig, axes = plt.subplots(3,4, figsize=(24,10))\n", "plt.subplots_adjust(hspace=0.5)\n", @@ -430,18 +291,11 @@ "for m, ax in zip(diff, axes):\n", " m.plot(ax=ax, symm=True)" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -455,7 +309,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.4" + "version": "3.14.5" } }, "nbformat": 4, diff --git a/pisa_tests/test_services.py b/pisa_tests/test_services.py index f84e3e034..4e0ae786d 100755 --- a/pisa_tests/test_services.py +++ b/pisa_tests/test_services.py @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """ Try to simply run every existing service by automatically deriving as many @@ -14,9 +14,11 @@ from argparse import ArgumentDefaultsHelpFormatter, ArgumentParser from importlib import import_module +import os from os import walk from os.path import isfile, join, relpath import sys +from typing import List, Dict, Tuple import numpy as np @@ -47,7 +49,7 @@ __author__ = "T. Ehrhardt, J. Weldert" -__license__ = """Copyright (c) 2014-2024, The IceCube Collaboration +__license__ = """Copyright (c) 2014-2026, The IceCube Collaboration Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -202,8 +204,21 @@ def test_services( skip_services=SKIP_SERVICES, allow_missing=OPTIONAL_MODULES, verbosity=Levels.WARN, + output_matrix=None ): - """Modelled after `run_unit_tests.run_unit_tests`""" + """Modelled after `run_unit_tests.run_unit_tests` + + Parameters + ---------- + path : str (default: STAGES_PATH) + init_test : str (default: INIT_TEST_NAME) + skip_services : array-like (default: SKIP_SERVICES) + allow_missing : array-like (default: OPTIONAL_MODULES) + verbosity : int (default: Levels.WARN) + output_matrix : str, optional + If provided, write service implementation matrix to this file path. + Format controlled by file extension (.md or .csv accepted). + """ if allow_missing is None: allow_missing = [] elif isinstance(allow_missing, str): @@ -215,6 +230,7 @@ def test_services( nsuccesses = 0 stage_dot_services_failed_ignored = [] stage_dot_services_failed = [] + services_info = [] # for collecting service metadata set_verbosity(verbosity) for rel_file_path, service_names in services.items(): @@ -305,6 +321,14 @@ def test_services( stage_dot_services_failed.append(stage_dot_service) continue + # Collect service metadata + try: + services_info.append(collect_service_info(service)) + except Exception as e: + logging.warning( + PFX + f"Failed to collect metadata for {stage_dot_service}: {e}" + ) + if service.data is None: # For data services, setup usually adds to `data` attribute # (`Pipeline.setup()` assigns empty `ContainerSet`) @@ -394,6 +418,27 @@ def test_services( PFX + f"{nfail_ignored} out of {nfail} failures have been ignored." ) nfail_remain = nfail - nfail_ignored + + # Output matrix file if requested + if output_matrix and services_info: + rootname, ext = os.path.splitext(output_matrix) + logging.info(PFX + f"Generating service matrix ({ext} format)...") + try: + if ext.lower() == ".csv": + matrix_content = generate_csv_matrix(services_info) + else: + if ext.lower() != ".md": + logging.warning("Unknown service matrix format requested. " + "Will produce markdown format instead.") + matrix_content = generate_markdown_matrix(services_info) + + with open(output_matrix, 'w') as f: + f.write(matrix_content) + logging.info(PFX + f"Service matrix written to {output_matrix}") + + except Exception as e: + logging.error(PFX + f"Failed to generate service matrix: {e}") + if nfail_remain > 0: sys.stdout.flush() sys.stderr.write("\n\n\n") @@ -403,6 +448,140 @@ def test_services( ) +def format_supported_reps(reps_list) -> str: + """Format supported representations for display in the matrix.""" + if not reps_list: + return "None" + + formatted = [] + for rep in reps_list: + if rep is None: + formatted.append("None") + elif isinstance(rep, str): + formatted.append(f'"{rep}"') + elif rep is MultiDimBinning: + formatted.append("MultiDimBinning") + else: + formatted.append(str(rep)) + + if len(formatted) == 1: + return formatted[0] + return ", ".join(formatted) + + +def collect_service_info(service) -> Dict: + """Extract service implementation info from an instantiated Stage.""" + return { + 'stage_name': service.stage_name, + 'service_name': service.service_name, + 'has_setup': service.has_setup, + 'has_compute': service.has_compute, + 'has_apply': service.has_apply, + 'calc_mode_support': format_supported_reps(service.supported_reps.get('calc_mode', [])), + 'apply_mode_support': format_supported_reps(service.supported_reps.get('apply_mode', [])), + } + + +def generate_service_notes(info: Dict) -> str: + """Auto-detect caching issues and other possible oddities + and produce corresponding notes.""" + notes = [] + if not info['has_apply']: + notes.append("⚠️ **Implicit caching ([#821](https://github.com/icecube/pisa/issues/821))**") + if not info['has_setup'] and not info['has_compute'] and not info['has_apply']: + notes.append("init. only") + elif not info['has_apply'] and not info['has_compute']: + notes.append("setup only") + notes = ", ".join(notes) + return notes + + +#TODO: document expected container keys also? +def generate_markdown_matrix(services_info: List[Dict]) -> str: + """Generate markdown table from collected service information.""" + # Sort by stage_name, then service_name + services_info = sorted( + services_info, + key=lambda x: (x['stage_name'], x['service_name']) + ) + + lines = [ + "## Service implementation reference", + "This [auto-generated](https://github.com/icecube/pisa/blob/master/pisa_tests/test_services.py) table" + " documents which methods each service implements, which representations it supports, as well as any" + " deviant behavior or properties to be aware of.", + "It currently only contains services that can be **instantiated without importing optional PISA dependencies**.", + "", + "**Legend:**", + "- **has_setup/compute/apply**: whether the service overrides setup/compute/apply_function (✓ = yes, ✗ = no)", + "- **calc_mode support**: allowed representations during setup/compute steps", + "- **apply_mode support**: allowed representations during apply step", + "- **Notes**: special behaviors, restrictions, problems, etc.", + "", + "| Service | has_setup | has_compute | has_apply | calc_mode support | apply_mode support | Notes |", + "|---------|:---------:|:-----------:|:---------:|:-----------------:|:------------------:|-------|", + ] + + for info in services_info: + setup_icon = "✓" if info['has_setup'] else "✗" + compute_icon = "✓" if info['has_compute'] else "✗" + apply_icon = "✓" if info['has_apply'] else "✗" + + service_full_name = f"**{info['stage_name']}.{info['service_name']}**" + notes = generate_service_notes(info) + + line = ( + f"| {service_full_name} | {setup_icon} | {compute_icon} | {apply_icon} | " + f"{info['calc_mode_support']} | {info['apply_mode_support']} | {notes} |" + ) + lines.append(line) + + return "\n".join(lines) + + +def generate_csv_matrix(services_info: List[Dict], filepath: str = None) -> str: + """Generate CSV table from collected service information (for external processing).""" + import csv + from io import StringIO + + # Sort by stage_name, then service_name + services_info = sorted( + services_info, + key=lambda x: (x['stage_name'], x['service_name']) + ) + + output = StringIO() + writer = csv.DictWriter( + output, + fieldnames=[ + 'Service', 'has_setup', 'has_compute', 'has_apply', + 'calc_mode_support', 'apply_mode_support', 'Notes' + ] + ) + + writer.writeheader() + for info in services_info: + setup_icon = "Yes" if info['has_setup'] else "No" + compute_icon = "Yes" if info['has_compute'] else "No" + apply_icon = "Yes" if info['has_apply'] else "No" + + notes = generate_service_notes(info) + + writer.writerow({ + 'Service': f"{info['stage_name']}.{info['service_name']}", + 'has_setup': setup_icon, + 'has_compute': compute_icon, + 'has_apply': apply_icon, + 'calc_mode_support': info['calc_mode_support'], + 'apply_mode_support': info['apply_mode_support'], + 'Notes': notes, + }) + + result = output.getvalue() + output.close() + return result + + def parse_args(description=__doc__): """Parse command line arguments""" parser = ArgumentParser(description=description, @@ -410,6 +589,14 @@ def parse_args(description=__doc__): parser.add_argument( "-v", action="count", default=Levels.WARN, help="set verbosity level" ) + parser.add_argument( + "--output-matrix", + metavar="FILE", + default=None, + help="""If desired, write a service implementation overview table to + this file, giving either .md (markdown) or .csv (comma-separated values) + file extension to indicate the desired format for the output table.""" + ) args = parser.parse_args() return args @@ -419,6 +606,7 @@ def main(): args = parse_args() kwargs = vars(args) kwargs["verbosity"] = kwargs.pop("v") + kwargs["output_matrix"] = kwargs.pop("output_matrix") test_services(**kwargs) logging.info(PFX + 'Services testing done.') From 2f7c937b005e2ca31d2b74afcf99297089376980 Mon Sep 17 00:00:00 2001 From: T Ehrhardt Date: Fri, 29 May 2026 19:07:25 +0200 Subject: [PATCH 17/22] change default translation mode for any 'weight'-like variable --- pisa/core/container.py | 94 ++++++++++++++++++++++++++++-------------- 1 file changed, 63 insertions(+), 31 deletions(-) diff --git a/pisa/core/container.py b/pisa/core/container.py index 2e065ec15..edc940996 100644 --- a/pisa/core/container.py +++ b/pisa/core/container.py @@ -438,23 +438,41 @@ def __getitem__(self, key): return data def __setitem__(self, key, data): - + """Set `self[key]` to `data`. + + Invalidates all representations but the current one, which is set to + valid, and set the translation mode to + :py:attr:`Container.default_translation_mode`, unless the string "weight" + is part of `key`, in which case the translation mode is set to "sum". + + Parameters + ---------- + key : string + data identifier/variable + data : ndarray, PISA Map or (array, binning)-tuple + data sample to add to the container + """ if self.is_map: if key in self.representation.names: - raise Exception(f'Cannot add variable {key}, as it is a binning dimension') - - self.__add_data(key, data) - if not key in self.tranlation_modes.keys(): - self.tranlation_modes[key] = self.default_translation_mode - + raise Exception( + f'Cannot add variable {key}, as it is a binning dimension' + ) + + self.__add_data(key, data) + + if not key in self.tranlation_modes: + if "weight" in key.lower(): + self.tranlation_modes[key] = "sum" + else: + self.tranlation_modes[key] = self.default_translation_mode self.mark_changed(key) - + def __add_data(self, key, data): """ Parameters ---------- key : string - identifier + data identifier/variable data : ndarray, PISA Map or (array, binning)-tuple is_flat : bool is the data already flattened (i.e. the binning dimensions unrolled) @@ -561,49 +579,53 @@ def get_map(self, key, error=None): def __iter__(self): """iterate over all keys in container""" return self.keys - + def translate(self, key, src_representation): - '''translate variable from source representation - + '''Translate data for variable `key` from source rep. to current rep. + + Afterwards, both source and destination representation will be valid. + + Parameters + ---------- key : str - src_representation : representation present in container - + data identifier/variable + src_representation : hashable object, e.g. str or MultiDimBinning + some representation present in container ''' - assert hash(src_representation) in self.representation_keys - + dest_representation = self.representation if hash(src_representation) == hash(dest_representation): # nothing to do - return - + return + from_map = isinstance(src_representation, MultiDimBinning) to_map = isinstance(dest_representation, MultiDimBinning) - - if self.tranlation_modes[key] == 'average': + + if self.tranlation_modes[key] == 'average': if from_map and to_map: out = self.resample(key, src_representation, dest_representation) self.representation = dest_representation self[key] = out - + elif to_map: out = self.array_to_binned(key, src_representation, dest_representation) self.representation = dest_representation self[key] = out - + elif from_map: out = self.binned_to_array(key, src_representation, dest_representation) self.representation = dest_representation - self[key] = out - + self[key] = out + elif src_representation == "events" and dest_representation == "log_events": self.representation = "events" logging.trace(f"Container `{self.name}`: taking log of {key}") sample = np.log(self[key]) self.representation = dest_representation self[key] = sample - + elif src_representation == "log_events" and dest_representation == "events": self.representation = "log_events" sample = np.exp(self[key]) @@ -611,8 +633,11 @@ def translate(self, key, src_representation): self[key] = sample else: - raise NotImplementedError(f"translating {src_representation} to {dest_representation}") - + raise NotImplementedError( + f"Translating {src_representation} to {dest_representation}" + " in 'average' mode!" + ) + elif self.tranlation_modes[key] == 'sum': if from_map and to_map: raise NotImplementedError("Map to Map in sum mode needs to integrate over bins.") @@ -623,15 +648,22 @@ def translate(self, key, src_representation): self[key] = out else: - raise NotImplementedError() + # destination rep. is an event-by-event rep., no matter the source rep. + raise NotImplementedError( + f"Translating {src_representation} to {dest_representation}" + " in 'sum' mode!" + ) else: - raise NotImplementedError() - + raise NotImplementedError( + f"Unknown translation mode for variable '{key}':" + f" {self.tranlation_modes[key]}!" + ) + # validate source! self.validity[key][hash(src_representation)] = True - + def auto_translate(self, key): src_representation = self.find_valid_representation(key) if src_representation is None: From 97962cbc80abb2e40f5bd0ab33a000fa4ae79322 Mon Sep 17 00:00:00 2001 From: T Ehrhardt Date: Mon, 1 Jun 2026 18:15:13 +0200 Subject: [PATCH 18/22] remove default_translation_mode Container attribute and rename tranlation_modes -> translation_modes; representation management unit test; update container module docs --- pisa/core/container.py | 144 ++++++++++++++++++++++++++++++----------- pisa/core/pipeline.py | 6 +- 2 files changed, 110 insertions(+), 40 deletions(-) diff --git a/pisa/core/container.py b/pisa/core/container.py index 65b796403..8487f8795 100644 --- a/pisa/core/container.py +++ b/pisa/core/container.py @@ -37,8 +37,10 @@ When :py:attr:`validity = True ` for multiple representations of the same data (e.g., energy), a :py:attr:`~Container.precedence` system determines which representation to use as the source for translation, implemented by -:py:meth:`~pisa.core.container.Container.find_valid_representation`. (As of now, all -representations have precedence = 0, however!) +:py:meth:`~pisa.core.container.Container.find_valid_representation`. + +.. attention:: + As of now, all representations have precedence = 0, however! For each variable, the container tracks which representations have valid (up-to-date) copies of that variable: @@ -64,28 +66,32 @@ when event-by-event weights are requested (see below). Instead, the exact event-by-event weights will remain available. -When accessing data with an invalid source representation, +When accessing data in a currently invalid representation, :py:meth:`~Container.auto_translate` is triggered, which ensures synchronization -across representations as needed, i.e., on demand. - -There are different translation modes available, defined on a per-variable basis -in the :py:attr:`~Container.tranlation_modes` (sic!) dictionary attribute, with a -default of "average" (see :py:attr:`~Container.default_translation_mode`): +across representations as needed, i.e., on demand. The feasibility and details +of the translation depend on the **translation mode** assigned to the desired +variable though: as specified by :py:attr:`~Container.valid_translation_modes`, +there are two translation modes available, defined on a per-variable basis in the +:py:attr:`~Container.translation_modes` dictionary attribute: -- "average" mode (default)---for quantities where bin-averaging makes sense +- "average" mode---select for quantities where bin-averaging makes sense - examples: oscillation probabilities, energy reconstruction parameters -- "sum" mode---for quantities where summation makes sense +- "sum" mode---select for quantities where summation makes sense - examples: event weights, raw counts -Specify translation mode for a given variable:: +By default, when data for some variable is initially entered into the container, +the translation mode is assumed to be "sum" by PISA whenever "weight" is part of +the variable name (cf. :py:meth:`~pisa.core.container.Container.__setitem__`), +otherwise "average". This choice can be overridden straightforwardly by +specifying:: container.translation_modes['variable_name'] = 'average' # (or 'sum') -The `Container` supports *three primary transformation types* (source-target combinations): +The `Container` supports **three primary transformation types** (**source-target combinations**): - "events" ↔ "log_events" (requires "average" mode) @@ -123,9 +129,17 @@ Access mechanism: 1. check if data exists in current representation 2. if not, search for valid representation of this variable - 3. if valid representation found: auto-translate to current representation - 4. if no valid representation: raise exception - 5. return data in current representation + 3. if valid representation found, and resulting source-target pair supported + for chosen translation mode: auto-translate to current representation; + otherwise: raise exception + 4. return data in current representation + +.. attention:: + Keep in mind that the above implies that weight-like data will not be translatable + from binned → binned, binned → "events", or binned → "log_events" + (unless its translation mode has been explicitly overriden and set to "average"). + In order to enable such transformations, knowledge of the weight distributions + within each bin would have to be assumed/exploited. For binned representations: * binning dimension arrays accessible by dimension name @@ -150,6 +164,11 @@ container_set.representation = binning # applied to all containers mapset = container_set.get_mapset('variable') # returns MapSet of all +A `ContainerSet` can store *global auxiliary metadata*:: + + container_set['metadata_key'] = arbitrary_python_object # name must be unlike any container's + value = container_set['metadata_key'] + Features: * unified representation management across containers * linking containers for treatment as single :py:class:`VirtualContainer` @@ -166,16 +185,16 @@ from collections.abc import Sequence from collections import defaultdict +import re import numpy as np -import re from pisa import FTYPE from pisa.core.binning import OneDimBinning, MultiDimBinning from pisa.core.map import Map, MapSet from pisa.core.translation import histogram, lookup, resample from pisa.utils.comparisons import ALLCLOSE_KW -from pisa.utils.log import logging +from pisa.utils.log import logging, set_verbosity class ContainerSet(): @@ -466,9 +485,9 @@ class Container(): Precedence for choosing translation source (lower = higher priority). Currently 0 for every representation (TODO). - tranlation_modes : dict[variable_name] -> str + translation_modes : dict[variable_name] -> str Translation mode to use for each variable, e.g. for binning or - resampling: "average" (default) or "sum". + resampling: "average" or "sum". _representations : dict[representation_hash] -> hashable object, e.g. `str` or :py:class:`.MultiDimBinning` Representation storage, organized by hash value @@ -484,11 +503,9 @@ class Container(): system. """ - default_translation_mode = "average" - translation_modes = ("average", "sum") + valid_translation_modes = ("average", "sum") array_representations = ("events", "log_events") - def __init__(self, name, representation='events'): self.name = name self._representation = None @@ -505,7 +522,7 @@ def __init__(self, name, representation='events'): # translation mode # dict of form [variable] - self.tranlation_modes = {} + self.translation_modes = {} # Actual data # dict of form [representation_hash][variable] @@ -640,8 +657,7 @@ def __setitem__(self, key, data): """Set `self[key]` to `data`. Invalidates all representations but the current one, which is set to - valid, and set the translation mode to - :py:attr:`Container.default_translation_mode`, unless the string "weight" + valid, and set the translation mode to "average", unless the string "weight" is part of `key`, in which case the translation mode is set to "sum", or unless a mode has already been set. @@ -660,11 +676,11 @@ def __setitem__(self, key, data): self.__add_data(key, data) - if not key in self.tranlation_modes: + if not key in self.translation_modes: if "weight" in key.lower(): - self.tranlation_modes[key] = "sum" + self.translation_modes[key] = "sum" else: - self.tranlation_modes[key] = self.default_translation_mode + self.translation_modes[key] = "average" self.mark_changed(key) def __add_data(self, key, data): @@ -735,11 +751,10 @@ def __get_data(self, key): if not key in self.keys: if key in self.all_keys: self.auto_translate(key) - #raise KeyError(f'Data {key} not present in chosen representation') else: if key in self._aux_data.keys(): return self._aux_data[key] - raise KeyError(f'Data {key} not present in Container') + raise KeyError(f'Key "{key}" not present in Container "{self.name}"') valid = self.validity[key][hash(self.representation)] if not valid: @@ -759,7 +774,7 @@ def get_hist(self, key): """Return reshaped data as normal n-dimensional histogram""" assert self.is_map, 'Cannot retrieve hists from non-map data' - # retrieve in case needs translation + # retrieve in case needs translation (TODO: unnecessary, cf. data = ...?) self[key] binning = self.representation @@ -808,7 +823,7 @@ def translate(self, key, src_representation): from_map = isinstance(src_representation, MultiDimBinning) to_map = isinstance(dest_representation, MultiDimBinning) - if self.tranlation_modes[key] == 'average': + if self.translation_modes[key] == 'average': if from_map and to_map: out = self.resample(key, src_representation, dest_representation) self.representation = dest_representation @@ -843,11 +858,11 @@ def translate(self, key, src_representation): " in 'average' mode!" ) - elif self.tranlation_modes[key] == 'sum': + elif self.translation_modes[key] == 'sum': if from_map and to_map: raise NotImplementedError("Map to Map in sum mode needs to integrate over bins.") - elif to_map: + if to_map: out = self.array_to_binned(key, src_representation, dest_representation, averaged=False) self.representation = dest_representation self[key] = out @@ -860,9 +875,9 @@ def translate(self, key, src_representation): ) else: - raise NotImplementedError( + raise ValueError( f"Unknown translation mode for variable '{key}':" - f" {self.tranlation_modes[key]}!" + f" '{self.translation_modes[key]}'!" ) # validate source! @@ -1025,6 +1040,9 @@ def get_keep_mask(self, keep_criteria): def test_container(): """Unit tests for :py:class:`Container` class.""" + # 1st set of tests + # ---------------- + # NOTE: Right now the numbers are tuned so that the weights are identical # per bin. If you change binning that's likely not the case anymore and you # inevitably end up with averaged values over bins, which are then not @@ -1043,7 +1061,7 @@ def test_container(): binning_x = OneDimBinning(name='x', num_bins=100, is_lin=True, domain=[0, 100]) binning_y = OneDimBinning(name='y', num_bins=100, is_lin=True, domain=[0, 100]) - binning = MultiDimBinning([binning_x, binning_y]) + binning = MultiDimBinning(name='xy binning', dimensions=[binning_x, binning_y]) logging.trace('Testing container and translation methods') @@ -1073,6 +1091,57 @@ def test_container(): assert np.allclose(a, w, **ALLCLOSE_KW), f'test:\n{a}\n!= ref:\n{w}' + # 2nd set of tests + # ---------------- + # NOTE: Also uses x, y, w arrays but doesn't depend on numerical values + + logging.trace('Testing container representation and validity management') + + container = Container('nue', 'events') + for weight_key in ('weights', 'initial_weights', 'oneweight'): + container[weight_key] = w + assert container.translation_modes[weight_key] == 'sum' + container['x'] = x + assert container.translation_modes['x'] == 'average' + container['y'] = y + assert container.translation_modes['y'] == 'average' + + container.representation = binning + binning_hash = hash(binning) + for k in container.all_keys: + if 'weight' in k: + container[k] *= 1.0 # invalidates 'events' rep. when __setitem__ called + assert container.validity[k][binning_hash] + assert not container.validity[k][hash('events')] + + # Setting invalid mode for binning dimension is irrelevant/ignored + # when attempting to get it in the binned rep. + container.translation_modes['y'] = 'median' + _ = container['y'] + _ = container['x'] # should work just as well + + # However, for other variables, setting invalid mode needs to fail when + # attempting to translate (here from binning -> 'events') + container.translation_modes['oneweight'] = 'division' + container.representation = 'events' + try: + container['oneweight'] + except ValueError: + pass + + # For the weight-like quantities with translation mode set to 'sum', no + # translation back to 'events' is implemented + for weight_key in ('weights', 'initial_weights'): + try: + container[weight_key] + except NotImplementedError: + pass + + # However, if we set 'events' rep. validity to True, this has to work again, + # because no translation is necessary + container.validity['weights'][hash('events')] = True + _ = container['weights'] + def test_container_set(): """Unit tests for :py:class:`ContainerSet` class.""" @@ -1133,5 +1202,6 @@ def test_container_set(): if __name__ == '__main__': + set_verbosity(3) test_container() test_container_set() diff --git a/pisa/core/pipeline.py b/pisa/core/pipeline.py index 8f2bb9224..26c106d96 100755 --- a/pisa/core/pipeline.py +++ b/pisa/core/pipeline.py @@ -425,12 +425,12 @@ def _get_outputs_varbinning(self, output_binning, output_key): if isinstance(output_key, tuple): assert len(output_key) == 2 cc[output_key[0]] = c[output_key[0]][keep] - cc.tranlation_modes[output_key[0]] = 'sum' + cc.translation_modes[output_key[0]] = 'sum' cc[output_key[1]] = np.square(c[output_key[0]][keep]) - cc.tranlation_modes[output_key[1]] = 'sum' + cc.translation_modes[output_key[1]] = 'sum' else: cc[output_key] = c[output_key][keep] - cc.tranlation_modes[output_key] = 'sum' + cc.translation_modes[output_key] = 'sum' containers.append(cc) From 09484fbdfa10d287dafbd7972fb61ece61e68a76 Mon Sep 17 00:00:00 2001 From: T Ehrhardt Date: Wed, 3 Jun 2026 16:05:49 +0200 Subject: [PATCH 19/22] remove apply_mode consistency checks at pipeline level and prepare for defining sum_mode_keys in Container --- pisa/core/container.py | 30 +++++++++--------------------- pisa/core/pipeline.py | 41 ++--------------------------------------- 2 files changed, 11 insertions(+), 60 deletions(-) diff --git a/pisa/core/container.py b/pisa/core/container.py index 8487f8795..9127da66c 100644 --- a/pisa/core/container.py +++ b/pisa/core/container.py @@ -83,10 +83,9 @@ - examples: event weights, raw counts By default, when data for some variable is initially entered into the container, -the translation mode is assumed to be "sum" by PISA whenever "weight" is part of -the variable name (cf. :py:meth:`~pisa.core.container.Container.__setitem__`), -otherwise "average". This choice can be overridden straightforwardly by -specifying:: +the translation mode is assumed to be "sum" by PISA only for variables in +:py:attr:`~pisa.core.container.Container.sum_mode_keys`, otherwise "average". +This choice can be overridden straightforwardly by specifying:: container.translation_modes['variable_name'] = 'average' # (or 'sum') @@ -504,7 +503,11 @@ class Container(): """ valid_translation_modes = ("average", "sum") + """Available translation modes""" + sum_mode_keys = () # TODO + """Variables for which "sum" is assumed as default translation mode""" array_representations = ("events", "log_events") + """Available unbinned data representations""" def __init__(self, name, representation='events'): self.name = name @@ -677,7 +680,7 @@ def __setitem__(self, key, data): self.__add_data(key, data) if not key in self.translation_modes: - if "weight" in key.lower(): + if key in self.sum_mode_keys: self.translation_modes[key] = "sum" else: self.translation_modes[key] = "average" @@ -1098,9 +1101,6 @@ def test_container(): logging.trace('Testing container representation and validity management') container = Container('nue', 'events') - for weight_key in ('weights', 'initial_weights', 'oneweight'): - container[weight_key] = w - assert container.translation_modes[weight_key] == 'sum' container['x'] = x assert container.translation_modes['x'] == 'average' container['y'] = y @@ -1122,6 +1122,7 @@ def test_container(): # However, for other variables, setting invalid mode needs to fail when # attempting to translate (here from binning -> 'events') + container['oneweight'] = w container.translation_modes['oneweight'] = 'division' container.representation = 'events' try: @@ -1129,19 +1130,6 @@ def test_container(): except ValueError: pass - # For the weight-like quantities with translation mode set to 'sum', no - # translation back to 'events' is implemented - for weight_key in ('weights', 'initial_weights'): - try: - container[weight_key] - except NotImplementedError: - pass - - # However, if we set 'events' rep. validity to True, this has to work again, - # because no translation is necessary - container.validity['weights'][hash('events')] = True - _ = container['weights'] - def test_container_set(): """Unit tests for :py:class:`ContainerSet` class.""" diff --git a/pisa/core/pipeline.py b/pisa/core/pipeline.py index 26c106d96..dd6216eac 100755 --- a/pisa/core/pipeline.py +++ b/pisa/core/pipeline.py @@ -119,8 +119,6 @@ def __init__(self, config, profile=False): if isinstance(self.data["output_binning"], VarBinning): self.assert_varbinning_compat() self.assert_exclusive_varbinning() - else: - self.assert_apply_modes_consistency() # check in case someone decided to add a non-daemonflux parameter with daemon_ # in it, which would potentially make penalty calculation incorrect @@ -542,8 +540,6 @@ def run(self): # possible that stage apply_modes got manipulated in between runs if isinstance(self.output_binning, VarBinning): self.assert_varbinning_compat() - else: - self.assert_apply_modes_consistency() if self.profile: start_t = time() self._run_function() @@ -685,38 +681,6 @@ def hash(self): def __hash__(self): return self.hash - def assert_apply_modes_consistency(self): - """Asserts that pipeline setup does not result in non-sensical - transformations between Maps or from Maps to events - (cf. Container.translate: rebinning without averaging is not - implemented because of lacking benefits, and similarly going - from a histogram to events). - """ - ref_binning = None - ref_name = None - for s in self.stages: - # it suffices to start from the first occurrence of a MultiDimBinning - if isinstance(s.apply_mode, MultiDimBinning) and ref_binning is None: - ref_binning = s.apply_mode - ref_name = f"{s.stage_name}.{s.service_name}" - if (isinstance(self.output_binning, MultiDimBinning) and - ref_binning != self.output_binning): - raise ValueError( - f"Stage {ref_name} has '{s.apply_mode}' as apply_mode, which " - f"deviates from the pipeline output binning {self.output_binning}. " - "This configuration would result in an unreliable pipeline output." - ) - elif (ref_binning is not None and s.apply_mode is not None and - s.apply_mode != ref_binning): - # TODO: In case apply_mode=None, check whether calc_mode == ref_binning? - # (see also TODO in assert_varbinning_compat). - raise ValueError( - f"Stage {s.stage_name}.{s.service_name} has '{s.apply_mode}'" - " as apply_mode, which deviates from a previously detected " - f"MultiDimBinning apply_mode, of stage {ref_name}. This " - "configuration would result in an unreliable pipeline output." - ) - def assert_varbinning_compat(self): """Asserts that pipeline setup is compatible with `VarBinning`: all stages need to apply to events (this precludes use with @@ -808,9 +772,8 @@ def output_binning(self, binning): self.assert_exclusive_varbinning(output_binning=binning) self.data["output_binning"] = binning if isinstance(binning, MultiDimBinning): - for s in self.stages: - if isinstance(s.apply_mode, MultiDimBinning): - s.apply_mode = binning + # The `ContainerSet` `self.data` has an updated "output_binning", + # so re-setup `self` (and all included services). self.setup() From cf20190b82ba81f037748cbafaa8603acd6197f5 Mon Sep 17 00:00:00 2001 From: T Ehrhardt Date: Wed, 3 Jun 2026 17:00:39 +0200 Subject: [PATCH 20/22] reintroduce overriding of all binned apply_modes for now, since utils.hist assertion fails otherwise, and adapt pipeline unit test temporarily --- pisa/core/pipeline.py | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/pisa/core/pipeline.py b/pisa/core/pipeline.py index dd6216eac..e465b758c 100755 --- a/pisa/core/pipeline.py +++ b/pisa/core/pipeline.py @@ -477,6 +477,7 @@ def _get_outputs(self, output_binning=None, output_key=None): outputs = self._get_outputs_varbinning(output_binning, output_key) if original_binning is not None: + # reset (FIXME: overrides all binned apply_modes) self.output_binning = original_binning return outputs @@ -772,6 +773,13 @@ def output_binning(self, binning): self.assert_exclusive_varbinning(output_binning=binning) self.data["output_binning"] = binning if isinstance(binning, MultiDimBinning): + for s in self.stages: + if isinstance(s.apply_mode, MultiDimBinning): + # FIXME: this was also done to avoid rebinning + logging.warning("Setting apply_mode of service '%s.%s' to" + " pipeline output binning %s", + s.stage_name, s.service_name, binning) + s.apply_mode = binning # The `ContainerSet` `self.data` has an updated "output_binning", # so re-setup `self` (and all included services). self.setup() @@ -855,20 +863,17 @@ def test_Pipeline(): #current_mat = new_mat # - # Test: detection of inconsistent apply_mode combinations + # Test: check allowed apply_mode combinations # - binned_apply_mode = pipeline.output_binning + binned_apply_mode = pipeline.stages[2].calc_mode assert isinstance(binned_apply_mode, MultiDimBinning) # osc.prob3 apply_mode: pipeline.stages[2].apply_mode = binned_apply_mode - try: - out = pipeline.get_outputs() - except ValueError: - # Needs to fail: going from a binned output (after osc.) to events - # (after aeff) - pass - else: - assert False + assert pipeline.stages[3].apply_mode == "events" + # allowed right now: going from a binned output (after osc.) to events + # (after aeff) + _ = pipeline.get_outputs() + # reset apply mode pipeline.stages[2].apply_mode = "events" @@ -905,7 +910,9 @@ def test_Pipeline(): out = pipeline.get_outputs() counts_tot = sum(out.num_entries.values()) # use an oversampled output binning instead and ensure identical total count - out2 = pipeline.get_outputs(output_binning=pipeline.output_binning.oversample(2)) + oversampled_binning = MultiDimBinning(pipeline.output_binning).oversample(2) + assert oversampled_binning.size == 8 * pipeline.output_binning.size + out2 = pipeline.get_outputs(output_binning=oversampled_binning) counts_tot2 = sum(out2.num_entries.values()) assert np.isclose(counts_tot2, counts_tot) From 2bd25f813ff7bc5ae4becee2e29dc5931f2c763c Mon Sep 17 00:00:00 2001 From: T Ehrhardt Date: Wed, 3 Jun 2026 17:29:17 +0200 Subject: [PATCH 21/22] fix stage modes notebook again [no ci] --- pisa_examples/pisa_modes.ipynb | 277 ++++++++++++++++++++++++++++----- 1 file changed, 237 insertions(+), 40 deletions(-) diff --git a/pisa_examples/pisa_modes.ipynb b/pisa_examples/pisa_modes.ipynb index 8a583def4..5bf236386 100644 --- a/pisa_examples/pisa_modes.ipynb +++ b/pisa_examples/pisa_modes.ipynb @@ -127,60 +127,184 @@ "cell_type": "code", "execution_count": 4, "metadata": {}, - "outputs": [ - { - "ename": "ValueError", - "evalue": "apply_mode of type is not supported by data.csv_loader", - "output_type": "error", - "traceback": [ - "\u001b[31m---------------------------------------------------------------------------\u001b[39m", - "\u001b[31mValueError\u001b[39m Traceback (most recent call last)", - "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[4]\u001b[39m\u001b[32m, line 5\u001b[39m\n\u001b[32m 1\u001b[39m grid_modes_model = Pipeline(\u001b[33m\"settings/pipeline/IceCube_3y_neutrinos.cfg\"\u001b[39m, profile=\u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[32m 2\u001b[39m \n\u001b[32m 3\u001b[39m true_binning = grid_modes_model.stages[\u001b[32m1\u001b[39m].calc_mode\n\u001b[32m 4\u001b[39m \n\u001b[32m----> \u001b[39m\u001b[32m5\u001b[39m grid_modes_model.stages[\u001b[32m0\u001b[39m].apply_mode = true_binning\n\u001b[32m 6\u001b[39m grid_modes_model.stages[\u001b[32m1\u001b[39m].apply_mode = true_binning\n\u001b[32m 7\u001b[39m grid_modes_model.stages[\u001b[32m2\u001b[39m].apply_mode = true_binning\n\u001b[32m 8\u001b[39m grid_modes_model.stages[\u001b[32m3\u001b[39m].apply_mode = true_binning\n", - "\u001b[36mFile \u001b[39m\u001b[32m~/software/pisa/pisa/core/stage.py:356\u001b[39m, in \u001b[36mStage.apply_mode\u001b[39m\u001b[34m(self, value)\u001b[39m\n\u001b[32m 354\u001b[39m \u001b[38;5;250m\u001b[39m\u001b[33;03m\"\"\"Set `apply_mode` after checking the validity of `value`\"\"\"\u001b[39;00m\n\u001b[32m 355\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m value != \u001b[38;5;28mself\u001b[39m.apply_mode:\n\u001b[32m--> \u001b[39m\u001b[32m356\u001b[39m \u001b[30;43mself\u001b[39;49m\u001b[30;43m.\u001b[39;49m\u001b[30;43m_check_representation\u001b[39;49m\u001b[30;43m(\u001b[39;49m\u001b[30;43mrep\u001b[39;49m\u001b[30;43m=\u001b[39;49m\u001b[30;43mvalue\u001b[39;49m\u001b[30;43m,\u001b[39;49m\u001b[30;43m \u001b[39;49m\u001b[30;43mmode\u001b[39;49m\u001b[30;43m=\u001b[39;49m\u001b[30;43m'\u001b[39;49m\u001b[30;43mapply_mode\u001b[39;49m\u001b[30;43m'\u001b[39;49m\u001b[30;43m,\u001b[39;49m\n\u001b[32m 357\u001b[39m \u001b[30;43m \u001b[39;49m\u001b[30;43malways_allow_none\u001b[39;49m\u001b[30;43m=\u001b[39;49m\u001b[30;43;01mFalse\u001b[39;49;00m\u001b[30;43m)\u001b[39;49m\n\u001b[32m 358\u001b[39m \u001b[38;5;28mself\u001b[39m._apply_mode = value\n", - "\u001b[36mFile \u001b[39m\u001b[32m~/software/pisa/pisa/core/stage.py:376\u001b[39m, in \u001b[36mStage._check_representation\u001b[39m\u001b[34m(self, rep, mode, always_allow_none)\u001b[39m\n\u001b[32m 371\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[32m 372\u001b[39m \u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mmode\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m=\u001b[39m\u001b[33m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mrep\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m'\u001b[39m\u001b[33m is not supported by \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m.stage_name\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m\"\u001b[39m\n\u001b[32m 373\u001b[39m \u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33m.\u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m.service_name\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m\"\u001b[39m\n\u001b[32m 374\u001b[39m )\n\u001b[32m 375\u001b[39m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28mtype\u001b[39m(rep) \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m.supported_reps[mode]:\n\u001b[32m--> \u001b[39m\u001b[32m376\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[32m 377\u001b[39m \u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mmode\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m of type \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mtype\u001b[39m(rep)\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m is not supported by \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m.stage_name\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m\"\u001b[39m\n\u001b[32m 378\u001b[39m \u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33m.\u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m.service_name\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m\"\u001b[39m\n\u001b[32m 379\u001b[39m )\n", - "\u001b[31mValueError\u001b[39m: apply_mode of type is not supported by data.csv_loader" - ] - } - ], + "outputs": [], "source": [ "grid_modes_model = Pipeline(\"settings/pipeline/IceCube_3y_neutrinos.cfg\", profile=True)\n", "\n", "true_binning = grid_modes_model.stages[1].calc_mode\n", "\n", - "grid_modes_model.stages[0].apply_mode = true_binning\n", - "grid_modes_model.stages[1].apply_mode = true_binning\n", - "grid_modes_model.stages[2].apply_mode = true_binning\n", - "grid_modes_model.stages[3].apply_mode = true_binning\n", - "grid_modes_model.stages[4].apply_mode = true_binning\n", - "grid_modes_model.stages[4].calc_mode = true_binning\n", + "for s in grid_modes_model.stages[:-2]:\n", + " try:\n", + " s.calc_mode = true_binning\n", + " except:\n", + " pass\n", + " try:\n", + " s.apply_mode = true_binning\n", + " except:\n", + " pass\n", "grid_modes_model.stages[5].calc_mode = true_binning\n", - "\n", "grid_modes_model.setup()" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
stage number name calc_mode apply_mode has setup has compute has apply # fixed params # free params
0 csv_loader events events True False True 0 0
1 honda_ip "true_allsky_fine":\n", + "200 (true_energy) x 200 (true_coszen) True True False 1 0
2 barr_simple "true_allsky_fine":\n", + "200 (true_energy) x 200 (true_coszen) True True False 1 4
3 prob3 "true_allsky_fine":\n", + "200 (true_energy) x 200 (true_coszen) events True True True 9 3
4 aeff events False False True 2 3
5 hist events "dragon_datarelease":\n", + "8 (reco_energy) x 8 (reco_coszen) x 2 (pid) True False True 0 0
6hypersurfaces "dragon_datarelease":\n", + "8 (reco_energy) x 8 (reco_coszen) x 2 (pid) "dragon_datarelease":\n", + "8 (reco_energy) x 8 (reco_coszen) x 2 (pid) True True True 0 5
" + ], + "text/plain": [ + " stage number | name | calc_mode | apply_mode | has setup | has compute | has apply | # fixed params | # free params\n", + "----------------+---------------+---------------------------------------------+---------------------------------------------+-------------+---------------+-------------+------------------+-----------------\n", + " 0 | csv_loader | events | events | True | False | True | 0 | 0\n", + " 1 | honda_ip | \"true_allsky_fine\": | | True | True | False | 1 | 0\n", + " | | 200 (true_energy) x 200 (true_coszen) | | | | | |\n", + " 2 | barr_simple | \"true_allsky_fine\": | | True | True | False | 1 | 4\n", + " | | 200 (true_energy) x 200 (true_coszen) | | | | | |\n", + " 3 | prob3 | \"true_allsky_fine\": | events | True | True | True | 9 | 3\n", + " | | 200 (true_energy) x 200 (true_coszen) | | | | | |\n", + " 4 | aeff | | events | False | False | True | 2 | 3\n", + " 5 | hist | events | \"dragon_datarelease\": | True | False | True | 0 | 0\n", + " | | | 8 (reco_energy) x 8 (reco_coszen) x 2 (pid) | | | | |\n", + " 6 | hypersurfaces | \"dragon_datarelease\": | \"dragon_datarelease\": | True | True | True | 0 | 5\n", + " | | 8 (reco_energy) x 8 (reco_coszen) x 2 (pid) | 8 (reco_energy) x 8 (reco_coszen) x 2 (pid) | | | | |" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "mixed_modes_model" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
stage number name calc_mode apply_mode has setup has compute has apply # fixed params # free params
0 csv_loader events events True False True 0 0
1 honda_ip events True True False 1 0
2 barr_simple events True True False 1 4
3 prob3 events events True True True 9 3
4 aeff events False False True 2 3
5 hist events "dragon_datarelease":\n", + "8 (reco_energy) x 8 (reco_coszen) x 2 (pid) True False True 0 0
6hypersurfaces "dragon_datarelease":\n", + "8 (reco_energy) x 8 (reco_coszen) x 2 (pid) "dragon_datarelease":\n", + "8 (reco_energy) x 8 (reco_coszen) x 2 (pid) True True True 0 5
" + ], + "text/plain": [ + " stage number | name | calc_mode | apply_mode | has setup | has compute | has apply | # fixed params | # free params\n", + "----------------+---------------+---------------------------------------------+---------------------------------------------+-------------+---------------+-------------+------------------+-----------------\n", + " 0 | csv_loader | events | events | True | False | True | 0 | 0\n", + " 1 | honda_ip | events | | True | True | False | 1 | 0\n", + " 2 | barr_simple | events | | True | True | False | 1 | 4\n", + " 3 | prob3 | events | events | True | True | True | 9 | 3\n", + " 4 | aeff | | events | False | False | True | 2 | 3\n", + " 5 | hist | events | \"dragon_datarelease\": | True | False | True | 0 | 0\n", + " | | | 8 (reco_energy) x 8 (reco_coszen) x 2 (pid) | | | | |\n", + " 6 | hypersurfaces | \"dragon_datarelease\": | \"dragon_datarelease\": | True | True | True | 0 | 5\n", + " | | 8 (reco_energy) x 8 (reco_coszen) x 2 (pid) | 8 (reco_energy) x 8 (reco_coszen) x 2 (pid) | | | | |" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "events_modes_model" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
stage number name calc_mode apply_mode has setup has compute has apply # fixed params # free params
0 csv_loader events events True False True 0 0
1 honda_ip "true_allsky_fine":\n", + "200 (true_energy) x 200 (true_coszen) True True False 1 0
2 barr_simple "true_allsky_fine":\n", + "200 (true_energy) x 200 (true_coszen) True True False 1 4
3 prob3 "true_allsky_fine":\n", + "200 (true_energy) x 200 (true_coszen) "true_allsky_fine":\n", + "200 (true_energy) x 200 (true_coszen) True True True 9 3
4 aeff "true_allsky_fine":\n", + "200 (true_energy) x 200 (true_coszen) False False True 2 3
5 hist "true_allsky_fine":\n", + "200 (true_energy) x 200 (true_coszen) "dragon_datarelease":\n", + "8 (reco_energy) x 8 (reco_coszen) x 2 (pid) True False True 0 0
6hypersurfaces "dragon_datarelease":\n", + "8 (reco_energy) x 8 (reco_coszen) x 2 (pid) "dragon_datarelease":\n", + "8 (reco_energy) x 8 (reco_coszen) x 2 (pid) True True True 0 5
" + ], + "text/plain": [ + " stage number | name | calc_mode | apply_mode | has setup | has compute | has apply | # fixed params | # free params\n", + "----------------+---------------+---------------------------------------------+---------------------------------------------+-------------+---------------+-------------+------------------+-----------------\n", + " 0 | csv_loader | events | events | True | False | True | 0 | 0\n", + " 1 | honda_ip | \"true_allsky_fine\": | | True | True | False | 1 | 0\n", + " | | 200 (true_energy) x 200 (true_coszen) | | | | | |\n", + " 2 | barr_simple | \"true_allsky_fine\": | | True | True | False | 1 | 4\n", + " | | 200 (true_energy) x 200 (true_coszen) | | | | | |\n", + " 3 | prob3 | \"true_allsky_fine\": | \"true_allsky_fine\": | True | True | True | 9 | 3\n", + " | | 200 (true_energy) x 200 (true_coszen) | 200 (true_energy) x 200 (true_coszen) | | | | |\n", + " 4 | aeff | | \"true_allsky_fine\": | False | False | True | 2 | 3\n", + " | | | 200 (true_energy) x 200 (true_coszen) | | | | |\n", + " 5 | hist | \"true_allsky_fine\": | \"dragon_datarelease\": | True | False | True | 0 | 0\n", + " | | 200 (true_energy) x 200 (true_coszen) | 8 (reco_energy) x 8 (reco_coszen) x 2 (pid) | | | | |\n", + " 6 | hypersurfaces | \"dragon_datarelease\": | \"dragon_datarelease\": | True | True | True | 0 | 5\n", + " | | 8 (reco_energy) x 8 (reco_coszen) x 2 (pid) | 8 (reco_energy) x 8 (reco_coszen) x 2 (pid) | | | | |" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "grid_modes_model" ] @@ -196,9 +320,18 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 6min 42s, sys: 36.8 ms, total: 6min 42s\n", + "Wall time: 6min 42s\n" + ] + } + ], "source": [ "%%time\n", "events = events_modes_model.get_outputs()" @@ -206,9 +339,18 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 25.2 s, sys: 15.8 ms, total: 25.2 s\n", + "Wall time: 25.4 s\n" + ] + } + ], "source": [ "%%time\n", "mixed = mixed_modes_model.get_outputs()" @@ -216,9 +358,18 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 21.8 s, sys: 8.19 ms, total: 21.8 s\n", + "Wall time: 21.5 s\n" + ] + } + ], "source": [ "%%time\n", "grid = grid_modes_model.get_outputs()" @@ -233,9 +384,33 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "(
,\n", + " ,\n", + " ,\n", + " None)" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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jR8/Xh988IGuuuoq5ebmesS8//77NWHCBF111VWaM2eOatWqpZtvvllvvPFGID6GiEUuAgAINnKRyEYuAgAINq/FHh/uAEJghe2Sbv3791d6ero+++wznTp1SoMHD9bw4cP1+uuvF3vesGHD9PDDD7t/jo+Pt7qrAIAyyooHJY8dO1avv/66YmJi3PtuuOEGNWnSRI8++qheffVVSdK0adOUlZWl77//XrVq1ZIktWnTRldddZUWLlyo4cOHS5J2796tmTNn6o477tAzzzwjSRo6dKg6dOigu+++W/369ZPdbi9ZJyGJXAQAEHzkIpGNXAQAEGw5eS6vyUZOSZMRnJOwvMNn48aN+vjjj/Xiiy+qbdu2at++vebMmaM33nhDe/bsKfbc+Ph4VatWzb0lJCSUUq8BAGWNFVfVXnbZZR5fsEhS3bp11ahRI23cuNG97z//+Y969uzp/oJFkrp06aJ69erprbfecu979913derUKY0cOdK9zzAM3X777dq1a5dWr15dwncNiVwEABAayEUiF7kIACAUcIdP6AnLgs/q1atVqVIltWrVyr2vS5custlsWrNmTbHnvvbaa6pSpYoaN26siRMn6sSJE0W2zcnJUUZGhscGAEA+K75kKYxpmtq3b5+qVKki6fSVsvv37/f4PZivTZs2Wr9+vfvn9evXq1y5cmrQoEGBdvnHUXLkIgCAUEAuErnIRQAAocDlQ7HHRcGnVIXlkm579+5V1apVPfZFRUUpMTFRe/fuLfK8m2++Weeff75SU1P1448/asKECfr999/19ttvF9p++vTpeuihhwLadwBA2eE0DTlNw2sbSQX+OI6NjVVsbKxPr/Paa69p9+7d7qU30tPTJUkpKSkF2qakpOjw4cPKyclRbGys0tPTlZycLMMwCrST5PUKUBSOXAQAEArIRSIXuQgAIBQ4TVNOs/iCjrfjCKyQusPn3nvvLfDwwL9uv/32m9/xhw8frq5du6pJkybq37+/Fi1apHfeeUdbtmwptP3EiRN17Ngx97Zz506/X7s4icOaWhJXkppd4bQk7v69pyyJu2mZNRNAznNvWhK3eVScJXEH1DtpSdxQUDnWmnU7956wpn6950S0JXF3Z1l3ZdwpV44lcaOMGO+N/NDsvHKWxC0NLtO3TZJq1qypihUrurfp06f79Bq//fab7rjjDrVr104D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08d37typhIQE9/7CCieS9NVXX6lTp04+vf7GjRtVv359xcXFFXrH0MmTJyWp2Gfp5B/z5fxzeZ3iXr+oAtfJkydLHJOCDwAAfvLlQcg8KBkAAFiFXAQAAASTL8/oyT+ekJDgUfApSv369bVgwQKfXj9/KbWUlBT30mxny9+XmprqNUZR5ycmJrqLUykpKVqxYoVM0/RY1s2X1ynu9Z1Op/bv3++xrFtubq4OHTpU4pgUfAAA8NPptWq9fclSSp0BAAARh1wEAAAEU0kKPr6qVq2aBg0aVKJzmjdvrlWrVsnlcslmO3N385o1axQfH6969eoVeW716tWVlJSkdevWFTi2du1aNW/e3ON1XnzxRW3cuFENGzb0eJ384yWVf866devUvXt39/5169bJ5XKVOCb3dgMA4CevD0n24apbAAAAf5GLAACAYHKZpk+b1fr27at9+/bp7bffdu87ePCgFi9erF69enksH7dlyxZt2bLF4/zrrrtOy5Yt086dO937li9frk2bNqlfv37ufb1791Z0dLSee+459z7TNDV37lxVr15dl112WYn7fuWVVyoxMVHPP/+8x/7nn39e8fHx6tGjR4niUfAJAba27S2LHXNpLUviOvdlWRI379MfLImbmL7XkrjXXeC0JG7XRicsiRsKzou1ZpI/lGPNH7IlvAjBZ9nWDB1Jkj3M/qavHm/9L36ruJyGTxsQDow27SyJG3vZ+ZbEzbMqF/n4e0vihlsuIpXdfIRc5DRykTPIRYDQMO7THZbEXfC3upbEvah2JUvilkso/JkW5yonO8+SuNmZBZ9lESjf/rrfstjBlD7emu/qZs943ZK4japXtCRudq41Y1KSbltjzaJWjbN/tyTu3izrPgur5d/h422zWt++fXXppZdq8ODBevjhh/Xcc8+pY8eOcjqdeuihhzzadu7cWZ07d/bYd9999yk+Pl6dOnXSnDlzNH36dPXr109NmjTR4MGD3e1q1Kihu+66S88++6z+7//+Ty+++KJ69eqlVatW6fHHH5fdbne33b59ux555BE98sgj7ruH8n9+5ZVX3O3i4uI0ZcoULVu2TP369dOLL76ogQMH6tVXX9X999+vxMTEEn0WLOnmh5+d2SofwD+QLq5YTerc3XtDP8QcPaDYlq0DHteILvkDqHyRGRclK1KFlXtOSPsCH/fdbdb8E9r4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i+7wGTp0qJYvX67x48erSZMmWrJkia6++mp98skn6t69e6n7ZWVl6bLLLtOJEyc0bdo0xcbGasGCBerRo4c2b96s2rVre9suXrxYd9xxhwYMGKCJEydq7dq1uvvuu3Xq1ClNmTLF0ppWCvjTHjJkiJYtW6abb75Zs2bN0l133aWPP/5Yr7zyilq2bKn+/fuXGOKs9vTTT+u8886Ty+VSly5d/M6Nu2zZMjVr1kwul0utW7fW+++/H6aeAgAqHcMI4EHJRsDl9u7dK4/Ho7vvvlvnn3++d1m/fr22bdum888/X3/5y1/UqlUrxcTEaOPGjT775+fna/PmzWrXrp13Xbt27bRt2zZlZmb6tF2/fr13e0VBFgEA4HfIImEXiXmELAIAsI1hBLaUw4YNG/T6669rzpw5mjt3rkaNGqWPP/5Y5557riZPnlzmvs8884y2b9+uFStWaPLkyZowYYJWrVqljIwMzZs3z9suJydH999/v/r166fly5dr5MiRevnll3XLLbdo5syZOnbsmKU1rRTwgM+qVav0zjvv6IEHHtCoUaM0btw4xcbG6v3339cvv/yilJQUde7cWTt37rSyvz7++c9/auLEiZo+fbq++eYbtW3bVn379tXBgwdLbP/ll1/qpptu0vDhw7Vp0yZdd911uu666/Tf//43bH0GAFQifr9gCeBKlzO0atVKb731VrGlZcuWatiwod566y0NHz5cNWrUUO/evbV06VKdPHnSu/8rr7yirKwsDRo0yLtu4MCBcrvdevbZZ73r8vLy9OKLL6pLly7FHuAcycgiAAD8Dlkk7CItj5BFAAC2CnEWkaTly5fL6XRq1KhR3nUul0vDhw/XunXrlJ6eXua+nTp1UqdOnbzrmjVrpl69eumNN97wrvvkk0905MgRjR492mf/MWPGKDs7WytXrrS0ppUC/rRTUlJ06tSpErede+65evbZZ3XnnXdq3LhxIeucP/Pnz9fIkSM1bNgwtWjRQosWLVKVKlX0wgsvlNj+8ccf15VXXql7771XzZs318yZM9W+fXs99dRTYeszAKASCXGwqVOnjveP7jOXOnXqqHr16rruuuvUunVrSdKsWbN09OhR9ejRQ4sWLdKf//xnjR07Vn369NGVV17prdmlSxcNGjRIU6dO1eTJk/Xss8/q8ssv165du/Too4+G/COxElkEAIDf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SqNHj9bf//539evXT5MmTVJsbKzmz5+vlJQU3XPPPd52CQkJmjlzpsaMGaNBgwapb9++Wrt2rZYuXapZs2YpKSnJ0ppWCmrAp3///rr++ut1xx136Pjx4+rSpYtiY2N1+PBhzZ8/X3feeWeo+1mqsWPHlnolypo1a4qtGzRokM/IGwAAwQrkQcg8KNkaZBEAAMgidouUPEIWAQDYJZAp28o74CNJL7/8sh544AG98sorOnbsmNq0aaMVK1bo0kvLfrZX9erVtWbNGk2YMEF//etf5fF41LNnTy1YsEDJyck+bUePHq3Y2FjNmzdP7777rho0aKAFCxZo3Lhxlte0UlBTun3zzTf6wx/+IElavny5UlJS9Ouvv+rll1/WE088EdIOAgAQqZg33z5kEQAAyCJ2I48AAKKdFVO6SZLL5dLcuXOVkZGh3Nxcbdiwodjds2vWrCmxdv369bVs2TKdOHFCJ0+e1HvvvafGjRuX+DojR47UTz/9pLy8PP38888aP368DMMIS02rBHWHz6lTp7wPI1q1apWuv/56ORwOXXzxxfr1119D2kEAACJVIPPiM2++NcgiAACQRexGHgEARDvP/xZ/bRA+Qd3h07hxY7399ttKT0/Xhx9+qD59+kiSDh48qMTExJB2EACASMVVtfYhiwAAQBaxG3kEABDtTDOwBeET1IDPgw8+qEmTJum8885Tly5d1LVrV0mnr2i56KKLQtpBAAAilUfugBaEHlkEAACyiN3IIwCAaOf2mAEtCJ+gpnQbOHCgunfvroyMDLVt29a7vlevXvp//+//haxzAABEskDmog1mrlr4RxYBAIAsYjfyCAAg2jGlW+QJasBHkurVq6d69er5rOvcufNZdwgAgIrClEemn+jibzuCRxYBAEQ7soj9yCMAgGhmyv+UbVx6El5BD/gcP35czz//vLZs2SJJatmypW6//XbVqFEjZJ0DACCS8aBke5FFAADRjixiP/IIACCaeUxTHj8jPv62I7SCeobPxo0bdcEFF2jBggU6evSojh49qvnz5+uCCy7QN998E+o+AgAQkXhQsn3IIgAAkEXsRh4BAEQ7M8AF4RPUHT4TJkzQtddeq7///e+KiTldorCwUCNGjND48eP12WefhbSTAABEotPBxd9VtbACWQQAALKI3cgjAIBo5zFPL/7aIHyCGvDZuHGjT6CR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tkzXXHONz900O3bs0I4dO3z2HzBggFasWKH09HTvutWrV2vbtm0aNGiQd13//v0VGxurZ555xrvONE0tWrRI55xzjrp161bumocOHSr2fvbu3asXXnhBbdq08d4tFCju8AEAIEimKfnLLSZX1QIAAIuQRQAAgJ3cHv938JRzRregDBw4UBdffLGGDRumH3/8UXXq1NEzzzwjt9utGTNm+LTt1auXJGnXrl3eddOmTdOyZct02WWXady4ccrKytLcuXPVunVrDRs2zNuufv36Gj9+vObOnauCggJ16tRJb7/9ttauXatXX31VTqez3DUnT56sHTt2qFevXkpLS9OuXbu0ePFiZWdn6/HHHy/3Z8GADwAAQWIaFQAAYCeyCAAAsJMVU7oFw+l06v3339e9996rJ554Qjk5OerUqZOWLFmiCy+80O/+DRo00KeffqqJEyfqvvvuU1xcnPr166d58+YVe9bOww8/rFq1amnx4sVasmSJmjRpoqVLl+rmm28OqmafPn20aNEiPf300zp27Jhq1qypSy+9VH/+85/Vvn37cn8WDPgAABAkvmQBAAB2IosAAAA7RcqAjyTVqlVLzz33nJ577rky2515Z8+ZWrZsqQ8//NDv6zgcDk2dOlVTp0712zaQmjfddJNuuukmv7UCxYAPAABBKvBIMX5uTS4Iw63LAAAgOpFFAACAnQrcHjkKyw4bBeGY0w1eDrs7EKyjR4/qlltuUWJiomrWrKnhw4crKyurzH169uwpwzB8ljvuuCNMPQYAVDZ+H5IcwFW3v/fVV19p7NixatmypapWraqGDRvqhhtu0LZt24q13bJli6688kpVq1ZNSUlJuu2220p82J/H49Gjjz6q888/Xy6XS23atNE//vGPYN82/ocsAgCwG1kkupFFAAB2K7rDx9+C8Kmwd/jccsstysjI0EcffaSCggINGzZMo0aN0muvvVbmfiNHjtRf/vIX77+rVKlidVcBAJWUJ4AvUcqbax555BF98cUXGjRokNq0aaP9+/frqaeeUvv27fWf//xHrVq1kiTt2bNHl156qWrUqKHZs2crKytLjz32mL7//ntt2LBBcXFx3pr333+/Hn74YY0cOVKdOnXSO++8o5tvvlmGYWjw4MHlfdv4H7IIAMBuZJHoRhYBANgtkqZ0w2kVcsBny5Yt+uCDD/TVV1+pY8eO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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "fig, ax = plt.subplots(2, 3, figsize=(20, 7))\n", "plt.subplots_adjust(hspace=0.5)\n", @@ -262,9 +437,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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q4rom4Xom0DVwthXiLHPXuiXheiXQNUS6rEvVOOeZG7s8zXuSYx9kULfpG8CVU0w495fzZ49WwMGDNCkSZOKba+KYx/jXvDom4Xom6js+AS3TTVt2lSZmZlKT0+Xx+PRhAkTNHz4cDVq1EhbtmzR4MGD1aNHD51++uklrjxq166dHA6HNm/e7PMx/D2uovr376+UlBRt2bJFOTk5evnll0tdpsMfmzZt0nHHHVfqvpSUlGJveiTp22+/VdOmTdWwYUPvMd26dfPuX79+fYkgK62OJNWvX18ul0t79+4ttn3v3r1q1KhRAM+mcqBvFopk3wQQfr7Gvj59+nivil67dq2GDh1a7L6MfeRyqNAvC5HJQNVS1tgXHx+v7t276/jjj1etWrXUvXt3XXLJJcXu68+YFqpxTzI39vka9yQyOVLom5HvmwDCK5hzhH91+umna9CgQZo6dWqx7VVx7KvouEcul0TfLBTpvgmEGhPcNtW0aVNJ0u+//64pU6YoLS1NTzzxhHJzczVmzBg988wz+uGHH3TllVfq2WefLXbfunXratCgQZo3b56ysrJK1D58+HCFjquo6tWrq23btmrRooViYgJfJGD58uXauHFjiROykpSdna0tW7bI7XZ7t3k8Hj322GMaOXKkJCk9PV07duzwDrBHjhzRjh07dOKJJxarVdYgHBcXpx49emjZsmXFHmPZsmUBXe1VWdA3I983AYRfWWOfZVnat2+f903jxo0biy2pKDH2kcuhQ7+MfL8EEH5ljX116tRRSkqKHn30UV122WVKSUnRokWLit3XnzEtVOOeZGbs8zXuSWRyJNE3I983AYRXMOcIS/PAAw/o/fffL/a90VVt7Atk3COXS6Jv2qNvAqHGBLdNFQ3Ct956q9555x199tlnSkpK0uLFi/Xjjz/q/PPPV/fu3fXYY48pNja2xP3nzZsnt9utXr166d///re2bNmiTZs26fHHHy8WbP4eF2q5ublKS0vT7t27tXbtWs2cOVNDhgzR+eefrxEjRpQ4fsOGDXK5XHrppZf0/fff6+eff9all16qnJwcTZkyRVLhFUUul0udOnXy3icmJkZdunTx1vntt9906NChMgfhiRMn6rnnntPLL7+sTZs26cYbb1RWVpauueYa87+EKEHftEffzMzMVEpKilJSUiQVLgeTkpKinTt3mv0FAJBU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ZZddptatW6tatWo6/vjjdeutt+rw4cMVek4AAISD6UwGAACBIZMBALAP37lMJocTn+AGANiGw+mQw+njynQf+0ozcuRILVq0SOPHj1e7du20YMECnXfeeVqxYoX69u1b5v0yMzPVv39/HTlyRHfccYdiY2P1yCOP6IwzzlBKSorq1avnPfaZZ57RDTfcoKFDh2rixIn68ssvdcsttyg7O1tTpkzxHjd69Gg1adJE//jHP9SiRQtt3LhRTz75pD788EOtXbtWiYmJFXpuAACEkulMBgAAgSGTAQCwD1+5TCaHF5cTAABsw+l0yunycXP6H1urV6/WG2+8oVmzZmnOnDkaPXq0li9frpYtW2ry5Mk+7/vUU09py5Yt+uCDDzR58mRNmDBBn3zyiVJTU/Xwww97j8vJydGdd96pwYMHa9GiRRo1apQWLlyo4cOHa/r06Tp06JD32EWLFmnDhg365z//qeuvv16PPfaYnnvuOW3evFmvvfZaxX9ZAACEkMlMBgAAgSOTAQCwD5+5HEAmh2MF0vnz52vYsGFq0aKFHA6HRo4cWeF22hGvgAAAtuGMc5V789eiRYvkcrk0evRo77aEhARdd911WrVqlXbt2uXzvieffLJOPvlk77YOHTrozDPP1FtvveXdtmLFCh04cEBjxowpdv+xY8cqKytLS5Ys8W7r169fice5+OKLJUmbNm3y+3kBABAOJjMZAAAEjkwGAMA+TGfyyJEjNXfuXA0fPlyPPfaYXC6XzjvvPH311Vc+71e0Aunnn3+uO+64Q/fdd5/WrVunM844QwcOHCh27OzZs7V8+XJ16tRJMTGVZ2FvJrgBALbhcDrLvUlSenp6sVtubm6JWuvWrVP79u2VlJRUbHuvXr0kSSkpKaW2wePxaMOGDerZs2eJfb169dK2bduUkZHhfQxJJY7t0aOHnE6nd39Z0tLSJEn169f3eRwAAOHmbyZXRDiuTJekF154QR07dlRCQoLatWunJ554osQxP//8syZMmKBTTz1VCQkJcjgc2rFjR4WfEwAAoRaKTAYAAIExmcnhWIFUkj7//HPt379fH330keLj4yv8nO2KV0AAANvwueza/26S1Lx5c9WqVct7mzVrVolaqampaty4cYntRdv27NlTahsOHjyo3Nxcv+6bmpoql8ulhg0bFjsuLi5O9erVK/MxisyePVsul0uXXHKJz+MAAAg3fzO5IsJxZfozzzyj66+/Xp06ddITTzyhPn366JZbbtHs2bOLHbdq1So9/vjjysjIUMeOHSv8XAAACJdQZHKoLzrbtWuX7rvvPvXq1Ut16tRR/fr11a9fP3322WcVbisAAHZiMpPDsQKpJLVs2VIOR+X7fvDK81l0AEDUc8TGyBlXdjQ5LEtS4ZvlYz+ZXdqVZzk5OaVuT0hI8O4vTdF2f+6bk5OjuLi4UuskJCSU+RiS9Prrr+uFF17Q5MmT1a5duzKPAwAgEvzNZH8VXZk+Z84cTZo0SZI0YsQIde7cWZMnT9Y333xT5n2LrkxfvXq19837ueeeq86dO+vhhx/WzJkzJRXm8p133qnBgwdr0aJFkqRRo0bJ4/Fo+vTpGj16tOrUqSNJuvDCC3X48GHVrFlTDz30UJkruwAAEGmmM1kqvOhs0aJFGj9+vNq1a6cFCxbovPPO04oVK9S3b98y71d00dmRI0d0xx13KDY2Vo888ojOOOMMpaSkqF69epKk9957T7Nnz9ZFF12kq6++WgUFBVq4cKHOOussvfjii7rmmmsq3GYAAOzAVy5XNJP9WYG0efPmJe5XtALptddeW2Jfr1699MknnygjI0M1a9asUHuiDZ/gBgDYhr9LryUlJRW7lTYZnZiYWOrS5UePHvXuL03Rdn/um5iYqLy8vFLrHD16tMzH+PLLL3Xddddp0KBBmjFjRqnHAAAQSaaXQw3HlekrVqzQgQMHNGbMmGL3Hzt2rLKysrRkyRLvtrp161b6N/sAgMrBdCaHYznU/v37a+fOnXr99dc1duxYjRs3Tt988406dOige+65J6DfAwAAdmDq6zWl8KxAWpkxwQ0AsA2HyymHy+Xj5n9sNW7cWKmpqSW2F21r0qRJqferW7eu4uPj/bpv48aN5Xa7tW/fvmLH5eXl6cCBA6U+xvr163XhhReqc+fOWrRokWJiWEwFAGA//mayv2/c/bkyvTRFV6b37NmzxL5evXpp27ZtysjI8D6GpBLH9ujRQ06n07sfAIBoYvJ9shSei846deqk+vXrF7tvfHy8zjvvPP3+++/e7AYAINr4zmX/v15TCs8KpJVZ1E9wz5s3T61atVJCQoJ69+6t1atXl3nsggUL5HA4it2K/rMBAJHnio0p9+av7t2765dfflF6enqx7d999513f2mcTqe6dOmiNWvWlNj33XffqXXr1t5PfBXV+Ouxa9askcfjKfEY27Zt0znnnKOGDRvqww8/VI0aNfx+PtGATAaAysPfTPb3jXs4rkxPTU2Vy+VSw4YNix0XFxenevXqVYkr2IuQyQBQefibyXa66KwsaWlpqlatmqpVq1be0640yGQAqFz8yeRdu3bpyJEj3tvUqVNLrRWOFUgrs6ie4H7zzTc1ceJETZs2TWvXrlW3bt00aNCgEp+kO1ZSUpJSU1O9t99++y2MLQYA+FJ4BZzvm78uueQSud1uPfvss95tubm5eumll9S7d2/v95fs3LlTmzdvLnHf77//vtjE9c8//6zly5dr2LBh3m0DBgxQ3bp1NX/+/GL3nz9/vqpVq6bBgwd7t6Wlpenss8+W0+nUxx9/rAYNGvj9XKIBmQwAlYu/mezvG/dwXJmek5OjuLi4UuskJCRUiSvYJTIZACobfzPZThedlWbr1q165513NHToULlcLt9PupIgkwGg8vEnk/35ek0pPCuQVmZRvS7q3LlzNWrUKF1zzTWSpKefflpLlizRiy++qNtvv73U+zgcDjVq1Miv+rm5ucWugPjrpwABAGaVN4ldkQnu3r17a9iwYZo6dar27duntm3b6uWXX9aOHTv0wgsveI8bMWKEPv/8c1mW5d02ZswYPffccxo8eLAmTZqk2NhYzZ07V8nJybr11lu9xyUmJmr69OkaO3ashg0bpkGDBunLL7/Uq6++qhkzZqhu3breY8855xz9+uuvmjx5sr766it99dVX3n3Jyck666yz/H5udhTqTJbIZQAIJ38zuegNe3nCcWV6YmKi8vLySq1z9OjRKnEFu0QmA0Bl428m79q1q1gml3UyPRLLoWZnZ2vYsGFKTEzUAw88UNZTqXTIZACofHzlckW/NqR79+5asWKF0tPTi2W4yRVIK7Oo/QR3Xl6efvjhBw0cONC7zel0auDAgVq1alWZ98vMzFTLli3VvHlzDRkyRD/++GOZx86aNavYlY9Fn/YDAISGMyZGzlgftwp+X/XChQs1fvx4vfLKK7rllluUn5+vDz74QKeffrrP+9WsWVMrV67U6aefrvvvv1933323unXrps8//7zEJ6/HjBmjZ599Vhs3btTYsWP19ddf65FHHinxCbb169dLkh588EFdddVVxW4zZsyo0POym3BkskQu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+te/Shy3evVqjRkzRj169FBsbKwcDkdQz88kMhkAKie7ZLLH49HgwYP1+uuv66abbtKDDz6offv2qV+/ftqyZUu59//99991+umna+vWrZo5c6YmTZqkJUuW6KyzzlJeXp73uOeff17PPfecevbsqYcfflgTJ07Uzz//rFNOOUWfffZZKJ+iMWQyAFRedshkFIrKCe5Vq1apdu3a6tmzp3fbwIED5XQ69d133/m872uvvab69eurc+fOmjp1qrKzs8s8Njc3V+np6cVuAIDQ8ZTzAsHDiwTbCVcmS+QyAISTHTI5XCfSJenOO+/UlClTdNZZZ+mJJ55QixYtdOWVV+qNN94odtyHH36o559/Xg6HQ61btzb6fINFJgNA5WSHTJakRYsW6ZtvvtGCBQs0bdo0jR07VitXrpTL5dK0adPKvf/MmTOVlZWl5cuX65ZbbtEdd9yht956S+vXr9eCBQu8x11xxRXatWuXnn/+eY0ePVq33XabvvvuO9WtW1f33ntv6J6gQWQyAFRevnI5nOeuw3Ux+IwZM3ThhRcqOTlZDofDVlkcE+kGBCItLU0NGzYsti0mJkZ169ZVWlpamfe78sor1bJlSzVp0kQbNmzQlClT9PPPP+udd94p9fhZs2bpvvvuM9p2AEDZ8tweyV32Ui55PvYhMsKVyRK5DADhZIdMLjqR/vbbb+uSSy6RJF166aVq3769pk2bptdff93n/YtOpP/www9q0aKFJKlXr14666yztGDBAu8yobt379bDDz+ssWPH6sknn5QkXX/99TrjjDN02223adiwYXK5XJKkG2+8UVOmTFFiYqJuuukm/fLLL6F6+hVGJgNA5WSHTJYKczk5OVl///vfvdsaNGigSy+9VK+++qpyc3MVHx9f5v3//e9/6/zzz/dmslQ46du+fXu99dZb3lzu0aNHifvWq1dPf/vb37Ry5UpzTyiEyGQAqLx85XK4MrnoYvD169frtttuU/369fXUU0+pX79++uGHH9SuXTuf9y+6GLxWrVqaOXOmMjMz9dBDD2njxo1avXq14uLivMfeddddatSokU488UR9/PHHoX5qFWKrT3DffvvtcjgcPm+bN28OuP7o0aM1aNAgdenSRcOHD9fChQv17rvvatu2baUeP3XqVB05csR727VrV8CPXZq6ibHGau08ctRYLUk6q009o/U6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t99+u2bPnu3zmE2bNqlDB/MnKssydepUTZw40fuzx+PRwYMHVa9ePTkcDuOPl56erubNm2vXrl1KSkoyXj+Uorntkn3bb1mWMjIy1KRJE5/HNWnSRLt27VLNmjXpm39B20PD377pr4SEBG3fvl15eeVffRsXF6eEhAQjj4uykcv2/hssD203j0wOXjS3XbJv+8nkyo9Mtu/fnz9ou3lkshnR3H67tp1MrvzIZPv+/fmDtocGuRw82m6e6UyW/M9lMjl8bDPBfeutt2rkyJE+j2ndunVAtRs1aiRJ2rt3rxo3buzdvnfvXnXv3r3M+8XHxys+vviyTLVr1w6oDRWRlJRkq8GgIqK57ZI92+/PFUZOp1PNmjULeVvs+PvxF203z9TVb0USEhIIfxshl/9k179Bf9B2s8hkM6K57ZI9208mV25k8p/s+PfnL9puFplsTjS3345tJ5MrNzL5T3b8+/MXbTePXDaDtptlOpMlctlubDPB3aBBAzVo0CAktY877jg1atRIy5Yt874gSE9P13fffacbb7wxJI8JAEA0I5cBALAHMhkAAHsgkwEAsA9npBsQiJ07dyolJUU7d+6U2+1WSkqKUlJSlJmZ6T2mQ4cOevfddyVJDodD48eP1/3336///Oc/2rhxo0aMGKEmTZrooosuitCzAACgciCXAQCwBzIZAAB7IJMBAAgt23yCuyLuuecevfzyy96fTzzxREnSihUr1K9fP0nSzz//rCNHjniPmTx5srKysjR69GgdPnxYffv21dKlS221nEB8fLymTZtWYlmZaBDNbZeiv/2hFs2/H9oOhB65bD+0vfKK5t9PNLddiv72o2ogk+2Htlde0f77ieb2R3PbUXWQyfZD2yu3aP4d0XYgMA7LsqxINwIAAAAAAAAAAAAAgPJE5RLlAAAAAAAAAAAAAICqhwluAAAAAAAAAAAAAEBUYIIbAAAAAAAAAAAAABAVmOAGAAAAAAAAAAAAAEQFJrhtwO126+6779Zxxx2nxMREtWnTRtOnT5dlWZFuWglffPGFLrjgAjVp0kQOh0OLFy8uccymTZt04YUXqlatWqpevbpOPvlk7dy5M/yN/Yv58+era9euSkpKUlJSkvr06aOPPvpIknTw4EHdfPPNOv7445WYmKgWLVrolltu0ZEjRyLc6siib4YHfROwD8a98GDcqzj6ZnjQ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FX2Tvgn74xPcldjatWt12mmnqW3btsVudevW1Y4dO9SlSxddfvnlOuGEE5STk6NXXnlFJ598srp166aJEyd667z44ovq2rWrunXrpkmTJnm3z549W507d1aXLl302muvldmO+vXr69ChQ96f27ZtK4fDoZ9//rnYca1bt1bbtm29A6UkZWZmSpKWLFmilJQU7+2nn37SokWLvMddd911+ve//62MjAy99NJLatOmjc4444wSbTl48KAkqUGDBv7+GhEC9E36JlAVMfYx9tkR/ZJ+CVRFjH2MfXZF36RvAlUN4x7jnl3RN+mbiAKRWx0dobRt2zZLkvXVV1+Vun/79u2Wy+Wy1q9fb1mWZf3000/W0KFDrfz8fMuyLOuqq66yPvjgA2vDhg1W586drUOHDlmWZVkHDhywLMuyVq9ebZ100klWTk6OdeDAAat169bW7t27S32sOXPmWN26dSu27eyzz7aaNm1qZWZmljj+jDPOsMaNG2dZlmWlp6db8fHx1sKFC30+34yMDKtGjRrW008/bTVr1syaMWNGqcc9//zzVrNmzXzWQmjRN+mbQFXE2MfYZ0f0S/olUBUx9jH22RV9k74JVDWMe4x7dkXfpG8iOrBEeSX1ww8/SJKSk5NLfCdCw4YNJUnt27dX165dJUnLli3Tt99+q549e0oqXGaiR48e2rZtmy677DLVrl1b0p9LcHz99dcaOnSoEhISlJCQoDPPPFPff/+9hgwZUqItgwYN0tSpU3Xo0CHVqVNHkvTUU0/ptNNOU8+ePXXvvfeqa9eucjqd+v7777V582b16NFDklSzZk1NmjRJEyZMkMfjUd++fXXkyBF9/fXXSkpK0tVXXy1JqlGjhi677DJNnTpV6enpGjlyZKm/ly+//FJnn312oL9WGEDfHFnq74W+CVRujH0jS/29MPZFFv1yZKm/F/olULkx9o0s9ffC2Bd59M2Rpf5e6JtA5cW4N7LU3wvjXuTRN0eW+nuhb8JumOCupNauXStJateuXbHt8fHxSk9PlyRVq1bNu93j8WjUqFGaNm1aseMff/zxoNvSpUsXnXTSSXrrrbf0f//3f5KkNm3aaN26dZo5c6amTp2q33//XfHx8TrhhBM0adIkjRkzxnv/6dOnq0GDBpo1a5Z+/fVX1a5dWyeddJLuuOOOYo9z3XXX6YUXXtB5552nJk2a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6KCNGzcWWrZ+/Xo1b95csbGxPjVOX3fjxo3yeDzFfkYBy7K0e/duxcfH+7S7PDVNoYMbAGAboU7HyWFeiplCnfRwAwAQDKYzecOGDXrzzTc1bdo0TZ8+XSNGjNDKlSvVrFkzjRs3zu+2c+bM0Y4dO7R8+XKNGzdOo0eP1qeffqrU1FTNnDmzyG1efPFFpaSk6Pbbby9VOwEAsBvTmczNdAAAys5fLpc2kwcOHCi3260XX3zROy83N1cLFixQly5dlJSUJEnas2ePfvrpp0Lbfv311z65uG3bNq1cuVKDBg3yzrvssstUt25dzZ0712f7uXPnKioqSv369fPOO3jwYKE2zp07VwcPHlSfPn3KVLMi0cENALAN/8OunZwAAEDFM53JS5culcvl0ogRI7zzIiIidNttt2ndunVKSUnxu23nzp3VuXNn77y2bduqR48eevvttwutf+TIET388MP6+9//rtq1a5eqnQAA2I3pTOZmOgAAZWcyk7t06aJBgwZp/PjxGjdunF588UVddtll2r17t5566inveoMHD1a7du18th05cqRatGihfv36afr06frHP/6hXr16KSEhQffdd593vcjISE2ePFnLly/XoEGDNG/ePN1666167bXXNGHCBNWtW9e7brNmzTR06FDNmjVLc+bM0Y033qi7775bHTt21F//+tcy1axIIUH5FAAAAlDSUC6u4DUFAIAaLdBMPv3bX+Hh4UW+83Pz5s1q3bq14uLifOYnJydLkrZs2eK9oX4qj8ej7777TsOGDSu0LDk5WZ9++qnS09O93xiTpEceeUQNGzbUX//6V02ePLn4HwIAgCrA9HXyqTfTDxw4oJYtW2rRokXavXu35s+f711v8ODBWrNmjSzL8s4bOXKkXnrpJfXr10/333+/QkNDNWvWrGJvpt91110aNGiQevfurbVr1+q1117T448/Xuhm+nXXXacOHTooIiJCX3zxhd58881ib6YHUhMAgIriL5fLcu/6lVde0SOPPKJXX31VR48e1TnnnKPly5frkksu8btdbGysVq9erdGjR2vKlCnyeDzq1q2bZs+e7TMCinQyv0NDQzVz5kx98MEHSkpK0uzZszVq1Cif9W666SZ99dVXeuedd5STk+MdcW3ChAmKiooqU82KRAc3AMA2wpwOhfl50s1t8Q1uAACCIdBMPr1TeuLEiZo0aVKh9VNTU5WYmFhofsG8ffv2Ffk5R44cUW5ubonbtmnTRpL03Xff6YUXXtBHH30kl4tH4wAAVV9FXCdzMx0AgLLxl8tlyeSIiAhNnz5d06dPL3ad1atXFzm/SZMmWrJkSUCfM3z4cA0fPtzvOi+99FJAtUpTsyLRwQ0AsA2XSngy3Sp+GQAAMCfQTE5JSfH5VnZR396WpOzs7CKXRUREeJcXt11xdYva9p577tHll1+uP//5z8U3HgCAKqQirpO5mQ4AQNn4y2XuXQcXHdwAANtwlvCuEifv4AYAICgCzeS4uLhCw44XJTIyUrm5uYXm5+TkeJcXt52kgLZ966239NVXX+k///lPie0BAKCq4DoZAAD78JfLZHJw0cENALCNMKdDYc7iTwROiJMEAACCwXQmJyYmau/evYXmp6amSpIaNWpU5HZ169ZVeHi4dz1/244dO1aDBg1SWFiYdu/eLUk6duyYpJPfNM/Lyyv2cwAAsCuukwEAsA9/uUwmBxcd3AAA23A5Shh6jXMEAACCwnQmd+zYUatWrVJaWprPN77Xr1/vXV4Up9OpDh06aOPGjYWWrV+/Xs2bN1dsbKykk53Yixcv1uLFiwute/755+vcc8/Vli1bStdwAAAqGdfJAADYh79cJpODy1nZDQAAoIDrv0O8+JsAAEDFM53JAwcOlNvt1osvvuidl5ubqwULFqhLly5KSkqSJO3Zs0c//fRToW2//vprn07ubdu2aeXKlRo0aJB33nvvvVdouu666yRJr7zyimbPnl3q3wMAAJWN62QAAOyDTLYPvsENALANV4hTLmfxz165PFYQWwMAQM1lOpO7dOmiQYMGafz48Tpw4IBatmypRYsWaffu3Zo/f753vcGDB2vNmjWyrD/qjxw5Ui+99JL69eun+++/X6GhoZo1a5YSEhJ03333ede7+uqrC31uwTe2L7/8ctWvX79UbQYAwA64TgYAwD785TKZHFx0cAMAbMPpcsjp591iTp6CAwAgKCoik1955RU98sgjevXVV3X06FGdc845Wr58uS655BK/28XGxmr16tUaPXq0pkyZIo/Ho27dumn27NmKj48vdTsAAKhKuE4GAMA+/OUymRxcdHADAOzD5ZTDz5PpcvAUHAAAQVEBmRwREaHp06dr+vTpxa6zevXqIuc3adJES5YsKfVnTpo0SZMm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tsLCiv6GYERERLGfIUmLFy/W/PnzNW7cOLVq1cpn2QcffODz76FDh+ryyy/XrFmz9Le//a3Y91RXFjIZAKqfQN7BnZKS4vOt7KKyUyKTy6tKd3Bfd911OnjwoB599FHt379fHTt21Mcff6yEhARJJzstnM4/drSjR49q+PDh2r9/v+rUqaMLLrhAX331lc46y+z7IwEAZeMMCZUrtPjh65wnAn+xQ5cuXTRo0CCNHz9eBw4cUMuWLbVo0SLt3r1b8+fP9643ePBgrVmzRtYpQ0CPHDlSL730kvr166f7779foaGhmjVrlhISEnTfffd514uMjNTkyZN11113adCgQerdu7fWrl2r1157TY8//rjq1v3jPYjNmjXTddddpw4dOigiIkJffPGF3nzzTXXs2FF//etfA/657IpMBoDqxWQmS/7fLfbQQw8pJSWlyKHXCrb1926xgg7u9u0LDwcYHh6uvn37atasWd4h2qo7MhkAqpdAMznQm+mRkZFFfrs7JyfHu7y47SQFtG1kZKTy8ooeHjYnJ6fYz1i7dq1uu+029e7dW48//niR65zK4XBo9OjR+uSTT7R69Wq/Q6xWBjIZAKoff7lckMlxcXEBveaYTC6fKt3BLUl333237r777iKXrV692uffs2fP1uzZs4PQKgBAWZj+ttgrr7yiRx55xOddn8uXL9cll1zid7vY2FitXr1ao0eP1pQpU+TxeNStWzfNnj270LewR44cqdDQUM2cOVMffPCBkpKSNHv27ELvG7npppv01Vdf6Z133lFOTo6aNWumcePGacKECYqKMvSin0pGJgNA9RFoJtvp3WLF2b9/v6KioqpN3gaCTAaA6iPQTA70ZnpiYqL27t1baH5qaqokqVGjRkVuV7duXYWHh3vX87dtYmKi3G63Dhw44DMkal5eng4fPlzkZ3z77be66qqrdPbZZ2vp0qUKCQnstnXB+cORI2beG28amQwA1Usg3+AOFJlcPlW+gxsAUH2Y7uCOiIjQ9OnTNX369GLXOf2CskCTJk20ZMmSgD5n+PDhGj58uN91XnrppYBqAQBgB6aHQ63od4u1adOmyO1//vlnvfvuuxo0aJBcLlexPw8AAHZl+jq5Y8eOWrVqldLS0nw6xNevX+9dXhSn06kOHTpo48aNhZatX79ezZs39z5wVlBj48aNPq/z2rhxozweT6HP2Llzp/r06aMGDRroo48+UkxMTMA/zy+//CJJhR5GBwCgIpjs4CaTy6d0v20AACqQMzSkxAkAAFS8QDM5JSVFx48f907jx48vsl4w3i12uqysLA0aNEiRkZF64oknSviJAQCwJ9PXyQMHDpTb7daLL77onZebm6sFCxaoS5cu3ofX9uzZo59++qnQtl9//bXPDfVt27Zp5cqVGjRokHfeZZddprp162ru3Lk+28+dO1dRUVHq16+fd97+/fv15z//WU6nU5988kmxN8WPHDkit9vtMy8/P19PPPGEwsLC1L1791L9HgAAKAsy2T6ZTE8BAMA2HE6H/yfTnY4gtgYAgJor0Ey207vFTuV2u3X99dfrxx9/1L/+9a9ih3YDAMDuTF8nd+nSRYMGDdL48eN14MABtWzZUosWLdLu3bs1f/5873qDBw/WmjVrZFmWd97IkSP10ksvqV+/frr//vsVGhqqWbNmKSEhQffdd593vcjISE2ePFl33XWXBg0apN69e2vt2rV67bXX9Pjjj6tu3bredfv06aNffvlF48aN0xdffKEvvvjCuywhIUG9evWSJH3wwQeaMmWKBg4cqDPPPFNHjhzR4sWL9Z///EdTp05Vw4YNS/V7AACgLPzlMpkc3EymgxsAYBsOp1MOp78LdwYeAQAgGExncjDeLXaq4cOHa/ny5Xr99dd12WWXlaqtAADYSUVcJ7/yyit65JFH9Oqrr+ro0aM655xztHz5cl1yySV+t4uNjdXq1as1evRoTZkyRR6PR926ddPs2bMLfctr5MiRCg0N1cyZM/XBBx8oKSlJs2fP1qhRo3zW+/bbbyVJTz31VKHPu/TSS7030zt06KCzzjpLr732mg4ePKiwsDB17NhRb7/9ts831QAAqEj+cplMDm4m08ENALANR0iYHCFhfpZ7gtgaAABqLtOZHIx3ixUYO3asFixYoH/84x+64YYbStVOAADspiKukyMiIjR9+nRNnz692HVWr15d5PwmTZpoyZIlAX3O8OHDNXz4cL/rnPptNH8uuOACffDBBwGtCwBARfGXy2RycPFVOACAfTidJU8AAKDiGc7kYLxbTJKmT5+uGTNm6KGHHir0NDoAAFUS18kAANgHmWwbfIMbAGAbDpdLDpfL73IAAFDxTGdyMN4t9t5772ncuHFq1aqV2rVrp9dee82nDb16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r7744gu/22VkZKh79+5as2aNHnroIT322GPavHmzLr30Uh0+fNhn3RdeeEG333672rdvr2eeeUZdu3bVPffcoyeffLLMNQNBLgMAKpLpTJbslcsmkckAgIpU3TPZZE0yGQBQ0fznMplckdfepwu4g3vw4MFasmSJbrzxRj3++OP629/+ppUrV+rVV19V+/bt1b9/f+3du7ci21qk5557TmeccYYiIiLUpUuXEt+bsmTJErVt21YRERHq0KGDPvrooyC1FABQIqer5ClAGzZs0Jtvvqlp06Zp+vTpGjFihFauXKlmzZpp3LhxfredM2eOduzYoeXLl2vcuHEaPXq0Pv30U6WmpmrmzJne9bKzszVhwgT169dPS5cu1fDhw/XKK6/opptu0uTJk3X06NFS1wyUHXOZTAaAasRgJkv2y2WTyGQAQIWq5plssiaZDACocGRypV17ny7gDu5PP/1U77//vh555BGNGDFCo0aNUmhoqD766CP98ssvSkhIUHJysnbt2lWR7fXx1ltvacyYMZo4caI2bdqkc889V71799aBAweKXP+rr77SDTfcoNtuu02bN2/W1Vdfrauvvlr/+c9/gtZmAIAfBodeW7p0qVwul0aMGOGdFxERodtuu03r1q1TSkqK3207d+6szp07e+e1bdtWPXr00Ntvv+2dt2rVKh0+fFgjR4702f6uu+5SZmamPvzww1LXDJTdcplMBoBqxvBwqHbLZZPIZABAharmmWyyJpkMAKhwZHKlXXufLuDfdkJCgrKysopc1qxZM7344ou68847NWrUKGONK8msWbM0fPhwDR06VGeddZaef/55RUVF6eWXXy5y/aefflp9+vTR2LFj1a5dO02ePFnnn3++nn322SLXz83NVVpams8EAKg4/oddOzlJKnRszs3NLVRr8+bNat26teLi4nzmJycnS5K2bNlSZBs8Ho++++47derUqdCy5ORk7dy5U+np6d7PkFRo3QsuuEBOp9O7vDQ1A2W3XK7oTJbIZQAIJpOZLNkrl00jk8lkAKhI1TmTTdckk8lkAKhoZHLlXXufLuAO7rvvvlvDhg3Tt99+W+w6N998s1auXGmkYSXJy8vTN998o549e3rnOZ1O9ezZU+vWrStym3Xr1vmsL0m9e/cudv1p06apVq1a3ikpKcncDwAAKMRyukqcJCkpKcnn+Dxt2rRCtVJTU5WYmFhofsG8ffv2FdmGI0eOKDc3N6BtU1NT5XK51KBBA5/1wsLCVK9ePe96pakZKDvlcjAyWSKXASCYTGayZK9cNo1MJpMBoCJV50w2XZNMJpMBoKKRyZV37X26gDu4x4wZoyuvvFLnn3+++vTpo+eff14ej0eOU16a/uabb6p+/foV0tDTHTp0SG63WwkJCT7zExIStH///iK32b9/f6nWHz9+vI4fP+6d/A0HUBZn5ew0Vis+OsxYLUk6lJVntN6PamislsNttm1RGUX//y+L7LBaxmpVpjfCko3VOvH7r8ZqSZIzp3TfcvUnKS84B9qyigkt3ZAm/qSk5xurVZEsq+RJklJSUnyOz+PHjy9UKzs7W+Hh4YXmR0REeJcXpWB+INtmZ2crLKzo429ERITPeoHWDJSdcjkYmSxVbC4fimlqrJYktTxh7r1uu7JDjNWSpGgrx1itTE/p3i1UolK+q6gkSRFuo/Uqw+iLmxmr9fdjZxmrJUnObz82Wu9Eqz8ZqxW5Y62xWpKU5yp8/C6rxn+fY6xWRTKZyZK9ctk0MtlsJtfdU/xN/LI4Kz7KaL3th83tR4cizF0nS5Ijz1zbdj13hbFaktRs7JdG61WGvYavqWLCzF3v9Wtt9vjStXldY7Ve3/ibsVqSlPztV0brTb9gmNF6FaE6Z7LpmmSy+fvXI5aaGx49r/mFxmpJUqvDm4zVsvN1tyRd3cbcPvtGo6uN1aosrqNms0WhEcZKNfAcM1ZLKkUHXoBa14s0VmvroaJHzCirQ+cNMFqvopDJlXftfbpSHblnzJihQYMGacaMGbrvvvuUnZ2tc889V/Xr19fx48eVk5OjhQsXVlBTgy88PLzI/5n5DVop/7QhA8rC4Tmh1uWu8t9aJ3LVxtyxSfKckGTu4m1Hboy2qfCTH2XRvI7ZzvzQw7sUfWy3kVoHo5sqyxFrpJYkpTusUq3fe/0cxUaU/wZs6G1TlK2+5a4jSdHb18hz/JCRWpK0q7G5m99n5u1RUs4eY/WeTzF78+zO2F+M1dpWv7P2ZZwwVi8j01ytU3ksSx6r+P2+YFlcXFyhoVtOFxkZWeTwLzk5Od7lxW0nKaBtIyMjlZdX9EM3OTk5PusFWrM0yOWT6lhZirPK1zHqyMuSFWouSD2RtXWmPEZq7c11aW9eqJFaktQ4wqNoQxmfaYUa7eSOltmH2A4/PV6mjszunNK1LcplKdpVuhwviivzsCZ2ii53HUk6EFJPB2XuYY7sEx4p08x+LknNj/8gRZf/HFuS9tU9W8ox94DDhzsOG6t1e6M0NRtT9MVtWaSlZ0hzlxqrV8BkJkv2yuWKQCaftDv+AsXElu/vODbc+cedIQNW/nLUWC1JGtAyRqaula969QcjdQrMv/5cY7V+S8/TO08MNFavwT/u1p6Zq43USs8t3e//mr9/JmdY+c8Ifv57R+lYuct4tXv8R2O1rruirbFaktTzkWFqaajWhVOGSj9/baiaVGvC11LbbsbqLV74mJYZuv2VlW/ugfxTVedMroiaZPJJZzeupYjo8t+jvK/JEWnvd+WuI0lr1VwKP9tILUm6sGG4zjRUa3empd055jq5I0OckqF7ApIU4XLoilb1jNTac8NVMnkGkpFfunuEVni0rPDyXeMeiWpUru1PF7f+TWO1Qludp0QdMFZvT2wrY7UkqdmxH9TEUfJ6gfit7tlyGzxv35eep5QWZh6yzEyvuNc1+MtlMrnir71PVeqjdpcuXbRkyRLl5eVp06ZN2r59u9LS0lS/fn1ddtllhb6SXlHq168vl8ul33//3Wf+77//roYNi34KumHDhqVaHwAQXG7r5ORveaASExO1d2/hb9GmpqZKkho1KvpkuG7dugoPD/eu52/bxMREud1uHThwwCf/8vLydPjwYe96palZWnbIZTIZAKofk5ks2SuXKwqZDACoCNU5kysq58lkAEBF8ZfLZHJwrr0LlHmEg7CwMF144YUaPHiw7r77bl1//fVB69wu+PwLLrhAK1as8M7zeDxasWKFunbtWuQ2Xbt29Vlfkj777LNi1wcABJdlWSVOgerYsaP3IvZU69ev9y4vitPpVIcOHbRx48ZCy9avX6/mzZsrNjbWp8bp627cuFEej8e7vDQ1y6oyc5lMBoDqx2QmS/bK5YpGJgMATKrOmVzROU8mAwBMI5Ptc+1tegj/oBozZoxeeuklLVq0SFu3btWdd96pzMxMDR06VJI0ePBgn7HtR40apY8//lgzZ87UTz/9pEmTJmnjxo26++67K+tHAACcwmOVPAVq4MCBcrvdevHFF73zcnNztWDBAnXp0kVJSUmSpD179uinn34qtO3XX3/tE9Lbtm3TypUrNWjQIO+8yy67THXr1tXcuXN9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XHCBT+e2JNWrV0//8z//o61btxr6aQAAKBs7ZDIAADjJXy6TycFFBzcAwDbcHqvECQAAVLxAMzktLc1nKqnTuTQ2b96s888/X06n72VrcnKysrKytH379mK33bt3rw4cOKBOnToVWpacnKzNmzeX+Pn79+9X/fr1S99wAAAMstN18rFjxzRixAjFx8crOjpa3bt316ZNmwLefuvWrerTp49iYmJUt25d3XLLLTp48GCh9Twej5566imdeeaZioiI0DnnnKM33nij0DoLFy7UVVddpaSkJEVHR+vss8/WlClTlJOTU6imw+EocnriiSdK/4sAANRYZLJ9MpkhygEAtuH2yO+JgJuH4AAACIpAMzkpKcln/sSJEzVp0iQjbUhNTdUll1xSaH5iYqIkad++ferQoUOx25667unbHzlyRLm5uQoPDy9y+7Vr12rdunV6+OGHy9p8AACMsMt1ssfjUb9+/fTtt99q7Nixql+/vubMmaNu3brpm2++UatWrfxu/9tvv+mSSy5RrVq1NHXqVGVkZGjGjBn6/vvvtWHDBoWFhXnXnTBhgp544gkNHz5cnTt31vvvv68bb7xRDodD119/vSQpKytLQ4cO1YUXXqg77rhDDRo00Lp16zRx4kStWLFCK1eulMPh8GlDr169NHjwYJ955513nqHfEACgJvCXy2RycDOZDm4AgG3knfDI6WcolzyGeQEAICgCzeSUlBTFxcV55xfXYezxeJSXlxfQZ4eHh8vhcCg7O7vIehEREZKk7OzsYmsULCtp+6KWHzhwQDfeeKPOPPNMjRs3LqA2AwBQUexynbx06VJ99dVXWrJkiQYOHChJuvbaa9W6dWtNnDhRixcv9rv91KlTlZmZqW+++cb7+pDk5GT16tVLCxcu1IgRIySdHIVl5syZuuuuu/Tss89Kkm6//XZdeumlGjt2rAYNGiSXy6WwsDB9+eWXuuiii7yfMXz4cJ1xxhneG+o9e/b0aUPr1q118803G/udAABqHn+5TCYHN5MZohwAYBueEoZ48TBEOQAAQRFoJsfFxflMxXVw//vf/1ZkZGRA07Zt2yRJkZGRRQ55XjDEWWRkZLHtL1hW2u0zMzN1xRVXKD09Xe+//36hd3MDABBsdrlOXrp0qRISEnTNNdd458XHx+vaa6/V+++/X+JrSt555x1dccUV3hvpktSzZ0+1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Y78ncT6Si/2e/9g2/8S2CZQfnI+cYvp8hP1e8Ng2T2HbRFnHE9w2VadOHaWlpSklJUUej0ejR4/W4MGDFR0drdatW+vcc89VpUqV1Lp1a/Xv3z/Pso0aNZLD4dBPP/3k8zP8nS9QXbt21aZNm7R9+3ZlZGTotddeK7CbDn9s3bpVZ599doHTNm3alOekR5L+97//qU6dOjrjjDO887Rq1co7ffPmzfmCrKA6klS9enW5XC7t378/z/j9+/erZs2axfg2ZQPb5ikluW0CCK/C9ns1a9bU9u3b1bt3b7Vt21adOnUq8m7gTp06qWfPnho/fnye8aHa70nm9n2+9nsSuVwS2DZPKeltE0D4+NrvdezY0fuU0oYNG9SvXz+ftQrb70mcj/iqI5HJBWHb/BPnykD5Ecw1wr/ifOTPfV+g+z1yOT+2zVNKetsEQo0GbpuqU6eOJOmPP/7Qvffeq3379umZZ55RlSpVtGnTJj355JMaNGiQNm3apEWLFuVZtmrVqurZs6eee+45paen56t97NixgOYLVIUKFdSwYUOdeeaZiogoficBS5cu1XfffVfgyd+JEye0fft2ud1u7ziPx6OnnnpKQ4cOlSSlpKRo586d3h3s8ePHtXPnTrVp0yZPrcJ2wlFRUWrbtq2WLFmS5zOWLFlSrLu9ygq2zZLfNgGEV2H7vczMTI0cOVIvvPCC1q9fr+uvv14vvvhikfUeffRRffTRR3nehRWq/Z5kZt/na78nkcslhW3THtsmgPApbL9nWZYOHDjgvYj73Xff5eniuDAF7fckzkdykcn+Y9s8paS3TQDhFcw1woJwPtK6WPs9cjk/tk17bJtAqNHAbVO5O+F77rlH7733nr788kslJCR4p//www8677zzCl3+ueeek9vtVlJSkt59911t375dW7du1dNPP50n2PydL9QyMzO1b98+7d69Wxs2bNDUqVPVt29f9enTR0OGDMk3/5YtW+RyuTR37lytXbtW27Zt08CBA5WRkaF7771X0qk7ilwul5o1a+ZdJiIiQi1atPDW+f3333X06NFCd8J33323XnrpJb322mvaunWrbrvtNqWnp2vYsGHmf4RSgm3THttmWlqaNm3apE2bNkk61R3Mpk2btGvXLrM/AIBC93sffPCBfvjhB/Xp00etW7fWU089pcjIyCLrtWjRQoMHD9bTTz+d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sjvG3HXT6DizueeMMnfMYPIcXpLSDbQdnM7kfjk6Ls1YrdOF81zZ5PV8SUqoUPi1qEBVMPxKJOPf1eA1oRjT57YG/z/kCkV3+L5yuTiZnJmZqQceeEBvvPGGjh49qpYtW+rhhx9Wjx49ilx29+7dGj16tD7//HN5PB517dpVs2bNUoMGDfLMV9jvMG3aNN13333FqmkHoWnxsKGOHTtqyZIlecZ98cUX6tixYwmtEQDgr1wOR5FDIDIzM3Xvvfeqdu3aio2NVYcOHfTFF1/4tezu3bs1cOBAVa5cWQkJCerbt69+/fVXn8t88803cjgccjgcOnToUEDrWp6QyQBgf/5mckJCQp6hsAbu2NjYPO+HzHXy5Env9MKWkxTwsm63W9dee61+/PFHLVq0SLVr1/bjW5dP5DIA2Jvp82TYF5kMAPZnOpOHDh2qmTNnavDgwXrqqafkcrnUq1cvffON717u0tLS1LVrV61YsUITJkzQlClTtHHjRnXu3FmHDx/ON3+PHj30xhtv5BmuuOKKoGqWtFL7BHdaWpp++eUX779/++03bdq0SVWrVtWZZ56p8ePHa/fu3Xr99dclSbfeequeffZZjRs3TjfddJOWLl2qBQsW6OOPPy6prwAA+Isop0NRPg4ELMshP14/5jV06FAtWrRId911lxo1aqR58+apV69eWrZsmS6++OJCl8sN8+PHj2vChAmKjIzUrFmz1LlzZ23atEnVqlXLt4zH49E///lPVahQQenp6f6vZBlAJgNA2WM6k2vVqqXdu3fnG79376nXMBTWAF21alVFR0d75/N32eHDh2vx4sV66623dOmlZructDtyGQDKFtOZjPAhkwGg7PGVy4Fm8po1a/T2229r+vTpGjNmjCRpyJAhat68ucaNG6eVK1cWuuzs2bO1fft2rVmzRu3bt5ckXX755WrevLmeeOIJTZ06Nc/8jRs31g033OBzfQKtWdJK7RPc69atU5s2bdSmTRtJ0t133602bdrogQcekHTqYseuXbu885999tn6+OOP9cUXX6hVq1Z64okn9PLLL6tnT7PvRAAAFJ/LUfTgr9wDhGnTpmn69OkaMWKEli5dqvr162vcON/viMkN88WLF2vcuHHebln27t2rJ554osBlXnzxRSUnJ+uWW8y+U6o0IJMBoOwxmcmS1Lp1a/38889KSUnJM3716tXe6QVxOp1q0aKF1q3L/z761atXq0GDBvneqzZ27FjNnTtXs2bN0nXXXRfYipYB5DIAlC2mMxnhQyYDQNljMpMXLVokl8ulESNGeMfFxMTo5ptv1qpVq5ScnOxz2fbt23sboiWpSZMm6tatmxYsWFDgMhkZGd6e0EzVLEml9gnuLl26yLIK78x+3rx5BS6zcePGEK4VACAYRXXl4pL/Rwm+DhAmTJig5ORk1atXr9BlfYX5X+9WO3LkiP71r3/pwQcf1IEDB/xex7KCTAaAssdkJktS//79NWPGDL344oveO9MzMzM1d+5cdejQwZvJu3bt0okTJ9SkSZM8y953331at26d2rVrJ0natm2bli5d6q2Va/r06ZoxY4YmTJigUaNGBbSOZQW5DABli+lMRviQyQBQ9vjK5dxM/uuN3dHR0QW+zmvjxo1q3LhxvvfSJyUlSZI2bdpU4PVrj8ejLVu26Kabbso3LSkpSZ9//rlSU1Pz3Aw+b948zZ49W5ZlqWnTpvrXv/6l66+/PqiaJa3UNnADAMqeCIdDkT5O3N0BHCSE8wBh4sSJqlmzpv7xj3/ooYceKuJbAgBgf/5msr86dOigAQMGaPz48Tpw4IAaNmyo1157TTt37tQrr7zinW/IkCFasWJFnovBI0eO1EsvvaTevXtrzJgxioyM1MyZM5WYmKh77rnHO9/777+vcePGqVGjRmratKnefPPNPOvQo0cPJSYmBrTeAACUNNOZDAAAis9XLudm8l+vOU+aNEmTJ0/ON//evXtVq1atfONzx+3Zs6fAzzly5IgyMzOLXPbcc8+VJF144YUaOHCgzj77bO3Zs0fPPfecBg8erOPHj+u2224rVk07oIEbAGAbRXXl4vr///pzkBCuA4QtW7bohRde0CeffCKXy5VvGQAASiN/MzkQr7/+uiZOnKg33nhDR48eVcuWLbV48WJ16tTJ53Lx8fFavny5Ro8erYcfflgej0ddunTRrFmzVKNGDe98mzdvliRt375dN954Y746y5Yto4EbAFDqhCKTAQBA8fjK5dxMTk5OzvPQVUFPb0unugwvaFpMTIx3emHLFVa3oGW//fbbPPPcdNNNatu2rSZMmKChQ4cqNjY24Jp2QAM3AMA2Th0g+Op67RR/DhLCdYBw55136vLLL9ff/va3QtcbAIDSxt9MDkRMTIymT5+u6dOnFzrP8uXLCxxft25dLVy40Gf9yZMnF3hXPAAApVkoMhkAABSPr1zOzeSEhIR8vYoWJDY2VpmZmfnG574nOzY2ttDlJBVrWUmKiorSHXfcoVtvvVXr16/XxRdfHHTNkkADNwDANqKcDkX5OHH3WKem+XOQEI4DhHfeeUcrV67U999/73NdAAAobfzNZAAAEFpkMgAA9uErlwPN5Fq1amn37t35xu/du1eSVLt27QKXq1q1qqKjo73zBbJsrtweUo8cOWKsZrjRwA0AsA1nEV2vOQOoFY4DhLFjx2rAgAGKiorSzp07JUnHjh2TdOop86ysLNsFPwAA/jCZyQAAoPjIZAAA7MNXLgeaya1bt9ayZcuUkpKS52Gu1atXe6cX+DlOp1q0aKF169blm7Z69Wo1aNBA8fHxPj/7119/lSTva79M1Aw3joEAALbhcjiKHPzVunVr/fzzz0pJSckz3uQBQnJysubPn6+zzz7bOzz11FOSpPPPP1+9evXye30BALATk5kMAACKj0wGAMA+TGZy//795Xa79eKLL3rHZWZmau7cuerQoYP3Ketdu3bpp59+yrfs2rVr81zD3rZtm5YuXaoBAwZ4xx08eDDf56ampurJJ59U9erV1bZt24Br2gVPcAMAbCPKKUX5OA5wW/7X6t+/v2bMmKEXX3xRY8aMkVT4AcKJEyfUpEmTPMved999Wrdundq1ayfpzzDPrSVJ77//fr7Pffvtt/XOO+/o9ddfV926df1fYQAAbMRkJgMAgOIjkwEAsA9fuRxoJnfo0EEDBgzQ+PHjdeDAATVs2FCvvfaadu7cqVdeecU735AhQ7RixQpZ1p8fMHLkSL300kvq3bu3xowZo8jISM2cOVOJiYm65557vPM999xz+uCDD3TFFVfozDPP1N69e/Xqq69q165deuONNxQVFRVwTbuggRsAYBtF3enmkv93wYXjAOGqq67K97mbNm2SJF1++eWqXr263+sLAICdmMxkAABQfGQyAAD24SuXi5PJr7/+uiZOnKg33nhDR48eVcuWLbV48WJ16tTJ53Lx8fFavny5Ro8erYcfflgej0ddunTRrFmzvN2OS9JFF12klStX6uWXX9bhw4dVoUIFJSUl6dVXX9Wll15arJp2QQM3AMA2XPL9bjFXgHfBhfoAAQCAssp0JgMAgOIhkwEAsA9fuVyc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1K/ySk5O1pQpU5SUlKQqVaqoevXq6tKli7788st89QrqSSR32LdvX8DfLdRKbQN3VlaW1q9fr+7du3vHOZ1Ode/eXatWrSp0ubS0NNWvX1/16tVT37599cMPPxQ6b2ZmZr6DQwBA6DgcTjmcPgZHYLFlpwOEsiwcmSyRywAQTv5msp0upoNMBoCyyN9MrlevnipVquQdpk2bVmC9vXv3qlatWvnG547bs2dPgcsdOXJEmZmZfi27d+9euVwunXHGGXnmi4qKUrVq1fJ8RpUqVXTHHXfohRde0KJFi3TLLbfonXfe0SWXXFKq84VMBoCyyWcuB3jtWgr9q7w+/PBDPfbYY2rYsKEefvhhTZw4UampqerRo4fmzp1bYO0HH3xQb7zxRp6hcuXKAX+3UCu1j8IdOnRIbrc7311siYmJ+umnnwpc5txzz9Wrr76qli1b6vjx45oxY4YuvPBC/fDDD6pbt26++adNm6YpU6aEZP0BAPkV9a6SQN9jMnToUC1atEh33XWXGjVqpHnz5qlXr15atmyZLr744kKXyz1AOH78uCZMmKDIyEjNmjVLnTt31qZNm1StWjVJfx4gXHXVVfr73/+unJwcvf766+rRo4deffVVDRs2LKD1La3CkckSuQwA4eRvJterVy/P+EmTJmny5Mn55g/1xfRzzz230HUtT8hkACh7/M3k5OTkPDeSFfaqjoyMjAKn5b7rOSMjo9DlCqv712UzMjIUFRVVYJ2YmJg8nzFq1Kg80/v166ekpCQNHjxYs2fP1n333VdgHbsjkwGgbPKVy4Feu859ldf06dM1ZswYSdKQIUPUvHlzjRs3TitXrix02dxXea1Zs8bb29nll1+u5s2b64knntDUqVMlSV27dtWuXbtUvXp177K33nqrWrdurQceeKDA69eXX355gTeZ202pfYK7ODp27KghQ4aodevW6ty5s9577z3VqFFDL7zwQoHzjx8/XsePH/cOvrrNK46x26sXPZOfLs783lgtSapV0ez76t6v1s1YrXrfvW+sliSZ7MHwQHqOuWIl6PZrzzNWa+BnhXe7VBznDXqi6Jn89NFdFxmrJUl3v7HeaL3VRyON1Vo/vq2xWqHkiooocvBXON71mXuAMH/+fN1+++0aNWqUVq5cqSZNmuiBBx4o9u9QHgSayVJoc/lklbOM1ZKklzvHGqt184YKxmpJUvTva43VWjGuk7FakrRg+a9FzxSAp10XGq1XElJeW1jSq1Co3m9ONlqv/uQfjdU6uehWY7VMe7X1pSW9Cn7xN5OTk5Pz7JvHjx9fYL1wXExH8dgtk+smxBirJUlL0msYrRfV4XJjtbL+l/8dtEEpxhMjhZncwmOsliTNOucmo/VKwuBzE4qeKQDn169srNaorVWN1ZKk536YZ6zW/Qnmri9IUsZldxitl/m//xqtFwr+ZnJCQkKeobAG7tjY2AJ7XDl58qR3emHLSfJr2djYWGVlZRVY5+TJk4V+Rq7rr79eNWvWLHe9o9ktkyVp/Mvmzh8/TjWbybVuudNYrTm7zV6/7PdDvaJnCsT3S42VOnv6i8ZqlZQHKjczWu/IWeauEX95acE9WhXXuJ6TjNa7qWcDo/VMumj67SW9Cn4xde1aCs+rvJo1a5ancVs6dX7dq1cv/fHHH4X2iJaamiq32x3Q9wm3UvsEd/Xq1eVyufK9j2X//v2qWbOmXzUiIyPVpk0b/fLLLwVOj46OLvBg8MF2MUqID/7CtcPyyFKdoOvkukhHjdVyJ9SUZK6Re2e6pZ21rjJS6+yINJ0pc90QRhz6zVittG8/M1ZLkhwZgQVig4E9lRAX/LbpqlRNT48MuowkKePn7/WYCj6pKY59V4zT8UwzO9ZzcvZq1fD6RmpJ0onP3pJW+O46JBCHrxir3e6C73gO1Jmp27XptvxPPhVXSmqaqj5trJyXw+mQw+njznSn/3ek+DpAmDBhgpKTk/M9dXb6sr4OEHLvgGvWLP8Bde4BwsyZM5Wamqr4+Hi/17m0CkcmS4XncsyOlYqpGFwjsLOC2QuWG0dP1D8N1TrzrQ91xFAtSaqUdUQR6YeM1Jq0OkXd2xX8JEFx9Jx0s/SRsXJqMfRipRmqlR5gJpvy5kWW9MuComf0Q84eszcQtHovThUN1pt718VaY6hW1sA++tJMhEqSumc1MVdMZhu5LXeW9N1bxurl8jeTcy+iFyUcF9NR8plcfcHDio8J7jyy4u2P6ezK5v6Ao/f9KGUbK6eMxKbS5WYuvnWd/rX0vbmGiJW3NjJWK6dSLd3f1Vg5uTLTpAvvNVLLSkmVxj3j9/yOH5bKUSEu6M99Kuf8oGucrkHVOHVtbObBh8bVK+hHmTu3berZo2f/MNPwuy+2njKyzd0w8UzNlsZqSVKFj/8rFfwwbcBOphs8+DiNyfNk6VQPKLt37843fu/evZKk2rVrF7hc1apVFR0d7Z3P17K1atWS2+3WgQMH8nRTnpWVpcOHDxf6GaerV6+ejhwxeSYUXiWdyV/8q4tfx2hFiXGbu5HQeeKoPAp+f5zLsX+Hal4zwEitQ2ddpJeMVDpld0q2vlNTY/U6Xnm3pE+N1Drx6kCdc9uIomf0U0pauvTaYr/nX3fPLLmig9sO3h19sdIMZsuZWXukGmZy9I46PWXy7PHR1B+l4f7/vkWJyzomU5d0K3b7l6FKp7w3f5r6GKp1Ii1Vg0Jw7VryncuBZrI/r/Iq6Pp17qu8brop/02kSUlJ+vzzz4u8Lr1v3z7FxcUpLi7/32PXrl2VlpamqKgo9ezZU0888YQaNTJ3rmFKqX2COyoqSm3bttWSJUu84zwej5YsWaKOHTv6VcPtduu7774rsLs7AED45Xbx4muQ/HvfZ0m+69PXAUJZRCYDQNnjbyb7q1atWn5dEP+rQC6mg0wGgLLIdCa3bt1aP//8c753Na9evdo7vSBOp1MtWrTQunXr8k1bvXq1GjRo4L2Qnlvjr/OuW7dOHo+n0M/IZVmWdu7cqRo1zD7xG05kMgCUTaauXUuhf5VXYX755Re999576tevn1wul3d8XFychg4dqueee07vv/++xo0bpyVLlujCCy803kOICaW2gVuS7r77br300kt67bXXtHXrVt12221KT0/39hk/ZMiQPF3kPfjgg/r888/166+/asOGDbrhhhv0+++/65ZbbimprwAAOI0zIkLOSB9DxKmOR+rVq6dKlSp5h2nTpuWrZbcDhLKOTAaAssXfTPZXOC6m4xQyGQDKFtOZ3L9/f7ndbr344p/dFGdmZmru3Lnq0KGD90mxXbt25XtXdP/+/bV27do8ubxt2zYtXbpUAwb8+STtpZdeqqpVq2rOnDl5lp8zZ47i4uLUu3dv77iDBw/mW8c5c+bo4MGDuuyyywL6bnZDJgNA2eMzlwO4di2VzKu8Tpw4oQEDBig2NlaPPvponmkDBw7U3LlzNWTIEF111VV66KGH9Nlnn+nw4cN65JFHCqxXkkptF+WSNGjQIB08eFAPPPCA9u3bp9atW+vTTz9VYmKipFMHYs7Tugo4evSohg8frn379qlKlSpq27atVq5cqfPOM/s+IABA8ThcLjl9NAo7/n9acnJyniezCwpzux0glHVkMgCULf5msr/69++vGTNm6MUXX9SYMWMkFX4x/cSJE2rSpEmeZe+77z6tW7fO28NK7sX03Fr4E5kMAGWL6Uzu0KGDBgwYoPHjx+vAgQNq2LChXnvtNe3cuVOvvPKKd74hQ4ZoxYoVsizLO27kyJF66aWX1Lt3b40ZM0aRkZGaOXOmEhMTdc8993jni42N1UMPPaTbb79dAwYMUM+ePfX111/rzTff1COPPKKqVf98b3z9+vU1aNAgtWjRQjExMfrmm2/09ttvq3Xr1vrHP/4R0HezGzIZAMoeX7kcyLVrKfyv8nK73br22mv1448/6r///a9fvaFdfPHF6tChg7788ssi5w23Ut3ALUl33HGH7rjjjgKnLV++PM+/Z82apVmzZoVhrQAAxVFU92q50/x532dpOEAoa8hkACg7/M1kf4XjYrokffTRR9q8ebMkKTs7W1u2bNHDDz8sSbryyivVsqXZd7faFZkMAGWH6UyWpNdff10TJ07UG2+8oaNHj6ply5ZavHixOnXq5HO5+Ph4LV++XKNHj9bDDz8sj8ejLl26aNasWfm6Ex85cqQiIyP1xBNP6D//+Y/q1aunWbNmadSoUXnmGzx4sFauXKl3331XJ0+eVP369TVu3Djdf//9ZeK1X2QyAJQtvnI5kGvX0qneQnfv3p1vfKhe5TV8+HAtXrxYb731li699NIi1y9XvXr1tG3bNr/nD5dS38ANACg7crtzKXR6jtvvWqXlAAEAADsymcm5wnEx/d1339Vrr73m/ffGjRu1ceNGSVLdunXLTQM3AKDsCEUmx8TEaPr06Zo+fXqh8/y18TVX3bp1tXDhQr8+Z/jw4Ro+fLjPeV566SW/agEAYAe+cjnQTG7durWWLVumlJSUPA3ioXiV19ixYzV37lw9+eSTuu666wJaz19//TXfubcdlOp3cAMAypbcO+B8Df4K57s+cw8QZs2aFfABAgAAdmQyk3PlXkzfu3evTp48qTVr1qhnz5555lm+fHmep7dz5V5MP378uFJTU/XRRx+pYcOG+eabN2+eLMsqcBg6dGjA6wwAQEkLRSYDAIDiMZnJ/fv3l9vt1osvvugdV9irvH766ad8y65duzbPNezcV3kNGDAgz7zTp0/XjBkzNGHChHw9qZzu4MGD+cZ98sknWr9+vS677LKAvls48AQ3AMA2HE6H767XnA6/a4XrXZ/+HiAAAFCamMxkAABQfGQyAAD24SuXA83kcLzK6/3339e4cePUqFEjNW3aVG+++WaedejRo4cSExMlSRdeeKHatGmjdu3aqVKlStqwYYNeffVV1atXTxMmTAjou4UDDdwAANtwRkTKGRHpY7r/3bzY7QABAIDSxGQmAwCA4iOTAQCwD1+5XJxMDvWrvDZv3ixJ2r59u2688cZ8dZYtW+a9fj1o0CB9/PHH+vzzz3XixAnVqlVLw4cP16RJk2x5jZsGbgCAfThdpwZf0wNgpwMEAABKFcOZDAAAiolMBgDAPnzlcjEyOfdVXtOnTy90nuXLlxc4PvdVXr5MnjxZkydP9mtdHn74YT388MN+zWsHNHADAOzD6Tw1+JoeADsdIAAAUKoYzmQAAFBMZDIAAPbhK5fJ5LCigRsAYBuOyCg5IqN8TPeEcW0AACi/yGQAAOyBTAYAwD585TKZHF40cAMA7MPpLKLrNe6CAwAgLMhkAADsgUwGAMA+fOUymRxWNHADAGzD4XTK4eNAwNc0AABgDpkMAIA9kMkAANiHr1wmk8OLBm4AgH24oqSIwrtek8sdvnUBAKA8I5MBALAHMhkAAPvwlctkcljRwA0AsA3uTAcAwB7IZAAA7IFMBgDAPniC2z5o4AYA2IfTVcS7xXxMAwAA5pDJAADYA5kMAIB9+MplMjmsaOAGANiGIzJSjsjCu15zROaEcW0AACi/yGQAAOyBTAYAwD585TKZHF40cAMA7MPpPDX4mg4AAEKPTAYAwB7IZAAA7MNXLpPJYUUDNwDAPuh6DQAAeyCTAQCwBzIZAAD7oIty2zDWwL1v3z6tXbtWkpSUlKTExERTpQEA5YTD6ZLDx4GAr2nIi1wGAASDTDaHTAYABINMNodMBgAEy1cuk8nhZeR5+fnz5+viiy/Wxx9/rMWLF+uSSy7R22+/baI0AKAccbgi5YjwMbgiS3oVSwVyGQAQLDLZDDIZABAsMtkMMhkAYILPXCaTw8rIE9yPPfaY1q5dqypVqkiSjh49qi5duujaa681UR4AUF44nUV0vcZ7TPxBLgMAgkYmG0EmAwCCRiYbQSYDAIzwlctkclgZ+bU9Ho8qVqzo/XfFihXl8XhMlC7TLId9N3ZXyj6j9c6q4DBW67ecikXPFICc6mcbq1Xxop7GapUk9/HDxmrFNm5urJYk1fzocWO1dkTUMlZLkuJ6DjZar9pH043V2hXfyFitkHI6ix5QJHI5cJ70FKP12sx6yFitXYP7GqslScejqhqrNaVDgrFakvTZlFeM1vtu3jdG65WEG741dwwVUbuBsVqStPmaE0brDXvS3P+vqAWLjdWSpC+jfjJar1Qgk40gkwOX9ty9Rutl1jzPaL3Y/VuN1Vo29hJjtSTpwue3G6sVcXyvsVqS5I42ex5fEkZFbDBa79cj5nL050PpxmpJ0lZnbWO1amYkG6slSf/ct8VovfTelxutFxJkshFkcvGcdMUaq+WJq2KsliRZiecYq1V957fGaklSnQSzT3Gu+s9MY7XiblpgrFZJ6TfL7Ln+rihzuffs7s+M1ZKk++LNHsueiKpsrFbakoeN1ZKka64fb7ReyJDJtmHkCe4bbrhBF154ofr16ydJeu+993TjjTeaKG1L7++LVlxadNB1+jU0d4JnGe764ITbIRk8xqvoTtPZUWZqHXNU0DFVMlNMUpWTB+SuZCjELI9iL/+7mVqSslNTJfnfoLun3XVKjQ++saHPw0uDrpFry6T2im3WyVg9R3amGliGGuB3fSfLTCVJkif1mKLrNzRWb2J6W2nVLiO1HopdoxwjlU7JSc8wWO1PjsgoOSIL31k4IrND8rllTXnL5ZSzOspKCG7ft3m/2YuCnVLXq9WD9xiplbN/l7TyTSO1JMl5wVVShJlQdmxbqQerGyklSfq62kXyvP0fY/XiIl0ydak/PTVFGveM3/M/362aEuLjg/7cCpc9pEWzgi4jSdry6ZNS4yZmikl6+6zzNchYNel4tlvv+P8T+/Rci66SzH3XmzYt1U3aY6yeSVnyaG4I6pLJZpS3TN58+VhVqBjcvq997Yo6mWPuZLTyge+N1ZKk7fFNpDQz2/852bu16pZ6RmpJUna1s40d87+/9ZC055ChatKlDapIMtNIkqrAfv/9jf+mE0EeK0rSiXE36ArND7pOrpbrzd10mPHBKCnroLF6uyo0ULLqGqm1tHF7I3Vy9U/eqAlHfzBWb027i6U7rzdSK93tNlLnr8hkM8pbJketeE1RcTFB13F0v1lWRPDXwU8Vc8pdyVyDuSt1v6xajY3UWnsiXjp60kgtSfrqtyPGaknS6HY1lPqVmUbuLs+s1yX/NVJKkpRzMrB2iexMtzwKbn/5/rjOchtsu9iTmqlkVTNS68KKqXpm3zIjtSRp3zMPK/XRfxqrt3nwVElm3hN904S3VPkscw+33X3nFfp+n5kHUE6mpxmpUxBfuUwmh5eRBu57771X3bp107ffnrrTac6cOWrbtq2J0gCA8sTpKqLrNTMHYGUduQwACBqZbASZDAAIGplsBJkMADDCVy6TyWFl5Hn5cePGqWHDhho1apRGjRqlBg0a6L777jNRGgBQjjicziIHFI1cBgAEi0w2g0wGAASLTDaDTAYAmEAm24eRX/uLL75Q5cqVvf+uUqWKPv/8cxOlAQDliTNCckUWPjiNdDxS5pHLAICgkclGkMkAgKCRyUaQyQAAI3zlMpkcVkYauD0ej1JTU73/TklJUXY2fc0DAALkcBY9oEjkMgAgaGSyEWQyACBoZLIRZDIAwAgy2TaM3E4watQoXXzxxRo0aJAk6Z133tHo0aNNlAYAlCOWwynLx4GAr2n4E7kMAAgWmWwGmQwACBaZbAaZDAAwwVcuk8nhZaSB+6abblJSUpKWLVsmSZo/f76aNWtmojQAoDxxuk4NvqajSOQyACBoZLIRZDIAIGhkshFkMgDACF+5TCaHlbHbCZKTkyVJ//znP1WtWjVt3brVVGkAQHnhdBY9wC/kMgAgKGSyMWQyACAoZLIxZDIAIGhksm0Y+bXHjBmjt99+W88995wkyeVyaejQoSZKAwDKkdwuXnwNKBq5DAAIFplsBpkMAAgWmWwGmQwAMIFMtg8jXZQvWbJEGzduVJs2bSRJNWrU0MmTJ02UBgCUJ86IU4Ov6SgSuQwACBqZbASZDAAIGplsBJkMADDCVy6TyWFl5NeOjIyUx+ORw+GQJB05ckROHsUHAATK4Tw1+JqOIpHLAICgkclGkMkAgKCRyUaQyQAAI3zlMpkcVkZ+7TvvvFODBg3SoUOH9NBDD6lTp04aN26cidIAgHLEcjiK6ObFUdKrWCqQywCAYJHJZpDJAIBgkclmkMkAABN85zKZHE5GnuAeMGCA2rVrpyVLlsjj8WjBggU677zzTJQGAJQnTtepwdd0FIlcBgAEjUw2gkwGAASNTDaCTAYAGOErl8nksAq6gduyLLVp00Y//vijmjRpYmKdAADlFV2vBY1cBgAYQSYHjUwGABhBJgeNTAYAGEMX5bYR9K/tcDjUqlUr/fDDDybWBwBQjvnudu3UAN/IZQCACWRy8MhkAIAJZHLwyGQAgClksn0Y6aL8hx9+UJs2bdS4cWPFxcXJsiw5HA6tWbPGRHkAQHnhjJBcPqLJaSS2yjxyGQAQNDLZCDIZABA0MtkIMhkAYISvXCaTw8rIr/3RRx+ZKAMAKO/oes0IchkAEDQy2QgyGQAQNDLZCDIZAGAEXZTbhpFfu379+gUOAAAEJPcAwdcQgMzMTN17772qXbu2YmNj1aFDB33xxRd+Lbt7924NHDhQlStXVkJCgvr27atff/21wHlfeeUVNW3aVDExMWrUqJGeeeaZgNbTNHIZABA0w5kslc9cJpMBAEErB5kcSM3iIpMBAEaQybbh96+dmpqqe+65R02bNlWNGjXUsGFD9erVS4888oh++umnUK6jT88995zOOussxcTEqEOHDkV2K7Nw4UI1adJEMTExatGihT755JMwrSkAoCiW0yXLGeFjcAVUb+jQoZo5c6YGDx6sp556Si6XS7169dI333zjc7m0tDR17dpVK1as0IQJEzRlyhRt3LhRnTt31uHDh/PM+8ILL+iWW25Rs2bN9Mwzz6hjx46688479dhjjwX8/QNhx1wmkwGg7DCdyVLZzWUyGQAQSmU9kwOpWRQyGQAQar5zmUwOJ7+7KB8yZIjWr1+v4cOHKzExURkZGbr33nv166+/6oEHHlCfPn00e/Zs1alTJ5Trm8c777yju+++W88//7w6dOigJ598Uj179tS2bdt0xhln5Jt/5cqVuu666zRt2jT16dNH8+fP11VXXaUNGzaoefPmYVtvAEAhHI5Tg6/pflqzZo3efvttTZ8+XWPGjJF0KsuaN2+ucePGaeXKlYUuO3v2bG3fvl1r1qxR+/btJUmXX365mjdvrieeeEJTp06VJGVkZOj+++9X7969tWjRIknS8OHD5fF49NBDD2nEiBGqUqWK3+scCLvlMpkMAGWMwUyWynYuk8kAgJAq45nsb01/kMkAgJDzlctkclj5/QT3559/rg8//FATJ07UiBEjNGrUKEVGRuqTTz7Rr7/+qsTERCUlJem3334L5frmMXPmTA0fPlzDhg3Teeedp+eff15xcXF69dVXC5z/qaee0mWXXaaxY8eqadOmeuihh3T++efr2WefDds6AwB8MNj12qJFi+RyuTRixAjvuJiYGN18881atWqV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xqb3ZPLqek56YDcTVolxKT42uHPlhE+fDmr5fK4crayY+kZKRR/YZqROrtRqjYweG8f/sV46y8x1htfS6ks/HTJSS5KGOL4zVsuZZvaBjNP5yuVwXLuW7Hn9un79+ho0aJBatGihmJgYffPNN3r77bfVunVr/eMf/wjJ72CrBu4aNWqoRo0aRc7XsWNHHTt2TOvXr1fbtqcaqJYuXSqPx+MNfn9s2rRJUsF3DwIAws9teeT2FH4g4DZ8F2RBXC6XPvnkE40dO1ZPP/20MjIy1L59e82bN0/nnntukcvXq1dPK1as0N1336377rtPUVFR6t27t5544ok8J525GbRq1SqtWrUqX53ffvutRBu4yWQAKN9MZ7Ldu12zMzIZAMo3fzM5kPd9fvXVV+ratatf827dulVNmjQJW88qwXyOJI0ePVoTJ07Ul19+abyBm0wGAPjK5XBcu5bsef168ODBWrlypd59912dPHlS9evX17hx43T//fcrLi7OzBf/C1s1cPuradOmuuyyyzR8+HA9//zzys7O1h133KFrr73Wexf/7t271a1bN73++utKSkrSjh07NH/+fPXq1UvVqlXTli1bNHr0aHXq1EktW7Ys4W8EAJAkTxFduXjC1M1LlSpV9PLLL+vll1/2Od/pd76drlmzZvrss898Ljtv3jzNmzevmGtoH2QyAJRNdsjk/v37a9GiRXrvvffUv39/Sb67XZOU5+mmfv366bXXXlNycrL3XeG53a6NHj065OsfbmQyAJRNochkO/esUqtWLS1btkyWZeXpptyfz5FONYBXq1ZNR44c8TlfKJHJAFB2+crlcF27lux3/fqll17yaz6TSmUDtyS99dZbuuOOO9StWzc5nU7169dPTz/9Z9cU2dnZ2rZtm06cONUVQVRUlL788ks9+eSTSk9PV7169dSvXz/961//KqmvAAD4i8wcSx4fXblk54TvIAH+I5MBoOyxQyaHq9s1SXrjjTf0+++/e7Pqq6++0sMPPyxJuvHGG1W/vpkuC0ONTAaAsicUmWznnlVat26tl19+WVu3btV5552X53Nyp/uSmpqqQ4cO+fWkdSiRyQBQNvnKZa5dh1epbeCuWrWq5s+fX+j0s846S5b158aU+8g9AMC+3B5LTh93uvm6ax0lh0wGgLLHDpkcrm7XJOmVV17Jk03Lli3TsmXLJEkX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WdKpHki7du3q17xbt25VkyZNwtYDaUGqVq2qYcOG6dFHH9Uff/yhunXrBl2zuGjgBgDYhsfjlqOET9z79++vRYsW6b333lP//v0lSYcOHdLChQt1xRVX5LnTbMeOHZKkc845xzuuX79+eu2115ScnKx69epJkpYsWaKff/5Zo0ePliSdccYZev/99/N99tNPP61Vq1bp3//+d4FdugAAEC52yORFixZp5cqVWrhwoTeTBw4cqMaNG2vSpEmaP3++z+WnTp2q9PR0rV+/XmeeeaakU+//6tGjh+bNm6cRI0ZIkq677jpNnjxZFStW9C570003qWnTppo8eTIN3ACAEmWHTAYAAKf4yuXiZLJdeyD1Jfea95EjR1S3bl0jNYujVDZwP/LII/r444+1adMmRUVF6dixY0UuY1mWJk2apJdeeknHjh3TRRddpDlz5hR51z8AIHw8OdlyWI5Cp1vu0He91r9/f11wwQUaNmyYfvzxR+/TYm63O9/7srt16yZJ2rlzp3fchAkTtHDhQnXt2lWjRo1SWlqapk+frhYtWmjYsGGSpLi4OF111VX5PvuDDz7QmjVrCpxmZ+QyAJQ9dsjkRYsWKTExUddcc413XI0aNTRw4EC9+eabyszM9HmS/O6776pPnz7exm1J6t69uxo3bqwFCxZ4G7jbtm2bb9lq1arpkksu0fLly819oTAgkwGg7LFDJiNwZDIAlE2+crk4mWzXHkh9+fXXXyXJ++ovEzWLo/AXuNhYVlaWBgwYoNtuu83vZR5//HE9/fTTev7557V69WpVqFBBPXv29D4eDwAoeZbHXeQQai6XS5988okGDRqkp59+2tsl6tKlS3XuuecWuXy9evW0YsUKnXPOObrvvvv0+OOPq1evXvriiy9CcqeaHZDLAFD2+JvJKSkpeYaCuiQrro0bN+r888/Pc8IunXoK+8SJE/r5558LXXb37t06cOBAge/QTkpK0saNG4v8/H379ql69eqBr3gJIpMBoOyxw3kyAkcmA0DZZIdM7t+/v/bv36/33nvPO85XD6S5vZDm6tevnxYvXqzk5GTvuNweSAcMGOAdd/DgwXyfvXv3br366qtq2bJlnh5I/a1pUql8gjv3Cbp58+b5Nb9lWXryySf1r3/9S3379pUkvf7660pMTNQHH3yga6+9tsDlMjMz81ygOX78uCQpJS09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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "fig, axes = plt.subplots(3,4, figsize=(24,10))\n", "plt.subplots_adjust(hspace=0.5)\n", @@ -278,9 +464,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAB64AAANfCAYAAABpEfNMAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjksIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvJkbTWQAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3Xl4U1X+x/FPku5AWUvZQTZBZFE2cRwEwUFFZRRQR0cWFWYER0QFBXWQHwoqgjtuKLiOAiqO6LgMmzgiiFJwlE0EqdCCrN3X3N8fTKOxbZomJ8lt+349T54Z7vLNaT09n+SemxOHZVmWAAAAAAAAAAAAAACIEGekGwAAAAAAAAAAAAAAqNmYuAYAAAAAAAAAAAAARBQT1wAAAAAAAAAAAACAiGLiGgAAAAAAAAAAAAAQUUxcAwAAAAAAAAAAAAAiiolrAAAAAAAAAAAAAEBEMXENAAAAAAAAAAAAAIgoJq4BAAAAAAAAAAAAABHFxDUAAAAAAAAAAAAAIKKYuAYAAAAAAAAAAAAARBQT16jS7rzzTl188cU+j/nLX/6ia665JkwtAk6ibwKoiRj7YEf0SwA1EWMf7Iq+CaAmYuyDXdE3YUdMXFdj6enp+tvf/qa2bdsqNjZWLVu21CWXXKKVK1cGdJw/xowZI4fDIYfDoZiYGLVv317/93//p6KiIs/+P/7xj+WeEx0dreTkZJ1//vl68cUX5Xa7fT5fSkqKunfv7vOYOXPm6Lnnnqv0z1LiqaeeUps2bRQXF6e+fftq48aNAdfCSfTNk4Lpm59++qkuueQSNWvWTA6HQ8uXLw+oDoDwsePYV3LMr8c/O499ErlsGv3yJDIZqFn8GdNMjntS5d+PBDPuSWRyVUXfPIlcBmqGkvHkgQce8Nq+fPlyORwOr22MfRUjl82hb3ojlxFuTFxXU3v37lXPnj21atUqzZ07V998840+/PBDDRw4UBMnTqz0cZVxwQUXKC0tTbt27dJtt92me++9V3PnzvXrnL179+pf//qXBg4cqEmTJuniiy/2uoj5WykpKerWrZvP2g0aNFCtWrUC+lnefPNN3XrrrZoxY4a+/vprde/eXUOGDNGhQ4cCqgf65q8F0zezs7PVvXt3PfXUUwGdDyC8GPt+QS7bB/3yF2QyUHP4M6aFYtyTKj/2BTruSWRyVUTf/AW5DNQccXFxevDBB3Xs2LFyj2Hsqxi5bB598xfkMsLOgi1deOGF1qhRozz/XrVqldWwYUOrqKjI7/ObN29uZWVlldp37NixSh/nr9GjR1vDhg3z2nb++edbZ511Vrn7y9pmWZa1cuVKS5L1/PPPl/lcaWlpliTrtddes37/+99b8fHxVq9evaytW7d6jtmzZ48lydqzZ49lWZb1/fffW5Ks9957zzrvvPOs+Ph4q2PHjtYXX3xR5nP06dPHmjhxouffxcXFVrNmzaw5c+ZU8Juovuib9uibvybJeueddyo8DkDgquvYV9Yxdh77yGVv9Et79MtfI5OB0AvH2Gd63LOsyr8fCXTcsywyOVLom/bom79GLgOhFey4N3r0aOviiy+2OnXqZE2ZMsWz/Z133rF+PW1R08a+QMY9ctkbfdM+ffPXyGX4i09c21Tz5s21f/9+z7/PPfdc5ebm6osvvqjw3KNHj+rDDz/UxIkTy7wTpl69epU6Lljx8fEqKCio9HnnnXeeunfvrrfffrvM/SkpKZKkRx99VHPmzNGmTZtUu3Zt/elPf/Ics2XLFtWrV09t2rTx/NvhcGj+/Pm65557tGXLFrVq1Up33nlnqfoFBQX66quvNHjwYM82p9OpwYMHa/369ZX+eaoL+mbk+yaA8GPsi/zYRy6XRr+MfL8EEH6hHvvCNe5JgY19FY17EpkcKfTNyPdNAOEVzLhXwuVyafbs2XriiSf0008/ldpfE8e+yo575HJp9E179E0gUExc21Tz5s29BkSn06n4+Hi/lvf4/vvvZVmWOnXqZOS4QFmWpX//+9/66KOPdN555wVUo1OnTtq7d2+Z+1JSUhQXF6fly5frd7/7nU477TTdf//9+vbbb3X48GHPMb9e6qJkoH3zzTc1YMAAdejQQZdeeql+/vnnUvUPHz6s4uJiJScne21PTk5Wenp6QD9PdUDfPCmSfRNA+DH2nUQu2wv98iQyGahZQj32hXrck4If+3yNexKZHCn0zcj3TQDhFcy492uXXXaZevTooRkzZpTaVxPHvsqOe+RyafTNkyLdN4FARUW6ASjbb+8KSklJ0fHjx9WvX78Kz7Usy6/n8Pe4ylqxYoVq166twsJCud1uXX311br33nsDqmVZlhwOR5n7UlJSdMUVV6hZs2aebfXr15ckud1uSScH0x49enj2b9myRcOGDVNSUpJn2549e9S+ffuA2lcT0TdPom8CNQtj30mMffZCvzyJfgnULKEe+0I17knmxj5f457E2Bcp9E36JlDTBDPu/daDDz6o8847T7fffrvX9po49jHuBY++eRJ9E1UVn7i2qebNmysrK0sZGRlyu92aPHmyrrnmGjVp0kS7du3S0KFD1bNnT/Xv37/UnUIdOnSQw+HQ9u3bfT6Hv8dV1sCBA5WSkqJdu3YpNzdXL730UpnLZfhj27ZtOuWUU8rcl5KS4vVmRpK++OILNW/eXI0bN/Yc0717d8/+LVu2lAqosupIUqNGjeRyuXTw4EGv7QcPHlSTJk0C+GmqB/rmSZHsmwDCz9fY169fP89dzF9//bWGDx/udS5jH7kcKvTLk8hkoGYpb+yLjY1Vjx49dOqpp6pu3brq0aOHRowY4XWuP2NaqMY9ydzY52vck8jkSKFvRr5vAgivYK4R/lb//v01ZMgQTZs2zWt7TRz7Kjvukcul0TdPinTfBALFxLVNNW/eXJL0008/6Y477lB6erqeeOIJ5efna8KECXr22Wf11Vdf6eqrr9Zzzz3ndW6DBg00ZMgQPfXUU8rOzi5V+/jx45U6rrJq1aql9u3bq1WrVoqKCvxD/atWrdI333xT6kKrJOXk5GjXrl0qLi72bHO73Xrsscc0ZswYSVJGRob27t3rGThPnDihvXv36owzzvCqVd7gGhMTo549e2rlypVez7Fy5cqA7s6qLuibke+bAMKvvLHPsiwdOnTI82bwm2++8VraUGLsI5dDh34Z+X4JIPzKG/vq16+vlJQUPfroo7ryyiuVkpKiZcuWeZ3rz5gWqnFPMjP2+Rr3JDI5kuibke+bAMIrmGuEZXnggQf03nvveX0vc00b+wIZ98jl0uib9uibQKCYuLapksH1tttu09tvv61///vfSkxM1PLly/Xtt9/q4osvVo8ePfTYY48pOjq61PlPPfWUiouL1adPH7311lvatWuXtm3bpscff9wrsPw9LtTy8/OVnp6u/fv36+uvv9bs2bM1bNgwXXzxxRo1alSp47du3SqXy6VFixbpyy+/1I4dO3TFFVcoNzdXd9xxh6STdwC5XC516dLFc05UVJS6du3qqfPjjz/q2LFj5Q6ut956q55//nm99NJL2rZtm2688UZlZ2dr7Nix5n8JVQR90x59MysrSykpKUpJSZF0clmWlJQU7du3z+wvAICk8se+H374wevu1W+++cbrb7kEYx+5HAr0S3v0SzIZCK/yxr4S3377rU477bRyz/dnTKuq455EJkcSfdMefZNcBsIn2GuEv9W1a1ddc801evzxx72216SxL5BxTyKXf4u+aZ++SS4jIBZsKzY21urcubOVmprq2XbXXXdZr7/+ul/nHzhwwJo4caLVunVrKyYmxmrevLl16aWXWqtXr67UcYsWLbL87SqjR4+2hg0bVqn9o0ePtiRZkqyoqCgrKSnJGjx4sPXiiy9axcXFZdZ5+umnrS5dulhvvvmm1bx5c6tWrVrWVVddZR0+fNhzzBNPPGGdfvrpXv/u0qWLV5133nnHqlevns+f6YknnrBatWplxcTEWH369LG++OILn8fXBPTNyPfN1atXe9r268fo0aPL/yUACEpZY9/bb79t3XLLLZ5/n3feedbOnTvLPN+OY19Zx9h57Cs5j1z+Bf0y8v2STAbCr6yxr8R1111nffTRRz7P92fs8+eYUL4fCWTcsywyOdLom5Hvm+QyEF7BXCMsa/zZs2ePFRMTU2oMqyljX6CZXHIuufwL+qY9+ia5jEA4LCuE3yIP45588klt2rRJixcvlnTyzpjfLv1o2owZM7R27VqtWbMmpM+Dqo2+CaAmmjlzptLT0/X000/ryy+/1MCBA5WRkSGnM3SL2jD2oSL0SwA12cUXX6zZs2eH/L2IxNiHyqFvAqgpInGNUGLsQ8Xom0DVwFLhVczYsWN1/PhxderUSd27d9err74a8uf817/+pYceeijkz4Oqjb4JoCbaunWrMjIy1L17dy1atEhNmzbV66+/HtLnZOxDReiXAGqyIUOG6LLLLtP27dtD/lyMfagM+iaAmiIS1wglxj5UjL4JVA184hoAACBAnTt31ubNmxUXFxfppgAe9EsAAAAAAABURXziGgAAIADZ2dlyuVxMDsJW6JcAAAAAAACoqvjENQAAAAAAAAAAAAAgovjENQAAAAAAAAAAAAAgopi4BgAAAAAAAAAAAABEFBPXAAAAAAAAAAAAAICIYuIaAAAAAAAAAAAAABBRTFwDAAAAAAAAAAAAACKKiWsAAAAAAAAAAAAAQERV2YnrTz/9VJdccomaNWsmh8Oh5cuXV3jOmjVrdOaZZyo2Nlbt27fX4sWLQ95OAACqOzIZAAD7IJcBALAHMhkAgMqrshPX2dnZ6t69u5566im/jt+zZ4+GDh2qgQMHKiUlRbfccotuuOEGffTRRyFuKQAA1RuZDACAfZDLAADYA5kMAEDlOSzLsiLdiGA5HA698847+uMf/1juMXfccYfef/99/fe///Vsu+qqq3T8+HF9+OGHZZ6Tn5+v/Px8z7/dbreOHj2qhg0byuFwGGs/UB7LspSZmalmzZrJ6Sz/PhO3260DBw6oTp069E2Ehb99szLy8vJUUFBQ4XExMTGKi4sz8pwwL1SZLJHLiCwyGXZFJsMX3iujOiKTYVdkMnwhk1Fdkcuwo1BksuRfLpPJwYuKdAPCZf369Ro8eLDXtiFDhuiWW24p95w5c+Zo5syZIW4ZULHU1FS1aNGi3P0HDhxQy5Ytw9gi4KSK+qa/8vLy1DC+tnJUXOGxTZo00Z49e3gBUIUFkskSuQx7IJNhV2QyAsV7ZVRVZDLsikxGoMhkVGXkMuzIVCZL/ucymRy8GjNxnZ6eruTkZK9tycnJysjIUG5uruLj40udM23aNN16662ef584cUKtWrVSsyselzO69PGVbtPWNUHXKPHBa/cZqyVJPWOOGK33U0wTY7Va5u4zVkuSFqXVNlZrVPFXxmpJUmZ2rtpePkF16tTxeVzJ/mvUXDEGvgHgrXOvDLpGiQ5n/85YLUm6YUhHY7VmLVhrrJYkTb+xv9F6Xw280FitCdd2NVZLkrIKCjXwzU8q7Jv+KigoUI6KNaqCPlwgt15O36+CggLCvwoLJJOl8nP5yY++VHyt4MbyTo1qBXX+bzWKN/cS6/ujecZqSdI3hzKM1WoYH2OsliRd3LGh0XoxR/cYq5WRla1T+gzyO5Ndp10hhys66Oe98C/XBV2jxHmdGxurJUlnt6xntN7e4+b6+oCfyl+9IRDus68wViv2513Gakkn+2abfkPIZATM5HtlE2PfgLGjgzr/t/7xRzMXqkqciKpnrNYX+zON1ZKkC+udMFYrt14rY7UkKcHg2JeRla02Z1/gdyZfMPefio4P/rXeg0M7BV3j1wbc8pqxWnffbO69oyRdcmojY7Xq7FhlrJYkpS55y2i9szY1MFbLKi5QQcrLZDICZjKT/3X+71UrOvj3peelNgu6RomDTwwzVkuSfmx5trFabQ6nGKslSVtrm70OVyvG3CdGm9YO/n3qr2VmZqpzxw5+5/IXE0aqdmxwbZj3yLqgzv+t+SkvG6u18pKbjNWSpKvq9TBaz6T7Hp5itN7dt881VssqLlTxd0uMZbLkXy6TyWbUmInrQMTGxio2NrbUdmd0vJwxCUHXd7jMXeytZfAPUJISY/IrPqgS6sQkGquVGGVuolmS4jPM/e4Si4PvF2WpaPmUkv0xchqZuHZEle73gXLFmZ0Miq9t7r+XMyb4G1B+zWTbJBn5b1midozZF6UlTC/tE+9wKcZR/s/tshxSlf+CCwSqvFyOr1VbCUH+/dWuYzZb6iSYe4lVq9Ds329ctrk/ooQEsxPXiYnmXi9IUkyh2f+ukv+Z7HBFG3mtZ+JCe4n4WmZzqnYds/+9EorM9fXEWmYz3m2wb8bmme+XEpmM8Covk02MfSbHPUlKNPxe2R1tbjxIMDfPLElKrFPxpzL9FW04kxNCMPb5m8nR8bWM9Ks6hn8nJj4QUcL0e1GTr8nq1DJ7naROkJMdv2Xy2pynJpmMMCovk2tFR6m2gYlrk38jibUNjwcG348k5pl9/WH6vZLJievEOpG5Rliyv3ZstOrEBtevTF4zlaREg9eEEpwuY7Wk0OSUKXGGrzFUhUyWfOcymWxGjZm4btKkiQ4ePOi17eDBg0pMTCz3k10AgPCKdjoU4+MFhWU55McqabA5MhkA7I9MrjnIZQCwNzK55iCTAcD+fOUymWxGjZm47tevnz744AOvbZ988on69esXoRYBAH7L5Tj5KHd/+JqCECKTAcD+yOSag1wGAHsjk2sOMhkA7M9XLpPJZphdUyGMsrKylJKSopSUFEnSnj17lJKSon37Tn7/8bRp0zRq1CjP8X/961/1ww8/aOrUqdq+fbsWLFigJUuWaPLkyZFoPgCgDC6Ho8IH7IdMBoDqh0yuushlAKheyOSqi0wGgOqHTA69KvuJ602bNmngwIGef996662SpNGjR2vx4sVKS0vzvAiQpFNOOUXvv/++Jk+erMcee0wtWrTQwoULNWTIkLC3HQBQthh/lkCD7ZDJAFD9kMlVF7kMANULmVx1kckAUP34ymUy2YwqO3E9YMAAWVb533K+ePHiMs/ZvHlzCFsFAAiGQ76XAiH67YlMBoDqh0yuushlAKheyOSqi0wGgOrHVy6TyWZU2YlrAED1U9GSKi7iHwCAsCCTAQCwBzIZAAD78JXLZLIZTFwDAGwjximfS6C5y79RGQAAGEQmAwBgD2QyAAD24SuXyWQzmLgGANiGy3HyUe7+8DUFAIAajUwGAMAeyGQAAOzDVy6TyWYwcQ0AsA2WQAMAwB7IZAAA7IFMBgDAPlgqPPSYuAYA2Ea00+FzCbRii/AHACAcyGQAAOyBTAYAwD585TKZbAYT1wAA22AJNAAA7IFMBgDAHshkAADsg6XCQ4+JawCAbfCGHAAAeyCTAQCwBzIZAAD7YOI69Ji4BgDYRozDoRinjyXQ3Cy3AgBAOJDJAADYA5kMAIB9+MplMtkMJq4BALbhdDjk8vHdXU4f+wAAgDlkMgAA9kAmAwBgH75ymUw2g4lrAIBtVLgEGtkPAEBYkMkAANgDmQwAgH34XCqcTDaCiWsAgG3EOH0vgVYk0h8AgHAgkwEAsAcyGQAA+/CVy2SyGUxcAwBsw1XBEmi+9gEAAHPIZAAA7IFMBgDAPnzlMplsBhPXAADbcDocPr8LhO8JAQAgPMhkAADsgUwGAMA+fOUymWwGE9cAANtwxTjlcjrL3++2wtgaAABqLjIZAAB7IJMBALAPX7lMJpvBxDUAwD5cTjl8vCGXg/AHACAsyGQAAOyBTAYAwD585TKZbAQT1wAA23A4HXK4yl9SxSGWWwEAIBzIZAAA7IFMBgDAPnzlMplsBhPXAADbcEW75HK5yt/v4yZzAABgDpkMAIA9kMkAANiHr1wmk83g1xhBTc8YbKzWgMumGKslSRsLGhmt17LggLFa++LbGKslSeObZxqr9YKrj7FakXTVyleN1drx6VpjtSRpwfvbjdW675ZBxmpJ0ozHVhmt1+fLT43VevSFFGO1QsnpclT4AELhu5+zjNb7OafIWK2ODeON1ZKkHk0SjdX6OafAWC1JWr79sNF6BQ3bGa0XCe898ayxWh9/m26sliSt+/GY0Xpt65vr6/9uebGxWpLkXPeasVr5jU81ViuUyGREyr+fXWi03h+X7TNar16hubHvdy3NZbIkvXesnrFa8cf2GqslSTlVZOzzZdLyb43W+/LZMcZq3TP3PWO1JOntbT8bq5V52h+M1ZKkVldfZbTef886YrReKJDJiKQNrX8yVivhhreM1ZKkNvvMXTfbk9TTWC1J6pGZYrRedoHbWK39mYXGakXK9DsHGq03od0IY7WGrHrBWC1JevfYV0brmTTlpvuM1pv75N1G64WK6UzOz8/XHXfcoWbNmik+Pl59+/bVJ5984te5+/fv1xVXXKF69eopMTFRw4YN0w8//FDquKefflojR45Uq1at5HA4NGbMmEq3M5z4xHUAmrVPVlRcraDrrPpbb0mXBN8gSel5Zl+kfrDrsLYo1li9oR0bqfx7QyuniTNHxXWSDVWT/vjG95LMTF6/Paq73BpqpJYkuTMyKnX8+pselis2Iejn/eriE3os6ConbT7lQkOVTpr00lfGJq+XTOynzx4198Kk+d61kr4xVm9n89/rrLStRmo93rSb0cnrApl7wfxrDhdLoKHy3G5Lbndw3yGzad9xbdxr7kL03ee1NVZr59E8xUaZu9ewWZ0YnVI/zkitBnGm0v0Xbsvc9wHF5ByRO66ukVruwsr9N/jDuLGKjg/+9eLhI7k6+HNO0HUkaUC3Jko9aqaWJP35zObGaklSZn6xkmvFGKmVXDtah5KvNFJLkpJjLbncZi7wpOc5pNrmbqrItCr3etFfZDICcfDNvymxTu2gajgLcg215qSiBq2M1pPDqXoy1EZ3kYY2N/e3tGxvkZYcqmOk1rlt6kv55l7zr917TJKZG+Rzsip3reKFP7ZXYmLwNwmcOWOdhvz3UNB1Ssy5obeenWnm/eiQ9I+lLHM3jUe36igdTDNSa0l2Symut5FaktR+2ihjtSRp4b92a7ShWgVya5GhWr9GJiMQh747rGxn8O/Xzv12vU4YaI8k7TiSp/8aqiVJ2w9nSwfMvBa+olaqFGPmfbIkFSc2UTcdN1avaOP7xmo5DP6ckhSdXbnXRT3+7XtM88eufz+uabcHVcJL8oZXVLD9SyO1nGcP16AU/yYd/eEozFO2sWpS0+teN1Yr7fmRksxdwzn07EMa8cdoI7Uy8yx1NneZ3ouvXA4kk8eMGaNly5bplltuUYcOHbR48WJddNFFWr16tc4555xyz8vKytLAgQN14sQJTZ8+XdHR0XrkkUd07rnnKiUlRQ0bNvQc++CDDyozM1N9+vRRWpqZ13ihxMQ1AMA2XDFO30ugFZt7MQQAAMpHJgMAYA9kMgAA9uErlyubyRs3btQbb7yhuXPn6vbbT96NMWrUKJ1++umaOnWqPv/883LPXbBggXbt2qWNGzeqd++TNwleeOGFOv300zVv3jzNnj3bc+zatWs9n7auXTu4G43DgaXCAQC24XA45HD6eDgqd9daOJZakaQXXnhBnTt3VlxcnDp06KAnnnii1DFvv/22rrzySrVt21YJCQk69dRTddttt+n48eOV+pkAAAgH05kMAAACQyYDAGAfPnO5kpm8bNkyuVwujR8/3rMtLi5O119/vdavX6/U1FSf5/bu3dszaS1JnTp10qBBg7RkyRKvY1u3bl2lXi8wcQ0AsA2ny1nhozLGjBmj+fPn65prrtFjjz0ml8uliy66SJ999pnP80qWWlm7dq2mT5+umTNnavPmzTr33HN15Ij3d6A9++yzuuGGG9SlSxc98cQT6tevn26++WY9+OCDXseNHz9e27Zt05///Gc9/vjjuuCCC/Tkk0+qX79+ys01uyQmAADBMp3JAAAgMGQyAAD24U8mZ2RkeD3y8/PLrLV582Z17Nix1Nfa9OnTR5KUkpJS5nlut1tbt25Vr169Su3r06ePdu/ercxMM1+PGwksFQ4AsA1njFNOH9/l63T6/4Y8HEut5Obm6q677tLQoUO1bNkySdK4cePkdrs1a9YsjR8/XvXr15d08i64AQMGeD1Pz549NXr0aL322mu64YYb/P7ZAAAINZOZDAAAAkcmAwBgH75yuSSTW7Zs6bV9xowZuvfee0sdn5aWpqZNm5baXrLtwIEDZT7P0aNHlZ+fX+G5p556avk/iI3xygYAYBsm7yQPx1Irq1ev1pEjRzRhwgSv8ydOnKjs7Gy9//77nm2/nbSWpMsuu0yStG3bNr9/LgAAwoFPdwEAYA9kMgAA9uFPJqempurEiROex7Rp08qslZubq9jY2FLb4+LiPPvLO09SQOdWBbyyAQDYh8shh4+HXCe/i8Of5VbCsdTK5s2bJanUsT179pTT6fTsL096erokqVGjRj6PAwAg7PzMZAAAEGJkMgAA9uFHJicmJno9yppglqT4+Pgyr2vn5eV59pd3nqSAzq0KmLgGANiGK8olV7SPR5RL0snlVurWret5zJkzp1StUC+1UvIcLpdLjRs39jouJiZGDRs2LPc5Sjz44INyuVwaMWKEz+MAAAg3fzMZAACEVigyOT8/X3fccYeaNWum+Ph49e3bV5988olf5+7fv19XXHGF6tWrp8TERA0bNkw//PCD1zGpqamaOXOm+vTpo/r166tRo0YaMGCA/v3vf1e6rQAA2InPXK5kJjdt2lRpaWmltpdsa9asWZnnNWjQQLGxsQGdWxXwHdcAANtwuhxy+rhb3Ok+uS81NdXrk9Rl3bUWjqVWcnNzFRMTU2aduLg4n0uyvP7663rhhRc0depUdejQodzjAACIBH8zGQAAhFYoMnnMmDFatmyZbrnlFnXo0EGLFy/WRRddpNWrV+ucc84p97ysrCwNHDhQJ06c0PTp0xUdHa1HHnlE5557rlJSUtSwYUNJ0rvvvqsHH3xQf/zjHzV69GgVFRXp5Zdf1vnnn68XX3xRY8eOrXSbAQCwA1+5XNlM7tGjh1avXq2MjAyva90bNmzw7C/zeZxOde3aVZs2bSq1b8OGDWrbtq3q1KlTqbbYCZ+4BgDYhq/lzzxLrsi/5VbCsdRKfHy8CgoKyqyTl5dX7nOsW7dO119/vYYMGaL777+/zGMAAIgkfzMZAACElulM3rhxo9544w3NmTNHc+fO1fjx47Vq1Sq1bt1aU6dO9XnuggULtGvXLq1YsUJTp07V5MmT9fHHHystLU3z5s3zHDdw4EDt27dPr7/+uiZOnKhJkybp888/V6dOnfT3v/89oN8DAAB2YDKTR4wYoeLiYj333HOebfn5+Vq0aJH69u2rli1bSpL27dun7du3lzr3yy+/9Jq83rFjh1atWqWRI0cG8RNGHp+4BgDYhivGKVd0+UuquBxuv2s1bdpU+/fvL7Xd5FIrTZs2VXFxsQ4dOuS1XHhBQYGOHDlS5nNs2bJFl156qU4//XQtW7ZMUVFEMQDAfkxmMgAACJzpTF62bJlcLpfGjx/v2RYXF6frr79e06dPV2pqqudCeVnn9u7dW7179/Zs69SpkwYNGqQlS5Zo9uzZkqQuXbqUOjc2NlYXXXSR5s+fr8zMzCr9STAAQM3lK5crm8l9+/bVyJEjNW3aNB06dEjt27fXSy+9pL179+qFF17wHDdq1CitXbtWlmV5tk2YMEHPP/+8hg4dqttvv13R0dGaP3++kpOTddttt3k9z3vvvactW7ZIkgoLC7V161bdd999kqRLL71U3bp1q1S7Q42r5QAA23A4HXI4y78zzde+3wrHUislNTZt2qSLLrrIc9ymTZvkdrtLPcfu3bt1wQUXqHHjxvrggw9Uu3Ztv38eAADCyWQmAwCAwPmbyRkZGV7bY2Njy1ydbPPmzerYsaPX+2RJ6tOnjyQpJSWlzIlrt9utrVu36rrrriu1r0+fPvr4448rnJBOT09XQkKCEhISyj0GAAA785XLgbxPfvnll3XPPffolVde0bFjx9StWzetWLFC/fv393lenTp1tGbNGk2ePFn33Xef3G63BgwYoEceeURJSUlex7711lt66aWXPP/evHmzNm/eLElq0aKF7SauWSocAGAbTqdTTpePh9P/2ArHUivnnXeeGjRooKefftrr/KeffloJCQkaOnSoZ1t6err+8Ic/yOl06qOPPir1AgIAADsxmckAACBw/mZyy5YtVbduXc9jzpw5ZdZLS0tT06ZNS20v2XbgwIEyzzt69Kjy8/MDOleSvv/+e7399tsaPny4XK7yP0EOAICd+czlAN4nx8XFae7cuUpLS1NeXp42btyoIUOGeB2zZs0ar09bl2jRooWWLl2qEydOKDMzU++9957at29f6rjFixfLsqwyH2PGjKl0m0ONT1wDAGzDGeOSM6b8N7BO+b/cSjiWWomPj9esWbM0ceJEjRw5UkOGDNG6dev06quv6v7771eDBg08x15wwQX64YcfNHXqVH322Wf67LPPPPuSk5N1/vnn+/2zAQAQaiYzGQAABM7fTE5NTfX6FHVZn7aWpNzc3DL3xcXFefaXd155dSs6NycnRyNHjlR8fLweeOCB8n4UAABsz1cu8z7ZDCauAQC24XA65fBxZ5qvfWUJx1IrEyZMUHR0tObNm6d//vOfatmypR555BFNmjTJ67iS7xF56KGHSj3fueeey8Q1AMBWTGcyAAAIjL+ZnJiYWGr577LEx8crPz+/1Pa8vDzP/vLOk1Tpc4uLi3XVVVfpu+++07/+9S81a9aswjYCAGBXvnKZ98lm8FsEANiGz+XP/veojHAstSJJ48aN0/bt25Wfn6/vv/9et9xyixwO7+80KW85FsuytGbNmkr9XAAAhJrpTJZOXui+44471KxZM8XHx6tv37765JNP/Dp3//79uuKKK1SvXj0lJiZq2LBh+uGHH8o89oUXXlDnzp0VFxenDh066Iknnih1zI4dOzR58mSdffbZiouLk8Ph0N69eyv9MwEAEGqmM7lp06ZKS0srtb1kW3kTyw0aNFBsbGylzx03bpxWrFihxYsX67zzzqtUWwEAsBvT75NRGr9FAIBtOKKj5Iwp/+GIZqEQAADCIRSZPGbMGM2fP1/XXHONHnvsMblcLl100UVeX59RlqysLA0cOFBr167V9OnTNXPmTG3evFnnnnuujhw54nXss88+qxtuuEFdunTRE088oX79+unmm2/Wgw8+6HXc+vXr9fjjjyszM1OdO3eu9M8CAEC4mM7kHj16aOfOncrIyPDavmHDBs/+sjidTnXt2lWbNm0qtW/Dhg1q27at6tSp47V9ypQpWrRokR555BH96U9/qlQ7AQCwI1+5zLVrM5i4BgDYRslSK74eAAAg9Exn8saNG/XGG29ozpw5mjt3rsaPH69Vq1apdevWmjp1qs9zFyxYoF27dmnFihWaOnWqJk+erI8//lhpaWmaN2+e57jc3FzdddddGjp0qJYtW6Zx48bp5Zdf1jXXXKNZs2bp2LFjnmMvvfRSHT9+XN98842uueaayv1yAAAII9OZPGLECBUXF+u5557zbMvPz9eiRYvUt29ftWzZUpK0b98+bd++vdS5X375pdfk9Y4dO7Rq1SqNHDnS69i5c+fq4Ycf1vTp00t9lRYAAFUV165Dj+l/AIBtOFxOOVwuH/uLw9gaAABqLtOZvGzZMrlcLo0fP96zLS4uTtdff72mT5+u1NRUz4Xyss7t3bu3evfu7dnWqVMnDRo0SEuWLNHs2bMlSatXr9aRI0c0YcIEr/MnTpyo1157Te+//77+/Oc/Szq53CkAAFWB6Uzu27evRo4cqWnTpunQoUNq3769XnrpJe3du1cvvPCC57hRo0Zp7dq1Xl+tNWHCBD3//PMaOnSobr/9dkVHR2v+/PlKTk7Wbbfd5jnunXfe0dSpU9WhQwd17txZr776qlcbzj//fCUnJ1eq3QAA2IGvXObatRlVfvr/qaeeUps2bRQXF6e+fftq48aN5R67ePFiORwOr0dcXFwYWwsA8MUVHVXhA/ZFJgNA9eFvJmdkZHg98vPzy6y3efNmdezYUYmJiV7b+/TpI0lKSUkp8zy3262tW7eqV69epfb16dNHu3fvVmZmpuc5JJU6tmfPnnI6nZ79NQGZDADVRyjeJ7/88su65ZZb9Morr+jmm29WYWGhVqxYof79+/s8r06dOlqzZo369++v++67T/fcc4+6d++utWvXKikpyXPcli1bJEm7du3StddeW+qxbdu2Sre5qiKTAaB64dp16FXpies333xTt956q2bMmKGvv/5a3bt315AhQ3To0KFyz0lMTFRaWprn8eOPP4axxQAAX07e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NWPGDE2cOFFr1qyRy+XSjBkzKjx/9uzZys7O1qpVq3TzzTdr+vTpWrJkibZs2aLFixd7jvvTn/6k1NRULVy4UOPHj9eUKVO0YcMGNWjQQPfee2/ofkAAAPxgh0yu7qrsJ64BANWPu4KAdxP+AACEhR0yecSIETrrrLM0duxYfffdd55PdhUXF2vmzJlexw4aNEiStHfvXs+26dOna+nSpRo4cKAmTZqkrKwszZ07V127dtXYsWM9x7Vo0UK33HKL5s6dq8LCQvXu3VvLly/XunXr9Nprr8nlcnmO/fHHH/XKK69IkufT3Pfdd58kqXXr1rr22mtD8rsAANRcdshk6eTEdXJysi6//HLPtqSkJF1xxRV69dVXlZ+f73VT2W+99dZbuvjii9WqVSvPtsGDB6tjx45asmSJxo8fL0nq2bNnqXMbNmyo3//+91qzZo25HwgAgAD4ymWuXZvBJ64BALZRVOxWUZGPR3F4lls5fvy4xo8fr6SkJNWqVUsDBw7U119/7ff527Zt0wUXXKDatWurQYMGuvbaa/Xzzz+XOs7tduuhhx7SKaecori4OHXr1k3/+Mc/Sh2zePFiXXrppWrZsqVq1aql008/Xffdd5/y8vKC/lkBACiLHTLZ5XLpgw8+0JVXXqnHH3/csyzpqlWrdOqpp1Z4fsmSm+3atdOdd96phx56SBdddJE++eSTUhfWH3jgAc2ePVsfffSRJk6cqL179+rVV1/V1Vdf7XXcnj17dM899+iee+7xLCVe8u8XXnjB3A8PAMD/+JvJGRkZXo/8/Hyj7di8ebPOPPNMr6/vkKQ+ffooJydHO3fuLPfc/fv369ChQ2V+R3WfPn20efPmCp8/PT1djRo1qnzDAQAwyGcuh+nadXXHJ64BALbhdls+70wLx11r4freLkm666679MADD2jcuHHq3bu33n33XV199dVyOBy66qqrJEk5OTkaO3aszjrrLP31r39V48aNtX79es2YMUMrV67UqlWr5HA4Qvo7AQDUPHbIZEmqX7++Fi5cqIULF/o87teftP61Ll266KOPPqrweZxOp6ZNm6Zp06b5PG7AgAFe30cJAECo+ZvJLVu29No+Y8YMo0trp6WlqX///qW2N23aVJJ04MABde3atdxzf33sb88/evSoz09sr1u3TuvXr9fdd98daPMBADDCVy7ziWszmLgG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u3Zt6+mnn/baPnPmTOucc84x8WMhCPRN+iZQEzH2MfbZEf2SfgnURIx9jH12Rd+kbwI1DeMe455d0Tfpm4gcJq6rsddff92Kioqy8vLyItqOm2++2brgggs8/z58+LDlcDisOXPm+HX+fffdZ3Xq1Mn68MMPrd27d1uLFi2yYmNjrTVr1liWZVlTpkyx2rVr5zUgv/jii1Z8fLx1/Phxr1r/+te/rJiYmIj/Tmo6+iZ9E6iJGPsY++yIfkm/BGoixj7GPruib9I3gZqGcY9xz67om/RNRA7fcV2Nff311youLlbDhg1Vu3Ztz+Mvf/lLWNvx448/qlmzZp5/f//997IsS6eeeqrXcY0aNfK08Y477pAk5efna/bs2XrxxRc1ZMgQtW3bVmPGjNGf//xnPfvss5Kk6667Trt379batWs9tRYtWqThw4erbt26Xs/RrFkzFRQUKD09PVQ/LvxA36RvAjURYx9jnx3RL+mXQE3E2MfYZ1f0TfomUNMw7jHu2RV9k76JyImKdAMQOl9//bX+9Kc/aebMmV7bGzRo4PVvt9stpzN09zDk5uYqLi6uwuM2btwot9uta665Rvn5+ZJODsQ5OTk6//zzvY4tKCjQGWecIUnq1KmTzj77bL344osaMGCAvv/+e61bt07/93//V+o54uPjJUk5OTnB/lgIAn2TvgnURIx9jH12RL+kXwI1EWMfY59d0Tfpm0BNw7jHuGdX9E36JiKHT1xXY19//bV+97vfqX379l6PBg0aaO/everatauuuuoqnXbaacrNzdUrr7yi3r17q3v37rr11ls9dV588UV169ZN3bt31+233+7Z/uCDD+r0009X165d9dprr5XbjkaNGunYsWOef7dv314Oh0M7duzwOq5t27Zq3769ZwCUpKysLEnS+++/r5SUFM/ju+++07JlyzzHXX/99XrrrbeUmZmpRYsWqV27djr33HNLteXo0aOSpKSkJH9/jQgB+iZ9E6iJGPsY++yIfkm/BGoixj7GPruib9I3gZqGcY9xz67om/RNRFDkVilHKO3evduSZH322Wdl7t+zZ4/lcrmsLVu2WJZlWd999501fPhwq7Cw0LIsy7r22mutFStWWFu3brVOP/1069ixY5ZlWdaRI0csy7KsjRs3WmeeeaaVm5trHTlyxGrbtq21f//+Mp9r7ty5Vvfu3b22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wR3XAADbcJbzGyFOficEAIAq4WsmR0VFFXuVNXEdHh5e6mPEs7OzPevL2k+ST/u+/fbb+uqrr/TEE09U8NMCAGBfHCcDAGAf3nK5Mpmck5OjKVOmqHnz5goPD1evXr20YsUKn/bdu3evrrjiCjVs2FBRUVEaOnSofvnll1K3ffnll9WpUyeFhYWpXbt2euaZZ0ps895772nkyJFq06aNIiIi1KFDB9155506evRohT+XP5i4BgDYhulHoNkp+B944AE5HI4Sr6K7xQAAsBPTmRwXF6eUlJQSy4uWNW/evNT9oqOjFRoa6tO+kyZN0ogRIxQSEqLdu3dr9+7dngPs5OTkMh9HDgCAnfGocAAA7MN0Jo8ePVqzZ8/WNddco6eeekoul0sXXnihvvjiC6/7ZWRkqF+/flq7dq3uvvtuPfjgg9q8ebPOPfdcHTp0qNi2L774om688UZ17txZzzzzjHr37q3bbrtNjz32WLHtxo0bp23btunaa6/V008/rcGDB+vZZ59V7969y3xKWiDwqHAAgG24HOU8Aq2C2T969GgtXbpUt99+u9q1a6eFCxfqwgsv1OrVq3XOOeeUuV9R8B87dkx33323goODNWfOHJ177rlKSkpS48aNPdu++OKLuummmzRs2DDdcccdWrdunW677TYdP35cU6ZMKVH7+eefV/369f/4TPz+JgDAhkxncvfu3bV69WqlpaUVe7T4hg0bPOtL43Q61bVrV23atKnEug0bNqhNmzaKjIyUVDg5vXjxYi1evLjEtmeccYa6deumpKSkijUcAIBqZjqTAQBA5XnL5Ypm8saNG/XWW28pMTFRd911lyRp1KhR6tKliyZPnqyvvvqqzH3nzp2rHTt2aOPGjerZs6ck6YILLlCXLl30xBNPaMaMGZIKf1rrnnvu0ZAhQ7R06VJJ0tixY+V2u/XQQw9p3LhxatSokSRp6dKl6tu3b7H3OfPMM3XdddfpjTfe0I033lixD1hJ3HENALANb48/K3r5qij4Z86cqcTERI0bN06rVq3SSSedpMmTJ3vdtyj4ly9frsmTJ2vixIn69NNPlZKSUuzxo38O/rFjx+q1117TNddco4ceekhHjhwpUXv48OG69tprPa+rrrrK9z8QAABVxGQmS4X5V1BQoHnz5nmW5eTkaMGCBerVq5fi4+MlSXv27NGPP/5YYt+vv/662OT1Tz/9pFWrVmnEiBGeZe+//36J18iRIyVJr732mubMmVPhvwMAANXNdCYDAIDKM5nJS5culcvl0rhx4zzLwsLCdMMNN2j9+vVKTk72um/Pnj09k9aS1LFjR/Xv31/vvPOOZ9nq1at16NAhjR8/vtj+t9xyizIzM/Xhhx96lv150lqSLrvsMknStm3bKvTZ/MHENQDANlxBznJfvrJb8BexLEtpaWmyLMvnzwIAQFUzmcmS1KtXL40YMULTpk3T5MmTNW/ePJ133nnavXu3Zs2a5dlu1KhR6tSpU7F9x48fr1NOOUVDhgxRYmKinnzySQ0cOFCxsbG68847PdtdeumlJV4dO3aUVHjleb9+/fz4iwAAUD1MZzIAAKg8XzI5LS2t2CsnJ6fUWps3b1b79u2LPZVMkhISEiSpzCeGud1ufffdd+rRo0eJdQkJCdq5c6fS09M97yGpxLZnnnmmnE6nZ31ZUlNTJUlNmjTxup1JfLMBANiG0+Uo9yX5Fv52Df42bdqoQYMGioyM1LXXXqv9+/eX81cBAKDq+ZrJFfHaa6/p9ttv1+uvv67bbrtNeXl5Wr58ufr06eN1v8jISK1Zs0Z9+vTRww8/rPvuu0/dunXT2rVrFRMTU9mPCABAjRCITAYAAJXjSybHx8erQYMGntfMmTNLrZWSkqK4uLgSy4uW7du3r9T9Dh8+rJycHJ/2TUlJkcvlUtOmTYttFxISosaNG5f5HkUee+wxuVwuDR8+3Ot2JvEb1wAA+3A55XB6uabKUXiXctHjRItMnz5dDzzwQLFlgQ7+Dh06VCj4GzVqpFtvvVW9e/dWaGio1q1bp+eee04bN27Upk2bSkywAwBQrXzM5IoICwtTYmKiEhMTy9xmzZo1pS5v2bKllixZUuH3fOCBB0p8RwAAoEYJQCYDAIBK8pbL/8vk5OTkYud6Q0NDS908Kyur1HVhYWGe9WXtV1bdP++blZWlkJCQUuuEhYWV+R6StHjxYr388suaPHmy2rVrV+Z2pjFxDQCwDVewUy5X2QfkrgLfw99uwT9hwoRi64cNG6aEhARdc801mjt3rqZOnVpqHQAAqoOvmQwAAAKLTAYAwD685XJRJkdFRfl0k1J4eHipTxLNzs72rC9rP0k+7RseHq7c3NxS62RnZ5f5HuvWrdMNN9ygQYMG6ZFHHinnk5jFo8IBALbhcDrLfUl/hH/Rq7RJZjsHf5Grr75azZo102effeZ1OwAAqpqvmQwAAAKLTAYAwD5MZnJcXJxSUlJKLC9a1rx581L3i46OVmhoqE/7xsXFqaCgQAcOHCi2XW5urg4dOlTqe2zZskWXXHKJunTpoqVLlyooqGrvgeabTTX6563PGKsVfOtIY7UkaVOe2d+Ka1tQ8n+gyvo5OL78jSqgi7XXWK1dR0tOdNVE4z5ONVYrPOeIsVqSlBUcaazW4OZmh8CucWYf9bxhj7m/3U/XPWqsViCZ/O0uuwb/n8XHx+vw4cPlbofAyrv4DqP1cle/aaxW8DFzOSVJObEdjdU6N8hs237PLP1CkMq6Zd8Wo/Wqw7qB5r7jFUTGGqslSc7sdKP1Yv463litQ5+vNVZLkt7s8KuxWv/ZechYrUDi9zRRXRqPnWa0Xsi8KUbrZeWbu7PxtrNbGaslSQ+knmSslmPfT8ZqSdLkLsFG61WHCzo2LX+jCoj9+GNjtV5o2d1YLUl68YaexmqdftlVxmpJUuSda4zWu/hNs2NEIJDJqE5pv5nLg263LTNWS5KyHKU/Aa8ywtxmz+kmDulgtN4/PvvZaL2a7pG+dxmtF7vD3A0l9YLMnm/e1eFCo/Uab/2XsVpH+9xgrJYkuVcuMFovUExmcvfu3bV9+3alpaUVW75hwwbP+lLb4HSqa9eu2rRpU4l1GzZsUJs2bRQZGVmsxp+33bRpk9xud4n32LlzpwYPHqymTZvqo48+Uv369Sv0mUzgUeGVcGDY5QoxMOc/I+0H6ewPDLRICvvoKek/LxqpJUlZF07QMZmbIN60L0NStpFaZ8dHKkttjNSSJC19TKcYKpU5dJKy8t2GqknZFaw1ev4U1TNw9UvYm//S1ky/y0iSOjQOlctMKUlS+CFzX9QyPn1b5xqrJkX2vUQXtTZX7/t7HzBW6+gjr2v39bOM1ctMT5ceX2SsXhFniFNOV9k9xlmBR6B1795dq1evVlpaWrFHswQq+C+88I8vkmUF/59ZlqXdu3fr9NNP9/lzoaRDWQXKCSrws0aedLa5SbOezr1S3nEjtbIat5UscyfJD2cXSFFtjdR6+evfJJmbhJt6bmtjtSQp9d6xmnLnX4zUSs/J1YJnk33e/reUdIU7/E/AK3/7Vv717j+40lKNTl7vCzJ7oeOWLmcZqzXg2dHKT91jrN5DYReqvaE/3RP3Pi5zpwokq8DsBR9FTGYy6o55P+UorJ5/J5Gn3mb2MXTH1s81Wu+p9b5nQXnu6ig90N3caZmC779QgaFYDm7TVco0l/EHGnfSDT3M1EpPS9PDFdj+2gc+kDPY+5OQfLH+uat1Q8+Wftcp8vbWVNVfY+ZE+S+/Z+rF9eYuslrzpblaSyf3lcb2Mlav46GvjdWSpFu6mjvpnitz54NORCajMlr36ClXaD2/67w/8RwDrSkUG5Qruc2cH5akd342c8wtSd2aRUoy9726U/AxPdcv2li9gvrmjr2c35o8GpHCMiv279Bh1b8VUd+/G5MiQ1wy+ezCAY1zFFtg5qaSZEcjBTvNXVDUMNSljO6XGKtXz5GnaOUbqbVn0g3KMFKpUH52rvS+mX/ZjNw8I3VK4y2XK5rJw4cP1+OPP6558+bprrsKL8jIycnRggUL1KtXL8XHF87R7dmzR8ePH1fHjh2L7Tt16lRt2rRJPXoUftH+6aeftGrVKk8tSTrvvPMUHR2t559/vtj56+eff14REREaMmSIZ1lqaqrOP/98OZ1OffLJJ4qJMXvex1fccQ0AsA2TV5IPHz5cBQUFmjdvnmdZWcH/448/ltj366+/LjZ5XRT8I0aM8Cw7MfhPVFrw//777yXa+Pzzz+v333/X4MGDff5cAABUBe7uAgDAHshkAADsw2Qm9+rVSyNGjNC0adM0efJkzZs3T+edd552796tWbP+uAlt1KhR6tSpU7F9x48fr1NOOUVDhgxRYmKinnzySQ0cOFCxsbG68847PduFh4froYce0vLlyzVixAjNnz9f1113nRYtWqR77rlH0dF/XGQzePBg/fLLL7r22mv1xRdfaNGiRZ7XihUrKvkXqzjuuAYA2IbD4ZDDy1WJDrfv4X9i8B84cEBt27bVq6++qt27d+vll1/2bDdq1CitXbtW1gl3tI4fP14vvfSShgwZorvuukvBwcGaPXt2mcF/yy23aMSIERo0aJDWrVunRYsW6ZFHHikW/CeddJJGjhyprl27KiwsTF988YXeeustde/eXX/72998/lwAAFQFk5kMAAAqj0wGAMA+vOVyZTL5tdde03333afXX39dR44c0Wmnnably5erT58+XveLjIzUmjVrNHHiRD388MNyu93q27ev5syZU+JO6fHjxys4OFhPPPGE/vnPfyo+Pl5z5szRhAkTim23ZUvhT+6dOGle5Nxzz9XAgQMr/Pkqg4lrAIBtuEJccgWV/Qg0l7Nij1uxU/Bfc801+uqrr/Tuu+8qOztbJ510kiZPnqx77rlHERERFfpcAAAEmulMBgAAlUMmAwBgH95yuTKZHBYWpsTERCUmJpa5zZo1a0pd3rJlSy1ZssSn9xk7dqzGjh3rdRvL4E8V+oOJawCAbThcDjm8PFLFYVXsqjU7Bf9LL73kUy0AAOzAdCYDAIDKIZMBALAPb7lMJpvBxDUAwDacLqecLmfZ662y1wEAAHPIZAAA7IFMBgDAPrzlMplsBhPXAADbcAY55Qr2ckAuwh8AgKpAJgMAYA9kMgAA9uEtl8lkM5i4BgDYhsPllMPLleQON+EPAEBVIJMBALAHMhkAAPvwlstkshlMXAMAbMPpcsjp5be7nG5+JwQAgKpAJgMAYA9kMgAA9uEtl8lkM5i4BgDYhjPEJWewq+z1DqsKWwMAQN1FJgMAYA9kMgAA9uEtl8lkM5i4BgDYhtOlcq4kr8LGAABQh5HJAADYA5kMAIB9eMtlMtkMHrgOALANh9NR7gsAAAQemQwAgD0EIpNzcnI0ZcoUNW/eXOHh4erVq5dWrFjh07579+7VFVdcoYYNGyoqKkpDhw7VL7/8Uuq2L7/8sjp16qSwsDC1a9dOzzzzTIlt3nvvPY0cOVJt2rRRRESEOnTooDvvvFNHjx6t8OcCACDQOE4OPO64BgDYhivYJVdI2Y9Ac4nL1gAAqApkMgAA9hCITB49erSWLl2q22+/Xe3atdPChQt14YUXavXq1TrnnHPK3C8jI0P9+vXTsWPHdPfddys4OFhz5szRueeeq6SkJDVu3Niz7YsvvqibbrpJw4YN0x133KF169bptttu0/HjxzVlyhTPduPGjVPz5s117bXXqlWrVtq6daueffZZffTRR/r2228VHh5e4c8HAECgeMtljpPNYOIaAGAbDpdTDlfZDwPxtg4AAJhDJgMAYA+mM3njxo166623lJiYqLvuukuSNGrUKHXp0kWTJ0/WV199Vea+c+fO1Y4dO7Rx40b17NlTknTBBReoS5cueuKJJzRjxgxJUlZWlu655x4NGTJES5culSSNHTtWbrdbDz30kMaNG6dGjRpJkpYuXaq+ffsWe58zzzxT1113nd544w3deOONFfp8AAAEkrdc5jjZDP6KAADbcDid5b4AAEDgkckAANiD6UxeunSpXC6Xxo0b51kWFhamG264QevXr1dycrLXfXv27OmZtJakjh07qn///nrnnXc8y1avXq1Dhw5p/Pjxxfa/5ZZblJmZqQ8//NCz7M+T1pJ02WWXSZK2bdtWoc8GAECgcZwcePwVAQC24QwJksvLyxnCg0IAAKgKZDIAAPbgayanpaUVe+Xk5JRab/PmzWrfvr2ioqKKLU9ISJAkJSUllbqf2+3Wd999px49epRYl5CQoJ07dyo9Pd3zHpJKbHvmmWfK6XR61pclNTVVktSkSROv2wEAUNW85TLHyWYwcQ0AsA2H0+l53EqpL65aAwCgSpDJAADYg6+ZHB8frwYNGnheM2fOLLVeSkqK4uLiSiwvWrZv375S9zt8+LBycnJ82jclJUUul0tNmzYttl1ISIgaN25c5nsUeeyxx+RyuTR8+HCv2wEAUNW85jLHyUYw/Q8AsI3yHqlC+AMAUDXIZAAA7MHXTE5OTi52F3VoaGip22dlZZW6LiwszLO+rP3KqvvnfbOyshQSElJqnbCwsDLfQ5IWL16sl19+WZMnT1a7du3K3A4AgOrgLZc5Tjajxv8Vn3vuObVu3VphYWHq1auXNm7cWOa2CxculMPhKPYq+mIFAKh+zpAgOUOCvby43srOyGQAqD3I5JqNTAaA2sPXTI6Kiir2KmviOjw8vNTHiGdnZ3vWl7WfJJ/2DQ8PV25ubql1srOzy3yPdevW6YYbbtCgQYP0yCOPlLpNTUMmA0Dt4j2XOU42oUZPXL/99tu64447NH36dH377bfq1q2bBg0apAMHDpS5T1RUlFJSUjyvX3/9tQpbDADwxul0lvuCPZHJAFC7kMk1F5kMALWL6UyOi4tTSkpKieVFy5o3b17qftHR0QoNDfVp37i4OBUUFJTIntzcXB06dKjU99iyZYsuueQSdenSRUuXLlVQUM0/+U8mA0Dtw3Fy4NXov+Ls2bM1duxYjRkzRqeeeqpeeOEFRURE6JVXXilzH4fDoWbNmnlesbGxVdhiAIA3Xn+3638v2BOZDAC1C5lcc5HJAFC7mM7k7t27a/v27UpLSyu2fMOGDZ71pXE6neratas2bdpUYt2GDRvUpk0bRUZGFqvx5203bdokt9td4j127typwYMHq2nTpvroo49Uv379Cn0muyKTAaD24Tg58GrsXzE3N1fffPONBgwY4FnmdDo1YMAArV+/vsz9MjIydNJJJyk+Pl5Dhw7V999/X+a2OTk5SktLK/YCAASOMyhIzmAvr1pwxXVtVBWZLJHLAFCVyOSaiUwGgNrHdCYPHz5cBQUFmjdvnmdZTk6OFixYoF69eik+Pl6StGfPHv34448l9v3666+LTUj/9NNPWrVqlUaMGOFZdt555yk6OlrPP/98sf2ff/55RUREaMiQIZ5lqampOv/88+V0OvXJJ58oJiamQp/HrshkAKidvOYyx8lG1NiJ64MHD6qgoKDEVWexsbFKTU0tdZ8OHTrolVde0QcffKBFixbJ7Xbr7LPP1m+//Vbq9jNnzlSDBg08r6IvbgCAwODurpqpKjJZIpcBoCqRyTUTmQwAtY/pTO7Vq5dGjBihadOmafLkyZo3b57OO+887d69W7NmzfJsN2rUKHXq1KnYvuPHj9cpp5yiIUOGKDExUU8++aQGDhyo2NhY3XnnnZ7twsPD9dBDD2n58uUaMWKE5s+fr+uuu06LFi3SPffco+joaM+2gwcP1i+//KJrr71WX3zxhRYtWuR5rVixopJ/tepHJgNA7cRxcuDVqb9i7969NWrUKHXv3l3nnnuu3nvvPcXExOjFF18sdftp06bp2LFjnldycrLR9twddaqxWtkXTjBWS5LCP3rKaL0ezc094uer5HRjtSRJw6cYK1Xvg0RjtapT9lUXG6v106EcY7UkKatxW2O16p8/0lgtSUpf80+j9To//ICxWg3v+auxWoHESfK6o6KZLAU2lxuHBxurJUlfu1sYqxV+6GdjtSQpOsxlrNYNPVsaqyVJj67dbbRes4dfMlqvOrzV8gxjtQqimhmrJUnN8383Wq/bf/9jrNZnty40VkuS7sv+yFitOx++y1itQCKT6w67ZfKjT99jrJYkNeg93mi9Cb3NTQg8/mP521SEq/M5xmrl/bLVWC1Janpom9F61aH3LYuN1hvZ1Vwut4mpZ6yWJPX9v5OM1Ro+a42xWpL0Y+OeRus9t/Vlo/UCIRCZ/Nprr+n222/X66+/rttuu015eXlavny5+vTp43W/yMhIrVmzRn369NHDDz+s++67T926ddPatWtL3Ck9fvx4zZs3T1u3btUtt9yiL7/8UnPmzNG0adOKbbdlyxZJ0qxZs/TXv/612OuRRx6p8GeryeyWyZJ02ZwvjNXanx9irJYkXdE2wlitLalmzzdvy2tgtJ4rw9yxl/sMc+d9q0t6boHRep8dCjVWK946YqyWJB3NMftZMy1z579aJZrN0KAws2NEoHCcHHg19r71Jk2ayOVyaf/+/cWW79+/X82a+fblPzg4WKeffrp+/rn0E8KhoaEKDS05aLX61wcKq+f/RGybxvX02a6jfteRpMujj0j/d4mRWpKU2aiN0c6RW2DpjDgzk9cN8o9K2eYCID24oXTZZCO19mXkScfzjdSSpIysitXqOra/oiLC/H7foItu9btGkTyXueCXiibCzZwsqhfilC4y828vSSdv+5fykncYq/dRk/Oke8x8Adh15Li096iRWpKUnWn4ApL/cQW75Aoue/RxFZj9sgYzqiKTpbJzufWRrYrK8+9k3dbIrgoLMvflskGoS3vU2kitYKdDyjbX98ODnaoXbOazhgc5NaVPayO1JCks5b/Svv8aq/drVAdp6lwzxdLTpGff8Xnzs79ZrcjIKL/f9kBmnpIOZPldR5K6x4SqILKpkVqSlC+nGhurJoX9tFYtPnrcSK0V4adrrZFKhbo2radbDNWKCSnQA+vmGKompaWlqWmLN4zVKxKITM7JydH999+v119/XUeOHNFpp52mhx9+WAMHDix3371792rixIn69NNP5Xa71a9fP82ZM0dt2rTxbJOcnKxXXnlFH374oXbs2CGXy6UuXbro3nvvLfaYztqsujN5XOcGioqKrFij/+TXnFBd/Im5C6nrhzh11GCORoY4dWsvMxdu/XwkR/91GyklSeqiFLk6nWWk1lnz9kjrDhmpJUnPXt9TOmrmoubM9IrVeWjC+Yqo71+/lKQrmqZLWeYmhJ7bHaoQQ98/r938fPkbVcCxK+/XpL5tyt/QB9fM26gbF3xtpJYkjZp1iz43Vk3q3f8k3XR5ByO1MvLyteBfZicNpcBkclhYmBITE5WYWPYNGGvWrCl1ecuWLbVkyRKf3mfs2LEaO3as120sy/KpVk1T3Zl8aZ82Rs5f923TWPvSc/2uI0mRIUFKzzF3xjk7361TY8ycbz6Wk6eDx818Tkk6lp2vnTI3Qdhh1jhjtaJONntBc3pOxf5u+zOyFebn5GnHJuZukpOkns3rK13+f1eQpF1HcyWZ++6ZkmH2prDzWjdQgcycr1++47B089NGaknSxJnLjdVy52VJ+thYvRN5y2XOXZtRY6f/Q0JCdOaZZ2rlypWeZW63WytXrlTv3r19qlFQUKCtW7cqLi4uUM0EAFQAd3fVTGQyANQ+gcjk0aNHa/bs2brmmmv01FNPyeVy6cILL9QXX3i/kycjI0P9+vXT2rVrdffdd+vBBx/U5s2bde655+rQoT8m1j744AM99thjatu2recusPT0dA0cOFALFiyocHtrIjIZAGofjpNrJjIZAGonMjnwauwd15J0xx136LrrrlOPHj2UkJCgJ598UpmZmRozZoykwt9iadGihWbOnClJ+sc//qGzzjpLbdu21dGjR5WYmKhff/1VN954Y3V+DADA/5QX8IS/fZHJAFC7mM7kjRs36q233lJiYqLuuqvwcemjRo1Sly5dNHnyZH311Vdl7jt37lzt2LFDGzduVM+ehY+IveCCC9SlSxc98cQTmjFjhiSpX79+2rNnj5o0aeLZ96abblL37t11//33ezKptiOTAaB24Ti55iKTAaD28ZbLZLIZNXrieuTIkfr99991//33KzU1Vd27d9fHH3+s2NhYSdKePXvkdP7RUY4cOaKxY8cqNTVVjRo10plnnqmvvvpKp55q7remAQCV5wwKliu47McFOfMNPksRRpHJAFC7mM7kpUuXyuVyady4Px5zGBYWphtuuEF33323kpOTFR9f+s/BLF26VD179vRMWktSx44d1b9/f73zzjueievOnTuX2Dc0NFQXXnihZs+erfT0dEVGmnkEoJ2RyQBQu3CcXHORyQBQ+3jLZTLZjBo9cS1Jt956q269tfTf4/3zb7HMmTNHc+aY+z05AIBZXEles5HJAFB7+JrJaWlpxZaX9TuLmzdvVvv27RUVVfy33xMSEiRJSUlJpU5cu91ufffdd7r++utLrEtISNCnn35a7oR0amqqIiIiFBERUeY2tQ2ZDAC1B8fJNRuZDAC1C3dcBx5/RQCAbfDbXQAA2IOvmRwfH68GDRp4XkWPuvyzlJSUUn+fsWjZvn37St3v8OHDysnJqdS+kvTzzz/rvffe07Bhw+Ryubx/aAAAbIjjZAAA7INMDrwaf8c1AKD2cAYHyRlcdjQ58wuqsDUAANRdvmZycnJysbuoS7vbWpKysrJKXRcWFuZZX9Z+ZdUtb9/jx49rxIgRCg8P16OPPlrWRwEA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3r3q2LGjNm7cKEnauXOnHnroIX3zzTfavXu3/vnPf2rUqFHq06ePTjvN3G91AAAqz06/3QXfkMkAUDuRyTUPmQwAtZNdMnnz5s0644wz5HQWP52ckJCg48ePa/v2sn+Kb+/evTpw4IB69OhRYl1CQoI2b95c7H3q1aunTp06ldiuaL03Rb8h3aRJE+8fKIDIZACoveyQybWdre64rog33nhDt956q/r37y+n06lhw4bp6aef9qzPy8vTTz/9pOPHj0uSQkJC9Nlnn+nJJ59UZmam4uPjNWzYMN17773V9REAAH+Sk2/JnV/27wzn5RP+dkQmA0DtQybXTGQyANQ+vmZyWlpaseVl/fZxZaWkpKhPnz4llhfdDbxv3z517dq1zH1P3PbP+x8+fNhzx3ZKSopiY2NL/D71ie/jzaxZsxQVFaULLrig/A8VQGQyANRO3nKZ42QzauzEdXR0tNffTmndurUs649OEh8fr7Vr11ZF0wAAlVTgtuT0cmUaV63ZE5kMALUPmVwzkckAUPv4msnx8fHFlk+fPl0PPPBAqfu43W7l5ub69P6hoaFyOBzKysoqdSI8LCxMkpSVlVVmjaJ15e0fGhrq1/vMmDFDn332mebOnauGDRuW/aGqAJkMALWTt1zmONmMGjtxDQCofThJDgCAPZDJAADYg6+ZnJycrKioKM9yb3dbf/755+rXr59P779t2zZ17NhR4eHhysnJKbE+OztbkhQeHl5mjaJ1vuxf2fd5++23de+99+qGG27QzTff7O0jAQBQaUxcBx4T1wAA28jLd8vy8gi0fC/rAACAOWQyAAD24GsmR0VFFZu49qZjx45asGCBT9sWPaI7Li7O88jvExUtK/rtZm81yto/OjraM9EeFxen1atXy7KsYo8L9/Y+K1as0KhRozRkyBC98MILPn0uAAAqw1suc5xsBhPXAADbsCxLlpcr0058jBYAAAgcMhkAAHsIRCY3a9ZMo0ePrtA+3bt317p16+R2u+V0Oj3LN2zYoIiICLVv377MfVu0aKGYmBht2rSpxLqNGzeqe/fuxd5n/vz52rZtm0499dRi71O0/kQbNmzQZZddph49euidd95RUBCnuwEAgeMtlzlONsNZ/iYAAFQNt9sq9wUAAAKPTAYAwB7sksnDhw/X/v379d5773mWHTx4UEuWLNHFF19c7NHkO3fu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ltMZuGsYsrKyFBoaWux669evl9vt1i233KKcnBxJ5zrizMxM9e3b12vd3NxcdezYUZLUqlUrXX755Vq4cKF69eqlX375RatXr9Zjjz1W4DXCwsIkSZmZmWV9WygD2iZtE6iO6Pvo++yIdkm7BKoj+j76PruibdI2geqGfo9+z65om7RNVBzuuK7CNm3apCuuuELNmzf3murWrau9e/eqXbt2uummm3TppZcqKytLb7zxhrp27aoOHTpo/PjxnjoLFy5U+/bt1aFDB02YMMEz/+mnn1bbtm3Vrl07vfXWW0XuR/369XXy5EnP382bN5fD4dD27du91mvWrJmaN2/u6QAlKT09XZL08ccfKykpyTP9/PPPWrZsmWe9O++8U++9957S0tK0aNEiXXzxxerZs2eBfTlx4oQkKTo62t+PEQFA26RtAtURfR99nx3RLmmXQHVE30ffZ1e0TdomUN3Q79Hv2RVtk7aJClRxTylHIO3atcuSZH377beFLt+zZ4/lcrmsH374wbIsy/r555+twYMHW2fOnLEsy7Juu+02a/ny5daWLVustm3bWidPnrQsy7KOHz9uWZZlrV+/3urUqZOVlZVlHT9+3GrWrJl14MCBQl9r5syZVocOHbzmXXPNNVajRo2s9PT0Auv37NnTGjt2rGVZlpWammqFhIRYr7/+us/3m5aWZkVERFgvvvii1bhxY+vJJ58sdL0FCxZYjRs39lkLgUXbpG0C1RF9H32fHdEuaZdAdUTfR99nV7RN2iZQ3dDv0e/ZFW2TtomKxaPCq6iNGzdKkmJiYgr85sAFF1wgSWrZsqXat28vSVqxYoX+85//qEuXLpLOPe6hc+fO2rVrl2688UbVrl1b0m+Pwvjuu+80ePBghYaGKjQ0VL1799b333+v66+/vsC+9OvXT5MnT9bJkydVp04dSdK8efN0xRVXqEuXLpo6darat28vp9Op77//Xtu2bVPnzp0lSZGRkZowYYLGjRsnt9utK6+8UqdPn9Z3332nqKgo3X777ZKkiIgI3XjjjZo8ebJSU1M1cuTIQj+X1atX65prrintxwoDaJsjC/1caJtA1UbfN7LQz4W+r2LRLkcW+rnQLoGqjb5vZKGfC31fxaNtjiz0c6FtAlUX/d7IQj8X+r2KR9scWejnQttEeWHguoratGmTJKlFixZe80NCQpSamipJ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HTpUYWFheuqpp/x4xwAA2JO/mQwAAAKLTAYAwD585jKZbAR3XAMAbMPhcsrhKvqaKof73LLk5GSvR4AXNsgcFhamnJycAvOzs7M9ywuTP7+k2+bl5emmm27Szz//rH//+99q2LBhke8DAAC78zeTAQBAYJHJAADYh69cJpPNYOAaAGAbrmCnXEFFB7zLcW5ZVFRUgd+u/r3Y2FgdOHCgwPyUlBRJKnJguW7dugoJCfGs5++2o0eP1vLly/XWW2/p6quv9rlvAADYnb+ZDAAAAotMBgDAPnzlMplsBgPXAADbMHkleXx8vL7++mulpqZ6DXKvW7fOs7wwTqdT7dq104YNGwosW7dunZo1a6bIyEiv+RMnTtSiRYv0zDPPaPjw4X7vIwAAdsXdXQAA2AOZDACAfXDHdeDxKQIAbMPpkpwuh4/J/1pDhgxRXl6eXn75Zc+8nJwcLVq0SN26dVNcXJwkad++fdq2bVuBbb///nuvwevt27frq6++0tChQ73WnTlzpmbNmqUpU6Zo7NixpXjXAADYj8lMzpeTk6MHHnhADRs2VFhYmLp166YvvvjCr20PHDigYcOGqXbt2oqKitL111+v3bt3e62TnJysadOmKSEhQXXq1FH9+vXVq1cvffnllyXfWQAAbKIyZnK+V199Va1bt1ZoaKhatGih559/vsA6U6dOlcPhKDCFhoaW/I0BABBgvnO5oveuauCOawCAbbhquOQKKjrhXZbb71rdunXT0KFDNXnyZB05ckTNmzfXa6+9pr179+rVV1/1rDdixAitWrVKlmV55t1999165ZVXNHDgQE2YMEFBQUGaM2eOYmJidP/993vW++CDDzRp0iS1aNFCrVu31ptvvum1D3379lVMTIzf+wwAgF2YzOR8I0eO1LJly3TfffepRYsWWrx4sQYMGKCvv/5aV155ZZHbpaenKzExUadPn9aUKVMUFBSkuXPnqmfPnkpKSlK9evUkSR999JGefvpp/eEPf9Dtt9+us2fP6vXXX1ffvn21cOFCjRo1qsT7DABARauMmSxJL730kv785z9r8ODBGj9+vFavXq2//e1vyszM1AMPPFCg9vz58xUREfHb+3Jx9h8AYD++crk0mYyCGLgGANiGw+WQw+XwubwkXn/9dT388MN64403dPLkSbVv317Lly9Xjx49fG4XGRmplStXaty4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JycrKirKMz8kJKTIem63W7m5uX69dkhIiBwOh7KysgqtGRoaKknKysoqskb+suK2L2z5kSNHdPPNN+uiiy7SpEmTvJaNHTvW6+/BgwcrISFBt9xyi+bNm6cHH3ywmHf3G+64BgDYhruYR624OSAHAKBckMkAANgDmQwAgH34yuX8TI6KivKafA1cf/PNNwoLC/Nr2r59uyQpLCys0Luis7OzPcuLkr+spNtnZGRo0KBBSktL00cffVTgt68Lc/PNN6tBgwb68ssvi133fJV24PrEiRO65ZZbFBUVpdq1a+vOO+9Uenq6z2169eolh8PhNf35z38upz0GABQnN8/X48/cys1zV/QuohBkMgBUPWRy5UQmA0DVQyZXTmQyAFRNPnO5FJncqlUrLVq0yK8p//HesbGxnkd+ny9/XsOGDYt8vfwaRW1ft27dAgPtubm5uuGGG7RlyxZ99NFHatu2rd/vLy4uTidOnPB7fakSPyr8lltuUUpKir744gudOXNGo0aN0pgxY/T222/73G706NF67LHHPH+Hh4cHelcBAH7iEWiVE5kMAFUPmVw5kckAUPWQyZUTmQwAVZM/jwoviQYNGmjkyJEl2iY+Pl6rV6+W2+2W0/nb/cnr1q1TeHi4WrZsWeS2jRo1UnR0tDZs2FBg2fr16xUfH+81z+12a8SIEVqxYoWWLFminj17+r2flmVp79696tixo9/bSJV04Hrr1q369NNP9f3336tLly6SpOeff14DBgzQrFmzfF5NEB4ergYNGpTXrgIASuCs25LLR8Cf5YDcdshkAKiayOTKh0wGgKqJTK58yGQAqLp85XJ5ZfKQIUO0bNkyvf/++xoyZIgk6dixY1q6dKmuu+46rzumd+3aJUm6+OKLPfMGDx6s1157TcnJyYqLi5MkrVixQjt27NC4ceO8Xuuvf/2r3n33Xb300ku64YYbityno0ePKjo62mve/PnzdfToUfXv379E769SPip87dq1ql27tif4JalPnz5yOp1at26dz23feust1a9fX23bttXkyZOVmZlZ5Lo5OTlKTU31mgAAgXPG1+PPzrp15iyPQLOb8spkiVwGgPJEJlc+ZDIAVE1kcuVDJgNA1eUrl8srk4cMGaLLLrtMo0aN0mOPPaZ58+apV69eysvL07Rp07zW7d27t3r37u01b8qUKQoPD1diYqKef/55zZgxQ0OHDlW7du00atQoz3rPPPOM5s2bp+7duys8PFxvvvmm15SRkeFZt0mTJho1apTmzJmjefPm6eabb9a9996r+Ph4/elPfyrR+6uUd1wfOnRIF1xwgde8GjVqqG7dujp06FCR2918881q0qSJGjZsqC1btuiBBx7Q9u3b9f777xe6/owZMwr8TwYABE6eZSnP8vEINB/LUDHKK5MlchkAyhOZXPmQyQBQNZHJlQ+ZDABVl69cLq9Mdrlc+uSTTzRx4kQ999xzysrKUteuXbV48WJdcsklxW4fFxenVatWafz48XrwwQcVHBysgQMHavbs2V53ayclJUk6d0HW2rVrC9TZs2ePatasKencT2SsWbNG7733nrKzs9WkSRNNmjRJDz30UIl/9sJWd1w/+OCDcjgcPqdt27aVuv6YMWPUr18/tWvXTrfccotef/11ffDBB55b5X9v8uTJOn36tGdKTk4u9WsX5vuD6cZq5ToMX4PgCjJarkFQrrFaablmr1pJD6lrtF5VsFf1jNVyZpu90tNymOu2OtTKM1ZLkjYGFx8KFaVt5taK3gW/5P9GiK8J5cNumSwFNpdd7jPGaknS2dDaxmrVdacZqyVJJzsPNlYr7/RxY7UkKe7Xb4zWu+biyp/xYWczil/JT49d09xYLUlat/ek0Xrf7TtlrFaLumHGaknSV9bFxa9Uxdglk0+dOqUxY8YoOjpaNWvWVGJiojZt2uT39lu3blX//v0VERGhunXr6rbbbtPRo0e91tm2bZsmTZqk+Ph4RUZGKjY2VgMHDiz0N78qQnXL5LzjRZ/QL43WGT8brbczK9RYrR7RZv8duZwOY7W+PmT2uPvC4Byj9SpCh+uuN1qvTp+HjNVyuM8aqyVJ7rA6xmp9Maro31gsjUaGv99lpdu/bdolk1H9MlmSwoPMnYfbfcrc+WFJCnGZy71mdUKKX6kEtpwwm6MNQsydw9wffpGxWhUl44zZz3d/Xk1jtawawcZqSZIr/WjxK5XAmYsvN1cs3ew5ochrhhmtFyh2yeQ6depowYIFOnbsmDIyMrRy5UqvJ33k27t3r/bu3Vtgfps2bfTZZ58pIyNDJ0+e1JtvvqmYmBivdRYvXizLsoqcmjZt6ln3lVde0U8//aTU1FTl5uZq586deuqppxQZGVni92arO67vv//+Yn+EvFmzZmrQoIGOHDniNf/s2bM6ceJEiX4DpFu3bpKkX375xev57vlCQkK8ri7Id3lkuqIiyx6MOZHmfq/krNtSllzG6oXn+X4MTUkdt8IUbGj36tY4K8lcWOc6g5UTbmagNtgye7BonSlZO/v+QKrCIsreOd7U2Nz7sEIi5LDMfZlwZJsbwHHXrKv2Bo95D+e6tF9tjdWrFWLu3/RTK/dIOmCsXk6muQtvzpd71i35eKRKLo9AKzd2y2Sp6FyuceBH1ThdtoOM78PaSDI3eH0mz5Jk5iKwhJhg1ZG5tp/hdimj6xAjtU7nmL0AqGHwGTU0+P/hpBWi61vVN1IrLTVY44pfzePsl4t1Nrzsgxs1Gl4kU0OwK6IT1b/1BcWv6KdevywzGS06ccVIY7XqfrdY5t6p9GnTG/SRmhipdelz9xipky891+yFN/nskMlut1sDBw7UDz/8oIkTJ6p+/fqeR6Bt3LhRLVq08Ln9/v371aNHD9WqVUvTp09Xenq6Zs2apR9//FHr169XcPC5k0oLFizQq6++qsGDB+vuu+/W6dOn9dJLL+myyy7Tp59+qj59+gT8vfpSmTJZTdpJpTgxcb7UMJP/eqWaLksmLz1ZczBThzPMnCi/6vh36mmk0jm7ml5trFaDj56SybMCYbdMVpyhM1CpJTxcDQ5xqYaBY6vP/tJVuu+yMtfJ9/neNH32q5kL1EJcZu9LqR8eLKlkd8YUZfySJCN18n32l65G65kcEEhNS1P954yV87BDJuc7deqUJk2apA8++ECZmZlKSEjQ7Nmz1alTJ7+237p1q8aNG6dvv/3Wc3fXnDlzCvwmptvt1qxZszR//nylpKSoZcuWmjx5soYPH+613siRI/Xaa68VeJ1LLrmkTAPIRalMmdw41K2osLK3jRrH9pS5Rj53eG3J4OmknW5zJ/Vank1WR4Nd6d6QC5WcZa5eqMshU+P09Te8a/CoWzqTUbI3Wi+0hiLDyvaloM5/3irT9r/nuPJGWYaOvGsc32ukTr60ei2kPHODoZHHd0qRZs6TfJgaLRm81+IPtY8r8trhxa/oBystXdIcI7V+z1cuc+7aDFsNXEdHRxf4olKY7t2769SpU9q4caM6d+4sSfrqq6/kdrs9ge6P/NvcY2NjS7W/AACz8iy38txFB3yewYsg4BuZDADVmx0yedmyZVqzZo2WLl2qIUPOXXAzbNgwtWzZUo8++qjefvttn9tPnz5dGRkZ2rhxoy688EJJUkJCgvr27avFixdrzJgxkqThw4dr6tSpioiI8Gx7xx13qHXr1po6dWqFD1yTyQBQvdkhk6Xyu6BMkh566CE99dRTGj16tLp27aqPPvpIN998sxwOh2666SavuiEhIVqwYIHXvFq1apl74+chkwEAvnKZc9dm2Grg2l+tW7dW//79NXr0aL344os6c+aM7r33Xt10001q2LChJOnAgQPq3bu3Xn/9dSUkJGjXrl16++23NWDAANWrV09btmzRuHHj1KNHD7Vv376C3xEAQJLcxTxSxc0j0GyHTAaAqskOmbxs2TLFxMTohhtu8MyLjo7WsGHD9OabbyonJ6fwu37/z3vvvadBgwZ5Bq0lqU+fPmrZsqWWLFniGbjOP6F8vnr16umqq67SypUrzb2hACOTAaBqskMmS+V3QdmBAwc0e/Zs3XPPPfrnP/8pSbrrrrvUs2dPTZw4UUOHDpXL9dtTFGrUqKFbb701EG+51MhkAKi6fOUy567NsNVvXJfEW2+9pVatWql3794aMGCArrzySr388sue5WfOnNH27duVmXnu4VbBwcH68ssvdc0116hVq1a6//77NXjwYP3rX/+qqLcAAPidnLOWcs66fUyEvx2RyQBQ9dghkzdv3qxOnTrJ6fQ+bE1ISFBmZqZ27NhR5LYHDhzQkSNHCv2Nr4SEBG3evLnY1z906JDq1zfzGL3yQiYDQNVjh0yWfF9Q9tFHHyknx/fvhRd3QVm+jz76SGfOnNHdd9/tmedwOPSXv/xF+/fv19q1awvUzsvLU2pqalnennFkMgBUTb5zmXPXJlTKO64lqW7duj6v5GvatKks67dGEhcXp1WrVpXHrgEASinPbcnp48o0X1eZo+KQyQBQ9fibyb8/SVzkbx+XQkpKinr06FFgfv7jMg8ePKh27doVue356/5++xMnTvi8Y3v16tVau3at/v73v5d29ysEmQwAVY8dMlnyfUHZyy+/rB07dhSZy8VdUPbJJ594vU7NmjXVunXrAuvlL7/yyis98zMzMxUVFaXMzEzVqVNHw4cP19NPP+31EyAVgUwGgKrJVy5z7tqMSnvHNQCg6sn7v0et+JoAAEDg+ZvJcXFxqlWrlmeaMWNGofXcbreys7P9mvJP4mZlZRV6wj00NNSzvCj5y0qz/ZEjR3TzzTfroosu0qRJk4p8DQAAyoPpTC6tlJSUIi8Ik85dUOZr2/PX/f32+ReU5a8bExMjh8NR7OvExsZq0qRJWrRokf7f//t/+p//+R/NmzdP/fv319mzZ0v4DgEAKB7nrgOv0t5xDQCoes6cdcs66y5y+VkfywAAgDn+ZnJycrKioqI884u6s+ubb75RYmKiX6+9detWtWrVSmFhYYU+djQ7O1uSFBYWVmSN/GUl3T4jI0ODBg1SWlqavv322wq/WwsAANOZLJ27oCw3N9ev1w8JCZHD4SiXC8pCQkJK9Dq/H5y/6aab1LJlSz300ENatmyZbrrppuLeHgAAJeIrlzl3bQYD1wAA28hzW3LwqHAAACqcv5kcFRXldZK8KK1atdKiRYv8eu38O6piY2M9d2idL39ew4YNi61R1PZ169YtcFI8NzdXN9xwg7Zs2aLPPvtMbdu29Wt/AQAIJNOZLNn7grKyvI4kjRs3Tg8//LC+/PJLBq4BAMb5ymXOXZvBwDUAwDYsy5LlI+DP//0nAAAQOKYzuUGDBho5cmSJtomPj9fq1avldru9fk9z3bp1Cg8PV8uWLYvctlGjRoqOjtaGDRsKLFu/fr3i4+O95rndbo0YMUIrVqzQkiVL1LNnzxLtKwAAgRKI42Q7X1AWGxurr7/+WpZleT0u3J/Xkc4NbNerV08nTpzwuR4AAKXhK5c5d20GA9cAANvIy3PLkVf0I1XyfCwz6dSpU5o0aZI++OADZWZmKiEhQbNnz1anTp382n7r1q0aN26cvv32WwUHB2vgwIGaM2eOoqOjPets27ZNCxcu1Oeff65du3YpIiJCnTp10rRp09SlS5dAvTUAAPxih0weMmSIli1bpvfff19DhgyRJB07dkxLly7Vdddd53XH9K5duyRJF198sWfe4MGD9dprryk5OVlxcXGSpBUrVmjHjh0aN26c12v99a9/1bvvvquXXnpJN9xwQ6DfGgAAfgtEJtv5grL4+HgtWLBAW7du1aWXXur1OvnLfUlLS9OxY8e8jr8BADDFVy6X17nrqs5Z/CoAAJQPy20VOwWa2+3WwIED9fbbb+vee+/VP/7xDx05ckS9evXSzp07i91+//796tGjh3755RdNnz5dEyZM0Mcff6y+fft6/YbYggUL9Morr6hLly6aPXu2xo8fr+3bt+uyyy7Tl19+Gci3CABAseyQyUOGDNFll12mUaNG6bHHHtO8efPUq1cv5eXladq0aV7r9u7dW7179/aaN2XKFIWHhysxMVHPP/+8ZsyYoaFDh6pdu3YaNWqUZ71nnnlG8+bNU/fu3RUeHq4333zTa8rIyAj4ewUAoCh2yGTpXC4fPnxY77//vmeerwvK8i8qyzd48GAtX75cycnJnnn5F5QNHTrUM+/6669XUFCQ5s2b55lnWZZefPFFNWrUSJdffrmkc48OT0tLK7Cfjz/+uCzLUv/+/cv+pgEA+B07ZHJVxx3XAADbcLstuX0EvK9lpixbtkxr1qzR0qVLPXd3DRs2TC1bttSjjz6qt99+2+f206dPV0ZGhjZu3KgLL7xQkpSQkKC+fftq8eLFGjNmjCRp+PDhmjp1qiIiIjzb3nHHHWrdurWmTp2qPn36BOgdAgBQPDtkssvl0ieffKKJEyfqueeeU1ZWlrp27arFixfrkksuKXb7uLg4rVq1SuPHj9eDDz7oeQrK7NmzvU6uJyUlSZLWrl2rtWvXFqizZ88e1axZ09j7AgCgJOyQyZL3BWU///yz6tevr3nz5hV5QZkk7d271zNvypQpWrp0qRITEzV27Filp6dr5syZBS4oa9y4se677z7NnDlTZ86cUdeuXfXhhx9q9erVeuutt+RyuSRJhw4dUseOHTV8+HC1atVKkvTZZ5/pk08+Uf/+/XX99dcH+BMBAFRHvnK5vDK5qmPgGgBgG+48S+48HwfkPpaZsmzZMsXExHg9JjQ6OlrDhg3Tm2++qZycHK+T3b/33nvvadCgQZ5Ba0nq06ePWrZsqSVLlngGrjt37lxg23r16umqq67SypUrzb0hAABKwQ6ZLEl16tTRggULtGDBAp/rnX9i/Hxt2rTRZ5995nPbxYsXa/HixaXcQwAAAssumVxeF5RJ0lNPPaU6deropZde0uLFi9WiRQu9+eabuvnmmz3r1K5dW4MGDdIXX3yh1157TXl5eWrevLnnyWfnP84cAABTfOVyeWVyVcfANQDANvy9kjw1NdVrfkhIiM/B5JLYvHmzOnXqVOAgNyEhQS+//LJ27Nihdu3aFbrtgQMHdOTIkUJ/ozohIUGffPJJsa9/6NAh1a9fv3Q7DwCAIXa5uwsAgOrOTplcHheUSZLT6dTkyZM1efLkItepXbu23njjjWJrAQBgEndcBx6XngEAbMPf3+6Ki4tTrVq1PNOMGTOM7UNKSopiY2MLzM+fd/DgQZ/bnr/u77c/ceKEcnJyitx+9erVWrt2rW688caS7jYAAEbZ5fc0AQCo7shkAADsg0wOPO64BgDYhjvPrbw8t8/lkpScnKyoqCjP/KLutna73crNzfXrtUNCQuRwOJSVlVVovdDQUElSVlZWkTXylxW3fWHLjxw5optvvlkXXXSRJk2a5Nc+AwAQKP5mMgAACCwyGQAA+/CVy2SyGQxcAwBsw7J8X5lmWeeWRUVFeQ1cF+Wbb75RYmKiX6+9detWtWrVSmFhYYXeFZ2dnS1JCgsLK7JG/rKSbp+RkaFBgwYpLS1N3377rSIiIvzaZwAAAsXfTAYAAIFFJgMAYB++cplMNoOBawCAbRT3SJWSPm6lVatWWrRokV/r5j/eOzY21vPI7/Plz2vYsGGxNYravm7dugXuts7NzdUNN9ygLVu26LPPPlPbtm392l8AAALJdCYDAIDSIZMBALAPX7lMJpvBwDUAwDby8izJxyNV8vJKFv4NGjTQyJEjS7RNfHy8Vq9eLbfbLafT6Zm/bt06hYeHq2XLlkVu26hRI0VHR2vDhg0Flq1fv17x8fFe89xut0aMGKEVK1ZoyZIl6tmzZ4n2FQCAQDGdyQAAoHTIZAAA7MNXLpPJZjiLXwUAgPJhuYufAm3IkCE6fPiw3n//fc+8Y8eOaenSpbruuuu87pjetWuXdu3a5bX94MGDtXz5ciUnJ3vmrVixQjt27NDQoUO91v3rX/+qd999V/PmzdMNN9wQoHcEAEDJ2SGTAQAAmQwAgJ2QyYHHHdcAANtwuy05fDxSxV0Oj1sZMmSILrvsMo0aNUo///yz6tevr3nz5ikvL0/Tpk3zWrd3796SpL1793rmTZkyRUuXLlViYqLGjh2r9PR0zZw5U+3atdOoUaM86z3zzDOaN2+eunfvrvDwcL355ptetf/4xz+qZs2agXujAAD4YIdMBgAAZDIAAHbiK5fJZDMYuAYA2IYdfrvL5XLpk08+0cSJE/Xcc88pKytLXbt21eLFi3XJJZcUu31cXJxWrVql8ePH68EHH1RwcLAGDhyo2bNne92tnZSUJElau3at1q5dW6DOnj17GLgGAFQYO2QyAAAgkwEAsBN+4zrwGLgGANhGXp67mN/uKp/nrdSpU0cLFizQggULfK53/p3W52vTpo0+++wzn9suXrxYixcvLuUeAgAQWHbJZAAAqjsyGQAA+/CVy2SyGfzGdQUKSTtkrFYNp8NYLUnKdIUbrVfPkWWs1omzZq+3CHbnGquV66ga14K8s9/c+3DkpBurJUlWaKSxWs6ME8ZqSVJMcJ7ReqdzzNV7sNdFxmoFUv4Va74mIBC6Zv1ktF6Qy1wurz9sLqckqabTXN9SK8RlrJYkHcwNMlqvjiPHaL2KcPbgHmO1eh/92lgtSVrZfIjRenW/W2ys1okrRhqrJUn9975vrNbPf3vBWK1AIpNRUaKyjhitl5Fn9lj58obmjpVX17vCWC1JunjvV8ZqHbr+QWO1JCnrrRlG61WEfvO/N1rvmqbmjm1zDJ8kPZZp7vvnnGHxxmpJ5v8/5EVEG60XCGQyKtLZ+ubOJzkzTxmrJUktnObO6+2oEWesliQ1zdlntF52nrl/58e63GisVkU5edktRutZ375rrNbZek2N1ZKkyOM7jdZLq9fCWK0/RB01VkuSPjxVz2i9QCGTA69qjLKVt+SfpYiyH6xmt+lrYGd+4zI4eO2QlOs094jaE9l5ksz8o23gPiWdNVJKkuTKOG7sH8L+iIt17tMzIy2nZLWuurCWIqOiyvy6F7iyDf3fkvblhkgGx1ziwtyyatY1UstxJkuOM+YuqrCCwowOXrt2rTNWK/3iK/VAz6bG6qWmpmqusWq/saxiHoFmEf4oaG/ddoqMLFvfd6HjtDop09AeSQdUy1itWiEuZRg8Fxn1yzcqe1Kc4wirafCdSp+rpbYZrNfmgpoy9f0jt4QnCoK7D1JwZETZX/hYctlr/J8NtbuojrFq0oHUbH3S5I/G6jV7eKS04CMjtdo/8YDUtJWRWpJ0NO4ydTdUa/xHP0tXTjZUTTqTlS69ttxYvXxkMkrj7V8dCoso2/HQbW3qKkLmvlOvPphtrJYk1Q8PUt0wMxdaXRgVrLSYa4zUkqR3fzoi7TFzEv+upnnS/9xppJYkHQ6OUbqh68lKepz88vG3FRkSXObXvc4aqm6PrSpznXzdn77bWK0XfnxVMvh98eyFHWWq4GkrREvv6mqkliRFBZu9Byf3HXMXVWRlBeaiSTIZpZHtCFawo+x9X85Zt1THzEBX7TMnjdTJlxNeT6aGm/PcltJlbpD+RHae0TsGQ1zmqv1j5W5JCcbq5WSW7Kalula6oqyyfV90Zp2W2vcsU43zOVKPSPu3GKn1bVBrSY2M1JKkK2scMDp43fMdcxd83NarmaQzxurd9N9XZOoWuPQAZbLkO5fJZDMYuAYA2Ia7mEeguXncCgAA5YJMBgDAHshkAADsw1cuk8lmMHANALCN4h6pwuNWAAAoH2QyAAD2QCYDAGAfvnKZTDaD37gGANiG220VOwEAgMAjkwEAsAcyGQAA+7BLJp86dUpjxoxRdHS0atasqcTERG3atMnv7bdu3ar+/fsrIiJCdevW1W233aajR71/t3zv3r1yOByFTu+8806pavqDO64BALbhPpsrOYuOJvdZgz+YDgAAikQmAwBgD2QyAAD24SuXyyuT3W63Bg4cqB9++EETJ05U/fr1NW/ePPXq1UsbN25UixYtfG6/f/9+9ejRQ7Vq1dL06dOVnp6uWbNm6ccff9T69esVHBzstf7w4cM1YMAAr3ndu3cvU01fGLgGANiG5XbLcuf5XA4AAAKPTAYAwB7IZAAA7MNXLpdXJi9btkxr1qzR0qVLNWTIEEnSsGHD1LJlSz366KN6++23fW4/ffp0ZWRkaOPGjbrwwgslSQkJCerbt68WL16sMWPGeK3fqVMn3XrrrUZr+sKjwgEAtmHl5RU7AQCAwCOTAQCwBzIZAAD7sEMmL1u2TDExMbrhhhs886KjozVs2DB99NFHysnJ8bn9e++9p0GDBnkGmCWpT58+atmypZYsWVLoNhkZGcrNLfqO8tLULAoD1wAA23Dn5cp91seUxyPQAAAoD2QyAAD2QCYDAGAfPnP5/zI5NTXVaypuILmkNm/erE6dOsnp9B7iTUhIUGZmpnbs2FHktgcOHNCRI0fUpUuXAssSEhK0efPmAvOnTZumiIgIhYaGqmvXrvr888/LXNMXBq4BALZhufOKnQAAQOCRyQAA2AOZDACAffiTyXFxcapVq5ZnmjFjhtF9SElJUWxsbIH5+fMOHjzoc9vz1/399idOnPAMtDudTl1zzTWaOXOm/vd//1dz587VkSNHdO211+rjjz8uVU1/8BvXAADbKO6gmwNyAADKB5kMAIA9kMkAANiHr1zOn5+cnKyoqCjP/JCQkCLrud1un4/gPl9ISIgcDoeysrIKrRkaGipJysrKKrJG/rLitg8JCdGFF16ozz77zGud2267TZdeeqnuv/9+DRw4sMQ1/cHANQDANvLOnpHlcBW53H32TDnuDQAA1ReZDACAPZDJAADYh69czs/kqKgor4FrX7755hslJib6te7WrVvVqlUrhYWFFXoHc3Z2tiQpLCysyBr5y0q7fd26dTVq1Cg99dRT2r9/vxo3blzmmr/HwDUAwDa4khwAAHsgkwEAsAcyGQAA+/DnjuuSaNWqlRYtWuTXuvmP4o6NjfU8nvt8+fMaNmxYbI2itq9bt26xd0bHxcVJkk6cOKHGjRsbqXk+Bq4BALbBATkAAPZAJgMAYA9kMgAA9mF64LpBgwYaOXJkibaJj4/X6tWr5Xa75XQ6PfPXrVun8PBwtWzZsshtGzVqpOjoaG3YsKHAsvXr1ys+Pr7Y19+9e7ckKTo62ljN8zmLXwUAgPJhnc2V+0zRk3XWv9/7AAAAZUMmAwBgD2QyAAD24SuXyyuThwwZosOHD+v999/3zDt27JiWLl2q6667zuvu5l27dmnXrl1e2w8ePFjLly9XcnKyZ96KFSu0Y8cODR061DPv6NGjBV77wIEDWrhwodq3b++507okNf3BHdcAANuw3G7J55Xk7nLcGwAAqi8yGQAAeyCTAQCwD1+5XF6ZPGTIEF122WUaNWqUfv75Z9WvX1/z5s1TXl6epk2b5rVu7969JUl79+71zJsyZYqWLl2qxMREjR07Vunp6Zo5c6batWunUaNGedabNGmSdu3apd69e6thw4bau3evXnrpJWVkZOjZZ5/1eh1/a/qDgWsAgG1Y7rxiDsh5BBoAAOWBTAYAwB7IZAAA7MNXLpdXJrtcLn3yySeaOHGinnvuOWVlZalr165avHixLrnkkmK3j4uL06pVqzR+/Hg9+OCDCg4O1sCBAzV79myvu7WvueYavfjii3rhhRd08uRJ1a5dWz169NDf//53derUqVQ1/cHANQDANtxnz8jh41csrLNnynFvAACovshkAADsgUwGAMA+fOVyeWZynTp1tGDBAi1YsMDneuffaX2+Nm3a6LPPPvO57fDhwzV8+HC/98mfmv5g4BoAYBtcSQ4AgD2QyQAA2AOZDACAfdjhjuuqjoFrAIBtuN15cnBADgBAhSOTAQCwBzIZAAD78JXLZLIZRT9nxsaefPJJXX755QoPD1ft2rX92sayLD3yyCOKjY1VWFiY+vTpo507dwZ2RwEAJeI+e0buM7lFTzwCzZbIZQCoesjkyolMBoCqh0yunMhkAKiafOYymWxEpRy4zs3N1dChQ/WXv/zF723+8Y9/6LnnntOLL76odevWqWbNmurXr5+ys7MDuKcAgJKw3HnFTrAfchkAqh4yuXIikwGg6iGTKycyGQCqJjI58Crlo8KnTZsmSVq8eLFf61uWpWeeeUZ///vfdf3110uSXn/9dcXExOjDDz/UTTfdVOh2OTk5ysnJ8fx9+vRpSVJaRmYZ9v432ampRuoEgsNwvbRsc/9gw600Y7UkyZWRbqxWmmX2/+n/b+/+Y6uq7zCOP7et7UWhRaS0drVqW6Hyo91o2cKPiEsjoIaxSBYwOq0lm9uSweZwWt3CWAXG5vxjM7AtSsVtuqkLzElkS4hsaLaBoxUnDqWr0oGQyY/eW1ra2vvZH87qtaW09PR+z+l9v5KT0NPTcz/38PT5thx62xp9/7maWb/HffD+D44fqnBqx7kPGqBol3fnkqRIV8yzc4W6vP3C3y7w9n9Upbae9uxcrR73TXSA2Rws6zrT/wLfzf9a8yPX67IX3RcJebu2RD1cSUMdqZ6dS5LkYbeEPP56vE0e/z2EvRtwsGtypNWjry88/Ps6nertWtDW6u0a39r1nmfninh43SQp6uE62tXu3dee75/v/efKmgzJ/Zrc7sH3VpGIt/9Mcdrjrgp3ezdfROmenUuS2k97t45Got4u8tELRnl2rkF/n9zhTV91mzf/FvSBTnn3va3X6957Hq57Ucvw7FySpHRvfwans93Df//4/7lYkyG5X5OjHv0bYed73nVVynvefr/X8d4Fnp2rO+bt5220w9t1tDPFu+7raPP2+5HOtoF9P/LB+6PRoT9+yhlvn0PIy++707zNeSTN2+f63hnvnquXX3tKUiQAa7J0jnWZNdkbFmB1dXWWlZV1zuMaGxtNktXX18ftv+aaa2z58uVn/bhVq1aZJDY251tzc3O/GW9ubnY+I1tybufK5kC1t7dbbm7ugB4zNzfX2tvbPXlceIt1mS0ZNtZkNr9urMn4KNZktmTYWJPZ/LqxJuOjWJPZkmVjXWbz4+bVmmw28HWZNXnoAvkT14N19OhRSVJOTk7c/pycnJ739aWmpkZ33XVXz9uxWEwnTpzQJZdcolDI659JliKRiC677DI1NzcrMzPT8/MPpyDPLvl3fjNTNBpVXl5ev8fl5eWpublZY8aMIZsfw+zDY6DZHKhwOKympiZ1dnae89j09HSFw2FPHhdusC4PP2b3Hmvy0AV5dsm/87MmYyhYk4cfs3uPNdkbQZ7fr7OzJmMoWJOHH7MPD9bloWN273m9JksDX5dZk4fONzeu7733Xq1fv77fY15//XWVlJQkaCIpIyNDGRnxL2k0duzYYX/czMxMX32SD0aQZ5f8OX9WVtY5j0lJSVF+fv6wz+LH6zNQzO69gWRzMMLhMIu6j7Auf8ivn4MDwezeYk32RpBnl/w5P2vyyMaa/CE/fv4NFLN7izXZO0Ge34+zsyaPbKzJH/Lj599AMbv3WJe9weze8npNlliXE8U3N66/9a1vqaqqqt9jCgsLz+vcubm5kqRjx47p0ksv7dl/7NgxffKTnzyvcwIAMJKxLgMA4A+syQAA+ANrMgAAw883N66zs7OVnZ09LOe+8sorlZubqx07dvQs9JFIRH//+9/11a9+dVgeEwCAIGNdBgDAH1iTAQDwB9ZkAACGX4rrAc7HoUOH1NDQoEOHDqm7u1sNDQ1qaGhQa2trzzElJSXasmWLJCkUCukb3/iGHnjgAT377LN69dVXddtttykvL0+f//znHT2L3jIyMrRq1apeL+8SBEGeXQr+/MMtyNeH2YHhx7rsP8w+cgX5+gR5din48yM5sCb7D7OPXEG/PkGeP8izI3mwJvsPs49sQb5GzA7EC5mZuR5isKqqqrR58+Ze+1944QVde+21kt5f7Ovq6npevsXMtGrVKv3iF7/QqVOnNGfOHG3YsEETJ05M4OQAAIw8rMsAAPgDazIAAP7AmgwAwPkJ5I1rAAAAAAAAAAAAAMDIEciXCgcAAAAAAAAAAAAAjBzcuAYAAAAAAAAAAAAAOMWNawAAAAAAAAAAAACAU9y4BgAAAAAAAAAAAAA4xY1rH+ju7tZ3v/tdXXnllRo1apSKiopUW1srM3M9Wi9/+ctftHDhQuXl5SkUCmnr1q29jnn99df1uc99TllZWbrooos0Y8YMHTp0KPHDfszGjRtVWlqqzMxMZWZmaubMmXr++eclSSdOnNDXv/51TZo0SaNGjVJBQYGWL1+ulpYWx1O7RTYTg2wC/kHvJQa9N3hkMzHIJuAfQeo9KbjdR+8NXpCyGdRcSmQT8Bu6LzHovsEJUi6l4GaTXCLR0lwPAGn9+vXauHGjNm/erClTpujll1/WHXfcoaysLC1fvtz1eHFOnz6tsrIyVVdX66abbur1/sbGRs2ZM0fLli3T6tWrlZmZqddee03hcNjBtPHy8/P1gx/8QFdddZXMTJs3b9aiRYtUX18vM9ORI0f04IMPavLkyXr77bf1la98RUeOHNEzzzzjenRnyGZikE3AP+i9xKD3Bo9sJgbZBPwjSL0nBbf76L3BC1I2g5pLiWwCfkP3JQbdNzhByqUU3GySSyScwbkbb7zRqqur4/bddNNNdssttziaaGAk2ZYtW+L2LVmyxG699VY3A52Hiy++2B555JE+3/fUU09Zenq6dXV1JXgq/yCb7pBNwA16zx16r39k0x2yCbgR1N4zC3730Xv9C2o2g55LM7IJuET3uUP3nV1Qc2kW/GySSwwnXircB2bNmqUdO3bojTfekCS98sorevHFF3X99dc7nmxwYrGYtm3bpokTJ2r+/PmaMGGCPvOZz/T5kheudXd36ze/+Y1Onz6tmTNn9nlMS0uLMjMzlZaWvC9MQDYTj2wCbtF7iUfvDQzZTDyyCbg1UnpPCk730XsDM1KyGZRcSmQT8AO6L/HovnMbKbmUgpNNcomEcH3nHGbd3d12zz33WCgUsrS0NAuFQrZ27VrXY52TPva/gt555x2TZBdeeKE99NBDVl9fb+vWrbNQKGQ7d+50N+hH7Nu3zy666CJLTU21rKws27ZtW5/H/fe//7WCggK77777Ejyhv5DNxCGbgD/Qe4lD7w0O2Uwcsgn4Q1B7zyx43UfvDU5Qsxm0XJqRTcBP6L7EofsGLqi5NAteNsklEokb1z7w5JNPWn5+vj355JO2b98+e/zxx23cuHH22GOPuR6tXx8v18OHD5sku/nmm+OOW7hwoS1dujTB0/Wto6PD3nzzTXv55Zft3nvvtfHjx9trr70Wd0xLS4t9+tOftgULFlhnZ6ejSf2BbCYO2QT8gd5LHHpvcMhm4pBNwB+C2ntmwes+em9wgprNoOXSjGwCfkL3JQ7dN3BBzaVZ8LJJLpFI3Lj2gfz8fHv44Yfj9tXW1tqkSZMcTTQwHy/Xjo4OS0tLs9ra2rjjvv3tb9usWbMSPN3AVFZW2pe//OWetyORiM2cOdMqKyutvb3d4WT+QDbdIZuAG/SeO/Re/8imO2QTcCOovWcW/O6j9/oX1GwGPZdmZBNwie5zh+47u6Dm0iz42SSXGE78jmsfaGtrU0pK/F9FamqqYrGYo4nOT3p6umbMmKEDBw7E7X/jjTd0+eWXO5qqf7FYTB0dHZKkSCSiefPmKT09Xc8++6zC4bDj6dwjm+6QTcANes8deq9/ZNMdsgm4MVJ6Twpe99F7/Rsp2QxaLiWyCbhE97lD953dSMmlFLxskksMJ347ug8sXLhQa9asUUFBgaZMmaL6+no99NBDqq6udj1aL62trTp48GDP201NTWpoaNC4ceNUUFCgu+++W0uWLNE111yjz372s9q+fbv+8Ic/aOfOne6G/r+amhpdf/31KigoUDQa1RNPPKGdO3fqj3/8Y0+5trW16Ve/+pUikYgikYgkKTs7W6mpqY6nd4NsJgbZBPyD3ksMem/wyGZikE3AP4LUe1Jwu4/eG7wgZTOouZTIJuA3dF9i0H2DE6RcSsHNJrlEwrn+kW+8/zIKK1assIKCAguHw1ZYWGj333+/dXR0uB6tlxdeeMEk9dpuv/32nmMeffRRKy4utnA4bGVlZbZ161Z3A39EdXW1XX755Zaenm7Z2dlWWVlpf/rTn8zs7M9LkjU1Nbkd3CGymRhkE/APei8x6L3BI5uJQTYB/whS75kFt/vovcELUjaDmkszsgn4Dd2XGHTf4AQpl2bBzSa5RKKFzMwGfpsbAAAAAAAAAAAAAABv8TuuAQAAAAAAAAAAAABOceMaAAAAAAAAAAAAAOAUN64BAAAAAAAAAAAAAE5x4xoAAAAAAAAAAAAA4BQ3rgEAAAAAAAAAAAAATnHjGgAAAAAAAAAAAADgFDeuAQAAAAAAAAAAAABOceMaAAAAAAAAAAAAAOAUN64BAAAAAAAAAAAAAE5x4xoJcfz4cU2YMEFvvfWWsxmWLl2qH//4x84eH/5ENgEkI7oPfkQuASQjug9+RTYBJBt6D35FNpFsuHE9ws2dO1ehUKjXdttttyV0jjVr1mjRokW64oorevYdPXpUK1asUHFxscLhsHJycjR79mxt3LhRbW1tAzrvwoULtWDBgj7ft2vXLoVCIe3bt0+S9J3vfEdr1qxRS0vLkJ8Pho5skk0gGdF9dJ8fkUtyCSQjuo/u8yuySTaBZEPv0Xt+RTbJJhwxjFixWMzGjBljDz74oL3zzjtxWzQaTdgcp0+ftszMTPvrX//as6+xsdFyc3OtpKTEfvvb39r+/futsbHRtm7dajfccIP9/ve/H9C5t2zZYikpKdbc3NzrfXfccYdVVFTE7auoqLCHH354aE8IQ0Y2ySaQjOg+us+PyCW5BJIR3Uf3+RXZJJtAsqH36D2/IptkE+5w43oEO3DggEmy3bt3O53j6aeftuzs7Lh98+fPt/z8fGttbe3zY2KxWM+fu7u7be3atXbFFVdYOBy20tJSe/rpp83MrKury3Jycqy2tjbu46PRqI0ePdo2btwYt3/16tU2Z84cL54WhoBskk0gGdF9dJ8fkUtyCSQjuo/u8yuySTaBZEPv0Xt+RTbJJtzhxvUI9sQTT1haWpqdOXPG6RzLly+3BQsW9Lz97rvvWigUsnXr1g3o4x944AErKSmx7du3W2Njo9XV1VlGRobt3LnTzMzuvvtuKyoqiivkTZs22ahRo+zUqVNx53r++ectPT3d+TVJdmSTbALJiO6j+/yIXJJLIBnRfXSfX5FNsgkkG3qP3vMrskk24Q6/43oE27t3r7q7u3XJJZdo9OjRPdudd96Z0Dnefvtt5eXl9bx98OBBmZkmTZoUd9z48eN7ZrznnnskSR0dHVq7dq02bdqk+fPnq7CwUFVVVbr11lv185//XJJUXV2txsZG/fnPf+45V11dnRYvXqysrKy4x8jLy1NnZ6eOHj06XE8XA0A2ySaQjOg+us+PyCW5BJIR3Uf3+RXZJJtAsqH36D2/IptkE+6kuR4Aw2fv3r26+eabtXr16rj948aNi3s7FospJWX4/g9De3u7wuHwOY/bvXu3YrGYbrnlFnV0dEh6v4jb2tp03XXXxR3b2dmpT33qU5KkkpISzZo1S5s2bdK1116rgwcPateuXfr+97/f6zFGjRolSWpraxvq08IQkE2yCSQjuo/u8yNySS6BZET30X1+RTbJJpBs6D16z6/IJtmEO/zE9Qi2d+9ezZ49W8XFxXHbuHHj9NZbb2natGlaunSpJk+erPb2dv3yl7/UjBkzVFZWprvuuqvnPJs2bVJpaanKysq0cuXKnv3r16/X1KlTNW3aNP36178+6xzjx4/XyZMne94uLi5WKBTSgQMH4o4rLCxUcXFxTwFKUmtrqyRp27Ztamho6Nn279+vZ555pue4ZcuW6Xe/+52i0ajq6upUVFSkuXPn9prlxIkTkqTs7OyBXkYMA7JJNoFkRPfRfX5ELsklkIzoPrrPr8gm2QSSDb1H7/kV2SSbcMjdq5RjODU2Npoke/HFF/t8f1NTk6Wmptorr7xiZmb79++3xYsXW1dXl5mZffGLX7TnnnvO9u3bZ1OnTrWTJ0+amdnx48fNzGz37t02ffp0a29vt+PHj1thYaEdPny4z8f60Y9+ZGVlZXH75s2bZ5/4xCestbW11/Fz5861FStWmJlZJBKxjIwMe/zxx/t9vtFo1EaPHm0/+9nPLD8/39asWdPncY888ojl5+f3ey4ML7JJNoFkRPfRfX5ELsklkIzoPrrPr8gm2QSSDb1H7/kV2SSbcIuXCh+h/vGPf0iScnJyev3OgQkTJkiSJk6cqNLSUknSjh079Le//U0VFRWS3n+5h/LycjU2NmrJkiUaO3aspA9fCuOll17S4sWLFQ6HFQ6HVVlZqT179mjRokW9Zpk/f75qamp08uRJXXzxxZKkDRs2aPbs2aqoqND3vvc9lZaWKiUlRXv27NG//vUvlZeXS5LGjBmjlStX6pvf/KZisZjmzJmjlpYWvfTSS8rMzNTtt98uSRo9erSWLFmimpoaRSIRVVVV9Xlddu3apXnz5p3vZYUHyGZVn9eFbAIjG91X1ed1ofvcIpdVfV4XcgmMbHRfVZ/Xhe5zj2xW9XldyCYwctF7VX1eF3rPPbJZ1ed1IZtIFG5cj1B79+6VJF111VVx+zMyMhSJRCRJF154Yc/+WCymL33pS1q1alXc8T/5yU+GPMu0adM0ffp0PfXUU7rzzjslSUVFRaqvr9fatWtVU1Oj//znP8rIyNDkyZO1cuVKfe1rX+v5+NraWmVnZ2vdunX697//rbFjx2r69Om677774h5n2bJlevTRR3XDDTcoLy+v1xxnzpzR1q1btX379iE/J5w/skk2gWRE99F9fkQuySWQjOg+us+vyCbZBJINvUfv+RXZJJtwzPWPfMONpqYmKy8v73n7n//8p1199dX27rvvmpnZsWPH7MiRI/bqq6/a1KlT7dSpU2b24ctZ7Nmzx8rLy+3MmTN24sQJKyoqsiNHjpz18Z577jm7+uqrrbu7exifVf82bNhg1113nbPHx8CQTQDJiO6DH5FLAMmI7oNfkU0AyYbeg1+RTWB48RPXkCRNmTJF999/vyorKxWLxZSRkaHHHntMU6dO1YoVKzR79mylpaVp3rx5+uEPf6iKigp94QtfUHl5uUKhkFavXq1LL730rOe/8cYb9eabb+rw4cO67LLLEvjMPnTBBRfopz/9qZPHxvkjmwCSEd0HPyKXAJIR3Qe/IpsAkg29B78im4C3QmZmrocAAAAAAAAAAAAAACSvFNcDAAAAAAAAAAAAAACSGzeuAQAAAAAAAAAAAABOceMaAAAAAAAAAAAAAOAUN64BAAAAAAAAAAAAAE5x4xoAAAAAAAAAAAAA4BQ3rgEAAAAAAAAAAAAATnHjGgAAAAAAAAAAAADgFDeuAQAAAAAAAAAAAABOceMaAAAAAAAAAAAAAOAUN64BAAAAAAAAAAAAAE5x4xoAAAAAAAAAAAAA4NT/AKHcGL09Cj+GAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "fig, axes = plt.subplots(3,4, figsize=(24,10))\n", "plt.subplots_adjust(hspace=0.5)\n", From c9b2e4655ce6c7c295e21de44c1d9aeef67fc817 Mon Sep 17 00:00:00 2001 From: T Ehrhardt Date: Thu, 4 Jun 2026 15:51:46 +0200 Subject: [PATCH 22/22] fix Container.__setitem__ and __add_data docstrings and actually auto document all __getitem__ and __setitem__ methods throughout code base [no ci] --- docs/source/conf.py | 12 ++++++++++++ pisa/core/container.py | 10 +++++----- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 222687873..74d6ee829 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -72,6 +72,18 @@ # make sure the target is unique autosectionlabel_prefix_document = True +# -- autodoc configuration --------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/extensions/autodoc.html + +# Just documenting all dunder members clutters docs, so select a few which have +# useful docstrings in PISA (extend if desired). Alternatively, can specify +# 'exclude-members' in dictionary below. +special_members_to_doc = '__getitem__, __setitem__' + +autodoc_default_options = { + 'special-members': special_members_to_doc +} + # -- intersphinx configuration ----------------------------------------------- # To look up all available targets in python docs, for instance: # python -m sphinx.ext.intersphinx https://docs.python.org/3/objects.inv diff --git a/pisa/core/container.py b/pisa/core/container.py index 9127da66c..053c73570 100644 --- a/pisa/core/container.py +++ b/pisa/core/container.py @@ -660,15 +660,15 @@ def __setitem__(self, key, data): """Set `self[key]` to `data`. Invalidates all representations but the current one, which is set to - valid, and set the translation mode to "average", unless the string "weight" - is part of `key`, in which case the translation mode is set to "sum", or - unless a mode has already been set. + valid, and set the translation mode to "average", unless the `key` is + part of :py:attr:`~Container.sum_mode_keys`, in which case the + translation mode is set to "sum", or unless a mode has already been set. Parameters ---------- key : string data identifier/variable - data : ndarray, :py:class:`~.Map` or (array, binning)-tuple + data : ndarray, :py:class:`~.Map` or (binning, array)-tuple data sample to add to the container """ if self.is_map: @@ -694,7 +694,7 @@ def __add_data(self, key, data): ---------- key : string data identifier/variable - data : ndarray, :py:class:`~.Map` or (array, binning)-tuple + data : ndarray, :py:class:`~.Map` or (binning, array)-tuple data sample to add to the container """ if isinstance(data, np.ndarray):