From f6a987a407835ab81a575b1833e6be3c87137c1d Mon Sep 17 00:00:00 2001 From: jdcpni Date: Thu, 3 Nov 2022 18:03:49 -0400 Subject: [PATCH] Feat/add pathway default matrix (#2518) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * • compositioninterfacemechanism.py: - _get_source_node_for_input_CIM: restore (modeled on _get_source_of_modulation_for_parameter_CIM) but NEEDS TESTS - _get_source_of_modulation_for_parameter_CIM: clean up comments, NEEDS TESTS * - * - * - * - * - * - * • Nback - EM uses ContentAddressableMemory (instead of DictionaryMemory) - Implements FFN for comparison of current and retrieved stimulus and context • Project: replace all instances of "RETREIVE" with "RETRIEVE" * • objectivefunctions.py - add cosine_similarity (needs compiled version) * • Project: make COSINE_SIMILARITY a synonym of COSINE • nback_CAM_FFN: - refactor to implement FFN and task input - assign termination condition for execution that is dependent on control - ContentAddressableMemory: selection_function=SoftMax(output=MAX_INDICATOR, gain=SOFT_MAX_TEMP) • DriftOnASphereIntegrator: - add dimension as dependency for initializer parameter * - * - * - * - * - * - * - * - * - * - * - * - * - * - * • test_integrator.py: Added identicalness test for DriftOnASphereIntegrator agains nback-paper implementation. * - * - * Parameters: allow _validate_ methods to reference other parameters (#2512) * • Scripts: - Updated N-back to use objective_mechanism, with commented out code for version that doesn't use it once bug is fixed - Deleted N-back_WITH_OBJECTIVE_MECH.py * • Scripts: - Updated N-back to use objective_mechanism, with commented out code for version that doesn't use it once bug is fixed - Deleted N-back_WITH_OBJECTIVE_MECH.py * • N-back.py: - added stimulus generation per nback-paper protocol * - N-back.py tstep(s) -> trial(s) * - * - * • N-back.py - comp -> nback_model - implement stim_set() method * - * • N-back.py: - added training set generation * - * - * • N-back.py - modularized script * - * - * - * - * • showgraph.py: - _assign_processing_components(): fix bug in which nested graphs not highlighted in animation. * • showgraph.py * composition.py - add further description of animation, including note that animation of nested Compostions is limited. * • showgraph.py * composition.py - add animation to N-back doc * • autodiffcomposition.py - __init__(): move pathways arg to beginning, to capture positional assignment (i.e. w/o kw) * - * • N-back.py - ffn: implement as autodiff; still needs small random initial weight assignment * • pathway.py - implement default_projection attribute * • pathway.py - implement default_projection attribute * • utilities.py: random_matrxi: refactored to allow negative values and use keyword ZERO_CENTER * • projection.py RandomMatrix: added class that can be used to pass a function as matrix spec * • utilities.py - RandomMatrix moved here from projection.py • function.py - get_matrix(): added support for RandomMatrix spec * • port.py - _parse_port_spec(): added support for RandomMatrix * • port.py - _parse_port_spec(): added support for RandomMatrix * • utilities.py - is_matrix(): modified to support random_matrix and RandomMatrix * • composition.py - add_linear_processing_pathway: add support for default_matrix argument (replaces default for MappingProjection for any otherwise unspecified projections) though still not used. * - * - RandomMatrix: moved from Utilities to Function * - * [skip ci] * [skip ci] * [skip ci] • N-back.py - clean up script * [skip ci] • N-back.py - further script clean-up * [skip ci] * [skip ci] * [skip ci] * [skip ci] • BeukersNBackModel.rst: - Overview written - Needs other sections completed * [skip ci] * [skip ci] * [skip ci] * [skip ci] * [skip ci] * [skip ci] * [skip ci] * [skip ci] • N-back.py: - replace functions of TransferMechanisms with ReLU - replace function of Decision Mechanisms with SoftMax - more doc cleanup * [skip ci] • N-back.py: - replace functions of TransferMechanisms with ReLU - replace function of Decision Mechanisms with SoftMax - more doc cleanup * [skip ci] * - * - * [skip ci] * [skip ci] • composition.py: implement default_projection_matrix in add_XXX_pathway() methods * [skip ci] • composition.py: implement default_projection_matrix in add_XXX_pathway() methods * [skip ci] • test_composition.py: - add test_pathway_tuple_specs() * - * - * [skip ci] * [skip ci] * [skip ci] * - Co-authored-by: jdcpni Co-authored-by: Katherine Mantel --- Scripts/Models (Under Development)/N-back.py | 342 +++++++++++------- docs/source/BeukersNBackModel.rst | 81 +++++ docs/source/Function.rst | 2 +- docs/source/Functions.rst | 2 +- docs/source/Models.rst | 3 + docs/source/_static/N-Back-Model_fig.svg | 1 + docs/source/_static/N-Back_Model_movie.gif | Bin 0 -> 256380 bytes .../core/components/functions/function.py | 52 ++- psyneulink/core/components/ports/port.py | 9 +- .../projections/pathway/mappingprojection.py | 22 +- .../core/components/projections/projection.py | 17 +- psyneulink/core/compositions/composition.py | 184 +++++++--- psyneulink/core/compositions/pathway.py | 85 +++-- psyneulink/core/compositions/showgraph.py | 58 ++- psyneulink/core/globals/keywords.py | 15 +- psyneulink/core/globals/utilities.py | 40 +- .../compositions/autodiffcomposition.py | 16 +- tests/composition/test_composition.py | 62 +++- tests/mdf/model_basic.yml | 313 ++++++++++++++++ 19 files changed, 1051 insertions(+), 253 deletions(-) create mode 100644 docs/source/BeukersNBackModel.rst create mode 100644 docs/source/_static/N-Back-Model_fig.svg create mode 100644 docs/source/_static/N-Back_Model_movie.gif create mode 100644 tests/mdf/model_basic.yml diff --git a/Scripts/Models (Under Development)/N-back.py b/Scripts/Models (Under Development)/N-back.py index 1c4b97f0ab0..903a82b862a 100644 --- a/Scripts/Models (Under Development)/N-back.py +++ b/Scripts/Models (Under Development)/N-back.py @@ -1,63 +1,100 @@ """ -This implements a model of the `N-back task _` -described in `Beukers et al. `_. The model uses a simple implementation of episodic -memory (i.e., content-retrieval memory) to store previous stimuli and the temporal context in which they occured, -and a feedforward neural network to evaluate whether the current stimulus is a match to the n'th preceding stimulus. +This implements a model of the `N-back task `_ +described in `Beukers et al. (2022) `_. The model uses a simple implementation of episodic +(content-addressable) memory to store previous stimuli and the temporal context in which they occured, +and a feedforward neural network to evaluate whether the current stimulus is a match to the n'th preceding stimulus +(n-back level). This model is an example of proposed interactions between working memory (e.g., in neocortex) and +episodic memory e.g., in hippocampus and/or cerebellum) in the performance of tasks demanding of sequential processing +and control, and along the lines of models emerging machine learning that augment the use of recurrent neural networks +(e.g., long short-term memory mechanisms; LSTMs) for active memory and control with an external memory capable of +rapid storage and content-based retrieval, such as the Neural Turing Machine (NTN; `Graves et al., 2016 +`_), Episodic Planning Networks (EPN; `Ritter et al., 2020 +`_), and Emergent Symbols through Binding Networks (ESBN; `Webb et al., 2021 +`_). + +There are three primary methods in the script: + +* construct_model(args): + takes as arguments parameters used to construct the model; for convenience, defaults are defined below, + (under "Construction parameters") + +* train_network(args) + takes as arguments the feedforward neural network Composition (FFN_COMPOSITION) and number of epochs to train. + Note: learning_rate is set at construction (can specify using LEARNING_RATE under "Training parameters" below). + +* run_model() + takes the context drift rate to be applied on each trial and the number of trials to execute as args, as well as + reporting and animation specifications (see "Execution parameters" below). + +See "Settings for running the script" to specify whether the model is trained and/or executed when the script is run, +and whether a graphic display of the network is generated when it is constructed. TODO: + - from Andre + - network architecture; in particular, size of hidden layer and projection patterns to and from it + - softmax temp on output/decision layer? + - confirm that ReLUs all use 0 thresholds and unit slope + - training: + - confirm learning rate: ?? 0.001 + - epoch: 1 trial per epoch of training + - get empirical stimulus sequences + - put N-back script (with pointer to latest version on PNL) in nback-paper repo - get rid of objective_mechanism (see "VERSION *WITHOUT* ObjectiveMechanism" under control(...) - - from nback-paper: - - get ffn weights? - - why SDIM=20 if it is a one-hot encoding (np.eye), and NSTIM=8? (i.e., SHOULDN'T NUM_STIM == STIM_SIZE)? - - do input layers use logistic (as suggested in figure)? - - construct training set and train in ffn using Autodiff + - pass learning_rate as parameter to train_network() - validate against nback-paper results - - replace get_input_sequence and get_training_inputs with generators passed to nback_model.run() and ffn.learn - - make termination processing part of the Comopsition definition? + - after validation: + - try with STIM_SIZE = NUM_STIMS rather than 20 (as in nback-paper) + - refactor generate_stim_sequence() to use actual empirical stimulus sequences + - replace get_input_sequence and get_training_inputs with generators passed to nback_model.run() and ffn.learn + - make termination processing part of the Composition definition (fix bug) + - fix warnings on run """ from graph_scheduler import * + from psyneulink import * import numpy as np -import itertools - -DISPLAY = False # show visual of model -# REPORTING_OPTIONS = ReportOutput.ON # Console output during run -REPORTING_OPTIONS = ReportOutput.OFF +# Settings for running script: +TRAIN = False +RUN = True +DISPLAY = False # show visual graphic of model # PARAMETERS ------------------------------------------------------------------------------------------------------- -# FROM nback-paper: -# SDIM = 20 -# CDIM = 25 -# indim = 2 * (CDIM + SDIM) -# hiddim = SDIM * 4 -# CONTEXT_DRIFT_RATE=.25 -# CONTEXT_DRIFT_NOISE=.075 -# 'stim_weight':0.05, -# 'smtemp':8, -# HAZARD_RATE=0.04 - -# TEST: -MAX_NBACK_LEVELS = 5 -NBACK_LEVELS = [2,3] -NUM_NBACK_LEVELS = len(NBACK_LEVELS) -# NUM_TASKS=2 # number of different variants of n-back tasks (set sizes) +# Fixed (structural) parameters: +MAX_NBACK_LEVELS = 3 NUM_STIM = 8 # number of different stimuli in stimulus set - QUESTION: WHY ISN"T THIS EQUAL TO STIM_SIZE OR VICE VERSA? -NUM_TRIALS = 48 # number of stimuli presented in a sequence +FFN_TRANSFER_FUNCTION = ReLU + +# Constructor parameters: (values are from nback-paper) STIM_SIZE=20 # length of stimulus vector CONTEXT_SIZE=25 # length of context vector HIDDEN_SIZE=STIM_SIZE*4 # dimension of hidden units in ff -CONTEXT_DRIFT_RATE=.1 # drift rate used for DriftOnASphereIntegrator (function of Context mech) on each trial +NBACK_LEVELS = [2,3] # Currently restricted to these +NUM_NBACK_LEVELS = len(NBACK_LEVELS) CONTEXT_DRIFT_NOISE=0.0 # noise used by DriftOnASphereIntegrator (function of Context mech) -STIM_WEIGHT=.05 # weighting of stimulus field in retrieval from em -CONTEXT_WEIGHT = 1-STIM_WEIGHT # weighting of context field in retrieval from em -SOFT_MAX_TEMP=1/8 # express as gain # precision of retrieval process -HAZARD_RATE=0.04 # rate of re=sampling of em following non-match determination in a pass through ffn +RANDOM_WEIGHTS_INITIALIZATION=RandomMatrix(center=0.0, range=0.1) # Matrix spec used to initialize all Projections +RETRIEVAL_SOFTMAX_TEMP=1/8 # express as gain # precision of retrieval process +RETRIEVAL_HAZARD_RATE=0.04 # rate of re=sampling of em following non-match determination in a pass through ffn +RETRIEVAL_STIM_WEIGHT=.05 # weighting of stimulus field in retrieval from em +RETRIEVAL_CONTEXT_WEIGHT = 1-RETRIEVAL_STIM_WEIGHT # weighting of context field in retrieval from em +DECISION_SOFTMAX_TEMP=1/8 # express as gain # binarity of decision process + +# Training parameters: +NUM_EPOCHS=1000 # nback-paper: 400,000, one trial per epoch +LEARNING_RATE=0.1 # nback-paper: .001 + +# Execution parameters: +CONTEXT_DRIFT_RATE=.1 # drift rate used for DriftOnASphereIntegrator (function of Context mech) on each trial +NUM_TRIALS = 48 # number of stimuli presented in a trial sequence +REPORT_OUTPUT = ReportOutput.OFF # Sets console output during run +REPORT_PROGRESS = ReportProgress.ON # Sets console progress bar during run +ANIMATE = True # {UNIT:EXECUTION_SET} # Specifies whether to generate animation of execution -# MECHANISM AND COMPOSITION NAMES: +# Names of Compositions and Mechanisms: +NBACK_MODEL = "N-Back Model" FFN_COMPOSITION = "WORKING MEMORY (fnn)" FFN_STIMULUS_INPUT = "CURRENT STIMULUS" FFN_CONTEXT_INPUT = "CURRENT CONTEXT" @@ -79,10 +116,11 @@ def construct_model(stim_size = STIM_SIZE, hidden_size = HIDDEN_SIZE, num_nback_levels = NUM_NBACK_LEVELS, context_drift_noise = CONTEXT_DRIFT_NOISE, - retrievel_softmax_temp = SOFT_MAX_TEMP, - retrieval_hazard_rate = HAZARD_RATE, - retrieval_stimulus_weight = STIM_WEIGHT, - context_stimulus_weight = CONTEXT_WEIGHT): + retrievel_softmax_temp = RETRIEVAL_SOFTMAX_TEMP, + retrieval_hazard_rate = RETRIEVAL_HAZARD_RATE, + retrieval_stimulus_weight = RETRIEVAL_STIM_WEIGHT, + retrieval_context_weight = RETRIEVAL_CONTEXT_WEIGHT, + decision_softmax_temp = DECISION_SOFTMAX_TEMP): """Construct nback_model""" # FEED FORWARD NETWORK ----------------------------------------- @@ -90,26 +128,38 @@ def construct_model(stim_size = STIM_SIZE, # inputs: encoding of current stimulus and context, retrieved stimulus and retrieved context, # output: decIsion: match [1,0] or non-match [0,1] # Must be trained to detect match for specified task (1-back, 2-back, etc.) - input_current_stim = TransferMechanism(size=STIM_SIZE, function=Linear, name=FFN_STIMULUS_INPUT) # function=Logistic) - input_current_context = TransferMechanism(size=STIM_SIZE, function=Linear, name=FFN_CONTEXT_INPUT) # function=Logistic) - input_retrieved_stim = TransferMechanism(size=STIM_SIZE, function=Linear, name=FFN_STIMULUS_RETRIEVED) # function=Logistic) - input_retrieved_context = TransferMechanism(size=STIM_SIZE, function=Linear, name=FFN_CONTEXT_RETRIEVED) # function=Logistic) - input_task = TransferMechanism(size=NUM_NBACK_LEVELS, function=Linear, name=FFN_TASK) # function=Logistic) - hidden = TransferMechanism(size=HIDDEN_SIZE, function=Logistic, name=FFN_HIDDEN) - decision = ProcessingMechanism(size=2, name=FFN_OUTPUT) - # TODO: THIS NEEDS TO BE REPLACED BY (OR AT LEAST TRAINED AS) AutodiffComposition - # TRAINING: - # - 50% matches and 50% non-matches - # - all possible stimuli - # - 2back and 3back - # - contexts of various distances - ffn = Composition([{input_current_stim, - input_current_context, - input_retrieved_stim, - input_retrieved_context, - input_task}, - hidden, decision], - name=FFN_COMPOSITION) + input_current_stim = TransferMechanism(name=FFN_STIMULUS_INPUT, + size=stim_size, + function=FFN_TRANSFER_FUNCTION) + input_current_context = TransferMechanism(name=FFN_CONTEXT_INPUT, + size=context_size, + function=FFN_TRANSFER_FUNCTION) + input_retrieved_stim = TransferMechanism(name=FFN_STIMULUS_RETRIEVED, + size=stim_size, + function=FFN_TRANSFER_FUNCTION) + input_retrieved_context = TransferMechanism(name=FFN_CONTEXT_RETRIEVED, + size=context_size, + function=FFN_TRANSFER_FUNCTION) + input_task = TransferMechanism(name=FFN_TASK, + size=num_nback_levels, + function=FFN_TRANSFER_FUNCTION) + hidden = TransferMechanism(name=FFN_HIDDEN, + size=hidden_size, + function=FFN_TRANSFER_FUNCTION) + decision = ProcessingMechanism(name=FFN_OUTPUT, + size=2, function=SoftMax(output=MAX_INDICATOR, + gain=decision_softmax_temp)) + ffn = AutodiffComposition(([{input_current_stim, + input_current_context, + input_retrieved_stim, + input_retrieved_context, + input_task}, + hidden, decision], + RANDOM_WEIGHTS_INITIALIZATION, + ), + name=FFN_COMPOSITION, + learning_rate=LEARNING_RATE + ) # FULL MODEL (Outer Composition, including input, EM and control Mechanisms) ------------------------ @@ -120,11 +170,12 @@ def construct_model(stim_size = STIM_SIZE, context = ProcessingMechanism(name=MODEL_CONTEXT_INPUT, function=DriftOnASphereIntegrator( initializer=np.random.random(CONTEXT_SIZE-1), - noise=CONTEXT_DRIFT_NOISE, + noise=context_drift_noise, dimension=CONTEXT_SIZE)) # Task: task one-hot indicating n-back (1, 2, 3 etc.) - must correspond to what ffn has been trained to do - task = ProcessingMechanism(name=MODEL_TASK_INPUT, size=NUM_NBACK_LEVELS) + task = ProcessingMechanism(name=MODEL_TASK_INPUT, + size=NUM_NBACK_LEVELS) # Episodic Memory: # - entries: stimulus (field[0]) and context (field[1]); randomly initialized @@ -136,10 +187,11 @@ def construct_model(stim_size = STIM_SIZE, SIZE:CONTEXT_SIZE}], function=ContentAddressableMemory( initializer=[[[0]*STIM_SIZE, [0]*CONTEXT_SIZE]], - distance_field_weights=[STIM_WEIGHT, CONTEXT_WEIGHT], + distance_field_weights=[retrieval_stimulus_weight, + retrieval_context_weight], # equidistant_entries_select=NEWEST, selection_function=SoftMax(output=MAX_INDICATOR, - gain=SOFT_MAX_TEMP)), + gain=retrievel_softmax_temp)), ) # Control Mechanism @@ -159,7 +211,8 @@ def construct_model(stim_size = STIM_SIZE, # Outcome=1 if match, else 0 function=lambda x: int(x[0][1]>x[0][0])), # Set ControlSignal for EM[store_prob] - function=lambda outcome: int(bool(outcome) or (np.random.random() > HAZARD_RATE)), + function=lambda outcome: int(bool(outcome) + or (np.random.random() > retrieval_hazard_rate)), # # VERSION *WITHOUT* ObjectiveMechanism: # monitor_for_control=decision, # # Set Evaluate outcome and set ControlSignal for EM[store_prob] @@ -168,12 +221,13 @@ def construct_model(stim_size = STIM_SIZE, # or (np.random.random() > HAZARD_RATE)), control=(STORAGE_PROB, em)) - nback_model = Composition(nodes=[stim, context, task, em, ffn, control], + nback_model = Composition(name=NBACK_MODEL, + nodes=[stim, context, task, em, ffn, control], # # # Terminate trial if value of control is still 1 after first pass through execution # # FIX: STOPS AFTER ~ NUMBER OF TRIALS (?90+); SHOULD BE: NUM_TRIALS*NUM_NBACK_LEVELS + 1 # termination_processing={TimeScale.TRIAL: And(Condition(lambda: control.value), # AfterPass(0, TimeScale.TRIAL))}, - name="N-Back Model") + ) # # Terminate trial if value of control is still 1 after first pass through execution # # FIX: ALL OF THE FOLLOWING STOP AFTER ~ NUMBER OF TRIALS (?90+); SHOULD BE: NUM_TRIALS*NUM_NBACK_LEVELS + 1 # nback_model.scheduler.add_condition(nback_model, And(Condition(lambda: control.value), AfterPass(0, TimeScale.TRIAL))) @@ -193,7 +247,7 @@ def construct_model(stim_size = STIM_SIZE, nback_model.show_graph( # show_cim=True, # show_node_structure=ALL, - # show_dimensions=True) + # show_dimensions=True ) return nback_model @@ -207,15 +261,16 @@ def get_stim_set(num_stim=STIM_SIZE): return np.eye(num_stim) def get_task_input(nback_level): - """Construct input to task Mechanism for a given nback_level, used by run_model() and train_model()""" + """Construct input to task Mechanism for a given nback_level, used by run_model() and train_network()""" task_input = list(np.zeros_like(NBACK_LEVELS)) task_input[nback_level-NBACK_LEVELS[0]] = 1 return task_input -def get_run_inputs(model, nback_level, num_trials): +def get_run_inputs(model, nback_level, context_drift_rate, num_trials): """Construct set of stimulus inputs for run_model()""" - def generate_stim_sequence(nback_level, trial_num, stype=0, num_stim=NUM_STIM, num_trials=NUM_TRIALS): + def generate_stim_sequence(nback_level, trial_num, trial_type=0, num_stim=NUM_STIM, num_trials=NUM_TRIALS): + assert nback_level in {2,3} # At present, only 2- and 3-back levels are supported def gen_subseq_stim(): A = np.random.randint(0,num_stim) @@ -230,67 +285,70 @@ def gen_subseq_stim(): ) return A,B,C,X - def genseqCT(nback_level,trial_num): - assert nback_level in {2,3} - # ABXA / AXA + def generate_match_no_foils_sequence(nback_level,trial_num): + # AXA (2-back) or ABXA (3-back) seq = np.random.randint(0,num_stim,num_trials) A,B,C,X = gen_subseq_stim() # - if nback_level==3: - subseq = [A,B,X,A] - elif nback_level==2: + if nback_level==2: subseq = [A,X,A] + elif nback_level==3: + subseq = [A,B,X,A] seq[trial_num-(nback_level+1):trial_num] = subseq return seq[:trial_num] - def genseqCF(nback_level,trial_num): - # ABXC + def generate_non_match_no_foils_sequence(nback_level,trial_num): + # AXB (2-back) or ABXC (3-back) seq = np.random.randint(0,num_stim,num_trials) A,B,C,X = gen_subseq_stim() # - if nback_level==3: - subseq = [A,B,X,C] - elif nback_level==2: + if nback_level==2: subseq = [A,X,B] + elif nback_level==3: + subseq = [A,B,X,C] seq[trial_num-(nback_level+1):trial_num] = subseq return seq[:trial_num] - def genseqLT(nback_level,trial_num): - # AAXA + def generate_match_with_foil_sequence(nback_level,trial_num): + # AAA (2-back) or AAXA (3-back) seq = np.random.randint(0,num_stim,num_trials) A,B,C,X = gen_subseq_stim() # - if nback_level==3: - subseq = [A,A,X,A] - elif nback_level==2: + if nback_level==2: subseq = [A,A,A] + elif nback_level==3: + subseq = [A,A,X,A] seq[trial_num-(nback_level+1):trial_num] = subseq return seq[:trial_num] - def genseqLF(nback_level,trial_num): - # ABXB + def generate_non_match_with_foil_sequence(nback_level,trial_num): + # XAA (2-back) or ABXB (3-back) seq = np.random.randint(0,num_stim,num_trials) A,B,C,X = gen_subseq_stim() # - if nback_level==3: - subseq = [A,B,X,B] - elif nback_level==2: + if nback_level==2: subseq = [X,A,A] + elif nback_level==3: + subseq = [A,B,X,B] seq[trial_num-(nback_level+1):trial_num] = subseq return seq[:trial_num] - genseqL = [genseqCT,genseqLT,genseqCF,genseqLF] - stim_seq = genseqL[stype](nback_level,trial_num) - # ytarget = [1,1,0,0][stype] + trial_types = [generate_match_no_foils_sequence, + generate_match_with_foil_sequence, + generate_non_match_no_foils_sequence, + generate_non_match_with_foil_sequence] + stim_seq = trial_types[trial_type](nback_level,trial_num) + # ytarget = [1,1,0,0][trial_type] # ctxt = spherical_drift(trial_num) # return stim,ctxt,ytarget return stim_seq - def stim_set_generation(nback_level, num_trials): - stim_sequence = [] - # for seq_int, trial in itertools.product(range(4),np.arange(5,trials)): # This generates all length sequences - for seq_int, trial_num in itertools.product(range(4),[num_trials]): # This generates only longest seq (num_trials) - return stim_sequence.append(generate_stim_sequence(nback_level, trial_num, stype=seq_int, trials=num_trials)) + # def stim_set_generation(nback_level, num_trials): + # stim_sequence = [] + # # for seq_int, trial in itertools.product(range(4),np.arange(5,trials)): # This generates all length sequences + # for trial_type, trial_num in itertools.product(range(4),[num_trials]): # This generates only longest seq ( + # # num_trials) + # return stim_sequence.append(generate_stim_sequence(nback_level, trial_num, trial_type=trial_type, trials=num_trials)) def get_input_sequence(nback_level, num_trials=NUM_TRIALS): """Get sequence of inputs for a run""" @@ -301,11 +359,11 @@ def get_input_sequence(nback_level, num_trials=NUM_TRIALS): return [input_set[trial_seq[i]] for i in range(num_trials)] return {model.nodes[MODEL_STIMULUS_INPUT]: get_input_sequence(nback_level, num_trials), - model.nodes[MODEL_CONTEXT_INPUT]: [[CONTEXT_DRIFT_RATE]]*num_trials, + model.nodes[MODEL_CONTEXT_INPUT]: [[context_drift_rate]]*num_trials, model.nodes[MODEL_TASK_INPUT]: [get_task_input(nback_level)]*num_trials} def get_training_inputs(network, num_epochs, nback_levels): - """Construct set of training stimuli for ffn.learn(), used by train_model() + """Construct set of training stimuli used by ffn.learn() in train_network() Construct one example of each condition: match: stim_current = stim_retrieved and context_current = context_retrieved stim_lure: stim_current = stim_retrieved and context_current != context_retrieved @@ -348,55 +406,85 @@ def get_training_inputs(network, num_epochs, nback_levels): contexts.append(context_fct(CONTEXT_DRIFT_RATE)) # Get current context as one that is next to last from list (leaving last one as potential lure) current_context = contexts.pop(num_nback_levels-1) - context_nback = contexts.pop(0) - context_distractor = contexts[np.random.randint(0,len(contexts))] + # + nback_context = contexts.pop(0) + distractor_context = contexts[np.random.randint(0,len(contexts))] # Assign retrieved stimulus and context accordingly to trial_type for trial_type in trial_types: stim_current.append(current_stim) context_current.append(current_context) + # Assign retrieved stimulus if trial_type in {'match','stim_lure'}: - stim_retrieved.append(stim_current) - else: + stim_retrieved.append(current_stim) + else: # context_lure or non_lure stim_retrieved.append(distractor_stim) + # Assign retrieved context if trial_type in {'match','context_lure'}: - context_retrieved.append(context_nback) - else: - context_retrieved.append(context_distractor) + context_retrieved.append(nback_context) + else: # stimulus_lure or non_lure + context_retrieved.append(distractor_context) + # Assign target if trial_type == 'match': target.append([1,0]) else: target.append([0,1]) current_task.append([task_input]) - training_set = {network.nodes[FFN_STIMULUS_INPUT]: stim_current, - network.nodes[FFN_CONTEXT_INPUT]: context_current, - network.nodes[FFN_STIMULUS_RETRIEVED]: stim_retrieved, - network.nodes[FFN_CONTEXT_RETRIEVED]: context_retrieved, - network.nodes[FFN_TASK]: current_task, - network.nodes[FFN_OUTPUT]: target - } + training_set = {INPUTS: {network.nodes[FFN_STIMULUS_INPUT]: stim_current, + network.nodes[FFN_CONTEXT_INPUT]: context_current, + network.nodes[FFN_STIMULUS_RETRIEVED]: stim_retrieved, + network.nodes[FFN_CONTEXT_RETRIEVED]: context_retrieved, + network.nodes[FFN_TASK]: current_task}, + TARGETS: {network.nodes[FFN_OUTPUT]: target}, + EPOCHS: num_epochs} + return training_set # ======================================== MODEL EXECUTION ============================================================ -def train_model(): - get_training_inputs(num_epochs=1, nback_levels=NBACK_LEVELS) - -def run_model(model, num_trials=NUM_TRIALS, reporting_options=REPORTING_OPTIONS): +def train_network(network, + learning_rate=LEARNING_RATE, + num_epochs=NUM_EPOCHS): + training_set = get_training_inputs(network=network, num_epochs=num_epochs, nback_levels=NBACK_LEVELS) + network.learn(inputs=training_set, + minibatch_size=NUM_TRIALS, + execution_mode=ExecutionMode.LLVMRun) + +def run_model(model, + context_drift_rate=CONTEXT_DRIFT_RATE, + num_trials=NUM_TRIALS, + report_output=REPORT_OUTPUT, + report_progress=REPORT_PROGRESS, + animate=ANIMATE + ): for nback_level in NBACK_LEVELS: - model.run(inputs=get_run_inputs(model, nback_level, num_trials), + model.run(inputs=get_run_inputs(model, nback_level, context_drift_rate, num_trials), # FIX: MOVE THIS TO MODEL CONSTRUCTION ONCE THAT WORKS # Terminate trial if value of control is still 1 after first pass through execution termination_processing={TimeScale.TRIAL: And(Condition(lambda: model.nodes[CONTROLLER].value), AfterPass(0, TimeScale.TRIAL))}, # function arg - report_output=reporting_options) + report_output=report_output, + report_progress=report_progress, + animate=animate + ) # FIX: RESET MEMORY HERE? - print("Number of entries in EM: ", len(model.nodes[EM].memory)) + # print("Number of entries in EM: ", len(model.nodes[EM].memory)) assert len(model.nodes[EM].memory) == NUM_TRIALS*NUM_NBACK_LEVELS + 1 + nback_model = construct_model() -run_model(nback_model) +print('nback_model constructed') +if TRAIN: + print('nback_model training...') + train_network(nback_model.nodes[FFN_COMPOSITION]) + print('nback_model trained') +if RUN: + print('nback_model executing...') + run_model(nback_model) + if REPORT_PROGRESS == ReportProgress.ON: + print('\n') +print(f'nback_model done: {len(nback_model.results)} trials executed') # =========================================================================== diff --git a/docs/source/BeukersNBackModel.rst b/docs/source/BeukersNBackModel.rst new file mode 100644 index 00000000000..ea2a3adf26e --- /dev/null +++ b/docs/source/BeukersNBackModel.rst @@ -0,0 +1,81 @@ + +N-Back Model (Beukers et al., 2022) +================================================================== +`"When Working Memory is Just Working, Not Memory" `_ + +Overview +-------- +This implements a model of the `N-back task `_ +described in `Beukers et al. (2022) `_. The model uses a simple implementation of episodic +memory (EM, as a form of content-retrieval memory) to store previous stimuli along with the temporal context in which +they occured, and a feedforward neural network (FFN)to evaluate whether the current stimulus is a match to the n'th +preceding stimulus (nback-level)retrieved from episodic memory. The temporal context is provided by a randomly +drifting high dimensional vector that maintains a constant norm (i.e., drifts on a sphere). The FFN is +trained, given an n-back level of *n*, to identify when the current stimulus matches one stored in EM +with a temporal context vector that differs by an amount corresponding to *n* time steps of drift. During n-back +performance, the model encodes the current stimulus and temporal context, retrieves an item from EM that matches the +current stimulus, weighted by the similarity of its temporal context vector (i.e., most recent), and then uses the +FFN to evaluate whether it is an n-back match. The model responds "match" if the FFN detects a match; otherwise, it +either responds "non-match" or, with a fixed probability (hazard rate), it uses the current stimulus and temporal +context to retrieve another sample from EM and repeat the evaluation. + +This model is an example of proposed interactions between working memory (e.g., in neocortex) and episodic memory +e.g., in hippocampus and/or cerebellum) in the performance of tasks demanding of sequential processing and control, +and along the lines of models emerging machine learning that augment the use of recurrent neural networks (e.g., long +short-term memory mechanisms; LSTMs) for active memory and control with an external memory capable of rapid storage +and content-based retrieval, such as the Neural Turing Machine (NTN; +`Graves et al., 2016 `_), Episodic Planning Networks (EPN; +`Ritter et al., 2020 `_), and Emergent Symbols through Binding Networks (ESBN; +`Webb et al., 2021 `_). + +The script respectively, to construct, train and run the model: + +* construct_model(args): + takes as arguments parameters used to construct the model; for convenience, defaults are defined toward the top + of the script (see "Construction parameters"). +.. +* train_network(args) + takes as arguments the feedforward neural network Composition (FFN_COMPOSITION) and number of epochs to train. + Note: learning_rate is set at construction (which can be specified using LEARNING_RATE under "Training parameters"). +.. +* run_model() + takes as arguments the drift rate in the temporal context vector to be applied on each trial, + and the number of trials to execute, as well as reporting and animation specifications + (see "Execution parameters"). + +The default parameters are ones that have been fit to empirical data concerning human performance +(taken from `Kane et al., 2007 `_). + + +The Model +--------- + +The models is composed of two `Compositions `: an outer one that contains the full model (nback_model), +and an `AutodiffComposition` (ffn), nested within nback_model (see red box in Figure), that implements the +feedforward neural network (ffn). + +nback_model +~~~~~~~~~~~ + +This contains three input Mechanisms ( + +Both of these are constructed in the construct_model function. +The ffn Composition is trained use + +.. _nback_Fig: + +.. figure:: _static/N-Back_Model_movie.gif + :align: left + :alt: N-Back Model Animation + + +Training +-------- + + +Execution +--------- + + +Script: :download:`N-back.py <../../Scripts/Models (Under Development)/Beukers_N-Back_2022.py>` +.. Script: :download:`N-back.py <../../psyneulink/library/models/Beukers -Back.py>` diff --git a/docs/source/Function.rst b/docs/source/Function.rst index eb23c588103..2dc5b4ca902 100644 --- a/docs/source/Function.rst +++ b/docs/source/Function.rst @@ -12,6 +12,6 @@ Function :maxdepth: 3 .. automodule:: psyneulink.core.components.functions.function - :members: Function_Base, ArgumentTherapy + :members: Function_Base, ArgumentTherapy, RandomMatrix :private-members: :exclude-members: Parameters diff --git a/docs/source/Functions.rst b/docs/source/Functions.rst index 4148855aa37..7388dfd3541 100644 --- a/docs/source/Functions.rst +++ b/docs/source/Functions.rst @@ -9,6 +9,6 @@ Functions UserDefinedFunction .. automodule:: psyneulink.core.components.functions.function - :members: Function_Base, ArgumentTherapy, + :members: Function_Base, ArgumentTherapy, RandomMatrix :private-members: :exclude-members: Parameters \ No newline at end of file diff --git a/docs/source/Models.rst b/docs/source/Models.rst index 8e8eed5db7d..24e4e3889fc 100644 --- a/docs/source/Models.rst +++ b/docs/source/Models.rst @@ -17,3 +17,6 @@ illustrate principles of neural and/or psychological function. • `BotvinickConflictMonitoringModel` • `BustamanteStroopXORLVOCModel` + +• `BeukersNBackModel` + diff --git a/docs/source/_static/N-Back-Model_fig.svg b/docs/source/_static/N-Back-Model_fig.svg new file mode 100644 index 00000000000..836e7b87bc9 --- /dev/null +++ b/docs/source/_static/N-Back-Model_fig.svg @@ -0,0 +1 @@ +N-Back ModelWORKING MEMORY (fnn)TASKCURRENT TASKCONTEXTEPISODIC MEMORY (dict)CURRENT CONTEXTSTIMCURRENT STIMULUSRETRIEVED CONTEXTRETRIEVED STIMULUSREAD/WRITE CONTROLLERHIDDEN LAYEROBJECTIVE MECHANISMDECISION LAYER \ No newline at end of file diff --git a/docs/source/_static/N-Back_Model_movie.gif b/docs/source/_static/N-Back_Model_movie.gif new file mode 100644 index 0000000000000000000000000000000000000000..3a11c1f8eeb93530c4c851deb7fd52ca2fed3756 GIT binary patch literal 256380 zcmX7vbyU<%7sr3F3%m5vjY~Ju(h>{O-67o|AdP^;!qOp~(o)hOE!`^JAT24NpdiS; zKIi?MGk?vTiTj;9bI+VR&s3De#I1?3keDdo|G)r%0RZ>_Kp6lk0H6T?Issr106qc0 z5&(P!fMWo-0su4)0B{0;AONTUfIR^C13)AIBmzJi0PFz3+5Z~>02L-CD;P`zg=#>d z1~@o)|A7YZ0ZM#)R(yOkK7IrtAtnhX>3^VW{}obFc5-r6Dk^{)*r2A~r=g*xrKO|u zrKh)~r$?jd>BSfrn3&vUn3$NEnbFM57%UhpENE8NMK(4^E_U{RbK>Nb=i<`k;@SqL&_>vw!CK4n9gaG0HK%<3)xkb1EaX?($8!ag*^&e<285vA@%u#uH zh5taK6%-bpJyZJ+G+Ip!qz+h>RKz#Sm*B>Cj&33vl&Z*LzTw6Cu( z@CtbK3LP9A{IAeP&_@0T8XXx4Ac3DzQEn)=n3#j0xFE}T%lLRSMgm4cLIOG=fj*g@ zHJQ~V*+t-ufcG13APq?S4>US04af!Z{sWE9&&MgmDf?X{e{txP8;bfPp`={qV-3ZFC>XP9zH(#9a6FZe%lcSj z>1Z-sA&yR^scbxrL$BI=ys3OLi{Ex4U!}R?Q=XXj@%ni4yDx8LBXQ|fTPkNtmD9K^ zCR(cI-f5Sr7O1vXFVq+}yKGFf)-2Uq4aU){wbiaPJIz&FOt!sW`{21dQK0srZlf#U z=kdnmhx)G{!$5cp>g^5NgE6Gs&!^fOcSlp0)e6-+n)WBNg(N0 z+0%J_vfS+Y^>a_x@AIv}c=RK!-tOChubK4G{;U1OXe~>#O$zS zCyuA>a3`LBgkv{Bc+qJ$QS6{{H%aQ(;cl`lHs@Xng2H((Rhg}7?~S_X(O#Oi66b!p zzM=DehOxsDGZXDJYQ)1Tn)4vr&eUEti?{gFKF6)?=pfH?#HS+5Yti{zLBPS$biQ+4 z)wj1{*j$w!!A)fcMKNsEhb8aGJ7${(nSv{RZ|SBk1F#0B$moK?T?R?HiY#O zctQ;Sq^M^μc~X#BsNg&8a^r6+Jm^ zepTXJ`F5IZ{*ypkcGGx`liTGGAy4+$0HKy!xKcx2w#}r#l;O$uuK0+!H4Xy1=jck~xe<5$BfZ;f zP6K423A$4Y!N1WPCW|cYiH=Vi;6D^Mz)crmn$WTuH6c}z()hN}qD$}&sObWWsiEcM z_qQT5uCvm4Lc+lb#;%{|bR$<930ePd!O^VA88`7g} z4YeVQ!VPYMl9zvT8lqVA&tLq#ew&o!eDvaY2Qqj6@IB& z$#N>^2sSbMdN@n^w;X3>rm!0U45lIFQHeri0-Zpqs}F|Ey?Q@+h1W3Il`Z(!%4JH- zI+Wo_$+N{^`KM+LQEEjPiP5s9G=#-_hHi~me}kD)i}1@46jiB8)gwf=0+>8pf>5BH z1YqQlXKN8iVe0;o=}rX|J}d$mRrJ9?{UCtrDA}cj5nPwv56Aw23)tDf7x+Pf)+!KF z+_J1LIFuXk#EmQq!^KU-0E`)73IIH76)a0}Z#`+&DVR0n=?Jw8L&f)%B>%dM~ z)?DhM#GC?ScoToF$n09MR++>NM1=sm;}BaTmz7$ zWDH5eppkaJRV%P(P>qY6_+`2`MFz5-uX0JIj=Q4Zj2<Gd(CTZ`lfNiGW19$d1NJv zMIN`;DVT*50An%GXH2YX_WG&`uK>;_RB)86?l}h!17t;gWwC~u z+S=2kU&u*ZT2goaemB4yq3wEW6{(+E0sSdqFy;MU&-$7T-TX4;%413i5+uN;JD zgAG_U6?~tn;BQv3Je3EHXv7SKz7@BP9Lg#M`|-Ud4%Q>6|IqW`v~Q6&uA8(tTTnOU zAf=~`&(BAqYZ<;( zQdW05V1CQ3eoeSH`U}g^v{-Jhk7ngj!$P#E-=$$hfPN=oh){kiS0s-%Mvg_F-LrP5 zx1U09=b-pM5hM3G;_Hs2PD;FTEK(bhKrVbWyZPyHjdM60RIyRU9ocNIIgg#w&cxdy z3pPtJlsEaf=JS%*!Yl=kSs}mvVvOy(5JcPTE~F$AS|x2eOpw5|5Sqm9O0TxzO~FC} zR64q!By?ze9*LUY zZ7)swA=);m^$$qbK{HAeduzv$eLlSp)7WaxcQblrd2oC*1GmNBMz6kHz54KIHZ^pf zRitop;WRkR71ZnEK)N@8iNkOH#O9LVkaS0xs9=au-s^MzxC{?`$CLBh4Kw3E*%fYkF3lYzd@YIf6fBNYv}6WY z&S4WC6;r=B57mXoVNUo9Z(1L4^(EimfA>$gCGdJcJ75RCEuE`4q|J`_z4Vs#T&5c3WK(j_m%`DED{e3tFe+HRHuQ>QVmJY+)|-jW|QLAfEZx_+y;tcQ6d9*D!=> zSPM;Em=^5?_--kTPMMP^8%A8IID&elwH1&k7=9xF8CweH8RK{q17mEbuH%2b->Ouy zt>o$RNK`wVcR7-wQo49Rx^spA=_xPQqFR7~r(E`kO%}?17^%&{@i+h`uuRQ5^hmTp zCVN|2IN*^mS(FtOr=Anc;E?*$7KAMYgHjfQq`|;{3s=jDYGVu6e>zHV4?;^79dyHP zYYej=qaK6d`T*cMFa~K6hI*yEg(21Og}e&71w*L;$EzKc?!+FV40|0w-37zJ+gH^G zptafrot}`^v`0K)*m=_iuZ!{W!m!I@9`SfWs*Ph?pd49ZupAERyk#t&3`}NLSL|(E zHDf6=S!i7f%3}t1}mKXfGIkiBiR5_g5_%Q=W4-nl`e7$oIy6RaPloxA{YkgMOJvAfPa`2 zLu__CH9PO^8{bRZFe^3644kFkq!`o!{ufwE4Y}lzaMI~O#%Zt*45z-xv%{nymO434 zhafptz2P@*Ml2ad;A3TURr*#_{$Bw;y^A!g-Q=Z(zz^w|U!4nn9I zku5N^=JE~93S8mUyWp+9jlr_P%va&lv&wX;${Z`fxnRQ8Na&f^~4%Xc*%@DuFxp=CwY5Akl;_$)Za14SRK#!6fcjY%t z%)aIh5@PLA?xaeq8b>t^!(k-HbmuSmVEwXw9{ezkBWDj~$*l;Upm9~Da>v!#fv$!rtTMHG0i7SYr@G_UT%9dYqHs2FBIWylT3btH-;lH|xh;Dp#jE z;ftH7hUlNDI0S;)3MX;FKsS|7gFE+^2AC?-gq)+cpU81l5R z(C$d;>JY~0ki#GdgJBYpH)~$uGWs^==XHv2cgTd}J5%DYaVxRVVn)Kcs$X?+^mj^b zcS#9RI-(d~|2;Fj;%i_3=`&S69DR z1cP9p477&l^%Ae^KCchP_>o74pqLvpmFE-64Z^DJqfm$8=aUF^d9>kq#jSx8UiCBO z_p=Lh1+9i>aqH%C4{WIouvm8jvJj`W*Zc{cJZ}AbbR?Yl9oAx9t*-`g@&^Sws~G8` zQXAe6;tlbhezXVoafH8u(IpbrdjGB&s^T7^3CC-@8vMT86XQB;G&K~sH^gjR&$Qn= z)86Y5HDX2AZtO;!n)1qkC$ZK_&0%%KI-x*7r?F+Ne|8xsJ*qEYz1@S3cwtM&qHjb8 zE#6NqHKuJgMnsIu2?u!xXFoC@BGVyQ{D9Yff&0!Aw-|<7z(0|bf|IH}k;6Yxd_P_r zhSw#FpS3rdbQ+m51siMd3V=`Q<_wr(*LWyAjwjp;QE);Nui-4ghtR#iF<_RFuWCn8r5E z!YTH|t>2m$^Hd=%CRhl=A8Np>@56mJjgtyMeXOuew83(|YO`+G0anoBFue8kPq5#g zAYQJ3Rk4#Q{=1a7y1AGd(^x)M(3NhyvKo>FV5%5~6JUj{4-ab42RraXi_r~uo$53C z_A}pp<$vXVi*$gx1GX8Wv+rc_pM;Q(UEm(AW65t|g~4#S6Xx#A=Gw6JKKT|eT;N7e zW0kOjG%eQ3ek3F{B3FQy~H8fhEI+HO*-K4=oa$IhAynOJeJ3HZd{em7^ckpH&Ac-z%=^-|p0B|Q z1CK{nr8&kWJijLOw{#?IoxUHXC?;6S80tUspy{EmO=*rsFtI93D_#NT>ANxHgl5|Vth@oMJ?w2Ay5GC8_9km!%}eyqvXY4Ydn81)bzw|@A8$tW zP2K)^N!LT`YW)3Yd`+06Cd~Oekr2b4A4PY@kP}T}6}=HGsLthqe-CR$J&e$mu}^=L z+)6CVP{B6T%UJ@VFTW5>YT$TpzV`}Hd9);+Rx8VzhHJy@qIgz>}1V92Tss;hM@3WyW>jx|HA<1hP0_B~y|tYJOsl5B?nVO5LS?Z-ws< z;bYiB!+Y9q-^e~*-c#VT3Fkj#hS0yY!$f2MNL(aNNW5eIep7T^|3H5l<9spnPdBZ5 zA+&c%yvq2wrDyqB?Pp6&YkxVS@0D7xf%JM{1_yw@###d^4IAK%;kfjFXu(!l^6nBq zeo(f~u2K}Ipcj~0cTf2Zt41LrM|WQ}lh>jbNv(IFo-5+MIh3RKO*6kj^kO{*n_yfU zI0O`P^^bHbGzyaD<@g;)sfn~Opa%R{84(h?04DMs9sm^Je#ex>a?4`_?BLwSEMVi# zF#KDEJDqJ~fZ7scOqWu-l}v)c1us>8yB~>5ElP|ZLym|gL{Cgpkn%RZE0BJTO>cVT zG+VCmR*84^onA3BmZ}E5*)O!)sw#82)BT%jgId#$Kh4UE?pfoGQ6Ok>B;k7dXq3^X z6PRgCFA-W|6xT|7B$Dc{fZrHQ5|DbpH}DH+kWv@YaQTROWcd*M=lbmHQhTTKNebqN zT?oG{hUA=5bSX9>h1n1YV3mVBLh{Swu$RHu{$}qam#PEpHS$DH(=Q(P$hHvWkS$8` z2$2}sH7ZhCBE8D-vL>`k2_zE)p3y&Bo35p|Wmbyjp_8v5m5Q^vc*dG#*QCO(lBZKe z^N0jG%3eS8qnrRe+0<;Ldx)89gg+k9xto0=s3EdsM>@%omaAJ_((cx*DQSYkh$nnD zr9vwKa4@xBR_``zE1-!K=X;-|#?8I0u~HM(WlJq)LMpRl92LnG=;7;WJ;f54FAQDv z;5Zp06)~U`!YPKH>$Boe3jwaKdQCokSTx4|`>jSglvpmRHuC&~Mz+kzgD-5)rTvN{ zEBnfej4B(h#ps)g22-?Oy0@8me2gMCE_6XCDSLkDA-)Z zV`pjO7c=9@VN8d|iDDn^Wk}B`idjcFlKQ{HubC;v@u#d16SV_y7{L-HQRFlVJjW$+ zacp&zUBr(j{4E>zf;6onOc)(@;v6eF9CB$EITg6<#y&Z`RhX+tYxAK(Hfz-!4Q-OG zj4`_C zd%mfpmfh!P_2ZjzLKJ*l7Ax}ymwDNiPgZd)-c}+XOJNd?Sju$*ulh7;JajDW0?DG z@(^l4!lyRJU^w(yCQLY-upoO(rMkFk7gNL*Kr|97Bp9T97qjKC7vne96 zJL;b!qZB&pl^t$!@sC9rr1*(h76KI64rQ^v;*7t*Vpfu`hSIpFlTf#BtxinMkBCz3 zkcA+|xpALmGB$d`>~jmK1&N>ixt|GE>CRuF5m&cKVo4R~#{$x=s%>2AXx{ZjD#}ks zDN~^dX!1!4)LI%vLT@L<1&bo6FRWtJ^LNO*WTRPaO9-4`pp1eTFuW+bY&Xo?s$k1d zqXh%HZSKO{9)rY7ox@V_oRR50wV3?w+~6SEk~$i!B4Rfkr6lg-P)~(;p9_d3LaPa2 z2`VD;0^Ch7eIAVqTt8iSB$IGBt_8mW?S*WX9R2_-ItHQXVLB%lhDGGVuRz%}jg&11 zg5B&m+g!Nv*$|kSA}d&L@H>fZ>;~{dC+FbLi#2b>_%bZ4s7+2)8iGydYtJJq)u2X+ zafR3BLr@N1pD>hOm_B1bHhr@lW}>>AmYCwQvPeoJo*|NnG?gD=yb7D=(Jsb8C-ce| z`M^Q+`l3zA<(TA6Fg*!ipd#mRh|^OpK__=q9IVV3 zYiP33xzr)486muAWnMi#(aFmjQsp+LMZag> zqf(e|$yy=P0m)*MqS$FEKcX6{SM%PCaZZ}OB0K2ai_L?-=L#6ps?3}XLk84k8*taTqp%~EN0V}?Jnd-ij>UX zRzD{fH<><0aqAO=q*6v&P?Z%!oKl zmKWH0lWnd3t4lZ6Uf7`}S)2DWQi5;Xp&m%%a({ZoGJ@C1VoCDz5tKF%B+2R8x|Lhx)OD;cWb!d8X&%`{oosn{KfI&-F8 z@~Y^@7*QZSoL4n%2Cr@QXJ+H8rx)XJDUQ7BNcmQiF7z*|SW0z;L_q9r;4xKy6z_Tm zTgL#uE$OyU0~eT51`iAGm}OxNe(_2n>b6}hUbb9vC~KOZ@Mi;^crxEuKV2+?YAtE( zBrAnpwz~vYs9cH8B*ia*Atk%VkYJo8CY&codAJa$lDUb#3i}mtvq+T!A5S{a{ZUei zl8d{4&$V1zOj1vsD!2w4xacd&ma)OF)hp_9Hf?52El2OBxnyVX)RMxcsvAnF8Cm2T zoFl?#1RYK(f@zUt(?W)By-LjS&vu8YVq@0i(h0^RSky@$xwZG-<-~((eiG-&Q9XN^ z&adx=L%sFXo=mwqR-|K~NB0WmbSSGb-bc3FhgP^8Seuk-kz*dmsljHhQB@z~_G+tX zc;<_cbRBG4Sz&$^OpNCKC_fV&DK>`KR-ku!@@ZvEKuU@ke=Nm~)bSN(8vl3_NX&U6 zB3zF&^iQw$xMXGvsYaRD?D%-n{b=FUIJ=5Sbfq#x5jvbL#9{-|rPmNe28Q&_lXkwgj}{D|^ygi5Us3poW5Xu*;j zoVaRy=;+2Elk}L3vz5c{Fdll|p=^BuN84FN)s07(kdRzkV@;cDtn#-o%i}C3@bd`L zGfqe&iaWksQMd<)A*;soPT`h&W%C#ReJWEtI~FAHFf9v6fHWTK0)_ zr&)M*d_`OiYfl~HQ|x0~P0;m|gjo({5c!wdFZwG}xt!|6JY_>eAP*Am1xW=Wti;E7 z7+30FKxcyOL7mj6led4;`VrY5?X;u%pDp8Re`Ac+T4(us`6an!ro6B5V}RCmu+FYL z-@dAjsDN4vBD)bk{IDix6FjIin~Rp6nihCj&Rn32$2gWIMv~DtOB$zOnmhR1S+(V| zmry$M>`K8VVrCnxCCichJ6JENPoSh&k757)GyFE?tBmYWLHz zsWm&@Qv@OOk+Gw!<=GSjlg%!(n%8Yw27MNvlErvqi~blqlV9(+xxJW3zcaqOSqW}O1yPv> z#z0CHP5rb@D_Tt}6IZJWOuKzeD>NX!#*p{EDF4IN`f|vtK2#&GSx}<_(S!os5$f$Q zsx4%#U3%58$jsMxwIal{d%>)Ff35egSs%Ii!1Zci5vpMr60(IF{?rgQ(a~B<6uOKG z&NlzRYC7qQ>UeL4?mAoV{<}U+Zt;m={k@3A;Csl>C&;3&#m3!GI6X79gdyYz6#|$} ze6r{mUf=97tNd#|Ee)x;Hk%dM98k2_XI&dZ7^fcc7hbOfH=qK;P=4AdZw{0f6y-7f z_3!@IhwHCstSw;C(hCmpmPPq`q5_IguclE4*9krP3-AnBXqaVC49Z{G)Q2B+M*#7J zZ4qH_!yc?WVJI&SFaVEq-7*b?u3>NH9}}zwwr`bbpuDreKzoD}Y@7aIn}KcHiv#7Y zjPi9t`NyCFW!J9^NF6lRGH+JeGA#YAAimR9gx|NhM|Ow^A(*0DwHDih^kx{;`V-dW zqP{6;_BvEa#tsc1d`^D@Z^QB-qocpna-y5}BZpC|7~HeQ)`4%uNJu+M^Yhlr09)91ECy(V&VjuWo3#O(jf%sT>I1Pit497ZBv^UZ-wNf! z57GX<@095PU_;=~?XegR{|k$zG0}KX-G&@w_mOH-61Nt65^!^G5hrm9YbjC zau_AXfby2L3T*f%HF-z_B#?j4d)ZOxAUZDdFb&)K-%=AoA&GoWthY-?*C;tYJ3m>} zOQ?PN;!%vDbAlg);>EW*L77|)dggnFFAa{Sp@;dKM-|WQGGw-Vdm%}g1Yb#3WF6u{ zD*x$>^4hW|;j{9AZ}gv;&TDM!wL)ICqgtPzwA7(K)R_ltZB&Rr?*AUYG)4uqL;Trr z4(|t!T8N^fQNH|;m!jWz2~R%qK5vq-2oiH`F?4NnIB98vwELZ&_N-6Y+desPbY_6~ zIH3ZTokX`$uSE9-lAMP4ARxoj*|XJ=P`8OBxADxg4}NPC3maz^t7tAi+X_BMFX*AK zpFMs5atg zJS}rRbHOWB)RJE07_|j?6#((MaA(lmH*m0S46(1M+{C5$rd4-A&j9g_fdpIeD!XWf zB_;>=Iflr5^WsM_KG+P|Kc73iC~CFBuh_XG@ZiCQbTc?rKM=oXaPx*<@?g6%I-sa6 zEm$=ZkFiXP4R#$UjxZ_h!zd1eU@s}h=VQkpK>-k7{vXflJkSQeZ2p}|gBBZ$W_pw4{zS!q|_uQn-%3o|xVsyt-4CR-N(tr?~FZn*VwA;e= zv$nM84NWmNbVzyOFrT^m=*vk@bgH>0^50t%K!w4t3{LCax$JfD)AS{Z-8cE==V%GqJ*DwnIp2c4} zCb0p3uL=!fLn~1_U#-2I{AQAFFo@j-dT$;=uKly4aNWc_qKHCLP`>bM?%qS+l;d<% zYLup}zc%Fdm$h*{D)3QCXv#(1XPYfUh#|vw9?r99iXhLWTb}@kNqtJB2Sj1%t5qLZ zBmhHt+UCa#i1n{P_TsIgr+bE@HZQ4uCq5yNnJc5i%;uv)8U@9K6rt)oZh?nWB)_AJP2NLfGrG3S*&<> z+~6<>?uQF+D^vj7Nk-+E|Jgl^0p**GYO%aT=lu>&c;Y(~{Y&}M$x8{9da%7}84TV= z1$m;p+wVQLqW?;Je$9F%Q+!lie+BSC`~rU60-6fbPedak#2Ub+MbY$zM?OxFKzOhM zr#nC8&y(L@jgqgA9AjJL;}b+wLSrD_fc5YbFE)&r&|jP7c)!oK8Nu)B3O~k> zu{uIxmXPZPO}n%s_luuf&)oerBhelH!%-(8&9rTodR zop8HDKIJT&-{E_4e1vy=#W`Q8bG;DhI9H^Tx;;BQ$$ot@8S-;Ebuw3PUEJ^T^bBTyhs?x{ouqE`n zC|lZ)Iakji6+7I!;i#yRclZ|Xkoq$z|Eqm0OUCKc;JfM$r4cRZsn$S4NvCQfqP(_Z zP;x^j*GYQvi8<6(>TT~HyShU*Hwk zn-b+zKK7v?ZGEg04r$}L9Q=%KKQoSNL=F|QesR5TAH00BeNo0gDQ+}0)321OaN&B_ zqVV&H!(xrltlY|OQa2=OF6l!ujz)`^luDlP;^U27!uR6kKQCQx++6h+uD9|<7H_)e ze3bFqTsQR&tYX_ge(Yj4fCVcK3IsV@BFNpGQ2{JV!=nCh(j6>OJHfS1zTPdt;vq$FGq zVPyyhK_r{9LVLI#pNw1zhhSt|5 z0J?3$$i_!~2QY++WFrYB#ME&QD2NpRD@rnqzSesk85A6cbP^Ql?cRjgy_#fsh_yG82JfVzw}V$TBEjuIwn2j{p-VG#%kd90A*6Vq@1^ zB5%!n=h?@c!HwqJrN&56ifx!lBn`Jk04Af7bpk2DSGIi2;$!j*FPUPmMwyt8#^R{t z(@+9~xXii)LdY$C#-d0N^GhW&B_uf@7A49Qm~F8)ll2gQ1?2J*yOS}3hhUDhk(lDC z*@H3s7@M(~hw1*u0$@S72|x8pv}c?*<$YP{Q;g$eRX!N?jvW>p(>RrkPB$xvZcpy_ z%@-#_aHf;KEk^+kK!3%@G=wN)8a`5vpY=+~pc_KqszlidzRZyoFU0s*OlZ`Jj9`BQ z(GnTZmHabZoN9-q0qU5QB{5)ni|+(q3&T@0L=pmUCGoo|4e1FuUO~$ksx~JIi$wU% zi{NVXQ#&AxPaFC6MeROqy~u*H{$2rpK@7DLX{!2*A2oVp)}La2*KIKl(N(`v6*_`` zdj3*~sXd)pFYqWi!9~BAhn$6xAXe9|x`ioN8lRmRb6i=IKHq43QNonBq%$HQ(t&4zlNM7=u^O>;S5jZo0p*ZSsPId%t}2Kg3T+HivB}Ps_c};yHiwS8SgP zgh^w~;GI)-OjN^nQJ`Tg2v5-&Q&Szv^H%s7JBJ5wWq%-GXd6T3-I)XF^N&(f_Tlp3 zkk(B7o>Sk)!E*SvvZcnfjy&a0s~gRw9Zh?~tj>uElnME|z>fl5^7U&a9nL0Zqx?pM zsw`@c^d?gWQ;S6WrEyd>^Olk)KUL^0-iwp!goed{S?sq4&?1il zKNjh81NX1Cz5aj(J?yw8j#do;DHEo^L}(b6x>c+a>myqbj#SYsQCq4)gIuEvse}2h zmt%WpFLvAeDtt$wEUGUNhK&gR_pW-S5}P2thNs7_n|B9GYs45I+9x$$cr1)YHy*o+QlTWRcgpjz0={v^f0 zP2toxr0@GkeJ@|plSrN?Sx=1YtuHD4&DO^7BSoG!O9B>R1bO#4>8#~*SE)s0nqb16 zg_H5H2NlX)>WEJ11-|vol^!*$adWjpg}ln=`c90B4f2$$8y(vgR5Wm=&l^RYC5opx zGz0JjIg@q^q%WgcWscl=(Hw;m7;w=e%}?D@VfbONiCBL$pGYQfGq>=m(Ch+qpC74L zSs;F4s9w3n{Fi~s0nDR>%78)zoDl`11Vx{h4VI2d6mmXsjz|bAR7DSuGYFv?m5(i`5(;4d9u_}4)e+^-M zEVyBO@W!OhhOMmp$%NIxC9`7s?k@rpsUv_~ot#4hy@}vqp*`C+{7wvnv2hJx{hf4q3mpz`jb*gpL8-jg=#h}C_?c2)%kxz`SJuVq#dnRNFA_7kkO z4m0JkGB9Q36h*Op#elhp-XVR>AxSt`9D!D3#acqZDj3P-OjKvv_buJRGhbU6O7XI9 z_)eRe+UWlQ#buTPf(79wXll)(nL`A63H?{318Uk@S52{T4?M^?CpGrZ1e-wS=@ zoO#Im({l|R><2R9IP7d@!MezNKAUqZhuuJWM~W>B2XcD)UFs-K#Y1-E7R}TLutOQh zyqi=}z*(d`EL6wYcBX+YJ2)ciYoG;uSyR==1jsX{`PV0x~I6wQ~biY)P zPBTPL&)UzBoXrT9JmKVRP_<^9c~{)Kh2YUG!N%Q?Qz%tJIu7Wp?_lg}7`)$Smm5$t z`1f1M6oHiZ6nU@{QtU3`iwLb-S_PsjAx4Jb}m(x7a)flTD5kN{B%k4!RhD14atlb>m|9Z zg7vGKU{kLbC%W#??3&Nd3#sW|jNsad<+whZF%}sILNhDcLh}>L`&zr_xZT{C{oLjl z_oa3WSPjn>Ho2ayCUG_%neDl+urb*cyZ_u=-jDun>dtpUbM}_){de5QN{5fzH>!u5 zPC|PgQ;t72!ety&MOx{;UoiAEPeD!D%#ijXo!V<-{^dCK(W~A3yLv&DJ?{{1GdU~z zOq^unyt=-j4IZY?nS9X$v)CuGE*mYPb!<%oXC2QuRhFV;u%zH%$$P{_zNZ!2ro_U9 z(}4q_7Cn(x77;V8I>{c4(u-D?dcI@&gTtu1w*7ZLR`zXB-(ZisbI>PQp~X!EJxCBdW#w}KEq z#Y^TjTlGLe;;-m4u+dLpwIM9hpZWC7wG-!psNDQOeh$@lS-ReDO@5k%of+s3O(^kb z;2PoSArtlMRJ-TcWoX8OYYcnSXrv1ch^=N6^}l5_?i&o|DDB3yl`ksJwu^*Bb-LcK}Oc6f8HY$ggRDt`gd1*fN@&#ckx`(bH`gaOQZ+>RHHs zrYJ1jJo9TqcsANpC%HvCudKe!#&}fF+?WyaFtkJEQM;nA^w!%{%~Oa?G^lX<+8&d3 zBcIPTO|}U=^Zxi9;ne|uv&USc{1IC-t&Z^7r$nKT`%!OdRPi{Bg@x7CzyB2D*45e# zIr4FS(x%1z>-ul&Gc~>EAW_~mH``Cmj-{kdX$kjlL@{fKpWY1yv2g-E(=K|gdf+DY zQcv~T2FlyP<{NAEt8Bp^S+wKx2z?Ta2YTbzR8O240_A>LcrRKXiYT?0<10G~cj`R9 zC1(+zcJ0xFuCMEH>_55SR)+?Vf5Zy-QV`&{sG0jgy5jeJ(+A^H#>1KP;9cRTY_n;K z%=?Wx*)k%^kFfVOuKz_V9ZZ89fiDa{4u=Q$D@}pq(<6@S_n^Ds$6~Oz z-FcNhqMl27b4wR{ozbT6BB47)@N}R-r?5+Cw^O`qM4V=8Mg=qo9Vg-ee<@TVHGv)G zmDa^xB@Gha-52bc*pki7d;7y^U3k+5*)cBCI8RG#`^)dU2 z-8-QHf}!0PfJ+3rtGhYxAEbqXA)HaA;d^|?a>vh2InH^H9U#-X1&pWcPaHjbw5d}V zJ5}A9$@_fX#d|)g{CTlg9>wm$pV$I98?=ph{T8{w`vs9Tk+iZ&&-`@1(C zo0*pbc~c6IBOr`YDPnsYXuCPah30T-OdJS-y9KfL`@gsSu#>ut$9qd|ya4@tle?r* zdsa2=|2>cOy*z(9J?q`t%kNCOz2c_;ew|n;DHj|`_8h63-t)aLHw;L~+(FMM3q$DZ zOT{j<0k~Zk;eneBw87@)-NxerK)N!Og2=No-{c=LB?i|r;vO;d7_}0g2lp7N{e)mE zD^MKBzXmYwqY+YGZSVj746Bv!3n=loYUKL^@=N< zIN?H%ZC^Bk9zeVTkjY;`g9i~NREY2%xNi^HEtGgL-NSF-?oHGy!Hypfh8#%;05pFcQJ%zeFcJVW2utQn>2DXx5IX1}lenvm43jA$A$(;f z{{?^$Swa~s+OiwokLqbhT)`7VTD~X*(n=JB5>Oh2) z3(Ck+Fl6FP0Cp*MnzGGWfkM}Y3VM~bODZR2zyyp}oyBkVmKS{IoL+Rf+5j~<*~X@B zlQMcUc3cp$VUHk1k_4@C>p`zz4=z?n?D%)(218Un2-}}*+5l|B%{$)KnoOvckjdgJ z0Gcr5Ao`HI&$@;78OI`W7BXdn=uUxe!h+C1L!xpl634F(6N08Yg;Ye*#TWk~|7JxP zCz{7Ocs{hzqH^}3F~u1XYSG6bHPYs-g`g>r$R$6l$DxP9>CrlUp1f!tCb7(tNg)?H zQp+#rnx{%|PPC35=fr^y%r)7>OB-T3(~?U!iQx#yA^ADSxx1{>%ei>6G*Y5D+k8>R zFA1FsPKgd>GM~LHQZpe9IrQ+u5GBILxxNbR)KgD&d)*tvBk+7_^GUHn#}b1e$?;*+LXjn!4$UjOrkNj-p=>$noWW_w-L~-_(jJ@*mK#QW zG#0m=GV?CHO?}$Q+9GoZhY=ro^Bvsq$v^EU9>|>o2jRb0-n41TL4R@YoWt2#Te3ek z+d8x*qUYLg%0W8xcl&uqao8J&QRSS!K}Yu4fltVC%r|!0$9Qgk|LB}~j1S)Vx%!!B zYH>Fw@}1WoGDjY(pYQ%Jd(^@Hn{@8>5gzQpVFw@Y*)ND6cr4609qtwK_%D!AWL+Y_ zb0&xF_HD%vcO22ZzM>^=yyaooZAM}7A@9IWB zJQa+0z1!XfQRokQtOJ4HIEUYsw2yU^kR0zQUkck6J-+3v955VPrMx8~ydW=U;&8_e zahRohl8)!V;R}cUlr)3&DX7c_7h>T-%2{&>_BWgu@*o zWYRtcSi*0Z10D=4W9axXj}MkG9X`a8K4w_La=gQicXZo4|I#SPE^fqrc){PLgoqb@ zkT7S<)1Vp#R&tN-SQ$OTEJcF^L9+$+VvCf!CKKk)XpzIv)$k7ganDUhV>W4kr zA<8DogO*tWW#D)x4t30fjJ34bE!*+RBDy1YV1i={zcCI{_R^Te!pA#+DL+*!Z z)*+8(5|mv0s7E^xT26H=5>(UUojKewONtIFAMr>BG^1(5 z33XF0-&|cd0rN~bo}-QmB_(Zr6W=E|Q~H5EGEQ4gU`wNw4LM?BQwP~L?@9T^qEq`4q{RiAMj8m2-iW+RPh6i@w|{a;&BgZ z-gP4u)hk~UxDJjE3m@)aCkV~K4td~Xvz(n!Kky+Bc9_GmJEG#d)On8DA{HI)pvOdA zt1ElJLmggKmMqD&k9hbrnCS?sU4x4kv&Q49a#YrBVFXx>2zEJyjgBVO`l@kYR;o$N z>t3zvLSB*!i}_6NWuF_}iR5D*?m)*==)-4bEUUZd19q_0Ja0@IKe%wR0=fJNVAvzBS6RU&nm9RL@(T;hrHp3IqM?De@ zVA7>yj6~AzM7RqW?@p++3kHWdR7_y!O}D!5J;w?Ar4M(NoQHJ>t=hbd=-KORKPE%}5W7mV3f< zj>m;*-M)R?qrU3M^|il2j;OAQ(hIRPUN8+Kdqnul;2=jj+%aY;^GnqAX!bcwEiQD# zL&$Hw2XQ05)^ZSg9`?{jyoJV(eAGi8?pO!J*`2v^sJ7x=+XswGjqgpFLmlma2e&^C zz<%h1-tcILy)$0IaX7ag$cCDp+i{LR%TXNVNC!LKG3I=XICMMj`OnQUj+B?P9P5b3 zv?&)`R&U)@PLFlRbN;+}(<9vW{|>gRD-3ov^;;qTo=d=ebl#;KjOI4)_|&DPY?8mj z*?yM!cqtA#BGXppnHz^Wp8k$_(BmHYF#3a)ZI5}t!{q2F$Jak5a=p_t} zacq1YHkU^|?x7E=$BQ34C%Mnp;d!k$-e4(SEyxXbX6l+_@97N(InMEPcf_OP_>ldt z_mK~K&_f>Y__^m%pLz&K^K9m{Y2K7e1WenkHsY$v=r&OwgimoOZu zMRfWnjk^1(Zm=+AQ&E#{{(`9-l8+tS0UqRm9_#@h@9T#10MJ?ug3xjQECd*Gv!vRqz0rPXX@%2KPY*eaQy%0SBjV2RW}D zG7uetP#nlk!s<^QwvEM%iOSre&p1$yxPcoU0vwtU9n_)qSTG9hVG0{C24_$%YES~R zumW{Z9^k?H*g+l8;T+0g9NO@`3@*&R?((`v)as4gmT;|BFZtBL03~l8q>u`&5U;Qh zAMn8*bdU$#!3Q-k49C#bitq!$gzgf;?&JdRoXO$(tQEg39K=B!#^D#qfgH-A9EM>S zgYg%8F&uR9%1}(T|BSGV7)=Br?h+dh9C*#c|kT&Di?TiW)B5#tpQ%AsAKx6Z$|6m;eQ? z01l~<9oz98w~-smK^xt%7sWvt@o^o8P20Fl67OikZY}FF^1T=`4zCd#$3YtCLH^LS><;+ShAV;!iX6?=pV&~9|@X{gIUQ!(~0TZP1+EfqnpibfXajJN39PT$GV-KuEeUGgHjgQH4VK;&EIpeSiRS*H|!TDcY7ar@fe_un z3riFT8`MFik{v759L|9b*8xU7aX{6xMs+0%w{S!cF&&;k3`}ATjC3TekwS&>LhY~x zVbAievs~D-Aly?T;PZ+iPy+Q~0`nmmOyUR_a1ZyP3eQwZndA@iG*0C-3opSWfFU0Y z6;Sh3Px-WP{1i?D6(1JCBo^UL_s{|JG!z##R}KR-ia<$Vq)`FYPz{w7NtIF&^-}jV zQ*9*^76brH;~+paPDQm;Nl{c!6;rJ!P5og_7ots}<}*yfOH}n@>LW3Rb%TPU2#ytA z|8A61J#|?*YZopf1r}9Tc~v2N^=VS$JfO8=s^KK4wOiR|Q|m-rjinlBLMS@bTsaFn z5Tjc4&yo1AyZjGyHg!DMHC}GxBwjUNfoBjLI<98V9|*cb|WVw zgHNq>UUjTqDF+a8A~zWJUFyRmx?p2N=V6BeWIqKNXhH@u;Y||uPDmD$prH$tGczPM zUcHH8FU?{nM`Qs25L$LxzBMNnwr7Q=C^A-P*Mu0_KqNZhAYe8nSk`EhC=^;%Cua8cwH{Y z_fvj$Za3Freq(PxmqWCJ3ix(((J2&!A}T1CW?RZ;0S<5RCL};31W>n4R2MXO_ICXx zU4=q(d3Pf^p(MH>VuQDudIEE6LRBj_e`L39l2$qU^>~@2X}6Yo<7H}%0(%oe8zR9e z+JJ7k7n1}c65`e*nqXL)7m|QS8?+ZC+F*Q%L>q9_RpobDIs``-cYLd15K78z>|~IE-C4u*$d=pSN(LSdMujjs194*!Xs<;d=ofd;>X!2-tx0 zRgC+Oj1&1ozL$FOppx+*6Ntf*@c<@p!IJwG7XTp(nt%?L)*uE!lkvb1SYbzz0hN)V zU@h4}B0-Y};gm1=L3BU|Dw%GHArjgk3)(=H=>SM}!IDdPZ7n$y|2i3!lew5H`IryF znQz%3Kv|SY`5np0!z9*dKnw z3_>9kIw2B@pfY6IDr(v!ZrUG8nxToop&?qLDcYhX0~*p5o&BL2LO=$L7a`h!DW-$qE|waGgu8mJJuN)e)zHx zBC`SDNc8$aQo^qRJ3R^lX8YP8SRn+w+8?rDcMIaNV>&vtK?k6DNJ61>_t&i(=rgXm zk?(lB@;E2=IB)tmkvqY5sn>lYqac3Pc zzEwL~yRnO4cLgE@?&P8sLc9SW1&|mJnzlfWW1amWV&$8@55m4pVlA#ayASz4x?8iS z+9`mSFm~G@ntMm-*I2Csu5CCvs=*MP!VHERxY>t}|3P-GZ?>&Dd?Qqsdl#BKzGA^) zyC80qwza|}I)l5Zxx5Vmy#1jmgtZ`Oe5&2MD)hq)iU1~#L#kb3VK=!dxWavZ1HS=) zi>tv{kK8p-e92jSXA^>GWBjjYe0l%Fe(_*76oN3&ITFyex~m}+%m5lPAq$4NAa-F8 z4565@;x$|xMKU=p;(5e3Xpu=4#A8>)^}N!KyKl8N1Ue&k4c#Av!yufZjyFR+Z0R5i+IAs!oT_o!Bz6MGVd5)TcP{WC5(3*GGJy&Xo5?$Yq@f{{YuwaT+aFSW z)nh}--NPhuBhn`w0Eql#UpvRu6aao389Jm3|8{{G4B;z^zzmM#VcAd<5PI^#A*-5)Sk*yo~ABoM8vL+XLnd;!!N)cWBznXB0pJzGDiHo7 z4qLxvyTB8o)ct`b(w7xRLgM`)zfm2`|NQ~&)&8#Ap5vvydrhM1MdIrHZN4YsM!lpX z(3vJQ_HVl)vI|0M@8dIiUM`4%4&E6LV%z7RN99}A&+pFM+s5eCSRj%fbu;^y3*Oh| z{_O!^;Z1vaW&CTS`yg!mZ&LuKy?(Q;LI+@CGz69=YChIudhe-#Alx4A$wT$gKC@pT z_>CIxk3;ocg2r1vG!#N>WmX|zc18&Q>kl73HsfRWn_CN_CmMXav^`}lAB8-;XEk4s z0sZ_9LLe%9bL&HG{}uqC8DLMJn^il~X(9z?#Kr+aTN3~>koh}!5C8yZ2djlZ=nt9< zg@X>#0Z;_uK|BB=Y24`1pBVr;|59l4r%hosgj4{8(x~l~KRh8vmOPmfz)F9E0A%^t ziR3|67%c)w!B8VEf*&CQ0zeERF#vQBUfgvs3xI>r0CYLHv?9WuGMj#^W@uuUvS!=5 zeG50P+_`k?+P#Z6uim|U`}#!|qN?A)gbN$)Yih&YQ(O6>L322=WQ2?-TfU4rvu3kP zlWzVDI`rL4079Jf$5*Dt zjdTowEsjzpOP3lA;qlk}IRLRacd`cH8X;`iMQa1NO*$EB-V&U6fNIgrbTEvA7*VFzQI7lL)aFqghfehni0}w&xFQ z3~@-sLF@_kByDC@lSvT(P!S4lARdZnqKdj@22zVYI@yDEStuc7kQzqmrJ8Ok7l#0H z3hHKAu!UVGO+jNu2u)-WLJ@4?K_f<5`a_hgI4YC{G}^SGP-%b|A}B$4zcwb*K_kPOSAsw%6lB1EjL zLn%~5RJ+F7gmY%m;U~IOArncnMeK5sPrG~z2rjUNV5&b-zSI=KAp{m)s1{$0abH;e zm~qE$Nm^H?c}?i?q!E^kGKf<}m2%5?{idv;9}%;Q%%7QI2FzUH@+pQi+gw;RDa<+; zAbG;n$v{P90<_CcKfNeXOG4c-$aIN}7s*tch4t26Z?^K+Vrz=?*jE>!b6%Yku@hKy zOxy;?X3tG`Xn^rq_oY_P)wNw(&)s+4g5xD+#e*MCVA+T_6$;vYozg^7)kGp_6PdKV zc;=eZg`k3)|0BA$T!GW|x7nkAj(S&yqt5zainESP({-`TUuk%(-g@qzcOgUCx-S@d zT&K%b`q;z&K6qDhBhP$ZuQz`eGJ{M+sO->R|MkY$GZ;Kv$HP^;*xzsebv1O7kG@&Y zr~hXrEy?g7`|?vQ_51>M|JL|!h5xnw_NSZ@QvHv7>-!%oMiPQH2ylQ5ycjV8(?HPR z&n^Bl3mS|di41CRgBdnT08qjds&IuYY@rKZ2*Vi4kcEl>032qB z!yM{xhdk_|4|AA=B>ZrQMBE`CtUv+)hg3V1zeWMUvGxScC+iLst650@B9<>q|JOHENHn8<@A@&MJ61TK)6%tRDX z8rDn-0W)*cj3%NOX3f?avvt+zgjN#R%4~}BLl4B;I0;lu#HI6`7)k*&*@?JqZcdip zG{Y&Z2hV(hMjJXfnm#LZGV-nSp9V_7)CgKPc_I#A$!xSTchQQ5 z|3+OJotr}Qwu?asDg|vIT1QW68C{}OGa0R0OILas9Y_nNPW!0YUI7T$$N&$^q^VE$ z!kBmd^e`_qTR%zx0Dkmis2b9NzL?rFn{G`Tr)UF>iZBS=L3OKhDJNHn8c^2tBOmi{ zhdRzdj&OWqt)u|JTGuL$a-d@!@TiAAzA755;_*<0S~7Pno%SsQ4Jhu99n5Ru44Cqi)wR^Vb6|HObs zHSpOWoG#1^p}?GIzk8$Jfmbh#z1Th4F^p9?Y*YWnH3A>RmUbJD_SDc~~ zkr>2m&5(sA6hQ{z>Xm^@lOi1?s0mca0&b1lh6vM^4#OH&Y%4rl+D16Sx9!4in;>8v z$RGs;KCnVUAcF*D!3-20L?k+KidR$@yN7{BCsKtGK=jnUitUM3d7Qtn<}DxXP-}ZJ z8xC=V0~|-bY&qi5Ss>em3fGbHYLJ18Q)I$A03NW3kD`NBu^138&O|6!@d{iJ0~xxa z5Pp$C3|zc|6`^P?Z0P{tCY0pMDPA!i43UXb@QlWD!Kt7^(1lD8*2;+KJZZwc&y_bMrN-%^6}`nWTDF7#d0Vj0SGftK?fxcL72PH z20*-6&@=uTe&f7fSht}IdaiXp&7kX0@N6!~xN);|fCp9(I@L^lAgiez1q-nGQo=2jfoX_SXiPLo$kU`qn{D?UZlNNk8)2I9P6M*xC^6?c${Os>4;3z4FexL5E0r{}Z(jbf^~{9>>f+ z;KA+5x+Cajz*a}Kv5QUsq6^z12o;)hid_&Lp4HgJDGb4Ng6p6QfapZcioRDL!<}mv zf7(2lELo1D8Z`AVhm-f7?!Gn?8mAZp*LzijHVh&ZZ)YmjLotXp1dAkH7{nECJ&z!Qib;+SkZ(k<|F?jjRrpm!1IkO^E&+q2rhMJD)_E;D4}$HI^1 z#1mWoIDJhY&3`L6;z1#PgkG}gz;?^6xr<12p;cc?q(=Z9!mAp3xK-%t)U2qO4Ui08m)z%oFcKx=X1hkk(z zZD4CcHHp8ofPqMS7&Cw05Duhg8P!09bs-OuRS#BX{|Gu@Kbar{>cW5pqHupQi+lkM zN~js62!ONW7o=zylkf_MUy7QK=M;V~89vQwS` zj|c$`C#ZW*bs`EOR6W6p{xEq4HX=&_00k)&2vLu?5*}D$V6DBGmv-| z0N@<#u}c~e2`lkHrFa*ez;h-wjK4HYocJ{D@K)q77g`rv1QA<+Fe@|?0+|6e&7TL#e+bZ}v|VH6A@B`JV?bU-6S z(-KYaVyTh>`hh30)dsY*6Bi*Iw3cWh)sP>-kS1~vI&}~_XO*$lN_VLddif;hah4&F zmIu)jG~rtN$4Wf$9`GTIC?Nyk1QF&_5v$ z=?_0inM>g$q=7d2eU#2@%w} z5^{$SL1H8PL?=P=6CbgPO<|dF!I=j!{}soW7sw!B!#SE%GjaEsiKiJL_wZKXfETQ( z5vjr&eo`kU;g34z54QP}+(;Mo(4bP*3BS2L$RGpLco@ZL7RU(^Klu{O*%KzkTnCW? z777tq(n{B<5n90z%qb-%$_jK~IMDf$gJ5suSp?=u93ufSJW-@FN}~|jnD99!gYq0Y zpbh*K0)*ud#z_pRvNUCanY6QiW~mJ-i4h@D1PCe_ZBP&edN`Xnj0!3m@9o}{WKK8LE9N*om-rT*{~Q^OIj1ptvrD*(VT z6BhyjR~#Z~of9K)AUQ5nF)KYGnssq3%j%{bQ;YywesUTbpV*A6nOLNuB^-h`1w#<- z2qYMx5LSv8ez#Wi0A%d3J=5c?UBzdJxgD9XWjI0`+j$D%f@o!NA21;&n@SnEiX9!o z5yv>HZ*vk;F)l{>Wmr+Lrr{3=i>mv&8ggQgMR26_(l)HoENZ%m60(OMSx*{2CoN}{{@}dA!Bk1bU<&&A+ZqAuVn%eL18M)`4l7B6r&m>twf|- zVx*P&v$Ms|vFAYr!7@`sQL_6IA-tm_Wg@Hzl&2?=vVlsOpDCg*D>l0j z0>;^rNV^%w$CNmW5czmuOJXS6&=VsPBZu*V9zxZ9tLhIVRVP(}s^!TU04uycr?$2G5mF+n@!=2b zL9QBcjcrl9b&`d^A+o&M6^?rlg*z2Xdl*ZBl!}Wo2l}j#s~N|KZj^fvPoZm(Aiw7k zsKO{>ff^DV;wW_?|GM7*4?so~?MgQRgc+-=5s>;3%n2_CM|!--;lb?@!Vk>A>Il8GS|cA(z3LVrSzw+ivAx>&m=U3U zg&QQgY8U}*zFq^T1xgf7@?B(vOe50 z>+n{j>%K(c|Gj&{!aD_UV=2W5F%UEL7RPt9_7x=Mi#mx)pm=y5eW{a<38?Vlw$0K8 zuGJEJvW<}t3LMd<5=;ebIS|Xdoe~iOLP#td%)v`SBUKi{joX*bF{&~O0NSjo$DGUr zp&zqKorZ$QAEB)>k^)7LT2=DMKSCODgC)BW6m-Bb9Ffb>gH4?LG%@?KS?n_L;9d`U zG`wOsP3*9cIFI29Cl3_HaKR6fC5rad8QYU{w!9aXdtldrz|2v##6T?s5n7QDSS4zQ z90D#r2O!&NoouRmu)Guv!z*PmYkT>wHGL2_{Uk_=(&^F$c8Dd0!zNd;=%)gQ8vR9v8*;xti5 z%9nC{QwL;_y*(_F0+?)HP;8EPVFuYtR6(fNi|rvY%+YsPI8LL6aD|A8;-PPKsNfYg z=#!{f@XPY0hkp^(C(0_HZQ2;)$v=#`PQwp{_Z2eX`Xl2UtKg94hPUYP%dnL3+2heTb7Sq_K?Nm?`+iOJ*XYC>OP>ADz z;r3PB12j2;LIs(S;F%~(El~s|`QR;s+NRyiR8!tF+2I$W;Y;~w=F^AhLkxg05&7ca z!$=H<@XUbl<1214%u?iTDtMu?n`<==>rEl2C|Os`Xeq&x4HQy>Qlg?fk7g=fw*J_aEH?2_h!#G} zq0tZTaO~eO4wIX1Az;|!R1K_Pc=RR%S$)DB>9T5>@CwyEPRQ^InV^9$*95dq?&a<=?7`Wl%~58< z?3Wb|>;UbPK@UwXS>s?2MQ2beb$f=;mIbzUG!b?OuS)mca(nh=ua59@gWpEJZgjH` zpEz0L&<+`282m5~>QHK?9_J?~13Y|E)qo3-*Omm=Dl%sXq0sM_t~u`Z{|cdib2^vu zDNph%-!Y+XS^l%UOkPrHR z`T2kk_An3d&<^Ra=CC03FBgm1qRXml^wPD6^jpkG@C2m&{2 ztpCn&uWw=JJKEr_DR0e&zcuIX=a@Y>72jmd-~15|<#SgA;=5PuG5Eb=c>sq8c}8F+ zhGJpnU~Q0G%;j9sm1fk%X4jP&qy-IdwhMBWTCC+-vNdc0CSt5#{~9tNW_a-XGFJ7k z01z?&3?xV}ODJgm6fR`g(BVUf5hYHfSkdA|j2Sg<UN01>ib^>rp& z5~8+}E@jT_M{k|DZ#i}D!gVWk?bNqA zno#Lth7O=Xkvg4vwF_A_m)hv8Z8A^?o>Q2gjwW5&^l8+)04zn_+VyLhMF7Emt#2N? za^QaM-YM>!yL$X+4=3KV$?W3El`GtQxJW{k+NwcAMr;?Z|5vO|oeI?{Q>I9f42>V; z!@+s<=^d0AG-$k`@ZURy+Ro|~u3f~CL93<>_A7x3D#9OaUKyk_0Ez%jwB;If@IeSA zsz!z`BDC?9LC2hO$QkEEa>_X;9d_QC=bnBzlySy|s6dWJ99hEU zFf;sXO$+scY$Zp9w85hwJQ~u56+jSFkQD}rlyXWcC!#`!D67k$RtZk6NHYo9+*8(7+s+Wg$^C4wHDiS1D+8Y3I#TJq!0i; zc;Rf#FoR*!D77>NJfL;x6aczV*tHt$bwC+!_2qY1&upW@s8@m}l75Sbgyjo; zwijrDk?CY;wz7!is;bitDOR-)21JLp<0g_0|ElHo=#(xl#RF|3Mex`fh{Yy5gf7mu z`|yZ%>=tovcSMG9$Q`6Z+{i831&_3H*3x4KwuzaTOw33tg~FMxJZ*yOK0VtMB3b?Q z*EEFvp=u&YRqJ`Hl*5fPywE}g6_Dtm2H=|pUGz)M$i(#7TfTDR=3AwsiRi0$3Xlz} z$D1uW_&)OtH|*Xek}jl5L3!q_Pj_kcX?+EN$J>|Rr6!xdJgtME4^xgmARoVc0LY*X zorvH3yu~&Hx~g>vWZ+2#F`(5|BNM68fgy5dC@sigb+|A@7NjCT0ydCViW8xv=m5bI zrZ6LhKq2H2^kztf}N>g0cV8-LCmi}QuNG%yf`;Pz41(j zNP!%$n29jP?S*VX!`3~-7HG5WXVn(Wg-Mz|AS}cFxE0{bYhCId}q2Ga86K)tX}}A);jB%5=1KU zpg7V-3P!om)v>}$5HqH*6uK}6q#~FCC7H<}`Vmonlt_a}K{iENHHn%uSK$HI z3hMDjS2~;~G_Eqj>R{ETntr}YVwXay+JxZ%e6`iD$y?q+LuyzI84IYGg&Hy7r>mP~ zOlOY$7-#=yKJ?Lar<}!5{}QXp+H!d|sXb(u*1C!`UN``3usv-62bfqnYJ;kst<_H?mu z0N}{WkQ+)x2UUEdVBh;7ZOEWk_dS@g{CK9T-7XU2JzOg~$6tp;af$$#?+%A}Sp+u- zW9N;qx2gevWddq@6r(WYQsICKKV*#y{!D06sMCjqxIt7nrHa1=lMIU~z4@!2C_wCD z5gUk*CN`jOv58~ls0OY;))q`Is-@ad(1Pvrgb0X?CnkCFwvgklcb|M3%uV^qhKk9T zSdq67(BZ$)(}W7P|16PPN;8+Rv+tQ{li&Ti`Bhz}5)zg8+Q@0526D#AsiMgzJR|LW z$mMfuFc#xNHwplbB+?ieykrqRq6dklNID7nFT|mk(zG#y4g$StB86bcIND>F$85ku zOd8Y_;pn9enl>MQdetqd2E}G=s1%HvLzE;aIe#b!B;48}t-fj0sx0i*bP3VO{!$7y zTii^%GL~BWgANUHFz#Kl;HB88m_){P6d3SlVk@|H&H6V0gnF{&0v#T;da_c*WgNg^Fif z;~VF==d5~G|F#sa!)E&TJ_w!>P4l}n?_;#ei?a`W)B{B8NXI$KF^+KPW+yyIL{GpW z4sw_S9qMS&JnWGV;W#Cq`<%9}wjqpEJVFjt@EYf=es!#8UF%!tI%IcWxE<-Q}uL-A+_I>y19p9EqR zi1!IN%8?FtyeLL8sc15nEh%QiLKAuLLcO~FdC-Sm^rPpT2#|0FL5PAE?iH!oQ;Q>g z$YULcXFPAhfev`wV5JZYNHgoO9rBl(y|JI)b~+9zN6yBSA1-cb*|pXA_pm6SDV zAqqj9|6y6A=YIFS|NYOapbBz0L@I>g@rCyGe3i8jKHNc$Tra&g+Cf(grH3K zp9wzTfez%0zn=gHa0mx+5QlKcIk^)+o*0L9m z07zJeq2NEKz?haZ!jssCctD3AM7(eyhjUN|cZdgiu!nodhkcm5iQtEQ$cKBVhk1Yp zc6hrTOg?c~hkD>biok_q0;?kn6J^l6JkWxU>AD(#K}~3d8HAb(JcNteK&?AHLGXlH z|6o0BiZ9;^A=t==bU-|EaK0DO2R38~n5zePSO;_XL27^mpqK|GWC}nCfsqTvi*Ubk zs6EG12N%JIq>~8`X}fed!`%P}bclynbO^g@mv<2p>+^&^(7y1i0yikX$f}%Q%swRW z8?I9UCn!eqL%&{9ME!EG(!d9F*o|{|2YaZ*jK~LhP=^5QiE#i$Q!I)sz>;&^h#Z7J z-T;SlXoq>ohtpWQcvuH_$U z$%?3lY}}1-|44^; zILYDY2YYabb9hH~xP`9@t0_^2R(OOuyhE;g!5AbvB7(XMq`J>T0x$RjLqtSF8nHIw zF`|%%anuQNz{Q!Uhezy*bpT1042fOPzp;#neuxKJ+zE4d2by${ey9g_SW8*p0RUKn zN*K4|V1`-%MlaaDW*omqFu!UNNbJ+TgXF+xJOtH~#y1+Iflv^uR0)3gO17*Aq|gVB zY{0iX%aFjBbMs7ph=;7)iF1<z~^aEBcX20iG7oG=G_h!DdBM1$-)5pV*9C+=+7F zN-DvJb|}r9I0t$p4xp5}Dj>?O`?^06JEX)cVF*eMbit?egt7CYGy}Acu!jW%2Y4`z zd!R*kxXzO}rc%7Wd@u)}BSJBu2L|nlb`VRZ_|4#q$gQgZ!8}eCGfY7!$i&RL+;oG~ zKe9Vb-Scz?b(yW_EJe8@_1h|X7W2c9?w3gw8Ux;kfsMiYhAUkpyb+i25QX+WN6fmaMo`C2T9dejCh59{|&r0{RU`VAp`-d+`)yK z)d5}W7w?fM?pO=B$xf3 z0O;A0=n}OE+NlVEA{eb|P`7~yGe0>JD}vjHU|WJf7tbn)5RifWI}P?akB*fieAo$G zZNr)^f@P9hs+bMO^@k$?fGkOs8<~iH7)LN=S&eX6ujRLSz*mmgj3yX_Ovsy+?6wpb zgiydL02sBbVF;hyg-ij2RKbHxxs~i}gXYZ?);N+I|Je+x-p5Xx2T#hxQevrG+orrGJnH}L{g&^gIpkmb> z2-PWJMZSpG)rn^I;)-B}mxZ@`%?Xv|2=&F5#D%LPxhT)tH^t}|XrX21pyP$G2YNN0vv=WBN77FLLO{|110rn4!wXN93zh#i6M6bNdfrsKB0W}sqina10>ZHRse zV};ObkI>bG_3QHhY}2?Mzz7iJsNAW@D#22X{bFo}007DnwV9^lB)02>2(!#ikoz8p z8~N$a_6Pkg2;EkQ?v9A>eu%umjPX8_@`mZwW{47oJoMafXDr90#=Kw z@T?R7jHJDkyLF1-wj;}2)r&XRL-Nk}?+Peh7ZpiR#vfU4UD?ys~}J z32^8L)yUi#ZlQ&MAr9Y={1Pwoo@=ne12QM`(b^IB&1(SoV~wx}oiGRab^!V=ja113 zDi8={SqRTkkTS=EQBvFf|G?v825uqA831z-KkpJ=jA**IYi1r5zvdQ?T>a~FJSgk{vU8k?a+%0+IYQWP zhKf_*;eiNEAzyCR4Ho~HFC@&8+9v|5bx$MB6eqgU(gx;?leC&LD*`I#adLeQt zl>klVoSZ@Y=kx65aEib$RGZuxf}Uh1vwl_;x#p{cHTp^;_BiXME8Y7&&(JcHi)M4V z;Iw5pz0J?!>{RCU_9yg~nPP_t$Xu}rgOzBv#jk-)Y%P%Y`+m>BA%u-HNW`x*bos*& z#NF}r4`(G?soAfd4}OQ>`qJlrx;m-8ovJ|zje%%5Qboj83{+O49XfTN{|Ze4SDJ&X zw9l*U4j;OOGX#bkXNEt}5wGz>SMMGclsV9U_U?V3#ag)YNiIy3>6;&eaq5jn5u3|y z#&4s;8yRSWmyYPBeRQCREuHbHWu-<>f2<-lTSdUl&6P|NV7ScVHdG2J~d;^vF zH>Dsdu|Dcq_dm0}sCA0SuWmWt=r8NB;g)T=a}x%3zLEAb!H#>UL$4xZ{Go=a?@LM_qq{tYKt$`5z{juTX#=(cb{Wy?S|p=`)c zQgq&6^W(SC!hHG7mYtp??aDVYXYd|ELY!q6hM2Uhm7cD{Tz--m5dzEk%VwDb(#`I_ zv_vo#3~aiR%rgfk=Egax4NARO7K2N5GwaAWAW10#+n`N`nF5API=!^<*}6ji(G+=0 zuXD|*$j6$LqdBuJDw7|!(Tpbxwl8lv6GrD`JX`_h@vKAf&1MB%s{u8zWqhDv5MdUt zd4e!&(C2i$El@=ke%AAX4D`QY3OO@*fS@HC%Aq|#**z+Hg{;zJTy2k)F6%bA8$P>IsG63UtBn&63KZfx#B|M}gX7lp>8p zvdm=58+?R`c@JXXNG<03)~cNf^rsW0_z8J|fx+3%1-XAJ zq)V^mxeIpxqkXa_KKkS9aoZT>qr5Do!{~yXF3yho4jOOA%7@;FEEJ2VEN@wTe|Q_u zd1<((RogMEo(YzilYX0nrItVBDVdwsR%ewqoi(HcJu`NCP}wa%UhrD|Hn(_gf{F0- z^%pliXQ>s6<2auW3tj1#D^C{QL3DpCmB<<~aKANK|8-q#qNIUy8bj^N!a*#$daxck zJ+-(s&ThL1lyBn?fiqMVul}XW(b%!|EXEZ&)E(5x4pYc4XT(vgU)cY7;1sWJrsyo~ z4jbic0mt>6&-f0d@+Ea|#)G>)vt6A}TNRqfmrJg8j!&ALONfY5n?(Kin@g=Y;C8$a zrq!{K(fb?oV`GH9ba*iB=ec%`zF_8>9Hi&sj2MOKP(6lUgeA5W~X<1lNzhA7p= zR2&m3ILcaiT&U`fY{9M`Km_1LfQMoIXnW zSX(KrAS>v`NA0SrjP7hybEig>qR9Ol%XAl+Lp3V;k>LPr`gz}vrNOB5pgEN^iwx#2 zcQ5&hQ69apN?e}VT%+S8zBbK_P&{Mj-}Z#~ZQSI>FZn_npkL_(Efp!D196r0n&3x= zZB(8d6c4UzPO<*alh*l%3MN6!U4!D8w1-s@%L;{3Z{?vU1+flan+sL!85I5N)iWtp zwUs!6wf%dy)7sm$cJBNMxWqbwjdF)z#;`Q8j0MYU8cn(^%s^!0hW|fnYqb}zGneux zb2*EkUHug^iH_HNuQ0KsD%o>In^mzPe+d+hVGnc1)gx(rw1t|u-#gPul)YI%aX3*< zXVM*Hy$u@TaybI*OL1~Wh8sE?m?VdolRh>R(g6;?!+!7&^}@ zdRou{MujDovu$jp-5ymeD0&o7&Bl=rW=p4pI7|gHdMX&w8`ep*7Ji!(VICpve&7r z%_-^0T_M3uH#YKmVZ4g7|`Iz=PlwU{p z<)bLyrD_2}d2{tW$*k0!i)hwQ6rpO}l?S0o%8)5c*FnEdJS{nf;NMM zz-|hwbyKn}rme8NNgg^D$M&}2{dP=Sr6@8pe2SCp+yg_xFQJS{IGKj;Hd$)(0)*)=ZO=i;+F|68N!6|S+nC4wxcoc zmZtR4ux^HxcbWuYDmAC5)2e&V0bxOl&)IU;y~UtgyQ|5K&o0vg7_pUkckFW>p?ZnU z=Dd^nbkvp+SjNn9fYC1e{qCE=y~mSHI<)ULiz2+&iFJ>G@b$;^HGd55eRIep<)Bk_ z?twpA#z@INJ>RPw^LBzXUwm6ea+R=V^~FxQ``YGdV6=J_C%PwW=q4-Ez^icbP%cS+ z!iYRD&531;flz+Ti2TX_DyjC`ieD)y!q?Q#g7g8k)| z;GpA=4FvK)O<<%l6}mxh~oh^no0>O ze7>LMQdZm2;psBYAgg{N89Gft<8s-QZ8-#)ASQ|28AO`RslKx%_HtWs&}rmvWf6do z8mtnZuv0qPR%zFl)<8u&;}8yVN~dtBGVQ=s(&Ph^V67EcDO8m*hqHz*S2q+FdW~kR zFPG@r)(CXgmeJ=^Lz8PD)L(L_G*)R>I_t`ih;P6%gPeq@s&yxJ^tbf*Fod3JJM1c4 z53ZaanvqD5qM{Aqyv5GUzSR#oT#OYaGj5Q~^;;}O)yBHJrXqUM&Y<{CZ7xp-ePb8% z@S0|T+lpoY>AGnUy=z&?ow@Y+VTjm%beL;^?tTymUnKskMJJpOz0eRe*6FTp2f-ET1ql`-_|Qplq#)=9 z4%;l8xnLk77*6jDr!#~{t?<%H4Mcs~k937c_PH^4;;?SS+LEGR8VH^s1Ya>ouy;@d zf-7N)>ra61Y3!C@RsRsG&V|utzjB3}4iy}z`59!<$g@EslJJksP$z&!FTLHW_gNVf_mT`6f>WtuP9jxl98jW-dEk*EZfS{dlddN}gE%>oU zLv*|veYZ;u@o}pz-p;@a;cx-*Rs;{)lbWH4R4TTT3BlVsC^GE2?oVPwE`H!K-40sjWRRZ$!EA`LQ=`@iLU73)y{4M2D@rKtB(gqG zquYS3==x+yz3Maaa$IMGhJm;J703gV4^{j;~0{f&pkT3N7G0 zj@nC<5z29mg{7U0WSB^AAb0@;J)SpZC!DKyu&L-|rnV-%hxdg-8F@i0j78}EfEV9X zbM3_azeDrn)yYEmj)*gg(cP1J7S3zoeea4CWB@G=)}xx^2Hvn_%a8=EYpNF)rQVM_|?%I+f?=6^h zIk~M?O^$omwV7BVer@Sq@Qfk;NjvO$v-03ZC;R8DL-Ry~kd7-fKDuDkuRkF;W-U8j zExY#xBObx8U^jTs@Sn3$_zB7!8egcNoQur+{$nDnAAcxF6HAOQQ9#6c(0pa(Pjm)h zQ+kDfsAtBHZhv^C+N$kY?DX@jAPO(ZEmF@t&4IUH16&_Jb%Y-hnFxM?7wlhN7^D|D zm89m`*lRypxTa|vN|0HhL0#{OoFc+<3}cyw9deU^A!WsIcrfwV#-H(zy>zR`DKUP03~TrSK|*UhpXaNn_y9O*E9s)9d%XX5cuJZ7E5^`d zzy72qx%gTI;-INlsumLn(#z_4d}{W1YWm@mHjNBYG3x_!T6QhRzik+Fe5*zq94~;C zLbLOtfUzo&&a|y7>>8c*8!UbV{NEA;juH;R?eLpqRnzp6-jOE< zI_hXI;`j^Kc)Wk5$p{)aae=|L%2gCYJXc*ZBRavKOpKT*p2uX|wZC1p|1?2qi&tG6 ziMcY|0C`qlDL&pP_Z3qoO;kI>1h08Xo8n6KqR6X>5gYB&oEk{AVbS*i@E{NtU}-n* z)uR0S1V(*QM57_8l`1J&C!@rn?(fHZg3u0;3S-bfNaAZV4g-?MHxDEL7BLQ7!MCmV zS(cy-{!TU75fLavXPi=j*Zl}h4R00W9XOI&9qh2(8o}>$o>|gyi zu13d_XgzysFZbkkBK`w*ykCjM@Wo>d!dBISp!?tdo0yJVwV?(noZm!x($?o1xCG|x znvJgm4Ypq&y9~%F;_JC{8)mkKCu$J;+p5L+WQqs`DM=as689@e)+5zo`9SFSinm|? zH5m8GwHIV2c*SWfV?ugS&WHEQ7|v7B#tx_!&rBc zU(f!Ol6L0kL@gGGm3*a-wN1;;m2Ylac<{!JIJQLx+oKH@QGoidp8zg-9C&ESZx7p_2~fbPcS;~Yur$oNb}d{!3ea_T?3I4IJKYYlJRI#S;s zBICYt#7q5}#AEnxvvrVl!fwvhwd{EDEbTu1tBy(G@c0kqX!+h#+lsZZnUc_^RE-nurjOHfp7hMlDz-X8g;mmlsq+HVY|l(~x$p z$j-=!fyaNhPG@6YI9z96jzlPJw}Co2l&FId#Ln>cXOR;W=F+Vi^l6dgffc0Crilfm zAssOXB^UBrr);J{rO$sq($h(7z;nn!6ED6Arim!rD$PnNJ3M-s-ue2xsO;&H_KD2D zB~dnUQjnEYEUdTpCo3;2*rnAm>dUv1Pa&Gb&UK4*Y#S3kVVHMcCZjf4%Y5g3_!yKw z;)vXUV)S>m*KqH?F%7PY`f#=S9Knb90mPEOc4%wVhPujootDqxBh!0A+pr;iQqZ?2 zTFWZYJ8^xJ?@spwedqxMpR-Ssk8p=X^e*$=d{Q*_U4U}Ur`zZcgm z{GCC>GdIN1Wc1~8cJVQd(!)*X>fUFR-aH3=mtI)VRmW5jPPais z=T>ar*5FxEhD@;sF9WJLMl~d@30AIh?T7vQzVx~b!6nu7gAPt#?OA2pFoYYg8jDLr zClv~DKqQbb$_RmdJ~tU=0k6j^Iq`sWz}e6PmycS|afKycDvZiSH&4*AE9f_stA3%R z$EVIPYBz%t#ju~(zp32~E7X(eq{A00WSqNs%%+UFMzqrTQw+t`-3+S@>ij9=w5a%J zJjXanC!E2M5)o4|-Q8s_l24eo4#^?;?Kx{PBn0-+myDh+Zbrf=9#b!ICjQ z$56`$h(x37e<^MlSWAV$yTR9~3=-~3{YQ(nElg6*!yN4jv;rnvouMm1EOTT{W8fMrco?b&QUSwLQmI@y`U*q|l4iD--u-jBIgnA7r)ycGY*BwH z$Dj!;*<&2(N>t-qdDhwEJSCA-6MQw;;_L~5mR_n!q1S8KlOpf_Qca1Cu;ffhOe;}O zOD$RFOv|iCQqRck7U#?;oc26?t+2xKbl2DP1d|c;|I#LOQw%(@|MhOqG&%^xRm65vhsOH``P;G zdfsQ-sDHG}_6e-{%Z};FbYGnFZ1TUjmPFC5xYv~AuXwh+qg(ZUy`I17`|cmzn*Rvv z^R>WfW%~7?C7b8#!Rt}e8a(9H?+jW%wpr=k&QT%gcZ)^L)jQ`Ji126UyF@b`)jgebh9>iy@$JVN;HV`%kNIgK zfofM@as(4r_A5fKGb&q^e}+x=~XaF>@Y2oX`nS1 zx7nUOfj*VWX8Ol8ocLF3h+{^%Zdn%YvoXuWbel|f9$u^2 z{Jl=5DXz$YfGJFi7vdc`mHsnGoTIxlFTi$~Sv4NRCA7eOVMyOc)B7+RBz&Onk<#FE z8&^XtjGS4qPpk+0p+fJFlhE(uHX1eHAYgdeHOc6iX`D+!yqhLIhq0scFliRrW(#jn z5!k>cR_lG&{%ssX*peds)Xs;4#cRdv4dSSFX>3eXmM;%N1M>m*vTN7#h*J|g(_4Zc zQWh~uJ%e%zBx<6yi8$sn?;dhWV66WP%YvVkKZT5K7rC(W(Khzcc2+!~wPcvjD>KEV z50d_BNA1XJoI=;tmUrsy@%ZuTSGqU#CN7p?-d*+|~*m|3d{=e}@XMu&Q z*87N51%YJW2eql$M{L@!7pFyXyH*>|R1O6{PA|P1V@?S%6B1Auu?m0S*c#XN$oWJ$ zS!QRF-Y54>?|bheM>kZejDD@|ALa1@<5~3wMBTc-h6J@ojs?hj5?+%f>&9O$C!QND zb7A=(7fMs09CAYoM3KE8zc%teDl}Dhw4OT7;BaurlbRkTGb;QG#ZQ+3f}U7+rltp^ z6_^CYx*qwoHoDUE(a#+8<}C7G@_FmQ1T|{!>N9j}Pw0I*>ou9g@$wIQNC@6kGhw|z zXOY7@d7+lvvM!4vLB$ZMq=ad49&#!4uX)&lfWWs$$%P(NF8I4&c=>Y&yuya}%j(07 z0_f5z^Elg_zFL~au%Ts$d3W_YE2wJ*@RQ`?A?g&)3&kqdyb{|S6oCwj_p5eQ+X_zu z!5Q|7vuguEvUEMS9_SME2h>`_wFJo&+gK|mu3*Hfz(>v)gC0(|&H4}JO$t27#|HB1 zqtom*G0$|Ts=tg6>uSqt@pe^QhW@psWNSEk#CfhS1GV^>MfIC`AF%lEZf)zl zvu}+ZuIiVvUO8T^x7+J|hM1OhbTnHg1d7*_r!+|yXIv4oZ`DfQXY$hSlI=uWiH?1` zm^Dnd_?bj2T((!R_A!b|BUkXvS=ieaCrpa&nPa)yk zEqy<*aUYhsoJL}$I;&N_6vf{6_)3blCV7}PC+kd zWmM@_vnc&h6Qc)>M2C(odDNy8AdD>=~T?bVmU)kSc&s0P+9KAZ-;z1OY{DmLJ4#XxY^5yp{ti42BUbfQ-&%MYQU zbL>ayVqH9V*LtHewd}wBp_Lr?q_MLYWB$zTO(YfX3m(p=X`Bhk84`G0%!5ts_M5H- zGtF0=M*Gi@uYl9aC=>;oktW;Q7${pd^k-Jt6(wxLSb*_@J=1`lupN3fT0#yIsd*`k z@8{+G5W04i2leh3xZ>e%^U!y9vaS`-}B+lbzA&!tBbpl%h zS$u@VdZkDZ#kn;RKMTLGxr;Ea$=$|0&PRxdiTlV(9YxiYLV#{$&#@@c91QU-D)})YWQ7+LS1d$ zu%PR^2)=e@5EX(sNiIW@DopZIhLMT~Mg`8f9je7CMBS>E0o}_{;df;xlM>?Eqo{gf zTHB%2WFk73(XYIMBfU6zzu?~vW51_p9S z%Z{!^Or$JNb>2_{ayd|?9I-RPZ*(RwaBlGw5jq+ zQ^`SsC!F9foe}h-U5dlr2UVPXz{Mp)#n)xgK;yRB|0_Plg`=V#%)wcF(2Lpk@Z#{C z{KVlBLw*tC66hWv5$vRB26ap#4ke?24t+cLNeGAPXBcmG}*w|1*U2or?&AKVgQ;h+?UXuV7Wu=&dt0xL~gu*00P1y7W^y?jd zjIzlhN_@qYG=l6nk8Pd_kd)&vDSC0LkhFIP{HR7iJ)XPZF2t5U+pwKR;&g$co2dGqO5M$AviqcP-_ZC)%P-#fz9j2S9f0T->G6Uav z_lzW!{YYg(Cw(L?J$W>p74$lijHgsC6?^l%^!zP3Ba9}@PSYvn)leFvJce_~iIB)P zp}V{r1%0V2UKqzv4~8iG=2O6%G_x!;EzEmdZJW{$VjRx1vt&kZ=Cz%qy2zt9>BT$? z^ZewWKX!iZRwx=1mKPDm-Pgg5VVsN)D^Pc(CxGV~e#s#u4lU|$K7evoK9z5Dko&Jq zJ{N8KJSDzZJ`dLUS$^iXc0m|lcmw|{#?D}zeT};0k~oIu|K$8Dz_W}xH($!=w~jPE z%L7cvBe#?|#NVB;t`7wj>`axMR+YR(m4YjkqD)niR#mb^Rf;QBs!Y}DR@K@?)p{${ z51DFAtZK}QY96oD*fG^QS=G7~)q1Ve`Z3i#v8oFxs*6~uvr~Wq0PHs&jvjyoU|13Z zO;ZzfxS^(mh!`#o002UG06*{pPal+Y{{;ZAab7)0f1TnXa#^C02l&*X#n^P z0N()M2mr1D080ei?*>Q!fDQn-06+);!~yr!6`%_MwgBMt|2F~v1`voF50429egFnP zA|fLBA6Ohx9C}hxZcfa&mTdzQ0)f?)+FUFYo_>1$+Q1f2wJJf8Ys#eextI z2>bNuQy>C}h`>fhM&1u*6m#7Fz+&U#fOz10LV{1C4;sB^mu#1siUrbuw6rvAS{iF6 zD|aThA;wTVTl`7(6Cel3`5#zpP7Y86y!anjY;iGBDN*(Rz+$Vbfkwcw(GlC&*woY% z-W=ZCj8%E50(1Z!9UYyWSZrtK+qZAAZ{LD?LA|}$7w=zC_froIVX;F)!^6WkBRDTd zUt-6`CMU7L6reVxHZ?V6Gh*4ozAu$!CM z`vGhNirb1iJ3FKYq~b^7*rOxh7&tyYK0U?SpV_N^S53T5y#60p;0J*H@gw7B#{J|a z!IIEmX;`oX~3otg+TkSSN3+_Y>@s2y8?gHZB#Lnv2aX z#uis&tDCXS9oUZh^BKYpO<|`NunVi$)otwdG4}X7_B$4fy`TDEEbxzr1=(5-kMo#k zu^wx!7)pY0>J}s0?lmCgGVW_*yPrlf@hjkQ;1;Xchr3>Q;Q>J)$OdGt3q<}=udPuJX8~vWk~+f28n3`5YV}5A1GC`{WsEhSGRjz zESlg5M{M5iwJhxA44)K)4tRjuRFeE+$-q3;^%qa z%T11{Hss>!4<{_NDnWs|J)MUO^(IZW(>YaoMm(9^&ny&Q}B-F)ld!`FzqzqL{#gdXQ1;?BJtSDWgsynnc+W zL%-OtsPE3q=(JZ~o$qasa9$_k11gDsOO~X z`0VY)hbEJzt52>|dTevVKqYPoPK-{z4bQR_>fZ{#6pkV+xh<5^8}e#SS@E!Kq22sU z?G3T>qx9ee`V#Z!HrxfS{7{ELYyQRVd129HtMf^*QK9csQrbwr=|+coN(QMV1xOu` zR6aVZkvS|RLW&~@5m~X>)l3_GIdZNBA$+l%JZt)Qd*p7hAzkKuCvrCEIk|Sw+`s8^ zP1=Ak2jd6!-nrZ}L7#not%vTH%uk0)Vjqoa6<_!I!Pgzb4VUmd;yP9P`-CA9yNo>B zuLTrkx`&f(>t3s=(K$aF8=?ByX8weZOGF}dz>%7ld1>y~aqFnapOdDm2X761y){xc zOuXoLa|#h=7%m{Rwr>6(oWIHywMWQMb$5Hrxo>@r8GMF)hZ9p>No}hD-@0{jCLWp4 zn9%ZFdwF+z^5*=`v+MmUYE!0knVgR+?sH9>gn9c-sw?1!rS)+sTa-Iiu;0l9~(>_ew830KcZzZ zoBjuIWUY8=$*jBDR`YXnBm^9yzM8a+%Q@0b>&ejehz9 z5#%>yAXE>oj{UnumWtE=g8(Gt13na(3VQ*{sUn<&!Xc)EYibOk1sD$wyl<1%&NAS3 z%%QGiP?kQQ>XmHztbb-}T8)rfp@8x{6^FtC+P4^$our1V$`!!UK+N^#G1K>gF@0B* zcf(Yi;U+h)_nx|LH;w@Ed(rY#txUwAzK;y9&7swT4ADHPg~txT7E7JN=kb|fy6P7z zN(6GU_Ne}b9BQ7iS@E@T?8oR^lfsK@9-2zWcyssfwB;*cn)%-!6BVv2gh}gV-p)-t zS98diRvJ;OGEQPbTvtKK4o|syrp>1$&2kEsgzLnK*fd;lWyR`|Zn_Ia^Xb*ACyB5t zMq29bSb?^*1m@6NDr$zoDwzk3#?L22iZePGyTkbPaoQ>r&Oi{}btD_Z#Nx~FA5Hdw zjS4Stz|_tgAR3HX;?)Ilb>A!IS7YjC(vBcCf7<5I=_Xs=YD^J_I!!Qm@DWrDhpcxI z&we9*a?y>{ASSk6R2sy)*7JG7>Sud1<+1cL7}17x4Kd1HQ#v>+Nlteu&tpU5(Vs37 zgX)3KIu|&bS?ZS+?8?tBojD;1`QwC(YCthna!fEWd?mdgh9og`#Kz%MnmGfC1e4eJ z&?RN{$m&6v+N|$3a zq4d3iUq-mTl5Ezm#SlL=#N+pETO*L(rmHs8V67K3zbXo$>U`Il5fZsc+SJNa&!=bB z2~8F|+hM348`9GIJ5OB)qeuZp1cT?&@SfK)PcM%Ms#Tzss$)Os=L^tWsij0+-AuW^ zY|Z>ODs|l7fQ2{9{T5OqPsyBMf)P&nuo! zv+%E+k^Uf=W9c7f`#pwG3oJvENS0vFy!rWE-$2RJfAhrFyEv2uYIUknxJFMn=!CUi zcfES?Go~XAGAit<~H0?Vt6jQUIpDfv1QB(e2*Hi+;73`yID1 zwPZ|kJBWMX3(L`2|CFE&o%Ib>WEm9Nz@aT=*|lJ(VlL+3vM@IEkB<1eE&b!odJ3Ga z&V%Ed4c0SJoQ?HR$GnKdw7;`m`kycLh1EyXjgB%L;e*EvoU7OTnIB$d>tdMy9YATr zrmZTHMyC47>kmTT_OuPu~A-eySbQmFJXChKsI)I~mgyYjCgsK7&= zCITmhn%H5-6=byi)$;AvUoWS-MoBgpKM#&CS(5g7vkXT*?A>xZ{1psWr`~nQ;EQiC z;IwfS4=?|_CHpaqK_>dqEGGUb;v%sg+Yw_CfKpX*VAnvt``()Q?pEblbNe};io{Kik%>2t7bZ*#WEiUQ>2YpX{`0r@wSo8@0r0)Kz-Etu2M?}p({e0+$#%@p`&HJHFUScU(v*Y;JtJsqk% z?5BAQK|S{kJ#54foEnRlE%xkn4H17UlF%ZS4h$n&hOTT7eVWrmo7=1yg3GT}=`Bz^ zU}na8Xe&TpP47laK(?}tcP~DbvWTn6LcPWzL)+6C^wYYVk(yn{%E-lQ98k-Fnd{3{ z`JrG$y;JK2Z7>k4DVJa>N3A`^G;0Xn+{9m~@~NB+$C@WN$|X_-Bs9zs7fa9^qdni# zM>^j(QmUs}$rDiMX0Vz~U^ge58;uHBPI7clG>9d+Ymfg{7raTxyR)B^f=q}hpsB># zvl^(Ok_n$-jL@l}$ui4m&8&pYO9IKUFq|7W9y+<&BDRQ+CaD@3jfkQ`#@5`V)XF8< z%@gl#;@z1?!{kt{-KjrAQj|A|>^AYsETWxZAtGa`W5~$90_qhg5okXClR0Ve7XEBO z+Nb)ENq6d5C>W;3;)Q(HYR_sEn!eK=`bCaV1H?>Cuj=9%n9q$?e`zmf6bU|^mQL#lIs3xtkrh$5lMj-lvB7&KX7mhw+b z7iAW4a+326$!-8aeti~Cm>r0ba;#h#31kN_q~L~TOC)Er{AQYMrBlSJWfd%^9LwdX zSlaN9Lzeo}CH*lq1*wwdIjaBVhSKJygCajuXBJqb8ThB^hvnJq=33$<0{rQpjnXX` z^C2~PcaRKOsgzy!{B6E`Z+R1g!@NbgoHKBykL7bG%N&C&4AMT2m!F9GATyY;;FJqf zW}53DpUb$Djry-(Iw+(2f;MP8pH4n4&9ZQ;Gfga%m76i2;|s?NkHT^yy*@so^6CP| zFT{3PVHN)swO1!UyvZ=;&o6~?D~}g-S!%~vkS*L__x}oz4Y_X^i%*>rD={ER`=UIZ zyvQ)hr3=0HF(j=q#Pv|(%KM4gKvV=JT5cfvq*F5gg}D2IWCUwS)y7}EXUVLMCcUj9 z+#N5lZNQ(cCmR7sDmPfdF9>Yy`KY9VEC(__6be%>rzeI4OK#v<`4a>ig0nY>S}sW3 z!%89HOma6mNVUTKhWuG*SxY$)>Vn`=D+_ZH-lGkCzYX;wC~-YNvYAZE?LfI=NH%6j z`W_%@i6Jh95~1t~-OBNi_U!gX?|mqtWZX{ZwzK=8}8+6E+3YES69=TKzdSP|ZY3y)ap=ZAI{ zt@H=E?&FPS)l^r?Wgb07Xf$^>)|L^HNVekAF%@LisRr_b@pvWIYA`7Krpc7*^id%{ z!v;yl@Ty+~IU%weu5={>E$g18K1rko5RlfFe80N*;MQW!B(Pl@F1oz=w5Ldym-zZ; zgGDka3c}{rpA=?7iYiyXxqa2eADC-g_hbaxP$LpWr`38K|5Mk22A%z-tpO1ZS3BYu$~6Nk=9yq&zQ2?lf;|Hj2H%0c`7tB|O9f3E6rvB}xM|bEbD-67rRU70%DikHZ0goJhIqBr z$NnZzg#1U*){8sW`_W5y6!8wfLX~q4PCzLmE(clDgM57}m;jSr1p&woy05W)xD|cL zxV(~W&u*FDGbWoL1>5sH=q(f}4KSehm_h!(435maioiP%4jBPgKVFtl<3be)rA$#P zUGUrf4_EK-D)3FHWZrqw`ztWwIt(x^2;mI~>HeWy0le6z^0^+7@mddB9OAolQ2EkH z2$M312|axGH-|k3*#qAnUr`A9ew1ABdzEZmw7B6>t9Iq z?Wl=TCe@?YifXME4P>vdg4CBiCCl=xb}T{;&11Rn51;_yxjA7sNvQ=rapc+um;ZVQ zFBy#L$fmATf8YSF)r`p2aYaX314I0LoMFL=u>r-gc%}Et%t+KpP7&p6$iRF1KRs9y z6n)dv#lnStCg%{Pg8u9V088`no3+3?~%5?YQG_A;{UzZl#1n5dsh6ZDFq?Ol346*RZl02j7FleossX7_td*1d3_-Whcopc z(~L>eq|y~%Gyl+q9_8`cj6JE!x;s^Vv5<&k|8j&7s6w-0^r=+9OyK?6T4xhj4g{ZKOJ4bNY8ghPl zL91v_xEuT-aBd0@hb*9?$9Afkph9`9Z5|Zc1>0uKGzwXH0v8M*Xq5e=(xCkrG*e;8 zF5jXbFFuzcoGF?s^waA_&b@j;jEnG6x{wTWIrN3HNa#DU-blI3hOCBN?3Wswl&&Yj zCBnty9A8?8yKMoo41wY2Su-8!$&o{XJ;KEzP56T)h!ru`NTr~ml1V}%H6_*x3^l0J zT6<-vEQV&i2>TC1N7G0nu)rr6ZKD)4d({1vHL1lo^faR0ROf4}I>x_Ut`!=zRsy#& ztkG!vdi)^X1*PyfvPrNIu7XA|ALIGPlPoexpa8ONC^6ce&}#P6$18$_4Wic8HEdKY zjd8Gn{Y$*FkMX{^`pO6T01$SVhv=agm*(_QWwh+gC6thX%SjSqLyh2;+K~}-+ z&Z=k#b`+Kb>f-%kN)j#zXxZq0-;gkd(4vp&-p3Hz64(D>M7lx2MYF^TecJ>`=KKC? z`@ac@1c)kuQvJ^{3I1E6oav4e>o16Q&Eb0+k4c$tnR!W(2Ccg`cf0lmQF@nsY^xiv zg>(yS+rnLozzX2I)m8S_V~Lb9i$i54bfzM$WH)MNm+W>scE*RuNbO--({Ro=#vs~O z9^zCLo^)FgC*?+iL3rr|5|xsiO-$N(9CTl4_saMftIiu-%xnFd)Z;QP< zAu2P?%)-a^IJ^wzay3AzKc-Bd(0F6K{ikHJ)sU2D?n3cWdM$&*Ol3O~?&lW+uAjXk z+-$aQ8)+e5>(srfzq~4(*_X(?kj6#>t$5@F{Dx-Au9mc$i}toN`+E*m~820clkByqmX&ly554_<^T(NW3L70XLso@ zxxP)8O!FmZgY$pr)>)~*&wGUMF2C|qG9xnoBwE`Ta8Xkk%&8a&nY8sM@GB=AF#;#V zfYC9^{pWuYHkiZ9tE^7&^f|a+h~pv+ugf??vh9D+Uy|6xj*OHOmC}N&uz=frkm>68 zb&O}IOvZLP_O}dv!;;vo|Crqi60iD;a<44V)u|rl*EtDJ)%#iEAN)jU%zwb;UK+jd zqhb~fl=El?BS{FCl0{8QzNFs?SRfvm!)w}|0{>2L?2Oa^^o!Pv4n8CEg>CvGlfgXt z&ZQ?OVuu=rO`eibcX&*ud{dt94Rz+X@paHSik-`FE@JwzibpNBBSnvn&0gBPi^gX* zJF#eYnJ(3QL08Z7e*m*UOuqoQ{G~~wR_Vc=Xu)YR#11cdB%%6sIQ0K)+O=)p z#+_UDZra5{6bcEK_i*CHjnCHBYO_f#h*m;ICdlvPlah=Vqkb~P8Oyt?wG!k611WV1~--y8`$>j3-_PCM_Utr}G9@M}v=9viMg>NL3zne6{2?5`Lj`_!V4 z2JsZB8q!QdO**WBFX|YTMmHEK1(*tR*+JPDU`Hu4YppT#W!Dl^@An^nMkd3UxC|%#*;TxOo2Sm z3Uwj`sTlKQzkW{=1eu0W!STCQuO-i1RM9hSy_3j=Pm>r2Mmc4b@j7D%mr7kZ<^q$` z1E&zQkR(L?L~&2Xk^s=6KTmQJsarj^wNXP3Jv;+MeMvMCMHT-|n&C`)WyU&dt$%6- z01R7#d26wW!=(^$b$YZvZR`L*50*MySicUVL?r|yJjU_LEZgJqReg&(>a^6_doR9| z$3{GHe0MnGrLYx;JTFDPK++CW?$xgtBvQbbB|Qg(rn`|WcDPMN&tTM1r1vG!lM{)Z z7pkixr@i(yB?%#JXl>^mt!hN!v%RMA7CM9~bQe+(0PI+O$Xrv?i6@x>r*v@l;DeF) z-nZwTxN3fb>GAHzuS!+Ps^~K5HvkaC&Q?-D;@LOR<;*kWRfhU?d9S7SHTuX0U;y)? zhZ!_4H~|x20$cJ6L})=l*)kx3im`(fhz?HBs6q%L1}XoIO=$-mLtIfxV+WC$Bn8Hj z%Ka3$LKX_eP#bg{0$WJFnw&vJGk62LfTRiIsjy9j0Kgj}=q9CE>q9ylo4YhYCQD&T zKH8gM6jyi#B=|&pQly=pYQ{H7$S+6QI0FExk{*y&vOWN1gkZD>kPa1@(C0aN14STJ!wUfT*RpUigBkd3S@e6L4rvIi6P5o-L9KbBFSU6p6ai(E+iaI|B-0!; zwrQEo#FsGvFsFQVa6IKnprk}0tSU?m09C8k|G>G=H5n?8Gx;Vz(}*AiF^G;|Dv1|N ziK+@IbYMkfn$uXQ4WopNJuH&lFAgeDj^5`cK?!I_-BhF_-BU>mWm7dA$j*J8)0qNO zBNtz)z%T_)3z2M5RAM7io|>l`07#@J_t?`l=_z=A@*<~T(U5YsGmOdXYSm0T1;jIqm04`j!Yx^66X@~klKE4Lc4*1f zvi4OjGZ>>#{hA|cSqod*Qr01XsC4Ji6SI3w(`a@3lPY*&C?VY~Z)j#SoHZ3y z$`fMZJki6*K~$I$1!rw9s~X&HHn<|i&SM38UGtRfYzEaA1~quc&G8a)G2K%7I9l6y zQFp65<*rwyQx)LG7c!HpoG1nMzWCK{ZS3RTBB!c4p8m>2vK(1XVdGZ&N)fR19cqK~ z^1GuBPi4wuUhjBTuJNrB0MWB9E}@o`!C`cc61HU5hzYg`qgXEHW0iXG*Dz6Z4;f4O zXZIqzuF!%L8Sm1=O;^;vR;<{?+f)CKRqA`>urSbpl0~e{>c-*mX~Sp=jO_7n>BC$3W5 zhU?rr3^O>uQoR|0uWR5SmzZAJB=x?`e3dlkI!>RwmLBw*xc|0Kiu_G#6g>>$28$_V z_Vlx6eVr^=fR@*zp0-GU=@-CkS#g@HpdG~vLrd;>vJw_yA*TD6D#$L`*>=-ru+nQa z(`=m1>D_XVcS#^7HK;l|ZRsHMQT&mW%e7tkh zF3#PWB4Sv#on)t7o$x}nh2aS&Y2}tQzQ$_zl8QYuI4dm)wW654gJX>zOonih^M;36 zp?7eN+9xmkDS&Y0`3l(@Vmk^r))H5mZq;eK6Q4>vB+`14R$sT z(5?Hmv;n%tIdVc!xXMu?}^lBOT~~{yENJ4(d~1 z`p`#*^VPwQcDMr`@sP(n>T!>J?4uv~@$Rmm?xx`9;~w=WzC7ZAeC4x)`Oe3_^rv6_ z>gyl+&QAw*SO@NNhj;kC@S_KNz=!fXzma&ovQnpH>WARNhxd!W`Afcbus?NZzUPZR z{o_CD^S}QKKmjB`0|dW$poj6p2Yuj&2E>|5ld=5ZhkeM03WPu7!$5bazx%_#58S^H z96=J~zya(&6hy#!P{4d}K^VjlspGT4lY~}Cx*O?-eGoni)Is{wKp)IM=?g&-JO}Ip zKodN|1608!G{65gSrFf|4}Qo8dzc4!Xa{vThjJK)aQKEjM zqpFcBi{N{|IdlhhPzO!q#9qY4Z2ZJZv#xQBUohjloIagaxPWJr1p2Xa6M zc7O+Zz=!`w^c~>o6AQBuf}{sJv_o>x!-f>eh8zR{$b>-@hjKtfMXU#W=tltR2YtAQ zj?Bbzh(}QDg&rt^k>tsSBt?}Z#))i1i~N+cYbCST2Ygt^cVLHfFb9zA$*7ddKm-S1 zT**ZoO8&sKwHush>ooh|$attpahS@o9La|~hwXa@WXuPm zL2ViVc1%=WEtim@K6i{;jRc-uEVPuC`Z9!!mjw=*C;$z3A z49!9nNxuZldH_~CiM^G`2YPr1bs*NBtW%ZzMtG2i1Z=?I zhccCiibT_SVmot`1Y7coM~w$|2v?D;N^;Fd@gu)|$kg0$R$DzjT71f4#m4_$Rfl(= z2iLTVr`QV9s|tRY2X-I_UxY{yrO1Uf584FH?&L*qI0tvIheu2_E<#7*=!biVhjl22 zT@}TYOb2#g&6dno8;Qx8j0bl>$a&4ia5#r{md9Mh|0OOySQp{0k<Mlx*&q14@E zfy3TKNR`b-asXS*)eT9}1QL=L)+hv2FqeIxhwM#VLG)0GoQLT&U!`nJ;O#~Bm5048 z3vB=Z^QybB;0Jj?hyDEq%MDvN$|JqLD(2f<7k zy7boHl~_O=hjo~T^2LvQnB5Gn+>s4Yr_Gwq6iajvO=@CIK91wOz6vjqTWph{m=VcOvbn`MV{Amu$Y2Y0v!ulOvk;MkF%2Xy$va%hL) z)fd@S2gLQma9{^pz72a|2OJK>aYzSvum?-79etn&Bqn8ZfCq5a4UbiaWF`l7KxY~T zpnb3hcu90zys=+MvycnIn|#?L+WC49J9fEL7ZfQL`6jeS7mP*hrXxLAIA)Q~1;KqLou zU~1dwhj~bc{RIbeXa{^?jP*%m0{ZHMRP!*sBRyqJf@rpnl!?XMbPnhr#BuxZGkhjXarYhG@C z3h&e%ht9?emUihqjPCE=r+tuzdLBe|Xl9_O0=M~Xq2LF0NbYvnYshJBKokdgkPCir zhhhzfb)bj!wxdHv??5Dn@`mhokl3)!?)b6?cd+hn2#0nk?yuMf4i`jmknr8+tb1^W z&<4bG=x@2e2jLDx7Ow{i=Olc12O0Ona?o&?*a4_IxuBSbNfmMditI@>hXe15esG6f z1&4L`@WFcE3;#oMpog^3hjkD{bBG73j<5ei=I%dS2Qn86eZcD~eh2$TG5n_HDlTNS zz=t{i!_=;E-8yO@=fiOr@|GB{0QZT0XmjYk@&xLKctBimh=;O}hloCh3BRs=fQPR( z2RP>nerSg(j)xNuF01zQJ!}UT$BKObbFh8~HCMB;#`7TG^RPg5K&rfc@qiZA~|bLjU%KlDEr_^rr$?U(@o_Xm?V z2_dqOUnqRlIQ*iqHbbEf@aT1xfS<(AdVhHQ5IB4lVtNxY@|Ta#&DV7ulkVadDd@? zH-O8V9|^WejJQvG#;6*X6N!^njkxj$x2KMkXnw!&tvE4>mDqTe=y-pC%htn=*9s$% zAbkbV{;OE{Znkx;F!a8!bFL8klK_Y_(ERyB1mG9JgaFPEL;~R9!xUPO5iADrVTc)e z5<0y2@QuG;0FWdk_y&MKQ63@gC`k~P6NpG)5%jY1p&)-Lst}w3z>7uOzafSH~tylV+^Ga9qEg+eelxv>hS5Xe#8; z6Tw1a3I1%DLK5IYF;o9k^QTu2U_@R*06^6+grLZh9g75jsN~6zk{#-ad^w>f$pB_Z zZiN&;h{6fOrm&;QP6_~~b@F@}A_T6tW9^Asi%z$0dTYOdd)E&*T)A}Z0>Eo{ufM+j zko*lixbWe`iyJ?dJUQgU&n8j++63H^5&5-oa1830v8_QrKp#Wh!5cO@hV z04WqAiXJ{WSDF8MnUxnAXP&Xxqhs3emzzJ;$n~Rn=&3hiN%M>|9621q=@LF_twjz! zcUDE+iGo#G*p5B23FdiX0&3l$NYz#(nfryHjY}ywK@@`CEx2C_k?FCWV@gqpgdmdG zG(%x9R+yAOJ^`RwUJoIp7eYn>1q%R@C}q)u2?Hf)eHrjeyy>BBU;YXBlSXwJ9c8RSFxMX`w|nT4}WP^boAi z4MnR<(y{6i5=7&kY;M|jtNE9t=)>Zw0$dxXUe zluPV6CNlp)xH2@Iz%Eq=KrsnrChe@}+ISC3AAG!qn$8pyH z@SKoAR+nTZ05qwzazeP?{WL-K^v2aV{4C4QoLqsUEaALXIw{L!30{)qC8a=lj^H|I zRgskX3cx^FgROH(dT9%A)E$335Hum|Fc3j%5*xP6DAAm+=~V%}1En_6?GJlpKMfB! zYb72nKFMfwcJ(ZO2F zh*!M;CS-Gz@*cz>A~t`_jC#f+NC97RK!V(?QuccY{@y05s`X1-|H@tl2}Z!y0S#~o zyT`@00uFqr@Pr+rm{r=bmIy8@EJ2c+9rmX;>3B~iJmZ=+k~BS+-KageBb&`|Mvya1 zY6j!-Q(Q_a{L-!R9r_Hnqaq(gD0tRg3Ssm+>kB!hw!8VCsjjTH*0FyyO>`CQ@& zPP$|VjZ6qM1VNL)@w0>Wt3nD^XAzr7v4(Z~ALckXM&0QpjfjA#^x`p`KKY4ZTqy@E z2}d1ArU{aRyqYit*-M+0E`uRFNi<2QyJ=RXqGrRWKU!G7o*-1AKiL=mY$(QdxVx=Kr~g|#7MJ>6Mz zCC#-~C5t|E2{wlp*P-m73P7ukCJ8z?qP#Jyr~yD}>o!_bYK1Ezx|2q^q7H82a(+4; ztK|w>+ra6Rml7?>TUWQwP~rA;n@R{a2bz$=S|vYKnL$g;iq^?$kav&0ibG_F*Xq(X zAs*cd6YqqqJ9bxliq+9?*U3Asdeu>my^1kK_tupeB(-llqdd=}l=$rc5hHZTErm7% zE$D%AhWQInr+6#L0x*~U7$9Bkx?NM|>3QZHkv)8K9O+rsutDA8d3XPtvfEyli;+$1 zOeuT1y57|)IyGod2yEa&Ah@A_ydhDWBEJZ?xV!#{?N-*|kN-^gh-azFJG%0;26-|e zhlLsvqU@>%>BW2jn~G{W;t_RZ`$mfAqS`ANz8O!wj{RSgkT~rm2s|8xH?J&6z8B`nr zq{Pym&Pe{u!R`q=CBNL~Y&PwY2j#P0@>%CYW?%>QWqP%&8ZfRxwFB2A*rER0)o%wF zJ~hwf+NR8h9Ww@}IBumJ8;%GS!%PO28Y*nW&)9?jo2WA7sKeVKpMR6KNZ0runeOx| zMZG;#e~8uVnsuyios<8O&)3<>#f?~{LH{L)r1!&8^*BZ;_yR@i+x9^JF}WG_Qxk6WbsA zbPoJbdlgn!rJh_ryrLJ$5y20h-|<@^w!6!ZQ$q_*?%>KQeXRGV7tJENAN-rZj_#(D zf2YBhJuvU>bi6G@^8&|j$E@Wf_%LP${|)fJ$wvw>ghjvtHqjhP9bALCgu-=9+PMno zWfbDT2|v&oZHWZ%nO2{z-`+vpeAHg+{RHe$pVooLrFmVnsh?74!vj9VYPnnh>I4Dy z%>ka&1=$?HxYI8=pxQ;?(*%(`IEBz1nNpmZoh<)LE9>W6CKu$ z6ZXzD?v^Qr;x=;19~g58%8aKUIU98B;@6#f!yHshmh6;TXUC zOH3eN!pH+xaN>xJ7e}d{6HbYK!DK|uq`=gq(h&qsR-uX2PEQJ=5sg&4kQGbbTu3hB zgDnL3JR)?Y3(o}O=MkenKqZ{eoziq-uK>;Z2$NFK-dSK#7TCjMYsm=pH&EgjIgvWwhfuURJ#sqVrMD`}G{N_f~;Bb=LXKW-q0su+r1x1W! zcWq)xP7D#cMB{wJ93@PC#E>?`#-WK(gW!+$@FjML1>X=?LQbZ;J;YD89L~&uxfv5e z2uPgS1f~3oMVK7nEY(&>+=zhaH>@FT{bw8sD0mR)FCA#3pv;2$B|$i-NV2~h0Mc8`IszqWi|e#ZcS;>5aw9G zB7@23u$2ThouNOVsMM$^GAJASRD;?mmLj2#in< zO;m=$r;l|Talpx)2~j>u50&KT=V*)K}3X#YDs8lNt9=++}loI z>QKOHLKG+trcT_*5U(bLuhQ0cy~BML%Sk4LG0xW0K*PsCk{-kc@WIqY2?)-3PlJF2 z*Wk(we2|ey#$`Atv)TV>ol2JsPAOa$Un`&r-L)eEV7}M&g<%15Xrrk)7 zKm(F)COXn7rPin8+==Mnsb21lPnbrzc!zobCe9LzZ}CWiq)|uk&bo?;rY=cL%z$hr z*0y>=w>qP1R>_qh0)K4D#lq__j!A-C1~yG-q#tWqYQM$`qujAEtU8+!m-aE?dAN`km%T8u~rrTj+< zT$3Q&hS=Qe8|43Mesm)@wNk3V$vBB9H;F69daU9)?6}5l+e(zj5X;W8E1SM+#<~RN zYVN*9e(&cjQJ~ECg&i#Q)T;zH%-C$NwpG$>1~CRF3T^x zfvfyQ$+*f4yaDWGQ0wACHp;h$NoP^$J!);JXG2}C zf){#32CAR;gfBdmTVkOGNqz7|(VGjL{M)8@_cYVWX&fQu>r73BH1Vh9d@LK@`vM`133-1vQquUQR@%ke2`7ScB zTIwDXL?34|ti;9_0!utTM8lGD{dU(r>}RPx@0~<1LEPy#h=Ug|3pDVXOAIqz9&?8j z12GdL+J3{gjYu<>!x5U2F(dNVqwvy&_{ zSg8NAJ14|E*bz7cGja$ASBS$Szq39gvo;h%kx9=rBS$}vg)$Q(KU^ZJ`N zRRr`t!%0EYB}4;cx{Cw>+f)|!>abQQ6Du-&%>#aT2WibKCXp2`_knyieSG8CZcf!9(FM>st5 zTi-QalLb61^*6X-v5@Fihyya_HDMQaRosI&k(yL@2*Ey&UmG@L8+8H=hf{9#h;;uo zL6migHg#lowm;;9FB3=gD)dhiM>{OGXQwtck$WVMbB;akvMV4pK|yEQ*( zb~uc-Z%;Qkv;$jjw|OsjYX>%X7mGe5HvhK6S)aFjCyYL{17Ckre8UMo#P#XH_k92N zG513}@HcS`_Oj?hXm7`tj7fU?cH(SiZikG;I6GT7E!*TPkffLR!P=Ck#IT_HdwskJ~wy+rv7zI9seY z;p~Gk(#bmiVt#_3p2WBfpi%+*WxC5j|x+&d5BY%{e6Ju^8IytyQse?LR z_d`7#x`=-hiPM&sBRV(;`lqvcWbcDKphJ=KuRHX)^z6fz$ND$H!$^u=_lWERpgT@Fn7hc6Gdx`UFEjW% zi~6s-(mSAh%zHCG&;vWHyKH-UN#jF1?Dlk7Oa4h4J?Qfv_jb3fceJg5WK)3rL#c}(vEJcxb8wF5m!{OTtR!M_7K z#QiT%eTUTjTipFv)VSD-!#YHK)8hj?;QOAh1JA27KlFOecZE8{!##w2?~8jq0Kf46 z@;a3L=(_{WH;g&3gFN7a_kTZf^aDP~13Q>Q_J5SBPqjY4!#Ui4V50*-xTB}fUqOQh z5hhf)kYPiI4Qo&yBBZWMwTDRxx-fy6#$!Q(%jVdZrsm~EyLFS@dX9s`%VVb_&j%Zp6T`8`Q~Dy3?P8;qRF2sCgatlT*VocTB^ zEWiOJ?C>Uj;Cn}%a=5~<9Cqf3(8GrIktZ+={|o={9u-%t@u2q})9Av^!a)ZfzHDNy zCZycbCmwWmMC-HAMzis%x!g&oL8ru7haUW#Tu7gJ*eM4?j{ajuw0yA4QZ^9hd1oDS z%&pz$5tAN#Xq*$feej_N9(K^_Z!mGtdB>hI{e&o=)x5m(n{m!r z=bd?GY*a!J>xrkGbjnE*#?bCzR8xiap{E^lL_M#ZblQn$G*eGqY@d7RQishuAC%`h zs)VG8$hb7)Y(8)bb4S4SYAvXreCiqWoGH8NQL1Je(kUZq2Med1JmHzg9(`!V)*@)- zac7-rTXpk9U(KaxpW&pG^eJ=HX(!x!$c_IOr+)Oo6`po<<@U9gV)B?~ zm7RA4%m+M$Zvt3gg3TGH-DAsHC!R$yjtCz}KkioIaK|mTWEStC$5UO~{1Pg7NQNue znTAaaE3F>JP#k>q71v@30j)=#cL*g>QmC$dIoqAqO!?Sx%t>eBc<8w&pFXqf2T*(F zfk$0*%BfjWM6Hv$r1unT&EAi|8Ry$|^p&R`elL!fpMaGfcpbDop4%hb0_4qYnh@m4 zoS+R4hn#b?b|)Tj@zJO6c*V}g9(tB07;UxfUGklQ7B9)Mx(vQL>vb&0d>@yc>^$ap zm{#W;av+y99CO%_r&PvvHmPUKwru~n_d6q|oE>-Ik%u08@X1G?*=^!yAARzqd|gU$5*!PB+%cjHN{SoY@J#&Xrw;qU!-Mt!q4oF|L6ekldnfcB0p$UYceH~Y z>OjXi$}x@|zK&K5IDXU z#?W35ya)P-XOtm1=Qs1pNE!dlSS@jgV;qen2RX`74q`;|k&RqrIQVEr+yrlUVRTQR z*f*_2N(vm|SY#u|@yJI;l9j4N)I(!&jeGLsaz#G%i&5(va_8$dew$-37q1UY+`ZI-hw4VcVex;q%ohZQjxfm2Is9QoA`dPW1Jlh9fbwa)2p11whI z19x~-haST#%g+ChSFXoGFC?d%jy1ZYjqUXs_TbyBGl2H9PS6HI{w6>uu5caqRbY6< zTTpVQce>~hA{&dCx!)$ZWP7C}J&tSNbUb4WNo7NZ=^Bpzs@KEp&EJ7pYo_2*WVmi) z;`a2xy?iJmsYj?D689m(9Fy3`+Dmefg?vIxBsCcMuridBtYju{`F~l4vXxKRh@>{+ z$Vj|il1Ip8X%>UQN<~67#^PikNBM;Ku(O@PjAb-0S33mL+mfhM#eZ2;^58UuHDM4;h?HVgdW29fte=$$@*D^(B`Pv5OS zi*Aoo`WK+Z_sFwUj5jRY69H>BroOFC#_LG^fP0koeMdxBE{^s}=E z7G(c-0xB4y2br(^;a~r(*|jc6VG(kpX$P$x=zc1YgEs4dzbY)+9CpK>1{LM5g5noX zby0v;5;NaAL%RO5RG1N}`KkifwXLKOcx zu;QvuA+FDDPS67vqY$Q#1=HsY&Hx50;ultK1|;FZXmH@pAO&b|=~fUSQjq-cZwIlX z5b(|jOGXBj@F7~k?Vzp+^DWXKPway5AcpW|u22f80uiW<3l)Y5!4M%-4*;~F3dgY8 zHV*>NZVL+{3rofg({Lsv;S1+b!DcWGt0DOSVEOLw+v0Ej=uQsd5M$)<4=W=1{!kAX zQ4chs7#dLzybTu`k@s*x5VXJv?4acgq7Wic4-lahbkHA=;S-S|+!_%P{6P{Tu@F4b z5f7pmc3=k>vG9sP65c=y-XIk1;0J%95jhbdevuJ1ff7Hl5j9~L^&l7zLK*+r@Dej| z6A$7QQ&AKP!V@Bq6SW}{f6yQhq3{Z!3TEK+CPEXUFfoup5JDgX1fd%dQP)6F1Otx{ z^>3pN@f{^X6M}9I+06_e>=)8b3r3OX1mVH7LD=j77mDG}kl^H?VZlN`6A(e-cA)kA z;TPI%2TqR7LckN?OdGBZ0181H4l=3E(I2!R1ZIHuB5enX5fxtU0!gvmLZAdijRXAw z@c`fqL_rihK@yOl3T6@jYBC{ilGsWzAr~?P8nPfBk|-sTBHs-fN{<}Gv@3_ql{bA*n?J#G6`MwVTvJT`z;N<+_40eDVSI!I6lG`NnAat)RNm0@a zqTEgr8D6k65yG>QYSIeAFJlqr1QP%VbKwj^;sVnkS|J3&5+y~iAS$yURFfjKVF#G8 zDn!BY&TlT6Ez-1d5Q{La>T#ar5;+;d6N>K+vkw4T59BP;4n(ggW3SsPY-6`Hw|L;3gXtvtu`kU2}BR^LZBNfQX$kc_S8}kUJl(Z?Iiu7_4YFb`tv^v z!aKoJJPU$64Z=L%v)xWl8)jfQ4T3sH@%s|9BvnJo}UFGcfeMG@8FniC9v zE(9J7^eDCF@UGq1&?%D&-*^-n%FQa1&JMI->J-8~ud?%WGSkig3A_!^Do-NxKoSbm zAT*&08q-QWfh3^;6AfZkYqcP5HCGElQxgIjI@KROHB|o*!r*RmNFnt&k)bHO;1`Mk z5daMd&fwDetr#wC29V$l(rz=opgL#b2^S9G9@W_55j^KHQhDq-rO8p(m0m|r)>=*r z>JR|(HCFv0sgCm?Oj22i@(kh=5!BM|)^s6I6)T0+BwLl%kQD#|78M}P79l7!sW$Z>l(RK06K4H^ z{d^NPAMD!v)gO`#S|wr+WlakPa9wq+Em4nAugYE#b@SYH47sfekQEvtO>2v^Akxl4 z8#C-SZwElnLX%DlAd*D?^=lorAcQRhE|%6BQ$YVwvJdsM@`P>rT7lX^)*k}YR^62T z^cDd4)^AxBZ22`I#+G2sHmNK$L1V8W7K}aFj2wmS{~ z(`i|4XQLKg9ZgU zXzy|jB6AC3b8i;_I``+w680juAy9$rTyl0%m(@-=dK07Pk{k zmJDT+V9ie0eDENGR2$-RNRRg*paI~#P1ygEkp2K5dI=XycfdgX0egMcAhaRuxOXxa z4uwOO+XnX_i0%t{l!Ci4eH$X#n9qIT763F?kdU>0Ki7fLkRd>{-Mk=)|5w+LAq1Kf zMOpXNT-TEdSUP{sEy3{GF4Z5(PvmZPGyOr<6pu$S*l2Y zjMaiiSRw2{W9c|X!8d#b6cI9Qk9#z!ye(wM7$MBKLCrLU%S|576y_RY@~RMspI3GTYFOeFPu3c)ZV&E zr*|3$4dNjw+M+R9qdD5sd`+bN&I!i1S@BM%lgbW|K@zg{7fMeHe&MGD0T*PgBZJm% z$CPxXn2Z&=*i_e`6MEjRIE?>Rc`n)Pbiwckt3jZP;THtDFJ#aip#c{fIy?IMuhTCD znwBO6AxRHH8$6-hkU(AATH68`mE#)Y=GunpdM)p|va>@B)eIGoz?CUN^+XOA)cOtB z7PO&QipTGup)<2xyPYw)wtYji)l3vhJ4l>B=Jv4DoIn#07`IvNlw+H=xo)#1sI&1A zS=rjS7elwz3>gp`BC;-&iBb=uTe@@23rw~9WP4tfTe^|8wY@tosN3O?p%B^)pszc< zHSMj%yS%NBxzoqF-|^O*Sia$6z2U8&zf}+l+rL5WvXi?x;?llx`}_Laz{LWNxZ~O{KQc_#Z|n-;{X6w{Ka8B#$|lQX}rd5 z{Kj!y#u)(sCT(G|VWK>!36{m~(v&|lyLIsgDV-~?VE(lve4Ila?8 z{nJ4m(LaC#U?9{@{nQs-zf(um5s_jsJTWAk)$p|3Qh>W(UER11y)j$cSp5%I_}1Mb z);CSSiPFM>UETjSFMsQs*BKnQ&HC7bJ)KLf8a#pQLf{Po7TT*#!>9QDdYuTh{UB06 z*~8r=gni5K)Y{JgWXt{Ag43}*@Y}Vp*=sumpt;@6UD~T#5=Iu=;~U>W4ZKae`Q$wg z>D{%F8sKf>+&SwPkTCY%V6hdx*m8Xb3%*(QDuv|16aXL|yLW};GG7azCdV09U_Y( zgkcfBBqaatp|+jCc@10}ssS4M8W&mt6?{??Bmof$K@bE%5A47W-arPuVDYs;3mEY6 zt6&x(p8*?x@x4F>-{A1|fbjcN5;VaRL_q*?!CIkVud^iO%bF*Po9v5C;F~b**#jTg zVWwtj9N?knS=0#z^?$WN?_mKIe$o@|;0!V`0kx0#Y#9M#x&ap-^WWh458nPX*i1eJ%f@B7O zktF{Cq}bs^%NaX@3Q5u=sue6;#gIYMW-;eOZP1Vv!v(9AC{2*0E&Enmvm)t=hG0+p0wcz?0j#bnC8#Yd3FBdE>tM z{R=p-;K76o3r2@euj0jw)oK~oII`r%8AVAFbf(IV5G6yP^zufKBu`a~-JHyr=TB6g zF2C`jlru@sRnCYOWi=u)PiHvq(9;Sl>fywT8$XVGVX+X9lRJNo5HIw)_Q)9~EbiPo zck$-cvv=>Fy?XWL!E2|k9JuR))$N-OKfXjQcI4ZijIos_%vD5^OyPtVb`(ODRl@(> zHylP9X;O$CurcLSZGvdh%2fnu(~2HDcm9F_L zIO@cMPd^pyW6wM2gahL@;K0LTkf?zsWRVgTgNh_}XyKn%NO&O?ZXOyrT>z3mZNFt5 zd4Ys%0L-u<06W+L3zcGyN#=B3%ur34YCg2$nhDjzBYWt?qYqm5xKj>{=Dg=-pE{lK zhMz2I^NS~fc+usSRoHCe#_St5n z?67B!JT|tak2`%C22MSv-fGYpXW%*=G^iAUC`m}XQHUs=@`@s%q7?E*S0nAWYM=d}L+d*E=tYk?*8#b0q_3qrnXiRt0pSj3G&&`_LLyV?8C|BJ zg|yV#3vj@CE!UjDBX+wcKh_n-4nK|EV=lu6m+9cdbp4{q8U7(*hbFjqYH^X;;G&5g z&dzX#CZ>kWa?25wc%sW6B3vdvc@ltOB39ORNfm-UMzUT}u8Bp(mG=E#z0 z%%LPJGfnlxOhQ`qbTp6IPsDkzgla`wb2n5~0PCy3gQ8w8CcRhV>!Cv#8k=5A;IFja*l z|8h>ck=d4BT;WE}L)bdc?Xz%T;qZxiae_EedNrC{zJnmR)GjJ6f^1lYCVc~se0&5a zKbh)6^0S^`KSO8pVCXQ9S|Lbq4$B!{7E%oMrxsJlhG&E+e)`41tUhDT2YI;k@%0ls zVD_}X7$Vyb?#X6v{Eoj<;o=RR(N+KtXqT%Y&@S&wQ9i8amTGJ+C;DLAU&yh*x*%c) zf78SaW*~{<6~{sfks!z{0*%p4#)NGNA6X=rmTE}igPO>o4bvis5KQfcY-u2h)bTZk zHN*=|A&DReq6Yv3>L4>5NeHy?FI)gX5(WvJ6Ha&#dJM*KJXFgJ>DG$>9n8RhW~ zN74#^kg6mzu*1KS7)2)t3w;GaM3b~IwPJK;26`AB918*syp1FUh)9SO<1#8Q5yV+d z3DhCUs76KB@s3kNL{mb51XTD#k7zPTHD(Y36%wR>2&o1D3MmQz08k+z+++wQNET0U zDUDsMB}L#O3S0IN0Bh<;^Z+xDhZsr_ftvv_1wl)ugrIMd000t1L&Q$PVu}SJl@mm$ zkQW6e9lAt|2hXMr0v1v&dUV1uk0};Xu|yDhkR$H=VFv(E%Zw@Lm>rlxOMhI>38U#v z3Ow`+091jPZ;)dOAQjJlL1Qyu(HkP|@JB10;KGD7(?fPx;#v?9f;V8Xn?zk6QPbi> z5wR{X7@SB5BtCQ|Kin!D1*hR`=nEhJ=v38Cpjc1jRE?l3LLZ~_w8N>(10 zNVT~=OHxAw#K6ddB2PU?Z(zDVf-FTi&=5qJwt80pTyY}*;0g>Eds`7toRwgvHVLsSQ~=ldDjf%Nu5ZTkIlG zfhs1;Z$VT)zl=2^#Vv>_0~NTb1#Sn3kgGqo+RW)rL>_{1M~kx?0;-vouPp??TM;r| zkE$}U)CwqbU~wR5C=nr2tZ94=;@2?QHI)Qrh!oAr2PL{dq$Ld*cuZ9OArNkt%z z5OIHYjjC+Eg1#;zq`|8FazWryL%SxC)0iz;2ymiDNCWtcraH47uDwYBXxq+(H3+jK zxdS9vb|gr^nqvXLTZA+dQlvs3u>Fx}eLhy7?S(BtQt4y0z_i@94j`Eeu9HvSXV!sH z$EYRego8?WGg;Qe(Y6%6X-YSVb$-Y%{bCM;vx%2XBP3n)hy*>TT;=0jV@b5YQ^j5g z6?X7X4V8@$c>BZIqeP@#1Gh>uzj>M}J?onPE6bdftDIVACVGMOSy7xHMCaD5g0r}4 zkU;MnA@MB8nF?Y?L{B-WHpYp+f2`oSAY!{BSKp$a-1dnm+&=n{A92+-*`~PkK-wTx zpr$$9uH-c$;s}hWRQXG?hD%Gh80Vs6DgP%Bc9^r}6BE_uOR6=rO zZmyx;{P88IFY>ab_s8i|zh=!Ng!6gEx0gWn#DyFk_3tEz=M$}ExD({;dK{-)q=-$# z=WYk_R(?bjAD_Ahh8+*bs*_D>Qt6_ds>-b>bUU8{Q97jXfH}PL4-#lz1FXSxY_jkT z8*o)CHU&`4GZGG($WwdXAabOZUG;eXU(Hl7b{1_qByOr#S*!WfCmNuknw;Qg;9mHhOXC)1hIQoBni7Xj3Y&d1R+=ll7|Rk zY6O7{DS!m6fC^0Eft~d~mUKi_Xa@k4L@7oV$PfaM1c`ogaQWB}({zL)ax;KIJ2VzE zdpKJ-2yXo|N8TukvBeoqh!F4~80gZ7QY3yYgC(h07J1hc0}*9hCv(McIjlx-cQs#I z@&-8-P_ywRQ&Ma@cVdHtb!zxfdx$=ou~-V1!=PXP={rW$;B4c@Fe{BIB&<54S{@WvMPaLHglm3#qf_15o6zQ z5BV5S7s)c(V0H9Z9Hy}l7-1GEL>zdz78;Y3n1&3;^DhBaW@?dERgjinIWeCEgo=3( z0Y#T1QV)V54j^I=U&D`(SvA`5If@90JBW`taR$A27b$QCiRqXEvw<3^m}W$6Mq)vJ zQI_|ymadbJdIXUzvx-`fo99j#r6K4xB7p>j5TJJ|FsbC3 z8JaeN5DsgCP#V zBpLibHiZ%YHjNsnwet&zP@I?}30Nkg+5ihrqfAJ9>WAP^)jyCGw&&yLvX7L9OelnUSKVgh39jVi)?* z4oM0a;n0@K83N6UKh@9*z~Udhx+%xve1u{sOu}l>(hA?otrqj8VTzt_3M%xVu7Cj! z>VT$e(GT))4(w45ZF-ys+C|nX2?Zq^z1oSeK&du_46vXHY11T5Agur!uq*?p+zLXW zvJYNk7~!A}^B|vNkq__?u`ps}{h0zLs7v^Q2pUTg&{9&4g0i)Pu}iWPXEYMnPOFb?LB4(!kl?(h!q@DA?K4(osp zlfiLTp8N3ZFiRX!5>ZHBw7#}*$4}h*SDtv4aIP`t^pESqA0dOA!fC=L+iJX z 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ξ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 Msp+iFb8_T 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 literal 0 HcmV?d00001 diff --git a/psyneulink/core/components/functions/function.py b/psyneulink/core/components/functions/function.py index 00017dbb734..b5d551ea9e0 100644 --- a/psyneulink/core/components/functions/function.py +++ b/psyneulink/core/components/functions/function.py @@ -166,13 +166,13 @@ from psyneulink.core.globals.registry import register_category from psyneulink.core.globals.utilities import ( convert_to_np_array, get_global_seed, is_instance_or_subclass, object_has_single_value, parameter_spec, parse_valid_identifier, safe_len, - SeededRandomState, contains_type, is_numeric + SeededRandomState, contains_type, is_numeric, random_matrix ) __all__ = [ 'ArgumentTherapy', 'EPSILON', 'Function_Base', 'function_keywords', 'FunctionError', 'FunctionOutputType', 'FunctionRegistry', 'get_param_value_for_function', 'get_param_value_for_keyword', 'is_Function', - 'is_function_type', 'PERTINACITY', 'PROPENSITY' + 'is_function_type', 'PERTINACITY', 'PROPENSITY', 'RandomMatrix' ] EPSILON = np.finfo(float).eps @@ -1201,6 +1201,48 @@ def __init__(self, ) +class RandomMatrix(): + """Function that returns matrix with random elements distributed uniformly around **center** across **range**. + + The **center** and **range** arguments are passed at construction, and used for all subsequent calls. + Once constructed, the function must be called with two floats, **sender_size** and **receiver_size**, + that specify the number of rows and columns of the matrix, respectively. + + Can be used to specify the `matrix ` parameter of a `MappingProjection + `, and to specify a default matrix for Projections in the + construction of a `Pathway` (see `Pathway_Specification_Projections`) or in a call to a Composition's + `add_linear_processing_pathway` method. + + .. technical_note:: + A call to the class calls `random_matrix `, passing **sender_size** and + **receiver_size** to `random_matrix ` as its **num_rows** and **num_cols** + arguments, respectively, and passing the `center `\-0.5 and `range ` + attributes specified at construction to `random_matrix ` as its **offset** + and **scale** arguments, respectively. + + Arguments + ---------- + center : float + specifies the value around which the matrix elements are distributed in all calls to the function. + range : float + specifies range over which all matrix elements are distributed in all calls to the function. + + Attributes + ---------- + center : float + determines the center of the distribution of the matrix elements; + range : float + determines the range of the distribution of the matrix elements; + """ + + def __init__(self, center:float=0.0, range:float=1.0): + self.center=center + self.range=range + + def __call__(self, sender_size:int, receiver_size:int): + return random_matrix(sender_size, receiver_size, offset=self.center - 0.5, scale=self.range) + + def get_matrix(specification, rows=1, cols=1, context=None): """Returns matrix conforming to specification with dimensions = rows x cols or None @@ -1215,6 +1257,7 @@ def get_matrix(specification, rows=1, cols=1, context=None): + INVERSE_HOLLOW_MATRIX: 0's on diagonal, -1's elsewhere (must be square matrix), otherwise generates error + FULL_CONNECTIVITY_MATRIX: all 1's + RANDOM_CONNECTIVITY_MATRIX (random floats uniformly distributed between 0 and 1) + + RandomMatrix (random floats uniformly distributed around a specified center value with a specified range) + 2D list or np.ndarray of numbers Returns 2D array with length=rows in dim 0 and length=cols in dim 1, or none if specification is not recognized @@ -1222,9 +1265,6 @@ def get_matrix(specification, rows=1, cols=1, context=None): # Matrix provided (and validated in _validate_params); convert to array if isinstance(specification, (list, np.matrix)): - # # MODIFIED 4/9/22 OLD: - # return convert_to_np_array(specification) - # MODIFIED 4/9/22 NEW: if is_numeric(specification): return convert_to_np_array(specification) else: @@ -1272,7 +1312,7 @@ def get_matrix(specification, rows=1, cols=1, context=None): return np.random.rand(rows, cols) # Function is specified, so assume it uses random.rand() and call with sender_len and receiver_len - if isinstance(specification, types.FunctionType): + if isinstance(specification, (types.FunctionType, RandomMatrix)): return specification(rows, cols) # (7/12/17 CW) this is a PATCH (like the one in MappingProjection) to allow users to diff --git a/psyneulink/core/components/ports/port.py b/psyneulink/core/components/ports/port.py index d73ab06be0b..5320aabfe4b 100644 --- a/psyneulink/core/components/ports/port.py +++ b/psyneulink/core/components/ports/port.py @@ -779,7 +779,8 @@ def test_multiple_modulatory_projections_with_mech_and_port_Name_specs(self): from psyneulink.core import llvm as pnlvm from psyneulink.core.components.component import ComponentError, DefaultsFlexibility, component_keywords -from psyneulink.core.components.functions.function import Function, get_param_value_for_keyword, is_function_type +from psyneulink.core.components.functions.function import \ + Function, get_param_value_for_keyword, is_function_type, RandomMatrix from psyneulink.core.components.functions.nonstateful.combinationfunctions import CombinationFunction, LinearCombination from psyneulink.core.components.functions.nonstateful.transferfunctions import Linear from psyneulink.core.components.shellclasses import Mechanism, Projection, Port @@ -2953,6 +2954,12 @@ def _parse_port_spec(port_type=None, if isinstance(port_specification, types.FunctionType): port_specification = port_specification() + # RandomMatrix (used for Projection); try to resolve to a matrix + if isinstance(port_specification, RandomMatrix): + rows = len(owner.sender.value) + cols = len(owner.receiver.value) + port_specification = port_specification(rows,cols) + # ModulatorySpecification of some kind if _is_modulatory_spec(port_specification): # If it is a ModulatoryMechanism specification, get its ModulatorySignal class diff --git a/psyneulink/core/components/projections/pathway/mappingprojection.py b/psyneulink/core/components/projections/pathway/mappingprojection.py index 557c1b3dbd4..c6a3871c268 100644 --- a/psyneulink/core/components/projections/pathway/mappingprojection.py +++ b/psyneulink/core/components/projections/pathway/mappingprojection.py @@ -19,7 +19,7 @@ - `MappingProjection_Deferred_Initialization` * `MappingProjection_Structure` - `MappingProjection_Matrix` - - `Mapping_Matrix_ParameterPort` + - `MappingProjection_Matrix_ParameterPort` * `MappingProjection_Execution` - `MappingProjection_Learning` * `MappingProjection_Class_Reference` @@ -98,10 +98,8 @@ ` can be used. .. - * **Random matrix function** (`random_matrix `) -- a convenience function - that provides more flexibility than `RANDOM_CONNECTIVITY_MATRIX`. It generates a random matrix sized for a - **sender** and **receiver**, with random numbers drawn from a uniform distribution within a specified **range** and - with a specified **offset**. + * `RandomMatrix` -- assigns a matrix sized appropriately for the **sender** and **receiver**, with random values + drawn from a uniform distribution with a specified **center** and **range**. .. _MappingProjection_Tuple_Specification: @@ -185,14 +183,14 @@ In addition to its `sender `, `receiver `, and `function `, a MappingProjection has the following characteristic attributes: -.. _Mapping_Matrix: +.. _MappingProjection_Matrix: * `matrix ` parameter - used by the MappingProjection's `function ` to carry out a matrix transformation of its input, that is then provided to its `receiver `. It can be specified in a variety of ways, as described `above `. - .. _Mapping_Matrix_Dimensionality + .. _MappingProjection_Matrix_Dimensionality * **Matrix Dimensionality** -- this must match the dimensionality of the MappingProjection's `sender ` and `receiver `. For a standard 2d "weight" matrix (i.e., @@ -204,7 +202,7 @@ `receiver `'s `variable ` (equal to the dimensionality of the matrix minus its sender dimensionality). -.. _Mapping_Matrix_ParameterPort: +.. _MappingProjection_Matrix_ParameterPort: * *MATRIX* `ParameterPort` - this receives any `LearningProjections ` that are assigned to the MappingProjection (see `MappingProjection_Learning_Specification` above), and updates the current value of the @@ -286,6 +284,7 @@ import copy import numpy as np +from typing import Union from psyneulink.core.components.component import parameter_keywords from psyneulink.core.components.functions.stateful.integratorfunctions import AccumulatorIntegrator @@ -304,7 +303,7 @@ from psyneulink.core.globals.preferences.preferenceset import PreferenceLevel __all__ = [ - 'MappingError', 'MappingProjection', + 'MappingError', 'MappingProjection' ] parameter_keywords.update({MAPPING_PROJECTION}) @@ -355,10 +354,11 @@ class MappingProjection(PathwayProjection_Base): the context in which the Projection is used, or its initialization will be `deferred `. - matrix : list, np.ndarray, np.matrix, function or keyword : default DEFAULT_MATRIX + matrix : list, np.ndarray, np.matrix, function, `RandomMatrix` or keyword : default DEFAULT_MATRIX specifies the matrix used by `function ` (default: `LinearCombination`) to transform the `value ` of the `sender ` into a form suitable - for the `variable ` of its `receiver ` `InputPort`. + for the `variable ` of its `receiver ` `InputPort` + (see `MappingProjection_Matrix_Specification` for additional details). Attributes ---------- diff --git a/psyneulink/core/components/projections/projection.py b/psyneulink/core/components/projections/projection.py index b26b6847cac..796cd14c281 100644 --- a/psyneulink/core/components/projections/projection.py +++ b/psyneulink/core/components/projections/projection.py @@ -106,13 +106,13 @@ * **Keyword** -- creates a default instance of the specified type, which can be any of the following: * *MAPPING_PROJECTION* -- if the `sender ` and/or its `receiver - ` cannot be inferred from the context in which this specification occurs, then its - `initialization is deferred ` until both of those have been - determined (e.g., it is used in the specification of a `pathway ` for a `Process`). For - MappingProjections, a `matrix specification ` can also be used to - specify the projection (see **value** below). - COMMENT: + ` cannot be inferred from the context in which this specification occurs, then + its `initialization is deferred ` until both of those have been + determined (e.g., it is used in the specification of a `Pathway` for a `Composition`). For MappingProjections, + a `matrix specification ` can also be used to specify the Projection + (see **value** below). + COMMENT: * *LEARNING_PROJECTION* (or *LEARNING*) -- this can only be used in the specification of a `MappingProjection` (see `tuple ` format). If the `receiver ` of the MappingProjection projects to a `LearningMechanism` or a `ComparatorMechanism` that projects to one, @@ -122,7 +122,9 @@ `. See `LearningMechanism_Learning_Configurations` for additional details. COMMENT + COMMENT: # FIX 5/8/20 [JDC] ELIMINATE SYSTEM: IS IT TRUE THAT CONTROL SIGNALS ARE AUTOMATICALLY CREATED BY COMPOSITIONS? + COMMENT * *CONTROL_PROJECTION* (or *CONTROL*) -- this can be used when specifying a parameter using the `tuple format `, to create a default `ControlProjection` to the `ParameterPort` for that parameter. If the `Component ` to which the parameter belongs is part of a `Composition`, then a @@ -422,7 +424,8 @@ from psyneulink.core.globals.preferences.preferenceset import PreferenceLevel from psyneulink.core.globals.registry import register_category, remove_instance_from_registry from psyneulink.core.globals.socket import ConnectionInfo -from psyneulink.core.globals.utilities import ContentAddressableList, is_matrix, is_numeric, parse_valid_identifier +from psyneulink.core.globals.utilities import \ + ContentAddressableList, is_matrix, is_numeric, parse_valid_identifier __all__ = [ 'Projection_Base', 'projection_keywords', 'PROJECTION_SPEC_KEYWORDS', diff --git a/psyneulink/core/compositions/composition.py b/psyneulink/core/compositions/composition.py index cd5da94cc78..3a646d39f35 100644 --- a/psyneulink/core/compositions/composition.py +++ b/psyneulink/core/compositions/composition.py @@ -2734,7 +2734,7 @@ def input_function(env, result): from psyneulink.core import llvm as pnlvm from psyneulink.core.components.component import Component, ComponentsMeta from psyneulink.core.components.functions.fitfunctions import make_likelihood_function -from psyneulink.core.components.functions.function import is_function_type +from psyneulink.core.components.functions.function import is_function_type, RandomMatrix from psyneulink.core.components.functions.nonstateful.combinationfunctions import LinearCombination, \ PredictionErrorDeltaFunction from psyneulink.core.components.functions.nonstateful.learningfunctions import \ @@ -5591,6 +5591,7 @@ def add_projection(self, projection=None, sender=None, receiver=None, + default_matrix=None, feedback=False, learning_projection=False, name=None, @@ -5599,7 +5600,9 @@ def add_projection(self, ): """Add **projection** to the Composition. - If **projection** is not specified, create a default `MappingProjection` using **sender** and **receiver**. + If **projection** is not specified, and one does not already exist between **sender** and **receiver** + create a default `MappingProjection` between them, using **default_projection_matrix** if specified + (otherwise default for MappingProjection is used). If **projection** is specified: @@ -5648,15 +5651,23 @@ def add_projection(self, Arguments --------- + projection : Projection, list, array, matrix, RandomMatrix, MATRIX_KEYWORD + the projection to add. + sender : Mechanism, Composition, or OutputPort the sender of **projection**. - projection : Projection, matrix - the projection to add. - receiver : Mechanism, Composition, or InputPort the receiver of **projection**. + default_projection_matrix : list, array, matrix, RandomMatrix, MATRIX_KEYWORD + matrix to use in creating default; overrides default for MappingProjection. + + default_projection_matrix : list, array, function, `RandomMatrix` or MATRIX_KEYWORD : default None + specifies matrix to use in creating default Projection if none is specifed in **projection** + and one does not already exist between **sender** and **receive** + (see `MappingProjection_Matrix_Specification` for details of specification). + feedback : bool or FEEDBACK : False if False, the Projection is *never* designated as a `feedback Projection `, even if that may have been the default behavior (e.g., @@ -5733,6 +5744,7 @@ def add_projection(self, return self.add_projection(proj_spec, sender=projection.sender, receiver=projection.receiver) # Create Projection if it doesn't exist + projection = projection or default_matrix try: # Note: this does NOT initialize the Projection if it is in deferred_init projection = self._instantiate_projection_from_spec(projection, name) @@ -5918,7 +5930,7 @@ def _instantiate_projection_from_spec(self, projection, sender=None, receiver=No proj_type = projection.pop(PROJECTION_TYPE, None) or MappingProjection params = projection.pop(PROJECTION_PARAMS, None) projection = MappingProjection(params=params) - elif isinstance(projection, (np.ndarray, np.matrix, list)): + elif isinstance(projection, (np.ndarray, np.matrix, list, RandomMatrix)): return MappingProjection(matrix=projection, sender=sender, receiver=receiver, name=name) elif isinstance(projection, str): if projection in MATRIX_KEYWORD_VALUES: @@ -5930,8 +5942,8 @@ def _instantiate_projection_from_spec(self, projection, sender=None, receiver=No elif projection is None: return MappingProjection(sender=sender, receiver=receiver, name=name) elif not isinstance(projection, Projection): - raise CompositionError("Invalid projection ({}) specified for {}. Must be a Projection." - .format(projection, self.name)) + raise CompositionError(f"Invalid projection ({projection}) specified for {self.name}. " + f"Must be a Projection.") return projection def _parse_sender_spec(self, projection, sender): @@ -6384,7 +6396,15 @@ def _parse_pathway(self, pathway, name, pathway_arg_str): if isinstance(pathway, Pathway): # Give precedence to name specified in call to add_linear_processing_pathway pathway_name = name or pathway.name + # MODIFIED 11/3/22 OLD: pathway = pathway.pathway + # # MODIFIED 11/3/22 NEW: + # # If Pathway has default_projection_matrix, use tuple_spec to specify for handling below + # if pathway.default_projection_matrix: + # pathway = (pathway.pathway, pathway. default_projection_matrix) + # else: + # pathway = pathway.pathway + # MODIFIED 11/3/22 END else: pathway_name = name @@ -6557,20 +6577,47 @@ def identify_pway_type_and_parse_tuple_prn(pway, tuple_or_dict_str): pway_type = PROCESSING_PATHWAY if isinstance(pway, set): pway = [pway] - return pway_type, pway, None + return pway_type, pway, None, None elif isinstance(pway, tuple): - pway_type = LEARNING_PATHWAY - if len(pway)!=2: + # FIX: ADD SUPPORT FOR 3-ITEM TUPLE AND SPECIFCATION OF DEFAULT MATRIX HERE 10/29/22 + # # MODIFIED 10/29/22 OLD: + # pway_type = LEARNING_PATHWAY + # if len(pway)!=2: + # raise CompositionError(f"A tuple specified in the {pathways_arg_str}" + # f" has more than two items: {pway}") + # pway, learning_function = pway + # if not (_is_node_spec(pway) or isinstance(pway, (list, Pathway))): + # raise CompositionError(f"The 1st item in {tuple_or_dict_str} specified in the " + # f" {pathways_arg_str} must be a node or a list: {pway}") + # if not (isinstance(learning_function, type) and issubclass(learning_function, LearningFunction)): + # raise CompositionError(f"The 2nd item in {tuple_or_dict_str} specified in the " + # f"{pathways_arg_str} must be a LearningFunction: {learning_function}") + # return pway_type, pway, learning_function + # MODIFIED 10/29/22 NEW: + if len(pway) not in {2,3}: raise CompositionError(f"A tuple specified in the {pathways_arg_str}" - f" has more than two items: {pway}") - pway, learning_function = pway - if not (_is_node_spec(pway) or isinstance(pway, (list, Pathway))): - raise CompositionError(f"The 1st item in {tuple_or_dict_str} specified in the " - f" {pathways_arg_str} must be a node or a list: {pway}") - if not (isinstance(learning_function, type) and issubclass(learning_function, LearningFunction)): - raise CompositionError(f"The 2nd item in {tuple_or_dict_str} specified in the " - f"{pathways_arg_str} must be a LearningFunction: {learning_function}") - return pway_type, pway, learning_function + f" must have either two or three items: {pway}") + pway_type = PROCESSING_PATHWAY + matrix_item = None + learning_function_item = None + for i, item in enumerate(pway): + # Ensure that first item is a Pathway spec + if i==0: + if not (_is_node_spec(item) or isinstance(item, (list, Pathway))): + raise CompositionError(f"The 1st item in {tuple_or_dict_str} specified in the " + f" {pathways_arg_str} must be a node or a list: {pway}") + pathway_item = item + elif (isinstance(item, type) and issubclass(item, LearningFunction)): + pway_type = LEARNING_PATHWAY + learning_function_item = item + elif is_matrix(item): + matrix_item = item + else: + raise CompositionError(f"Bad spec for one of the items in {tuple_or_dict_str} " + f"specified for the {pathways_arg_str}: {item}; " + f"its item(s) must be a matrix specification and/or a LearningFunction") + return pway_type, pathway_item, matrix_item, learning_function_item + # MODIFIED 10/29/22 END else: assert False, f"PROGRAM ERROR: arg to identify_pway_type_and_parse_tuple_prn in {self.name}" \ f"is not a Node, list or tuple: {pway}" @@ -6583,13 +6630,22 @@ def identify_pway_type_and_parse_tuple_prn(pway, tuple_or_dict_str): pway_name = None if isinstance(pathway, Pathway): pway_name = pathway.name + # MODIFIED 11/3/22 OLD: pathway = pathway.pathway + # # MODIFIED 11/3/22 NEW: + # # If Pathway has default_projection_matrix, use tuple_spec to specify for later handling + # if pathway.default_projection_matrix: + # pathway = (pathway.pathway, pathway.default_projection_matrix) + # else: + # pathway = pathway.pathway + # MODIFIED 11/3/22 END if _is_node_spec(pathway) or isinstance(pathway, (list, set, tuple)): if isinstance(pathway, set): bad_entries = [repr(entry) for entry in pathway if not _is_node_spec(entry)] if bad_entries: raise CompositionError(f"{bad_entry_error_msg}{','.join(bad_entries)}") - pway_type, pway, pway_learning_fct = identify_pway_type_and_parse_tuple_prn(pathway, f"a tuple") + pway_type, pway, matrix, pway_learning_fct = identify_pway_type_and_parse_tuple_prn(pathway, + f"the tuple") elif isinstance(pathway, dict): if len(pathway)!=1: raise CompositionError(f"A dict specified in the {pathways_arg_str} " @@ -6599,8 +6655,8 @@ def identify_pway_type_and_parse_tuple_prn(pway, tuple_or_dict_str): raise CompositionError(f"The key in a dict specified in the {pathways_arg_str} must be a str " f"(to be used as its name): {pway_name}.") if _is_node_spec(pway) or isinstance(pway, (list, tuple, Pathway)): - pway_type, pway, pway_learning_fct = identify_pway_type_and_parse_tuple_prn(pway, - f"the value of a dict") + pway_type, pway, matrix, pway_learning_fct = identify_pway_type_and_parse_tuple_prn(pway, + f"the value of a dict") else: raise CompositionError(f"The value in a dict specified in the {pathways_arg_str} must be " f"a pathway specification (Node, list or tuple): {pway}.") @@ -6610,11 +6666,13 @@ def identify_pway_type_and_parse_tuple_prn(pway, tuple_or_dict_str): context.source = ContextFlags.METHOD if pway_type == PROCESSING_PATHWAY: new_pathway = self.add_linear_processing_pathway(pathway=pway, + default_projection_matrix=matrix, name=pway_name, context=context) elif pway_type == LEARNING_PATHWAY: new_pathway = self.add_linear_learning_pathway(pathway=pway, learning_function=pway_learning_fct, + default_projection_matrix=matrix, name=pway_name, context=context) else: @@ -6625,7 +6683,7 @@ def identify_pway_type_and_parse_tuple_prn(pway, tuple_or_dict_str): return added_pathways @handle_external_context() - def add_linear_processing_pathway(self, pathway, name:str=None, context=None, *args): + def add_linear_processing_pathway(self, pathway, default_projection_matrix=None, name:str=None, context=None, *args): """Add sequence of `Nodes ` with optionally intercolated `Projections `. .. _Composition_Add_Linear_Processing_Pathway: @@ -6654,6 +6712,11 @@ def add_linear_processing_pathway(self, pathway, name:str=None, context=None, *a learning-related specifications are ignored, as are its `name ` if the **name** argument of add_linear_processing_pathway is specified. + default_projection_matrix : list, array, function, `RandomMatrix` or MATRIX_KEYWORD : default None + specifies matrix to use for any unspecified Projections (overrides default matrix for `MappingProjection`) + if a default projection is not otherwise specified (see `Pathway_Specification_Projections`; + see `MappingProjection_Matrix_Specification` for details of specification) + name : str species the name used for `Pathway`; supercedes `name ` of `Pathway` object if it is has one. @@ -6769,8 +6832,11 @@ def _get_node_specs_for_entry(entry, include_roles=None, exclude_roles=None): else {pathway[c - 1]}) if all(_is_node_spec(sender) for sender in preceding_entry): senders = _get_node_specs_for_entry(preceding_entry, NodeRole.OUTPUT) - projs = {self.add_projection(sender=s, receiver=r, allow_duplicates=False) + projs = {self.add_projection(sender=s, receiver=r, + default_matrix=default_projection_matrix, + allow_duplicates=False) for r in receivers for s in senders} + # MODIFIED 11/2/22 END if all(projs): projs = projs.pop() if len(projs) == 1 else projs projections.append(projs) @@ -6835,8 +6901,10 @@ def _get_node_specs_for_entry(entry, include_roles=None, exclude_roles=None): # Unpack if tuple spec, and assign feedback (with False as default) default_proj_spec, feedback = (spec if isinstance(spec, tuple) else (spec, False)) # Get all specs other than default_proj_spec - # proj_specs = [proj_spec for proj_spec in all_proj_specs if proj_spec not in possible_default_proj_spec] proj_specs = [proj_spec for proj_spec in all_proj_specs if proj_spec is not spec] + # If default matrix is not specified within the pathway, use default_projection_matrix if specified + if default_proj_spec is None: + default_proj_spec = default_projection_matrix # Collect all Projection specifications (to add to Composition at end) proj_set = [] @@ -7040,6 +7108,7 @@ def handle_duplicates(sender, receiver): pathway = Pathway(pathway=explicit_pathway, composition=self, + # default_projection_matrix=default_projection_matrix, name=pathway_name, context=context) self.pathways.append(pathway) @@ -7060,6 +7129,7 @@ def add_linear_learning_pathway(self, learning_rate:tc.any(int,float)=0.05, error_function=LinearCombination, learning_update:tc.any(bool, tc.enum(ONLINE, AFTER))=AFTER, + default_projection_matrix=None, name:str=None, context=None): """Implement learning pathway (including necessary `learning components `. @@ -7130,6 +7200,11 @@ def add_linear_learning_pathway(self, ` in the pathway, and its `LearningProjection` (see `learning_enabled ` for meaning of values). + default_projection_matrix : list, array, function, `RandomMatrix` or MATRIX_KEYWORD : default None + specifies matrix to use for any unspecified Projections (overrides default matrix for `MappingProjection`) + if a default projection is not otherwise specified (see `Pathway_Specification_Projections`; + see `MappingProjection_Matrix_Specification` for details of specification) + name : str : species the name used for `Pathway`; supercedes `name ` of `Pathway` object if it is has one. @@ -7179,6 +7254,7 @@ def add_linear_learning_pathway(self, loss_function, learning_update, name=pathway_name, + default_projection_matrix=default_projection_matrix, context=context) # If BackPropagation is not specified, then the learning pathway is "one-layered" @@ -7196,6 +7272,7 @@ def add_linear_learning_pathway(self, self._add_required_node_role(output_source, NodeRole.OUTPUT, context) learning_pathway = self.add_linear_processing_pathway(pathway=[input_source, learned_projection, output_source], + default_projection_matrix=default_projection_matrix, name=pathway_name, # context=context) context=context) @@ -7251,6 +7328,7 @@ def add_reinforcement_learning_pathway(self, learning_rate=0.05, error_function=None, learning_update:tc.any(bool, tc.enum(ONLINE, AFTER))=ONLINE, + default_projection_matrix=None, name:str=None): """Convenience method that calls `add_linear_learning_pathway` with **learning_function**=`Reinforcement` @@ -7262,6 +7340,11 @@ def add_reinforcement_learning_pathway(self, specified, that projection is the learned projection. Otherwise, a default MappingProjection is automatically generated for the learned projection. + default_projection_matrix : list, array, function, `RandomMatrix` or MATRIX_KEYWORD : default None + specifies matrix to use for any unspecified Projections (overrides default matrix for `MappingProjection`) + if a default projection is not otherwise specified (see `Pathway_Specification_Projections`; + see `MappingProjection_Matrix_Specification` for details of specification) + learning_rate : float : default 0.05 specifies the `learning_rate ` used for the `ReinforcementLearning` function of the `LearningMechanism` in the **pathway**. @@ -7292,6 +7375,7 @@ def add_reinforcement_learning_pathway(self, learning_function=Reinforcement, error_function=error_function, learning_update=learning_update, + default_projection_matrix=default_projection_matrix, name=name) def add_td_learning_pathway(self, @@ -7299,6 +7383,7 @@ def add_td_learning_pathway(self, learning_rate=0.05, error_function=None, learning_update:tc.any(bool, tc.enum(ONLINE, AFTER))=ONLINE, + default_projection_matrix=None, name:str=None): """Convenience method that calls `add_linear_learning_pathway` with **learning_function**=`TDLearning` @@ -7325,6 +7410,11 @@ def add_td_learning_pathway(self, ` in the pathway, and its `LearningProjection` (see `learning_enabled ` for meaning of values). + default_projection_matrix : list, array, function, `RandomMatrix` or MATRIX_KEYWORD : default None + specifies matrix to use for any unspecified Projections (overrides default matrix for `MappingProjection`) + if a default projection is not otherwise specified (see `Pathway_Specification_Projections`; + see `MappingProjection_Matrix_Specification` for details of specification) + name : str : species the name used for `Pathway`; supercedes `name ` of `Pathway` object if it is has one. @@ -7339,6 +7429,7 @@ def add_td_learning_pathway(self, learning_rate=learning_rate, learning_function=TDLearning, learning_update=learning_update, + default_projection_matrix=default_projection_matrix, name=name) def add_backpropagation_learning_pathway(self, @@ -7347,6 +7438,7 @@ def add_backpropagation_learning_pathway(self, error_function=None, loss_function:tc.enum(MSE,SSE)=MSE, learning_update:tc.optional(tc.any(bool, tc.enum(ONLINE, AFTER)))=AFTER, + default_projection_matrix=None, name:str=None): """Convenience method that calls `add_linear_learning_pathway` with **learning_function**=`Backpropagation` @@ -7376,6 +7468,11 @@ def add_backpropagation_learning_pathway(self, ` in the pathway, and their `LearningProjections ` (see `learning_enabled ` for meaning of values). + default_projection_matrix : list, array, function, `RandomMatrix` or MATRIX_KEYWORD : default None + specifies matrix to use for any unspecified Projections (overrides default matrix for `MappingProjection`) + if a default projection is not otherwise specified (see `Pathway_Specification_Projections`; + see `MappingProjection_Matrix_Specification` for details of specification) + name : str : species the name used for `Pathway`; supercedes `name ` of `Pathway` object if it is has one. @@ -7392,6 +7489,7 @@ def add_backpropagation_learning_pathway(self, loss_function=loss_function, error_function=error_function, learning_update=learning_update, + default_projection_matrix=default_projection_matrix, name=name) # NOTES: @@ -7618,6 +7716,7 @@ def _create_backpropagation_learning_pathway(self, error_function=None, loss_function=MSE, learning_update=AFTER, + default_projection_matrix=None, name=None, context=None): @@ -7631,7 +7730,10 @@ def _create_backpropagation_learning_pathway(self, # Pass ContextFlags.INITIALIZING so that it can be passed on to _analyze_graph() and then # _check_for_projection_assignments() in order to ignore checks for require_projection_in_composition context.string = f"'pathway' arg for add_backpropagation_learning_pathway method of {self.name}" - learning_pathway = self.add_linear_processing_pathway(pathway, name, context) + learning_pathway = self.add_linear_processing_pathway(pathway=pathway, + name=name, + default_projection_matrix=default_projection_matrix, + context=context) processing_pathway = learning_pathway.pathway path_length = len(processing_pathway) @@ -8649,9 +8751,6 @@ def evaluate( buffer_animate_state = self._animate # Run Composition in "SIMULATION" context - # # MODIFIED 3/28/22 NEW: - # context.source = ContextFlags.COMPOSITION - # MODIFIED 3/28/22 END context.add_flag(ContextFlags.SIMULATION_MODE) context.remove_flag(ContextFlags.CONTROL) @@ -9616,14 +9715,15 @@ def run( details and `ReportDevices` for options. animate : dict or bool : default False - specifies use of the `show_graph`show_graph ` method to generate - a gif movie showing the sequence of Components executed in a run (see `example - `). A dict can be specified containing - options to pass to the `show_graph ` method; each key must be a legal - argument for the `show_graph ` method, and its value a specification for that - argument. The entries listed below can also be included in the dict to specify parameters of the - animation. If the **animate** argument is specified simply as `True`, defaults are used for all - arguments of `show_graph ` and the options below: + specifies use of the `show_graph ` method to generate a gif movie showing the + sequence of Components executed in a run (see `example `). + A dict can be specified containing options to pass to the `show_graph ` method in + order to customize the display of the graph in the animation. Each key of the dict must be a legal argument + for the `show_graph ` method, and its value a specification for that argument. + The entries listed below can also be included in the dict to specify parameters of the animation. + If the **animate** argument is specified simply as `True`, defaults are used for all arguments + of `show_graph ` and the options below. See `Animation ` + for additional information. * *UNIT*: *EXECUTION_SET* or *COMPONENT* (default=\\ *EXECUTION_SET*\\ ) -- specifies which Components to treat as active in each call to `show_graph() `. *COMPONENT* generates an @@ -9648,7 +9748,7 @@ def run( * *MOVIE_NAME*: str (default=\\ `name ` + 'movie') -- specifies the name to be used for the movie file; it is automatically appended with '.gif'. - +_ * *SAVE_IMAGES*: bool (default=\\ `False`\\ ) -- specifies whether to save each of the images used to construct the animation in separate gif files, in addition to the file containing the animation. @@ -9660,7 +9760,7 @@ def run( `projection ` in the Composition, if it is not already set. .. note:: - as when setting the `log_condition ` directly, a value of `True` will + As when setting the `log_condition ` directly, a value of `True` will correspond to the `EXECUTION` `LogCondition `. scheduler : Scheduler : default None @@ -9781,6 +9881,8 @@ def run( # Set animation attributes if animate is True: animate = {} + if animate is None: + animate = False self._animate = animate if self._animate is not False: self._set_up_animation(context) @@ -10117,7 +10219,7 @@ def learn( specifies the number of training epochs (that is, repetitions of the batched input set) to run with minibatch_size : int (default=1) - specifies the size of the minibatches to use. The input trials will be batched and ran, after which + specifies the size of the minibatches to use. The input trials will be batched and run, after which learning mechanisms with learning mode TRIAL will update weights randomize_minibatch: bool (default=False) diff --git a/psyneulink/core/compositions/pathway.py b/psyneulink/core/compositions/pathway.py index da18203bc84..98b423201d7 100644 --- a/psyneulink/core/compositions/pathway.py +++ b/psyneulink/core/compositions/pathway.py @@ -115,20 +115,22 @@ *Pathway Projection Specifications* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Where no Projections are specified between entries in the list, default Projections (using a `FULL_CONNECTIVITY_MATRIX`; -see `MappingProjection_Matrix_Specification`) are created from each Node in the first entry, as the sender(s), -to each Node in the second, as receiver(s) (described further `below `). Projections between -Nodes in the two entries can also be specified explicitly, by intercolating a Projection or set of Projections between -the two entries in the list. If the sender and receiver are both a single Mechanism, then a single `MappingProjection` -can be `specified` between them. The same applies if the sender is a `Composition` with -a single `OUTPUT ` Node and/or the receiver is a `Composition` with a single `INPUT ` -Node. If either is a set of Nodes, or is a `nested Composition ` with more than one `INPUT -` or `OUTPUT ` Node, respectively, then a collection of Projections can be specified -between any or all pairs of the Nodes in the set(s) and/or nested Composition(s), using either a set or list of -Projections (order of specification does not matter whether a set or a list is used). The collection can contain -`MappingProjections ` between a specific pairs of Nodes and/or a single default specification -(either a `matrix ` specification or a MappingProjection without any `sender -` or `receiver ` specified). +Where no Projections are specified between entries in the list, default Projections are created (using a +`FULL_CONNECTIVITY_MATRIX`, or the Pathway's `default_projection ` if specified) +from each Node in the first entry, as the sender(s), to each Node in the second, as receiver(s) (described further +`below `). Projections between Nodes in the two entries can also be specified explicitly, by +intercolating a Projection or set of Projections between the two entries in the list. If the sender and receiver are +both a single Mechanism, then a single `MappingProjection` can be `specified` between +them. The same applies if the sender is a `Composition` with a single `OUTPUT ` Node and/or the +receiver is a `Composition` with a single `INPUT ` Node. If either is a set of Nodes, or is a +`nested Composition ` with more than one `INPUT ` or `OUTPUT ` +Node, respectively, then a collection of Projections can be specified between any or all pairs of the Nodes in the +set(s) and/or nested Composition(s), using either a set or list of Projections (order of specification does not matter +whether a set or a list is used). The collection can contain `MappingProjections ` between specific +pairs of Nodes and/or a single default specification (either a `matrix ` specification or a +MappingProjection without any `sender ` or `receiver ` +specified; see MappingProject MappingProjection_Matrix_Specification +). .. _Pathway_Projection_Matrix_Note: @@ -231,9 +233,14 @@ `. Sets can also be used in a list specification (see above; and see `add_linear_processing_pathway ` for additional details). .. - * **2-item tuple**: (Pathway, `LearningFunction`) -- used to specify a `learning Pathway - `; the 1st item must be one of the forms of Pathway specification - described above, and the 2nd item must be a subclass of `LearningFunction`. + .. _Pathway_Specification_Tuple: + + * **2 or 3-item tuple**: (Pathway, , ) -- + used to specify a `learning Pathway ` and/or a matrix to use for any unspecified + Projections (overrides default matrix for `MappingProjection`) if a default projection is not otherwise specified + (see `Pathway_Specification_Projections. The 1st item of the tuple must be one of the forms of Pathway + specification described above. The other items must be a subclass of `LearningFunction` and/or a `matrix + specification `. .. _Pathway_Specification_Multiple: @@ -293,6 +300,9 @@ those `NodeRoles ` is assigned to a corresponding attribute on the Pathway. If the Pathway does not belong to a Composition (i.e., it is a `template `), then these attributes return None. +* `default_projection_matrix ` - matrix used as default for Projections that are + not explicitly specified and for which no default is otherwise specified (see `Pathway_Specification_Projections`). + * `learning_function ` - the LearningFunction assigned to the Pathway if it is a `learning Pathway ` that belongs to a Composition; otherwise it is None. @@ -322,6 +332,7 @@ from psyneulink.core.globals.context import ContextFlags, handle_external_context from psyneulink.core.globals.keywords import \ ANY, CONTEXT, FEEDBACK, MAYBE, NODE, LEARNING_FUNCTION, OBJECTIVE_MECHANISM, PROJECTION, TARGET_MECHANISM +from psyneulink.core.globals.utilities import is_matrix from psyneulink.core.globals.registry import register_category __all__ = [ @@ -416,10 +427,17 @@ class PathwayRole(Enum): class Pathway(object): """ - Pathway( \ - pathway, \ - name=None \ + Pathway( \ + pathway, \ + name=None \ ) + COMMENT: + Pathway( \ + pathway, \ + default_projection_matrix, \ + name=None \ + ) + COMMENT A sequence of `Nodes ` and `Projections ` in a `Composition`, or a template for one that can be assigned to one or more Compositions. @@ -431,8 +449,15 @@ class Pathway(object): specifies list of `Nodes ` and intercolated `Projections ` to be created for the Pathway. + COMMENT: + default_projection_matrix : list, array, function, `RandomMatrix` or MATRIX_KEYWORD : default None + specifies matrix to use for any unspecified Projections (overrides default matrix for `MappingProjection`) + if a default projection is not otherwise specified (see `Pathway_Specification_Projections`; + see `MappingProjection_Matrix_Specification` for details of specification) + COMMENT + name : str : default see `name ` - specifies the name of the Pathway; see `name ` for additional information. + specifies the name of the Pathway (see `name ` for additional information). Attributes ---------- @@ -452,6 +477,13 @@ class Pathway(object): Returns an empty list if belongs to a Composition but no `PathwayRoles ` have been assigned, and None if the Pathway is a `tempalte ` (i.e., not assigned to a Composition). + default_projection_matrix : list, array, function, `RandomMatrix` or MATRIX_KEYWORD : default None + matrix used for any unspecified Projections (overrides default matrix for `MappingProjection`) + if a default projection is not otherwise specified (see `Pathway_Specification_Projections`; + see `MappingProjection_Matrix_Specification` for details of specification). A default_projection_matrix + is specified by including it in a tuple specification in the **pathways** argument of the Pathway's + constructor (see `2 or 3-item tuple `). + learning_function : `LearningFunction` or None `LearningFunction` used by `LearningMechanism(s) ` associated with Pathway if it is a `learning pathway `. @@ -500,6 +532,7 @@ class Pathway(object): def __init__( self, pathway:list, + # default_projection_matrix=None, name=None, **kwargs ): @@ -547,6 +580,16 @@ def __init__( self.learning_components = None self.roles = None + # Assign default_projection_matrix attribute + # self.default_projection_matrix = default_projection_matrix + # Parse from tuple spec in **pathway** arg: + self.default_projection_matrix = None + if isinstance(self.pathway, tuple): + for item in self.pathway: + if is_matrix(item): + self.default_projection_matrix = item + assert True + def _assign_roles(self, composition): """Assign `PathwayRoles ` to Pathway based `NodeRoles ` assigned to its `Nodes ` by the **composition** to which it belongs. diff --git a/psyneulink/core/compositions/showgraph.py b/psyneulink/core/compositions/showgraph.py index a4fbe76eb7c..b2d54019bc9 100644 --- a/psyneulink/core/compositions/showgraph.py +++ b/psyneulink/core/compositions/showgraph.py @@ -107,6 +107,22 @@ - `CONTROLLER` : purple - `LEARNING` : orange +.. _ShowGraph_Animation: + +*Animation* +----------- + +An animation can be generated of the execution of a Composition by using the **animate** argument of the Composition's +`run ` method. The animation show a graphical display of the Composition, with each of its +the Components highlighted in the sequence that they are executed. The **animate** can be passed a dict containing +any of the options described above to customize the display, as well as several others used to customize the animation +(see **animate** argument under `run `). + + .. note:: + At present, animation of the Components within a `nested Composition ` is not supported; + the box surrounding the nested Composition is highlighted when it is executed, followed by the next Component(s) + to execute. + .. _ShowGraph_Examples_Visualization: *Examples* @@ -828,7 +844,8 @@ def show_graph(self, show_dimensions, show_projection_labels, show_projections_not_in_composition, - nested_args) + nested_args, + context) # Add cim Components to graph if show_cim if show_cim: @@ -907,7 +924,8 @@ def _assign_processing_components(self, show_dimensions, show_projection_labels, show_projections_not_in_composition, - nested_args): + nested_args, + context): """Assign nodes to graph""" from psyneulink.core.compositions.composition import Composition, NodeRole @@ -922,23 +940,40 @@ def _assign_processing_components(self, COMP_HIERARCHY:comp_hierarchy, # 'composition': rcvr, ENCLOSING_COMP:composition, - NESTING_LEVEL:nesting_level + 1}) + NESTING_LEVEL:nesting_level + 1, + }) # Get subgraph for nested Composition + # # MODIFIED 10/29/22 NEW: FIX: HACK SO NESTED COMPOSITIONS DON'T CRASH ANIMATION (THOUGH STILL NOT SHOWN) + if hasattr(composition, '_animate') and composition._animate is not False: + rcvr._animate = composition._animate + rcvr._set_up_animation(context) + rcvr._animate_num_trials = composition._animate_num_trials + 1 + # MODIFIED 10/29/22 END nested_comp_graph = rcvr._show_graph.show_graph(**nested_args) nested_comp_graph.name = "cluster_" + rcvr.name rcvr_label = rcvr.name + + # Assign color to nested_comp, including highlighting if it is the active_item # if rcvr in composition.get_nodes_by_role(NodeRole.FEEDBACK_SENDER): # nested_comp_graph.attr(color=feedback_color) + # nested_comp_attributes = {"label":rcvr_label} + nested_comp_attributes = {} if rcvr in composition.get_nodes_by_role(NodeRole.INPUT) and \ rcvr in composition.get_nodes_by_role(NodeRole.OUTPUT): - nested_comp_graph.attr(color=self.input_and_output_color) + nested_comp_attributes.update({"color": self.input_and_output_color}) elif rcvr in composition.get_nodes_by_role(NodeRole.INPUT): - nested_comp_graph.attr(color=self.input_color) + nested_comp_attributes.update({"color": self.input_color}) elif rcvr in composition.get_nodes_by_role(NodeRole.PROBE): - nested_comp_graph.attr(color=self.probe_color) + nested_comp_attributes.update({"color": self.probe_color}) elif rcvr in composition.get_nodes_by_role(NodeRole.OUTPUT): - nested_comp_graph.attr(color=self.output_color) + nested_comp_attributes.update({"color": self.output_color}) + if rcvr in active_items: + if self.active_color != BOLD: + nested_comp_attributes.update({"color": self.active_color}) + nested_comp_attributes.update({"penwidth": str(self.default_width + self.active_thicker_by)}) + composition.active_item_rendered = True + nested_comp_graph.attr(**nested_comp_attributes) nested_comp_graph.attr(label=rcvr_label) g.subgraph(nested_comp_graph) @@ -2722,6 +2757,7 @@ def _set_up_animation(self, context): if not isinstance(composition._show_animation, bool): raise ShowGraphError(f"{repr(SHOW)} entry of {repr('animate')} argument for {repr('run')} " f"method of {composition.name} ({composition._show_animation}) must be a boolean.") + elif composition._animate: # composition._animate should now be False or a dict raise ShowGraphError("{} argument for {} method of {} ({}) must be a boolean or " @@ -2737,10 +2773,10 @@ def _animate_execution(self, active_items, context): else: composition._component_animation_execution_count += 1 composition.show_graph(active_items=active_items, - **composition._animate, - output_fmt='gif', - context=context, - ) + **composition._animate, + output_fmt='gif', + context=context, + ) def _generate_gifs(self, G, active_items, context): diff --git a/psyneulink/core/globals/keywords.py b/psyneulink/core/globals/keywords.py index e08ab37b0ca..5bd996546bf 100644 --- a/psyneulink/core/globals/keywords.py +++ b/psyneulink/core/globals/keywords.py @@ -46,9 +46,10 @@ 'DIST_SHAPE', 'DISTANCE_FUNCTION', 'DISTANCE_METRICS', 'DISTRIBUTION_FUNCTION_TYPE', 'DIVISION', 'DRIFT_DIFFUSION_INTEGRATOR_FUNCTION', 'DRIFT_ON_A_SPHERE_INTEGRATOR_FUNCTION', 'DUAL_ADAPTIVE_INTEGRATOR_FUNCTION', 'EFFERENTS', 'EID_SIMULATION', 'EID_FROZEN', 'EITHER', 'ENABLE_CONTROLLER', 'ENABLED', 'ENERGY', 'ENTROPY', - 'EPISODIC_MEMORY_MECHANISM', 'EQUAL', 'ERROR_DERIVATIVE_FUNCTION', 'EUCLIDEAN', 'EVC_MECHANISM', 'EVC_SIMULATION', - 'EXAMPLE_FUNCTION_TYPE', 'EXECUTE_UNTIL_FINISHED', 'EXECUTING', 'EXECUTION', 'EXECUTION_COUNT', 'EXECUTION_ID', - 'EXECUTION_PHASE', 'EXPONENTIAL', 'EXPONENT', 'EXPONENTIAL_DIST_FUNCTION', 'EXPONENTIAL_FUNCTION', 'EXPONENTS', + 'EPISODIC_MEMORY_MECHANISM', 'EPOCHS', 'EQUAL', 'ERROR_DERIVATIVE_FUNCTION', 'EUCLIDEAN', + 'EVC_MECHANISM', 'EVC_SIMULATION', 'EXAMPLE_FUNCTION_TYPE', + 'EXECUTE_UNTIL_FINISHED', 'EXECUTING', 'EXECUTION', 'EXECUTION_COUNT', 'EXECUTION_ID', 'EXECUTION_PHASE', + 'EXPONENTIAL', 'EXPONENT', 'EXPONENTIAL_DIST_FUNCTION', 'EXPONENTIAL_FUNCTION', 'EXPONENTS', 'FEEDBACK', 'FITZHUGHNAGUMO_INTEGRATOR_FUNCTION', 'FINAL', 'FLAGS', 'FULL', 'FULL_CONNECTIVITY_MATRIX', 'FUNCTION', 'FUNCTIONS', 'FUNCTION_COMPONENT_CATEGORY','FUNCTION_CHECK_ARGS', 'FUNCTION_OUTPUT_TYPE', 'FUNCTION_OUTPUT_TYPE_CONVERSION', 'FUNCTION_PARAMS', @@ -111,9 +112,9 @@ 'SEPARATOR_BAR', 'SHADOW_INPUT_NAME', 'SHADOW_INPUTS', 'SIMPLE', 'SIMPLE_INTEGRATOR_FUNCTION', 'SIMULATIONS', 'SINGLETON', 'SIZE', 'SLOPE', 'SOFT_CLAMP', 'SOFTMAX_FUNCTION', 'SOURCE', 'SSE', 'STABILITY_FUNCTION', 'STANDARD_ARGS', 'STANDARD_DEVIATION', 'STANDARD_OUTPUT_PORTS', 'SUBTRACTION', 'SUM', - 'TARGET', 'TARGET_MECHANISM', 'TARGET_LABELS_DICT', 'TERMINAL', 'TERMINATION_MEASURE', 'TERMINATION_THRESHOLD', - 'TERMINATION_COMPARISION_OP', 'TERSE', 'TEXT', 'THRESHOLD', 'TIME', 'TIME_STEP_SIZE', 'TIME_STEPS_DIM', - 'TRAINING_SET', + 'TARGET', 'TARGET_MECHANISM', 'TARGET_LABELS_DICT', 'TERMINAL', 'TARGETS', + 'TERMINATION_MEASURE', 'TERMINATION_THRESHOLD', 'TERMINATION_COMPARISION_OP', 'TERSE', 'TEXT', 'THRESHOLD', + 'TIME', 'TIME_STEP_SIZE', 'TIME_STEPS_DIM', 'TRAINING_SET', 'TRANSFER_FUNCTION_TYPE', 'TRANSFER_MECHANISM', 'TRANSFER_WITH_COSTS_FUNCTION', 'TRIAL', 'TRIALS_DIM', 'UNCHANGED', 'UNIFORM_DIST_FUNCTION', 'USER_DEFINED_FUNCTION', 'USER_DEFINED_FUNCTION_TYPE', @@ -413,6 +414,8 @@ def _is_metric(metric): LEARNING_PATHWAY = "learning_pathway" NODE = 'NODE' INPUTS = 'inputs' +TARGETS = 'targets' +EPOCHS = 'epochs' # Used in show_graph for show_nested NESTED = 'nested' diff --git a/psyneulink/core/globals/utilities.py b/psyneulink/core/globals/utilities.py index b75ae1965c7..0adb9969835 100644 --- a/psyneulink/core/globals/utilities.py +++ b/psyneulink/core/globals/utilities.py @@ -359,7 +359,11 @@ def is_matrix(m): try: return is_matrix(m()) except: - return False + try: + # random_matrix and RandomMatrix are allowable functions, but require num_rows and num_cols parameters + return is_matrix(1,2) + except: + return False return False @@ -498,13 +502,11 @@ def iscompatible(candidate, reference=None, **kargs): if is_matrix_spec(reference): return is_matrix(candidate) - # MODIFIED 10/29/17 NEW: # IMPLEMENTATION NOTE: This allows a number in an ndarray to match a float or int # If both the candidate and reference are either a number or an ndarray of dim 0, consider it a match if ((is_number(candidate) or (isinstance(candidate, np.ndarray) and candidate.ndim == 0)) or (is_number(reference) or (isinstance(reference, np.ndarray) and reference.ndim == 0))): return True - # MODIFIED 10/29/17 END # IMPLEMENTATION NOTE: # modified to allow numeric type mismatches (e.g., int and float; @@ -1037,30 +1039,42 @@ def get_value_from_array(array): :return: """ -def random_matrix(sender, receiver, clip=1, offset=0): +def random_matrix(num_rows, num_cols, offset=0.0, scale=1.0): """Generate a random matrix - Calls np.random.rand to generate a 2d np.array with random values. + Calls np.random.rand to generate a 2d np.array with random values and shape (num_rows, num_cols): + + :math:`matrix = (random[0.0:1.0] + offset) * scale + + With the default values of **offset** and **scale**, values of matrix are floats between 0 and 1. + However, **offset** can be used to center the range on other values (e.g., **offset**=-0.5 centers values on 0), + and **scale** can be used to narrow or widen the range. As a conveniuence the keyword 'ZERO_CENTER' can be used + in place of -.05. Arguments ---------- - sender : int + num_rows : int specifies number of rows. - receiver : int - spcifies number of columns. + num_cols : int + specifies number of columns. - range : int - specifies upper limit (lower limit = 0). + offset : float or 'zero_center' + specifies amount added to each entry of the matrix before it is scaled. - offset : int - specifies amount added to each entry of the matrix. + scale : float + specifies amount by which random value + **offset** is multiplicatively scaled. Returns ------- 2d np.array """ - return (clip * np.random.rand(sender, receiver)) + offset + if isinstance(offset,str): + if offset.upper() == 'ZERO_CENTER': + offset = -0.5 + else: + raise UtilitiesError(f"'offset' arg of random_matrix must be a number of 'zero_center'") + return (np.random.rand(num_rows, num_cols) + offset) * scale def underscore_to_camelCase(item): item = item[1:] diff --git a/psyneulink/library/compositions/autodiffcomposition.py b/psyneulink/library/compositions/autodiffcomposition.py index 28b4e6cf81d..7a001ae3b75 100644 --- a/psyneulink/library/compositions/autodiffcomposition.py +++ b/psyneulink/library/compositions/autodiffcomposition.py @@ -26,10 +26,11 @@ Overview -------- -.. warning:: As of PsyNeuLink 0.7.5, the API for using AutodiffCompositions has been slightly changed! Please see `this link ` for more details! +.. warning:: As of PsyNeuLink 0.7.5, the API for using AutodiffCompositions has been slightly changed! + Please see `this link ` for more details! AutodiffComposition is a subclass of `Composition` used to train feedforward neural network models through integration -with `PyTorch `_, a popular machine learning library, which executes considerably more quickly +with `PyTorch `_, a machine learning library that executes considerably more quickly than using the `standard implementation of learning ` in a Composition, using its `learning methods `. An AutodiffComposition is configured and run similarly to a standard Composition, with some exceptions that are described below. @@ -44,14 +45,16 @@ An AutodiffComposition can be created by calling its constructor, and then adding `Components ` using the standard `Composition methods ` for doing so. The constructor also includes an number of -parameters that are specific to the AutodiffComposition. See the for a list of these parameters. +parameters that are specific to the AutodiffComposition. See `AutodiffComposition_Class_Reference` for a list of +these parameters. .. warning:: Mechanisms or Projections should not be added to or deleted from an AutodiffComposition after it has been run for the first time. Unlike an ordinary Composition, AutodiffComposition does not support this functionality. .. warning:: When comparing models built in PyTorch to those using AutodiffComposition, - the `bias ` parameter of PyTorch modules should be set to `False`, as AutodiffComposition does not currently support trainable biases. + the `bias ` parameter of PyTorch modules + should be set to `False`, as AutodiffComposition does not currently support trainable biases. .. _AutodiffComposition_Execution: @@ -59,7 +62,8 @@ Execution --------- -An AutodiffComposition's `run `, `execute `, and `learn ` methods are the same as for a `Composition`. +An AutodiffComposition's `run `, `execute `, and `learn ` +methods are the same as for a `Composition`. The following is an example showing how to create a simple AutodiffComposition, specify its inputs and targets, and run it with learning enabled and disabled. @@ -224,6 +228,7 @@ class Parameters(Composition.Parameters): # TODO (CW 9/28/18): add compositions to registry so default arg for name is no longer needed @check_user_specified def __init__(self, + pathways=None, learning_rate=None, optimizer_type='sgd', weight_decay=0, @@ -233,7 +238,6 @@ def __init__(self, disable_cuda=True, cuda_index=None, force_no_retain_graph=False, - pathways=None, name="autodiff_composition"): if not torch_available: diff --git a/tests/composition/test_composition.py b/tests/composition/test_composition.py index 01dd5053c73..6377b1555eb 100644 --- a/tests/composition/test_composition.py +++ b/tests/composition/test_composition.py @@ -1012,6 +1012,64 @@ def test_various_pathway_configurations_in_constructor(self, config): assert all(node in comp.get_nodes_by_role(NodeRole.INPUT) for node in {A,C}) assert all(node in comp.get_nodes_by_role(NodeRole.OUTPUT) for node in {B,D}) + config = [ + ('([{A,B,C},D,E],Proj)', 'a'), + ('([{A,B,C},Proj_1,D,E],Proj_2)', 'b'), + ('([{A,B,C},D,Proj_1,E],Proj_2)', 'c'), + ('Pathway(default_matrix)', 'd'), + ('([A,B,C],Proj_2,learning_fct)', 'e'), + ('([A,B,C],Proj_2,learning_fct)', 'f'), + # ('([{A,B,C},D,Proj_1,E],Proj_2,learning_fct)', 'g'), # set spec for Projections + # ('([{A,B,C},D,Proj_1,E],learning_fct,Proj_2)', 'h'), # not yet supported for learning Pathways + ] + @pytest.mark.parametrize('config', config, ids=[x[0] for x in config]) + def test_pathway_tuple_specs(self, config): + A = ProcessingMechanism(name='A') + B = ProcessingMechanism(name='B') + # B_comparator = ComparatorMechanism(name='B COMPARATOR') + C = ProcessingMechanism(name='C') + D = ProcessingMechanism(name='D') + E = ProcessingMechanism(name='E') + F = ProcessingMechanism(name='F') + if config[1]=='a': + comp = Composition(([{A,B,C},D,E],[2.9])) + assert all([p.matrix.base==2.9 for p in D.path_afferents]) + assert E.path_afferents[0].matrix.base==2.9 + if config[1]=='b': + comp = Composition(([{A,B,C},[1.6],D,E],[2.9])) + assert all([p.matrix.base==1.6 for p in D.path_afferents]) + assert E.path_afferents[0].matrix.base==2.9 + if config[1]=='c': + comp = Composition(([{A,B,C},D,[1.6],E],[2.9])) + assert all([p.matrix.base==2.9 for p in D.path_afferents]) + assert E.path_afferents[0].matrix.base==1.6 + if config[1]=='d': + # pway=Pathway([{A,B,C},[1.6],D,E], default_projection_matrix=[2.9]) + pway=Pathway(([{A,B,C},[1.6],D,E], [2.9])) + comp = Composition(pway) + assert all([p.matrix.base==1.6 for p in D.path_afferents]) + assert E.path_afferents[0].matrix.base==2.9 + if config[1]=='e': + comp = Composition(([A,B,C],BackPropagation,[2.9])) + assert B.path_afferents[0].matrix.base==2.9 + assert C.path_afferents[0].matrix.base==2.9 + assert comp.pathways[0].learning_function == BackPropagation + if config[1]=='f': + comp = Composition(([A,B,C],[2.9],BackPropagation)) + assert B.path_afferents[0].matrix.base==2.9 + assert C.path_afferents[0].matrix.base==2.9 + assert comp.pathways[0].learning_function == BackPropagation + if config[1]=='g': + comp = Composition(([{A,B,C},D,[1.6],E],BackPropagation,[2.9])) + assert all([p.matrix.base==2.9 for p in D.path_afferents]) + assert E.path_afferents[0].matrix.base==1.6 + assert comp.pathways[0].learning_function == BackPropagation + if config[1]=='h': + comp = Composition(([{A,B,C},D,[1.6],E],[2.9],BackPropagation)) + assert all([p.matrix.base==2.9 for p in D.path_afferents]) + assert E.path_afferents[0].matrix.base==1.6 + assert comp.pathways[0].learning_function == BackPropagation + def test_add_pathways_bad_arg_error(self): I = InputPort(name='I') c = Composition() @@ -1607,7 +1665,9 @@ def test_composition_learning_pathway_dict_with_no_learning_fct_in_tuple_error(s C = ProcessingMechanism(name='C') with pytest.raises(pnl.CompositionError) as error_text: c = Composition(pathways=[{'P1': ([A,B],C)}]) - assert ("The 2nd item" in str(error_text.value) and "must be a LearningFunction" in str(error_text.value)) + assert ("Bad spec for one of the items in the value of a dict specified for the \'pathways\' arg " + "of the constructor for Composition-0: (ProcessingMechanism C); " + "its item(s) must be a matrix specification and/or a LearningFunction" in str(error_text.value)) class TestProperties: diff --git a/tests/mdf/model_basic.yml b/tests/mdf/model_basic.yml new file mode 100644 index 00000000000..a9b8ad2af8f --- /dev/null +++ b/tests/mdf/model_basic.yml @@ -0,0 +1,313 @@ +comp: + format: ModECI MDF v0.4.3 + generating_application: PsyNeuLink v0.12.1.0+135.g211a8db3af.dirty + graphs: + comp: + metadata: + type: Composition + simulation_results: [] + variable: + - 0 + results: [] + has_initializers: false + retain_old_simulation_data: false + execute_until_finished: true + max_executions_before_finished: 1000 + input_specification: null + node_ordering: + - A + - B + required_node_roles: [] + controller: null + nodes: + A: + metadata: + type: TransferMechanism + termination_measure_value: 0.0 + output_labels_dict: {} + has_initializers: false + max_executions_before_finished: 1000 + variable: + - - 0 + input_labels_dict: {} + input_port_variables: null + execute_until_finished: true + termination_comparison_op: <= + termination_measure: + id: Distance_Function_2_1 + metadata: + type: Distance + enable_output_type_conversion: false + variable: + - - - 0 + - - - 0 + output_type: FunctionOutputType.DEFAULT + has_initializers: false + changes_shape: false + execute_until_finished: true + max_executions_before_finished: 1000 + metric: max_abs_diff + normalize: false + function: distance + args: {} + input_ports: null + termination_threshold: null + integrator_mode: false + on_resume_integrator_mode: current_value + output_ports: + - RESULTS + integrator_function: + id: AdaptiveIntegrator_Function_0 + metadata: + type: AdaptiveIntegrator + has_initializers: true + max_executions_before_finished: 1000 + variable: + - - 0 + output_type: FunctionOutputType.DEFAULT + changes_shape: false + enable_output_type_conversion: false + initializer: + - - 0 + execute_until_finished: true + args: + offset: 0.0 + noise: 0.0 + rate: 0.5 + value: (1 - rate) * previous_value + rate * variable0 + + noise + offset + clip: null + integrator_function_value: + - - 0 + input_ports: + A_InputPort_0: + metadata: + type: InputPort + require_projection_in_composition: true + variable: + - 0 + has_initializers: false + internal_only: false + shadow_inputs: null + execute_until_finished: true + max_executions_before_finished: 1000 + weight: null + projections: null + combine: null + default_input: null + exponent: null + shape: + - 1 + type: int64 + functions: + A_Linear_Function_6: + metadata: + type: Linear + enable_output_type_conversion: true + variable: + - - 0 + output_type: FunctionOutputType.NP_2D_ARRAY + has_initializers: false + changes_shape: false + execute_until_finished: true + max_executions_before_finished: 1000 + bounds: null + function: linear + args: + intercept: 2.0 + slope: 5.0 + variable0: A_InputPort_0 + output_ports: + A_RESULT: + metadata: + type: OutputPort + require_projection_in_composition: true + variable: + - 2.0 + has_initializers: false + execute_until_finished: true + max_executions_before_finished: 1000 + projections: null + value: A_Linear_Function_6 + shape: + - 1 + type: float64 + B: + metadata: + type: TransferMechanism + termination_measure_value: 0.0 + output_labels_dict: {} + has_initializers: false + max_executions_before_finished: 1000 + variable: + - - 0 + input_labels_dict: {} + input_port_variables: null + execute_until_finished: true + termination_comparison_op: <= + termination_measure: + id: Distance_Function_2_3 + metadata: + type: Distance + enable_output_type_conversion: false + variable: + - - - 0 + - - - 0 + output_type: FunctionOutputType.DEFAULT + has_initializers: false + changes_shape: false + execute_until_finished: true + max_executions_before_finished: 1000 + metric: max_abs_diff + normalize: false + function: distance + args: {} + input_ports: null + termination_threshold: null + integrator_mode: false + on_resume_integrator_mode: current_value + output_ports: + - RESULTS + integrator_function: + id: AdaptiveIntegrator_Function_1 + metadata: + type: AdaptiveIntegrator + has_initializers: true + max_executions_before_finished: 1000 + variable: + - - 0 + output_type: FunctionOutputType.DEFAULT + changes_shape: false + enable_output_type_conversion: false + initializer: + - - 0 + execute_until_finished: true + args: + offset: 0.0 + noise: 0.0 + rate: 0.5 + value: (1 - rate) * previous_value + rate * variable0 + + noise + offset + clip: null + integrator_function_value: + - - 0 + input_ports: + B_InputPort_0: + metadata: + type: InputPort + require_projection_in_composition: true + variable: + - 0 + has_initializers: false + internal_only: false + shadow_inputs: null + execute_until_finished: true + max_executions_before_finished: 1000 + weight: null + projections: null + combine: null + default_input: null + exponent: null + shape: + - 1 + type: int64 + functions: + B_Logistic_Function_0: + metadata: + type: Logistic + has_initializers: false + max_executions_before_finished: 1000 + variable: + - - 0 + output_type: FunctionOutputType.NP_2D_ARRAY + changes_shape: false + enable_output_type_conversion: true + execute_until_finished: true + bounds: + - 0 + - 1 + function: logistic + args: + offset: 0.0 + scale: 1.0 + x_0: 0 + bias: 0.0 + gain: 1.0 + variable0: B_InputPort_0 + output_ports: + B_RESULT: + metadata: + type: OutputPort + require_projection_in_composition: true + variable: + - 0.5 + has_initializers: false + execute_until_finished: true + max_executions_before_finished: 1000 + projections: null + value: B_Logistic_Function_0 + shape: + - 1 + type: float64 + edges: + MappingProjection_from_A_RESULT__to_B_InputPort_0_: + sender: A + receiver: B + sender_port: A_RESULT + receiver_port: B_InputPort_0 + metadata: + type: MappingProjection + has_initializers: false + execute_until_finished: true + max_executions_before_finished: 1000 + weight: null + exponent: null + functions: + LinearMatrix_Function_0: + metadata: + type: LinearMatrix + enable_output_type_conversion: false + A: + - 2.0 + output_type: FunctionOutputType.DEFAULT + has_initializers: false + changes_shape: false + execute_until_finished: true + max_executions_before_finished: 1000 + bounds: null + function: onnx::MatMul + args: + B: + - - 1.0 + parameters: + weight: 1 + conditions: + node_specific: + A: + type: EveryNPasses + kwargs: + n: 1 + time_scale: TimeScale.ENVIRONMENT_STATE_UPDATE + B: + type: EveryNCalls + kwargs: + dependency: A + n: 2 + termination: + environment_sequence: + type: AfterNEnvironmentStateUpdates + kwargs: + n: 1 + time_scale: TimeScale.ENVIRONMENT_SEQUENCE + environment_state_update: + type: All + kwargs: + args: + - type: Not + kwargs: + condition: + type: BeforeNCalls + kwargs: + dependency: B + n: 5 + time_scale: TimeScale.ENVIRONMENT_STATE_UPDATE