Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat/comp/inputs #2259

Merged
merged 366 commits into from
Dec 23, 2021
Merged

Feat/comp/inputs #2259

merged 366 commits into from
Dec 23, 2021

Conversation

jdcpni
Copy link
Collaborator

@jdcpni jdcpni commented Dec 23, 2021

• composition.py
  - add _check_for_unused_projections(): warns if any projections are specified for Nodes that are not used in the comp
  -  _update_shadow_projections: report error for failure to find correct_sender

jdcpni and others added 30 commits November 21, 2021 16:12
   - test_parameterestimationcomposition
   - test_composition/test_partially_overlapping_control_specs (ADDED IN THIS COMMINT)

- All relevant changes to this branch are marked as "11/21/21."
  However, most are commented out as they break other things.

- The tests above both involve local control specifications (on mechanism within a nested comp)
  and on the OCM for the outer composition, some of which are for the same nested mechs

- Both tests fail with:
   "AttributeError: 'NoneType' object has no attribute '_get_by_time_scale'" (in component.py LINE 3276)
   This may be due to a problem with context setting, since the error is because the modulation Parameter
   of the ControlProjection is returning "None" rather than "multiplicative_param" (when called with get(context)),
   whereas "multiplicative_param" is returned with a call to get() (i.e., with no context specified)

- Most of test_partially_overlapping_control_specs is passed if
   changes marked "11/21/21 NEW" in optimizationcontrolmechanism.py (LINE 1390) are implemented,
   but it does not properly route ControlProjections through parameter_CIMS (see last assert in test).
   Furthermore, test_parameterestimationcompsition fails with the mod param error, even though the
   model has similar structure (i.e., outer composition -- in this case a ParameterEstimationComposition)
   with an OCM that is given control specs that overlap with ones in a nested composition.

- There are also several other things in composition I found puzzling and tried modifying, but that cuased failures:
  - _get_control_signals_for_composition():
      - seems "if node.controller" should be "if **not** node.controller" (emphasis added just for comment)
      - "append" should be "extend"
  - _instantiate_control_projection():
      -  call to self.controller._activate_projections_for_composition (at end of method) should not be indented
  - rename _check_projection_initialization_status -> _check_controller_initialization_status
  - add _check_nodes_initialization_status(context=context)
    (and calls it with _check_controller_initialization_status)
  retore append of control_signals in _instantiate_control_projections()
  restore append of control_signals in _instantiate_control_projections()

• test_composition.py:
  add test_partially_overlapping_local_and_control_mech_control_specs_in_unnested_and_nested_comp
…unnested_and_nested_comp():

  - added clear_registry() to allow names to be reused in both runs of test
  docstring:  added projections entry to list of attributes
  - add_controller:  added call to _add_node_aux_components() for controller
  _add_node_aux_components(): added deletion of item from aux_components if instantiated
  - comment out _add_node_aux_components() (causing new failures)
  - move _instantiate_control_projections to be with _instantiate_control_projections,
       after self.add_node(self.controller.objective_mechanism (to be more orderly)
…rtially_overlapping...

  (with addition of _add_aux_components in add_controller commented out)
…y one test:

    - test_agent_rep_assignement_as_controller_and_replacement
  - add_controller:  few more minor mods;
  still passes all tests
  - __init__: resrict specification to only one of control, modulatory_signals, or control_signals (synonyms)
jdcpni and others added 26 commits December 21, 2021 15:51
  - get_results_by_nodes: allow specification of individual nodes
  - get_results_by_nodes: allow specification of individual nodes
  - get_results_by_nodes: allow specification of individual nodes
…sity/PsyNeuLink into feat/comp/inputs

� Conflicts:
�	psyneulink/core/compositions/composition.py
  add input_labels and output_labels as args to constructor
• composition.py:  found bug with specification of shadows and probes between "parallel" compositions.
  - updates to contribtors
  - add links to CGO paper
  _update_shadow_projections: report error for failure to find correct_sender
  - add _check_for_unused_projections(): warns if any projections are specified for Nodes that are not used in the comp
…Link into feat/comp/inputs

� Conflicts:
�	README.rst
�	psyneulink/core/compositions/composition.py
@github-actions
Copy link

This PR causes the following changes to the html docs (ubuntu-latest-3.7-x64):

diff -r docs-base/Composition.html docs-head/Composition.html
3624,3625c3624,3632
< Validate that all OuputStates with require_projection_in_composition == True have an efferent Projection.
< Validate that all Projections have senders and receivers.</p>
---
> Validate that all OutputPorts with require_projection_in_composition == True have an efferent Projection.
> Validate that all Projections have senders and receivers.
> Issue warning if any Projections are to/from nodes not in Composition.projections</p>
> </dd></dl>
> 
> <dl class="py method">
> <dt class="sig sig-object py" id="psyneulink.core.compositions.composition.Composition._check_for_unused_projections">
> <span class="sig-name descname"><span class="pre">_check_for_unused_projections</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">context</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#psyneulink.core.compositions.composition.Composition._check_for_unused_projections" title="Permalink to this definition">¶</a></dt>
> <dd><p>Warn if there are any Nodes in the Composition, or any nested within it, that are not used.</p>
diff -r docs-base/_sources/index.rst.txt docs-head/_sources/index.rst.txt
5a6,10
> .. *****************************************************************************************
> .. ****** NOTE:  UPDATES TO THIS PAGE SHOULD ALSO BE MADE TO README.rst ********************
> .. *****************************************************************************************
> 
> 
diff -r docs-base/genindex.html docs-head/genindex.html
290a291,292
>       <li><a href="Composition.html#psyneulink.core.compositions.composition.Composition._check_for_unused_projections">_check_for_unused_projections() (psyneulink.core.compositions.composition.Composition method)</a>
> </li>
649,650d650
<       <li><a href="ControlMechanism.html#psyneulink.core.components.mechanisms.modulatory.control.controlmechanism.ControlMechanism._instantiate_objective_mechanism">_instantiate_objective_mechanism() (psyneulink.core.components.mechanisms.modulatory.control.controlmechanism.ControlMechanism method)</a>
< </li>
652a653,654
>       <li><a href="ControlMechanism.html#psyneulink.core.components.mechanisms.modulatory.control.controlmechanism.ControlMechanism._instantiate_objective_mechanism">_instantiate_objective_mechanism() (psyneulink.core.components.mechanisms.modulatory.control.controlmechanism.ControlMechanism method)</a>
> </li>
Binary files docs-base/objects.inv and docs-head/objects.inv differ
diff -r docs-base/searchindex.js docs-head/searchindex.js
1c1
< Search.setIndex({docnames:["AGT","AGTControlMechanism","AutoAssociativeLearningMechanism","AutoAssociativeProjection","AutodiffComposition","BasicsAndPrimer","BotvinickConflictMonitoringModel","BustamanteStroopXORLVOCModel","Cohen_HustonModel","CombinationFunctions","ComparatorMechanism","Compilation","Component","Components","Composition","CompositionFunctionApproximator","CompositionInterfaceMechanism","Compositions","Condition","Context","ContrastiveHebbianMechanism","ContributorsGuide","ControlMechanism","ControlMechanisms","ControlProjection","ControlProjections","ControlSignal","ConventionsAndDefinitions","Core","DDM","DefaultControlMechanism","Defaults","DistributionFunctions","EVC","EVCAuxiliary","EVCControlMechanism","EpisodicMemoryMechanism","Function","Functions","GatingMechanism","GatingMechanisms","GatingProjection","GatingProjections","GatingSignal","GilzenratModel","InputPort","IntegratorFunctions","IntegratorMechanism","IntegratorMechanisms","KWTAMechanism","Keywords","KohonenMechanism","LCAMechanism","LCControlMechanism","LCMechanism","LeabraMechanism","LearningFunctions","LearningMechanism","LearningMechanisms","LearningProjection","LearningProjections","LearningSignal","Library","Log","MappingProjection","MaskedMappingProjection","Mechanism","Mechanisms","MemoryFunctions","Models","ModulatoryMechanism","ModulatoryMechanisms","ModulatoryProjection","ModulatoryProjections","ModulatorySignal","MontagueModel","NieuwenhuisModel","NonStatefulFunctions","ObjectiveFunctions","ObjectiveMechanism","ObjectiveMechanisms","OptimizationControlMechanism","OptimizationFunctions","OutputPort","PCTC_model","ParameterEstimationComposition","ParameterPort","Parameters","Pathway","PathwayProjection","PathwayProjections","Port","PredictionErrorMechanism","Preferences","ProcessingMechanism","ProcessingMechanisms","Projection","Projections","QuickReference","RecurrentTransferMechanism","RefactoredLearningGuide","Registry","RegressionCFA","Report","Scheduler","Scheduling","SelectionFunctions","Services","StatefulFunction","StatefulFunctions","Subystems","Time","TransferFunctions","TransferMechanism","TransferMechanisms","UserDefinedFunction","UserGuide","UserGuide_TBD","Visualization","globals","index","index_logo_with_text","json"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":4,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,sphinx:56},filenames:["AGT.rst","AGTControlMechanism.rst","AutoAssociativeLearningMechanism.rst","AutoAssociativeProjection.rst","AutodiffComposition.rst","BasicsAndPrimer.rst","BotvinickConflictMonitoringModel.rst","BustamanteStroopXORLVOCModel.rst","Cohen_HustonModel.rst","CombinationFunctions.rst","ComparatorMechanism.rst","Compilation.rst","Component.rst","Components.rst","Composition.rst","CompositionFunctionApproximator.rst","CompositionInterfaceMechanism.rst","Compositions.rst","Condition.rst","Context.rst","ContrastiveHebbianMechanism.rst","ContributorsGuide.rst","ControlMechanism.rst","ControlMechanisms.rst","ControlProjection.rst","ControlProjections.rst","ControlSignal.rst","ConventionsAndDefinitions.rst","Core.rst","DDM.rst","DefaultControlMechanism.rst","Defaults.rst","DistributionFunctions.rst","EVC.rst","EVCAuxiliary.rst","EVCControlMechanism.rst","EpisodicMemoryMechanism.rst","Function.rst","Functions.rst","GatingMechanism.rst","GatingMechanisms.rst","GatingProjection.rst","GatingProjections.rst","GatingSignal.rst","GilzenratModel.rst","InputPort.rst","IntegratorFunctions.rst","IntegratorMechanism.rst","IntegratorMechanisms.rst","KWTAMechanism.rst","Keywords.rst","KohonenMechanism.rst","LCAMechanism.rst","LCControlMechanism.rst","LCMechanism.rst","LeabraMechanism.rst","LearningFunctions.rst","LearningMechanism.rst","LearningMechanisms.rst","LearningProjection.rst","LearningProjections.rst","LearningSignal.rst","Library.rst","Log.rst","MappingProjection.rst","MaskedMappingProjection.rst","Mechanism.rst","Mechanisms.rst","MemoryFunctions.rst","Models.rst","ModulatoryMechanism.rst","ModulatoryMechanisms.rst","ModulatoryProjection.rst","ModulatoryProjections.rst","ModulatorySignal.rst","MontagueModel.rst","NieuwenhuisModel.rst","NonStatefulFunctions.rst","ObjectiveFunctions.rst","ObjectiveMechanism.rst","ObjectiveMechanisms.rst","OptimizationControlMechanism.rst","OptimizationFunctions.rst","OutputPort.rst","PCTC_model.rst","ParameterEstimationComposition.rst","ParameterPort.rst","Parameters.rst","Pathway.rst","PathwayProjection.rst","PathwayProjections.rst","Port.rst","PredictionErrorMechanism.rst","Preferences.rst","ProcessingMechanism.rst","ProcessingMechanisms.rst","Projection.rst","Projections.rst","QuickReference.rst","RecurrentTransferMechanism.rst","RefactoredLearningGuide.rst","Registry.rst","RegressionCFA.rst","Report.rst","Scheduler.rst","Scheduling.rst","SelectionFunctions.rst","Services.rst","StatefulFunction.rst","StatefulFunctions.rst","Subystems.rst","Time.rst","TransferFunctions.rst","TransferMechanism.rst","TransferMechanisms.rst","UserDefinedFunction.rst","UserGuide.rst","UserGuide_TBD.rst","Visualization.rst","globals.rst","index.rst","index_logo_with_text.rst","json.rst"],objects:{"psyneulink.core.components":{component:[12,0,0,"-"]},"psyneulink.core.components.component":{Component:[12,1,1,""]},"psyneulink.core.components.component.Component":{"function":[12,4,1,""],_check_args:[12,2,1,""],_check_for_composition:[12,2,1,""],_deferred_init:[12,2,1,""],_dependent_components:[12,3,1,""],_get_param_value_from_tuple:[12,2,1,""],_handle_default_variable:[12,2,1,""],_handle_size:[12,2,1,""],_instantiate_defaults:[12,2,1,""],_instantiate_function:[12,2,1,""],_instantiate_parameter_classes:[12,2,1,""],_model_spec_class_name_is_generic:[12,4,1,""],_model_spec_generic_type_name:[12,4,1,""],_model_spec_parameter_blacklist:[12,3,1,""],_parameter_components:[12,3,1,""],_parse_arg_generic:[12,2,1,""],_parse_arg_variable:[12,2,1,""],_parse_function_variable:[12,2,1,""],_set_multiple_parameter_values:[12,2,1,""],_specified_variable_shape_flexibility:[12,4,1,""],_validate:[12,2,1,""],_validate_and_assign_runtime_params:[12,2,1,""],_validate_function:[12,2,1,""],_validate_params:[12,2,1,""],_validate_variable:[12,2,1,""],all_dependent_parameters:[12,2,1,""],current_execution_time:[12,4,1,""],defaults:[12,4,1,""],execute:[12,2,1,""],execute_until_finished:[12,4,1,""],execution_count:[12,4,1,""],function_parameters:[12,3,1,""],initialization_status:[12,4,1,""],is_finished:[12,2,1,""],log:[12,4,1,""],log_values:[12,2,1,""],loggable_items:[12,3,1,""],logged_items:[12,3,1,""],max_executions_before_finished:[12,4,1,""],most_recent_context:[12,3,1,""],name:[12,4,1,""],num_executions:[12,4,1,""],num_executions_before_finished:[12,4,1,""],parameters:[12,4,1,""],prefs:[12,4,1,""],reset:[12,2,1,""],reset_params:[12,2,1,""],reset_stateful_function_when:[12,4,1,""],set_delivery_conditions:[12,2,1,""],set_log_conditions:[12,2,1,""],size:[12,4,1,""],stateful_parameters:[12,3,1,"id0"],value:[12,4,1,""],variable:[12,4,1,""]},"psyneulink.core.components.functions":{"function":[38,0,0,"-"],combinationfunctions:[9,0,0,"-"],distributionfunctions:[32,0,0,"-"],learningfunctions:[56,0,0,"-"],objectivefunctions:[78,0,0,"-"],optimizationfunctions:[82,0,0,"-"],selectionfunctions:[106,0,0,"-"],transferfunctions:[112,0,0,"-"],userdefinedfunction:[115,0,0,"-"]},"psyneulink.core.components.functions.combinationfunctions":{CombineMeans:[9,1,1,""],Concatenate:[9,1,1,""],LinearCombination:[9,1,1,""],PredictionErrorDeltaFunction:[9,1,1,""],Rearrange:[9,1,1,""],Reduce:[9,1,1,""]},"psyneulink.core.components.functions.combinationfunctions.CombineMeans":{_function:[9,2,1,""],_validate_params:[9,2,1,""],_validate_variable:[9,2,1,""],exponents:[9,4,1,""],name:[9,4,1,""],offset:[9,4,1,""],operation:[9,4,1,""],owner:[9,4,1,""],prefs:[9,4,1,""],scale:[9,4,1,""],variable:[9,4,1,""],weights:[9,4,1,""]},"psyneulink.core.components.functions.combinationfunctions.Concatenate":{_function:[9,2,1,""],_validate_params:[9,2,1,""],_validate_variable:[9,2,1,""],default_variable:[9,4,1,""],name:[9,4,1,""],offset:[9,4,1,""],owner:[9,4,1,""],prefs:[9,4,1,""],scale:[9,4,1,""]},"psyneulink.core.components.functions.combinationfunctions.LinearCombination":{_function:[9,2,1,""],_validate_params:[9,2,1,""],_validate_variable:[9,2,1,""],exponents:[9,4,1,""],name:[9,4,1,""],offset:[9,4,1,""],operation:[9,4,1,""],owner:[9,4,1,""],prefs:[9,4,1,""],scale:[9,4,1,""],variable:[9,4,1,""],weights:[9,4,1,""]},"psyneulink.core.components.functions.combinationfunctions.PredictionErrorDeltaFunction":{_function:[9,2,1,""],_validate_params:[9,2,1,""],_validate_variable:[9,2,1,""]},"psyneulink.core.components.functions.combinationfunctions.Rearrange":{_function:[9,2,1,""],_instantiate_attributes_before_function:[9,2,1,""],_validate_params:[9,2,1,""],_validate_variable:[9,2,1,""],arrangement:[9,4,1,""],default_variable:[9,4,1,""],name:[9,4,1,""],offset:[9,4,1,""],owner:[9,4,1,""],prefs:[9,4,1,""],scale:[9,4,1,""]},"psyneulink.core.components.functions.combinationfunctions.Reduce":{_function:[9,2,1,""],_validate_params:[9,2,1,""],_validate_variable:[9,2,1,""],default_variable:[9,4,1,""],name:[9,4,1,""],offset:[9,4,1,""],operation:[9,4,1,""],owner:[9,4,1,""],prefs:[9,4,1,""],scale:[9,4,1,""]},"psyneulink.core.components.functions.distributionfunctions":{DistributionFunction:[32,1,1,""],DriftDiffusionAnalytical:[32,1,1,""],ExponentialDist:[32,1,1,""],GammaDist:[32,1,1,""],NormalDist:[32,1,1,""],UniformDist:[32,1,1,""],UniformToNormalDist:[32,1,1,""],WaldDist:[32,1,1,""]},"psyneulink.core.components.functions.distributionfunctions.DriftDiffusionAnalytical":{_compute_conditional_rt_moments:[32,2,1,""],_function:[32,2,1,""],bias:[32,4,1,""],derivative:[32,2,1,""],drift_rate:[32,4,1,""],name:[32,4,1,""],noise:[32,4,1,""],owner:[32,4,1,""],prefs:[32,4,1,""],shenhav_et_al_compat_mode:[32,3,1,""],starting_point:[32,4,1,""],t0:[32,4,1,""],threshold:[32,4,1,""],variable:[32,4,1,""]},"psyneulink.core.components.functions.distributionfunctions.ExponentialDist":{beta:[32,4,1,""],name:[32,4,1,""],owner:[32,4,1,""],params:[32,4,1,""],prefs:[32,4,1,""],random_state:[32,4,1,""]},"psyneulink.core.components.functions.distributionfunctions.GammaDist":{dist_shape:[32,4,1,""],name:[32,4,1,""],owner:[32,4,1,""],params:[32,4,1,""],prefs:[32,4,1,""],random_state:[32,4,1,""],scale:[32,4,1,""]},"psyneulink.core.components.functions.distributionfunctions.NormalDist":{_validate_params:[32,2,1,""],mean:[32,4,1,""],name:[32,4,1,""],owner:[32,4,1,""],params:[32,4,1,""],prefs:[32,4,1,""],random_state:[32,4,1,""],standard_deviation:[32,4,1,""]},"psyneulink.core.components.functions.distributionfunctions.UniformDist":{high:[32,4,1,""],low:[32,4,1,""],name:[32,4,1,""],owner:[32,4,1,""],params:[32,4,1,""],prefs:[32,4,1,""],random_state:[32,4,1,""]},"psyneulink.core.components.functions.distributionfunctions.UniformToNormalDist":{mean:[32,4,1,""],name:[32,4,1,""],owner:[32,4,1,""],params:[32,4,1,""],prefs:[32,4,1,""],random_state:[32,4,1,""],standard_deviation:[32,4,1,""]},"psyneulink.core.components.functions.function":{ArgumentTherapy:[38,1,1,""],Function_Base:[38,1,1,""]},"psyneulink.core.components.functions.function.ArgumentTherapy":{Manner:[38,1,1,""],_function:[38,2,1,""],_validate_params:[38,2,1,""],_validate_variable:[38,2,1,""],name:[38,4,1,""],owner:[38,4,1,""],pertinacity:[38,4,1,""],prefs:[38,4,1,""],propensity:[38,4,1,""],variable:[38,4,1,""]},"psyneulink.core.components.functions.function.Function_Base":{"function":[38,4,1,""],_model_spec_parameter_blacklist:[38,3,1,""],_parse_arg_generic:[38,2,1,""],_validate_parameter_spec:[38,2,1,""],name:[38,4,1,""],owner:[38,4,1,""],prefs:[38,4,1,""],variable:[38,4,1,""]},"psyneulink.core.components.functions.learningfunctions":{BackPropagation:[56,1,1,""],BayesGLM:[56,1,1,""],ContrastiveHebbian:[56,1,1,""],Hebbian:[56,1,1,""],Kohonen:[56,1,1,""],LearningFunction:[56,1,1,""],Reinforcement:[56,1,1,""],TDLearning:[56,1,1,""]},"psyneulink.core.components.functions.learningfunctions.BackPropagation":{_function:[56,2,1,""],_validate_params:[56,2,1,""],_validate_variable:[56,2,1,""],activation_derivative_fct:[56,4,1,""],activation_input:[56,4,1,""],activation_output:[56,4,1,""],default_learning_rate:[56,4,1,""],error_matrix:[56,4,1,""],error_signal:[56,4,1,""],learning_rate:[56,4,1,""],loss_function:[56,4,1,""],owner:[56,4,1,""],prefs:[56,4,1,""],variable:[56,4,1,""]},"psyneulink.core.components.functions.learningfunctions.BayesGLM":{Lambda_n:[56,4,1,""],Lambda_prior:[56,4,1,""],_function:[56,2,1,""],_handle_default_variable:[56,2,1,""],gamma_shape_0:[56,4,1,""],gamma_shape_n:[56,4,1,""],gamma_shape_prior:[56,4,1,""],gamma_size_0:[56,4,1,""],gamma_size_n:[56,4,1,""],gamma_size_prior:[56,4,1,""],initialize_priors:[56,2,1,""],mu_0:[56,4,1,""],mu_n:[56,4,1,""],mu_prior:[56,4,1,""],owner:[56,4,1,""],prefs:[56,4,1,""],random_state:[56,4,1,""],reset:[56,2,1,""],sample_weights:[56,2,1,""],sigma_0:[56,4,1,""],variable:[56,4,1,""],weights_sample:[56,4,1,""]},"psyneulink.core.components.functions.learningfunctions.ContrastiveHebbian":{"function":[56,4,1,""],_function:[56,2,1,""],_validate_params:[56,2,1,""],_validate_variable:[56,2,1,""],default_learning_rate:[56,4,1,""],learning_rate:[56,4,1,""],owner:[56,4,1,""],prefs:[56,4,1,""],variable:[56,4,1,""]},"psyneulink.core.components.functions.learningfunctions.Hebbian":{"function":[56,4,1,""],_function:[56,2,1,""],_validate_params:[56,2,1,""],_validate_variable:[56,2,1,""],default_learning_rate:[56,4,1,""],learning_rate:[56,4,1,""],owner:[56,4,1,""],prefs:[56,4,1,""],variable:[56,4,1,""]},"psyneulink.core.components.
...

See CI logs for the full diff.

@coveralls
Copy link

Coverage Status

Coverage decreased (-0.009%) to 84.272% when pulling 626b601 on feat/comp/inputs into 9979c07 on devel.

@jdcpni jdcpni merged commit 436f5d9 into devel Dec 23, 2021
@jdcpni jdcpni deleted the feat/comp/inputs branch December 23, 2021 21:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants