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

Refactor/ocm/state features all as input ports #2355

Merged
merged 387 commits into from
Mar 23, 2022

Conversation

jdcpni
Copy link
Collaborator

@jdcpni jdcpni commented Mar 23, 2022

• composition.py:

  • add _is_in_composition() method: recursively search for ports, mechs and comps including cims's

• optimizationcontrolmechanism.py:

  • state_features & state_feature_values:
    • use descriptive str as key if INPUT Node InputPort is not yet in ocm.agent_rep
    • use descriptive str if source is not yet in ocm.composition
  • _specified_INPUT_Node_InputPorts_in_order: use name (str) of items not yet in agent_rep rather than 'None'

jdcpni and others added 30 commits November 28, 2021 22:14
  - add_projection:  delete instantiation of shadow projections (handled by _update_shadow_projections)
  - add_projection:  delete instantiation of shadow projections (handled by _update_shadow_projections)
  - remove calls to _update_shadows_dict
  - add_projection:  delete instantiation of shadow projections (handled by _update_shadow_projections)
  - remove calls to _update_shadows_dict
  - added property shadowing_dict that has shadowing ports as keys and the ports they shadow as values
  - refactored _update_shadowing_projections to use shadowing_dict
  - _update_state_input_ports:  modified validations for nested nodes;  still failing some tests
  - _update_state_input_ports:
     more careful and informative validation that state_input_ports are in comp or nested comp and are INPUT nodes thereof;
     passes all tests except test_two_origins_two_input_ports as before
  _get_invalid_aux_components():  defer all shadow projections until _update_shadow_projections
  _get_invalid_aux_components():  bug fix in test for shadow projections
even ports with no incoming projections have variable at least length 1
  add_node(): marked (but haven't removed) code block instantiating shadow_projections
   that seems now to be redundant with _update_shadow_projection
  - _assign_cim_components: supress showing projections not in composition
  _analyze_graph():  add extra call to _determine_node_roles after _update_shadow_projections
  _run():  moved block of code at beginning initializing scheduler to after
           _complete_init_of_partially_initialized_nodes and _analyze_graph()

• show_graph.py
  - add test to all loops on projections:  "if proj in composition.projection"
  - add show_projections_not_in_composition option for debugging
  _update_shadow_projections(): delete unused shadow projections and corresponding ports
  _update_shadow_projections(): fix bug in deletion of unused shadow projections and ports

• test_show_graph:  tests failing, need mods to accomodate changes
  _analyze_graph():  add extra call to _determine_node_roles after _update_shadow_projections
  _run():  moved block of code at beginning initializing scheduler to after
           _complete_init_of_partially_initialized_nodes and _analyze_graph()

• show_graph.py
  - add test to all loops on projections:  "if proj in composition.projection"
  fixes; now passes all show_graph tests
  _update_shadow_projections:  raise error for attempt to shadow INTERNAL Node of nested comp
… into refactor/ocm/state_features_all_as_input_ports

# Conflicts:
#	psyneulink/core/components/mechanisms/modulatory/control/optimizationcontrolmechanism.py
…Link into refactor/ocm/state_features_all_as_input_ports

� Conflicts:
�	psyneulink/core/components/mechanisms/modulatory/control/optimizationcontrolmechanism.py
�	tests/composition/test_control.py
  - _specified_INPUT_Node_InputPorts_in_order:  use name (str) of items not yet in agent_rep rather than 'None'
  - state_features & state_feature_values:
    - use name (str) as key if INPUT Node InputPort is not yet in agent_rep
    - use name (str) if source (spec) is not yet in Composition
  - state_features:
    - convert all keys and values to port.full_name
    - if not yet in comp or agent_rep, add "DEFERRED..."
  PASSES deferred_init and partial_deferred_init tests
  - state_feature_values: strings for missing keys or values
  add _is_in_composition method
…Link into refactor/ocm/state_features_all_as_input_ports
…nto refactor/ocm/state_features_all_as_input_ports
@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
3437c3437
< <dd><p>Recursive search for and return all nested compositions.</p>
---
> <dd><p>Recursively search for and return all nested compositions.</p>
3446a3447,3453
> </dd></dl>
> 
> <dl class="py method">
> <dt class="sig sig-object py" id="psyneulink.core.compositions.composition.Composition._is_in_composition">
> <span class="sig-name descname"><span class="pre">_is_in_composition</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">component</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">nested</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#psyneulink.core.compositions.composition.Composition._is_in_composition" title="Permalink to this definition">¶</a></dt>
> <dd><p>Return True if component is in Composition, including any nested Compositions if <strong>nested</strong> is True
> Include input_CIM and output_CIM for self and all nested Compositions</p>
diff -r docs-base/OptimizationControlMechanism.html docs-head/OptimizationControlMechanism.html
352c352
< <figure class="align-default" id="id9">
---
> <figure class="align-default" id="id7">
362c362
< <a class="reference internal" href="CompositionFunctionApproximator.html"><span class="doc">CompositionFunctionApproximator</span></a> as the <a class="reference internal" href="#psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.agent_rep" title="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.agent_rep"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">agent_rep</span></code></a>.</span><a class="headerlink" href="#id9" title="Permalink to this image">¶</a></p>
---
> <a class="reference internal" href="CompositionFunctionApproximator.html"><span class="doc">CompositionFunctionApproximator</span></a> as the <a class="reference internal" href="#psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.agent_rep" title="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.agent_rep"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">agent_rep</span></code></a>.</span><a class="headerlink" href="#id7" title="Permalink to this image">¶</a></p>
570c570
< <ul class="simple" id="optimizationcontrolmechanism-mechanism-state-feature">
---
> <ul id="optimizationcontrolmechanism-mechanism-state-feature">
572c572
< (this is the same as explicitly specifying the Mechanism’s  input_port, as described <a class="reference internal" href="#optimizationcontrolmechanism-input-port-state-feature"><span class="std std-ref">above</span></a>).  If the Mechanism is in a <a class="reference internal" href="Composition.html#composition-nested"><span class="std std-ref">nested Composition</span></a>, it must be an <a class="reference internal" href="Composition.html#psyneulink.core.compositions.composition.NodeRole.INPUT" title="psyneulink.core.compositions.composition.NodeRole.INPUT"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">INPUT</span></code></a> <a class="reference internal" href="Composition.html#composition-nodes"><span class="std std-ref">Node</span></a> of that Composition
---
> (this is the same as explicitly specifying the Mechanism’s  input_port, as described <a class="reference internal" href="#optimizationcontrolmechanism-input-port-state-feature"><span class="std std-ref">above</span></a>). If the Mechanism is in a <a class="reference internal" href="Composition.html#composition-nested"><span class="std std-ref">nested Composition</span></a>, it must be an <a class="reference internal" href="Composition.html#psyneulink.core.compositions.composition.NodeRole.INPUT" title="psyneulink.core.compositions.composition.NodeRole.INPUT"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">INPUT</span></code></a> <a class="reference internal" href="Composition.html#composition-nodes"><span class="std std-ref">Node</span></a> of that Composition
574c574,585
< needs to be used, it must be specified explicitly (as described <a class="reference internal" href="#optimizationcontrolmechanism-output-port-state-feature"><span class="std std-ref">above</span></a>).</p></li>
---
> needs to be used, it must be specified explicitly (as described <a class="reference internal" href="#optimizationcontrolmechanism-output-port-state-feature"><span class="std std-ref">above</span></a>).</p>
> <div class="admonition note">
> <p class="admonition-title">Note</p>
> <p>The use of a Mechanism to specify the shadowing of its <a class="reference internal" href="InputPort.html#inputport-primary"><span class="std std-ref">primary InputPort</span></a> is unique to
> its specification the <strong>state_features</strong> argument of an OptimizationControlMechanism, and differs from the
> ordinary usage where its specifies a Projection from its <a class="reference internal" href="OutputPort.html#outputport-primary"><span class="std std-ref">primary OutputPort</span></a> (see
> <a class="reference internal" href="InputPort.html#inputport-projection-source-specification"><span class="std std-ref">InputPort specification</span></a>).  This difference extends to the use
> of a Mechanism in the <em>PROJECTIONS</em> entry of an <a class="reference internal" href="InputPort.html#inputport-specification-dictionary"><span class="std std-ref">InputPort specification dictionary</span></a> that is assigned to the <strong>state_features</strong> argument, where there too
> it designates shadowing of its <a class="reference internal" href="InputPort.html#inputport-primary"><span class="std std-ref">primary InputPort</span></a> rather than a <a class="reference internal" href="Projection.html"><span class="doc">Projection</span></a> from its
> <a class="reference internal" href="OutputPort.html#outputport-primary"><span class="std std-ref">primary OutputPort</span></a>.</p>
> </div>
> </li>
713,714c724,725
< <a class="reference internal" href="#id8" title="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">state</span></code></a> attribute, and <a class="reference internal" href="#psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state_dict" title="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state_dict"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">state_dict</span></code></a>
< contains the Components associated with each value of <a class="reference internal" href="#id8" title="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">state</span></code></a>.</p>
---
> <a class="reference internal" href="#id4" title="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">state</span></code></a> attribute, and <a class="reference internal" href="#psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state_dict" title="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state_dict"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">state_dict</span></code></a>
> contains the Components associated with each value of <a class="reference internal" href="#id4" title="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">state</span></code></a>.</p>
1138c1149
< <dd><p>dictionary containing information about the Components corresponding to the values in <a class="reference internal" href="#id8" title="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">state</span></code></a>.  Keys are (<a class="reference internal" href="Port.html"><span class="doc">Port</span></a>, <a class="reference internal" href="Mechanism.html"><span class="doc">Mechanism</span></a>, <a class="reference internal" href="Composition.html"><span class="doc">Composition</span></a>, index) tuples,
---
> <dd><p>dictionary containing information about the Components corresponding to the values in <a class="reference internal" href="#id4" title="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">state</span></code></a>.  Keys are (<a class="reference internal" href="Port.html"><span class="doc">Port</span></a>, <a class="reference internal" href="Mechanism.html"><span class="doc">Mechanism</span></a>, <a class="reference internal" href="Composition.html"><span class="doc">Composition</span></a>, index) tuples,
1140c1151
< <a class="reference internal" href="#id8" title="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">state</span></code></a>, and values are its value in <a class="reference internal" href="#id8" title="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">state</span></code></a>. The initial entries are for the OptimizationControlMechanism’s
---
> <a class="reference internal" href="#id4" title="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">state</span></code></a>, and values are its value in <a class="reference internal" href="#id4" title="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">state</span></code></a>. The initial entries are for the OptimizationControlMechanism’s
1480c1491
< <dt>if there more sources listed than INPUT Nodes, leave the excess ones, and label them as</dt><dd><p>‘EXPECTED INPUT NODE n’ for later resolution (see below).</p>
---
> <dt>if there more sources listed than INPUT Nodes, leave the excess ones, and label them as</dt><dd><p>‘EXPECT &lt;specified INPUT Node InputPort name&gt;’ for later resolution (see below).</p>
1650c1661
< <dd><p>source} for all INPUT Nodes of agent_rep and/or ones specified in state_feature_specs.
---
> <dd><p>source name} for all state_features.
1652c1663
< If existing INPUT Node is not specified in state_feature_specs, assign None as source
---
> If existing INPUT Node is not specified in state_feature_specs, assign state_feature_default as source
1655,1656c1666,1667
< <div><p>assign “EXPECTED INPUT NODE n” as the entry for the key (where n is the sequential numbering of such refs);
< it should be resolved by runtime, or an error is generated.</p>
---
> <div><p>assign “DEFERRED INPUT NODE &lt;InputPort name&gt; OF &lt;agent_rep&gt;” as key for the entry;
> (it should be resolved by runtime, or an error is generated).</p>
1658,1660c1669,1671
< <dl class="field-list simple">
< <dt class="field-odd">Type</dt>
< <dd class="field-odd"><p>Return {InputPort</p>
---
> <dl class="simple">
> <dt>If a state_feature_spec is referenced that is not yet in ocm.composition,</dt><dd><p>assign “&lt;InputPort name&gt; NOT (YET) IN &lt;agent_rep&gt;” as the value of the entry;
> (it should be resolved by runtime, or an error is generated).</p>
1663,1674d1673
< </dd></dl>
< 
< <dl class="py method">
< <dt class="sig sig-object py" id="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism._get_state_feature_sources">
< <span class="sig-name descname"><span class="pre">_get_state_feature_sources</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism._get_state_feature_sources" title="Permalink to this definition">¶</a></dt>
< <dd><p>Dict with {InputPort: source} for all INPUT Nodes of agent_rep, and sources in <a href="#id4"><span class="problematic" id="id5">**</span></a>state_feature_specs.</p>
< </dd></dl>
< 
< <dl class="py property">
< <dt class="sig sig-object py" id="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state_feature_sources">
< <em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">state_feature_sources</span></span><a class="headerlink" href="#psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state_feature_sources" title="Permalink to this definition">¶</a></dt>
< <dd><p>source} for all INPUT Nodes of agent_rep, and sources in <a href="#id6"><span class="problematic" id="id7">**</span></a>state_feature_specs.</p>
1677c1676
< <dd class="field-odd"><p>Dict with {InputPort</p>
---
> <dd class="field-odd"><p>Return {InputPort name</p>
1683,1684c1682,1683
< <dt class="sig sig-object py" id="id8">
< <em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">state</span></span><a class="headerlink" href="#id8" title="Permalink to this definition">¶</a></dt>
---
> <dt class="sig sig-object py" id="id4">
> <em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">state</span></span><a class="headerlink" href="#id4" title="Permalink to this definition">¶</a></dt>
1704a1704,1715
> </dd></dl>
> 
> <dl class="py property">
> <dt class="sig sig-object py" id="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state_feature_sources">
> <em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">state_feature_sources</span></span><a class="headerlink" href="#psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state_feature_sources" title="Permalink to this definition">¶</a></dt>
> <dd><p>source} for all INPUT Nodes of agent_rep, and sources in <a href="#id5"><span class="problematic" id="id6">**</span></a>state_feature_specs.
> Used by state_distal_sources_and_destinations_dict()</p>
> <dl class="field-list simple">
> <dt class="field-odd">Type</dt>
> <dd class="field-odd"><p>Dict with {InputPort</p>
> </dd>
> </dl>
diff -r docs-base/genindex.html docs-head/genindex.html
529,530d528
<       <li><a href="OptimizationControlMechanism.html#psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism._get_state_feature_sources">_get_state_feature_sources() (psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism method)</a>
< </li>
754a753,754
>       <li><a href="Composition.html#psyneulink.core.compositions.composition.Composition._is_in_composition">_is_in_composition() (psyneulink.core.compos
...

See CI logs for the full diff.

1 similar comment
@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
3437c3437
< <dd><p>Recursive search for and return all nested compositions.</p>
---
> <dd><p>Recursively search for and return all nested compositions.</p>
3446a3447,3453
> </dd></dl>
> 
> <dl class="py method">
> <dt class="sig sig-object py" id="psyneulink.core.compositions.composition.Composition._is_in_composition">
> <span class="sig-name descname"><span class="pre">_is_in_composition</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">component</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">nested</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#psyneulink.core.compositions.composition.Composition._is_in_composition" title="Permalink to this definition">¶</a></dt>
> <dd><p>Return True if component is in Composition, including any nested Compositions if <strong>nested</strong> is True
> Include input_CIM and output_CIM for self and all nested Compositions</p>
diff -r docs-base/OptimizationControlMechanism.html docs-head/OptimizationControlMechanism.html
352c352
< <figure class="align-default" id="id9">
---
> <figure class="align-default" id="id7">
362c362
< <a class="reference internal" href="CompositionFunctionApproximator.html"><span class="doc">CompositionFunctionApproximator</span></a> as the <a class="reference internal" href="#psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.agent_rep" title="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.agent_rep"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">agent_rep</span></code></a>.</span><a class="headerlink" href="#id9" title="Permalink to this image">¶</a></p>
---
> <a class="reference internal" href="CompositionFunctionApproximator.html"><span class="doc">CompositionFunctionApproximator</span></a> as the <a class="reference internal" href="#psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.agent_rep" title="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.agent_rep"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">agent_rep</span></code></a>.</span><a class="headerlink" href="#id7" title="Permalink to this image">¶</a></p>
570c570
< <ul class="simple" id="optimizationcontrolmechanism-mechanism-state-feature">
---
> <ul id="optimizationcontrolmechanism-mechanism-state-feature">
572c572
< (this is the same as explicitly specifying the Mechanism’s  input_port, as described <a class="reference internal" href="#optimizationcontrolmechanism-input-port-state-feature"><span class="std std-ref">above</span></a>).  If the Mechanism is in a <a class="reference internal" href="Composition.html#composition-nested"><span class="std std-ref">nested Composition</span></a>, it must be an <a class="reference internal" href="Composition.html#psyneulink.core.compositions.composition.NodeRole.INPUT" title="psyneulink.core.compositions.composition.NodeRole.INPUT"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">INPUT</span></code></a> <a class="reference internal" href="Composition.html#composition-nodes"><span class="std std-ref">Node</span></a> of that Composition
---
> (this is the same as explicitly specifying the Mechanism’s  input_port, as described <a class="reference internal" href="#optimizationcontrolmechanism-input-port-state-feature"><span class="std std-ref">above</span></a>). If the Mechanism is in a <a class="reference internal" href="Composition.html#composition-nested"><span class="std std-ref">nested Composition</span></a>, it must be an <a class="reference internal" href="Composition.html#psyneulink.core.compositions.composition.NodeRole.INPUT" title="psyneulink.core.compositions.composition.NodeRole.INPUT"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">INPUT</span></code></a> <a class="reference internal" href="Composition.html#composition-nodes"><span class="std std-ref">Node</span></a> of that Composition
574c574,585
< needs to be used, it must be specified explicitly (as described <a class="reference internal" href="#optimizationcontrolmechanism-output-port-state-feature"><span class="std std-ref">above</span></a>).</p></li>
---
> needs to be used, it must be specified explicitly (as described <a class="reference internal" href="#optimizationcontrolmechanism-output-port-state-feature"><span class="std std-ref">above</span></a>).</p>
> <div class="admonition note">
> <p class="admonition-title">Note</p>
> <p>The use of a Mechanism to specify the shadowing of its <a class="reference internal" href="InputPort.html#inputport-primary"><span class="std std-ref">primary InputPort</span></a> is unique to
> its specification the <strong>state_features</strong> argument of an OptimizationControlMechanism, and differs from the
> ordinary usage where its specifies a Projection from its <a class="reference internal" href="OutputPort.html#outputport-primary"><span class="std std-ref">primary OutputPort</span></a> (see
> <a class="reference internal" href="InputPort.html#inputport-projection-source-specification"><span class="std std-ref">InputPort specification</span></a>).  This difference extends to the use
> of a Mechanism in the <em>PROJECTIONS</em> entry of an <a class="reference internal" href="InputPort.html#inputport-specification-dictionary"><span class="std std-ref">InputPort specification dictionary</span></a> that is assigned to the <strong>state_features</strong> argument, where there too
> it designates shadowing of its <a class="reference internal" href="InputPort.html#inputport-primary"><span class="std std-ref">primary InputPort</span></a> rather than a <a class="reference internal" href="Projection.html"><span class="doc">Projection</span></a> from its
> <a class="reference internal" href="OutputPort.html#outputport-primary"><span class="std std-ref">primary OutputPort</span></a>.</p>
> </div>
> </li>
713,714c724,725
< <a class="reference internal" href="#id8" title="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">state</span></code></a> attribute, and <a class="reference internal" href="#psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state_dict" title="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state_dict"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">state_dict</span></code></a>
< contains the Components associated with each value of <a class="reference internal" href="#id8" title="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">state</span></code></a>.</p>
---
> <a class="reference internal" href="#id4" title="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">state</span></code></a> attribute, and <a class="reference internal" href="#psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state_dict" title="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state_dict"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">state_dict</span></code></a>
> contains the Components associated with each value of <a class="reference internal" href="#id4" title="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">state</span></code></a>.</p>
1138c1149
< <dd><p>dictionary containing information about the Components corresponding to the values in <a class="reference internal" href="#id8" title="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">state</span></code></a>.  Keys are (<a class="reference internal" href="Port.html"><span class="doc">Port</span></a>, <a class="reference internal" href="Mechanism.html"><span class="doc">Mechanism</span></a>, <a class="reference internal" href="Composition.html"><span class="doc">Composition</span></a>, index) tuples,
---
> <dd><p>dictionary containing information about the Components corresponding to the values in <a class="reference internal" href="#id4" title="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">state</span></code></a>.  Keys are (<a class="reference internal" href="Port.html"><span class="doc">Port</span></a>, <a class="reference internal" href="Mechanism.html"><span class="doc">Mechanism</span></a>, <a class="reference internal" href="Composition.html"><span class="doc">Composition</span></a>, index) tuples,
1140c1151
< <a class="reference internal" href="#id8" title="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">state</span></code></a>, and values are its value in <a class="reference internal" href="#id8" title="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">state</span></code></a>. The initial entries are for the OptimizationControlMechanism’s
---
> <a class="reference internal" href="#id4" title="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">state</span></code></a>, and values are its value in <a class="reference internal" href="#id4" title="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">state</span></code></a>. The initial entries are for the OptimizationControlMechanism’s
1480c1491
< <dt>if there more sources listed than INPUT Nodes, leave the excess ones, and label them as</dt><dd><p>‘EXPECTED INPUT NODE n’ for later resolution (see below).</p>
---
> <dt>if there more sources listed than INPUT Nodes, leave the excess ones, and label them as</dt><dd><p>‘EXPECT &lt;specified INPUT Node InputPort name&gt;’ for later resolution (see below).</p>
1650c1661
< <dd><p>source} for all INPUT Nodes of agent_rep and/or ones specified in state_feature_specs.
---
> <dd><p>source name} for all state_features.
1652c1663
< If existing INPUT Node is not specified in state_feature_specs, assign None as source
---
> If existing INPUT Node is not specified in state_feature_specs, assign state_feature_default as source
1655,1656c1666,1667
< <div><p>assign “EXPECTED INPUT NODE n” as the entry for the key (where n is the sequential numbering of such refs);
< it should be resolved by runtime, or an error is generated.</p>
---
> <div><p>assign “DEFERRED INPUT NODE &lt;InputPort name&gt; OF &lt;agent_rep&gt;” as key for the entry;
> (it should be resolved by runtime, or an error is generated).</p>
1658,1660c1669,1671
< <dl class="field-list simple">
< <dt class="field-odd">Type</dt>
< <dd class="field-odd"><p>Return {InputPort</p>
---
> <dl class="simple">
> <dt>If a state_feature_spec is referenced that is not yet in ocm.composition,</dt><dd><p>assign “&lt;InputPort name&gt; NOT (YET) IN &lt;agent_rep&gt;” as the value of the entry;
> (it should be resolved by runtime, or an error is generated).</p>
1663,1674d1673
< </dd></dl>
< 
< <dl class="py method">
< <dt class="sig sig-object py" id="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism._get_state_feature_sources">
< <span class="sig-name descname"><span class="pre">_get_state_feature_sources</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism._get_state_feature_sources" title="Permalink to this definition">¶</a></dt>
< <dd><p>Dict with {InputPort: source} for all INPUT Nodes of agent_rep, and sources in <a href="#id4"><span class="problematic" id="id5">**</span></a>state_feature_specs.</p>
< </dd></dl>
< 
< <dl class="py property">
< <dt class="sig sig-object py" id="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state_feature_sources">
< <em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">state_feature_sources</span></span><a class="headerlink" href="#psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state_feature_sources" title="Permalink to this definition">¶</a></dt>
< <dd><p>source} for all INPUT Nodes of agent_rep, and sources in <a href="#id6"><span class="problematic" id="id7">**</span></a>state_feature_specs.</p>
1677c1676
< <dd class="field-odd"><p>Dict with {InputPort</p>
---
> <dd class="field-odd"><p>Return {InputPort name</p>
1683,1684c1682,1683
< <dt class="sig sig-object py" id="id8">
< <em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">state</span></span><a class="headerlink" href="#id8" title="Permalink to this definition">¶</a></dt>
---
> <dt class="sig sig-object py" id="id4">
> <em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">state</span></span><a class="headerlink" href="#id4" title="Permalink to this definition">¶</a></dt>
1704a1704,1715
> </dd></dl>
> 
> <dl class="py property">
> <dt class="sig sig-object py" id="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state_feature_sources">
> <em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">state_feature_sources</span></span><a class="headerlink" href="#psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state_feature_sources" title="Permalink to this definition">¶</a></dt>
> <dd><p>source} for all INPUT Nodes of agent_rep, and sources in <a href="#id5"><span class="problematic" id="id6">**</span></a>state_feature_specs.
> Used by state_distal_sources_and_destinations_dict()</p>
> <dl class="field-list simple">
> <dt class="field-odd">Type</dt>
> <dd class="field-odd"><p>Dict with {InputPort</p>
> </dd>
> </dl>
diff -r docs-base/genindex.html docs-head/genindex.html
529,530d528
<       <li><a href="OptimizationControlMechanism.html#psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism._get_state_feature_sources">_get_state_feature_sources() (psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism method)</a>
< </li>
754a753,754
>       <li><a href="Composition.html#psyneulink.core.compositions.composition.Composition._is_in_composition">_is_in_composition() (psyneulink.core.compos
...

See CI logs for the full diff.

@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
3437c3437
< <dd><p>Recursive search for and return all nested compositions.</p>
---
> <dd><p>Recursively search for and return all nested compositions.</p>
3446a3447,3453
> </dd></dl>
> 
> <dl class="py method">
> <dt class="sig sig-object py" id="psyneulink.core.compositions.composition.Composition._is_in_composition">
> <span class="sig-name descname"><span class="pre">_is_in_composition</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">component</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">nested</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#psyneulink.core.compositions.composition.Composition._is_in_composition" title="Permalink to this definition">¶</a></dt>
> <dd><p>Return True if component is in Composition, including any nested Compositions if <strong>nested</strong> is True
> Include input_CIM and output_CIM for self and all nested Compositions</p>
diff -r docs-base/OptimizationControlMechanism.html docs-head/OptimizationControlMechanism.html
352c352
< <figure class="align-default" id="id9">
---
> <figure class="align-default" id="id7">
362c362
< <a class="reference internal" href="CompositionFunctionApproximator.html"><span class="doc">CompositionFunctionApproximator</span></a> as the <a class="reference internal" href="#psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.agent_rep" title="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.agent_rep"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">agent_rep</span></code></a>.</span><a class="headerlink" href="#id9" title="Permalink to this image">¶</a></p>
---
> <a class="reference internal" href="CompositionFunctionApproximator.html"><span class="doc">CompositionFunctionApproximator</span></a> as the <a class="reference internal" href="#psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.agent_rep" title="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.agent_rep"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">agent_rep</span></code></a>.</span><a class="headerlink" href="#id7" title="Permalink to this image">¶</a></p>
570c570
< <ul class="simple" id="optimizationcontrolmechanism-mechanism-state-feature">
---
> <ul id="optimizationcontrolmechanism-mechanism-state-feature">
572c572
< (this is the same as explicitly specifying the Mechanism’s  input_port, as described <a class="reference internal" href="#optimizationcontrolmechanism-input-port-state-feature"><span class="std std-ref">above</span></a>).  If the Mechanism is in a <a class="reference internal" href="Composition.html#composition-nested"><span class="std std-ref">nested Composition</span></a>, it must be an <a class="reference internal" href="Composition.html#psyneulink.core.compositions.composition.NodeRole.INPUT" title="psyneulink.core.compositions.composition.NodeRole.INPUT"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">INPUT</span></code></a> <a class="reference internal" href="Composition.html#composition-nodes"><span class="std std-ref">Node</span></a> of that Composition
---
> (this is the same as explicitly specifying the Mechanism’s  input_port, as described <a class="reference internal" href="#optimizationcontrolmechanism-input-port-state-feature"><span class="std std-ref">above</span></a>). If the Mechanism is in a <a class="reference internal" href="Composition.html#composition-nested"><span class="std std-ref">nested Composition</span></a>, it must be an <a class="reference internal" href="Composition.html#psyneulink.core.compositions.composition.NodeRole.INPUT" title="psyneulink.core.compositions.composition.NodeRole.INPUT"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">INPUT</span></code></a> <a class="reference internal" href="Composition.html#composition-nodes"><span class="std std-ref">Node</span></a> of that Composition
574c574,585
< needs to be used, it must be specified explicitly (as described <a class="reference internal" href="#optimizationcontrolmechanism-output-port-state-feature"><span class="std std-ref">above</span></a>).</p></li>
---
> needs to be used, it must be specified explicitly (as described <a class="reference internal" href="#optimizationcontrolmechanism-output-port-state-feature"><span class="std std-ref">above</span></a>).</p>
> <div class="admonition note">
> <p class="admonition-title">Note</p>
> <p>The use of a Mechanism to specify the shadowing of its <a class="reference internal" href="InputPort.html#inputport-primary"><span class="std std-ref">primary InputPort</span></a> is unique to
> its specification in the <strong>state_features</strong> argument of an OptimizationControlMechanism, and differs from the
> ordinary usage where it specifies a Projection from its <a class="reference internal" href="OutputPort.html#outputport-primary"><span class="std std-ref">primary OutputPort</span></a> (see
> <a class="reference internal" href="InputPort.html#inputport-projection-source-specification"><span class="std std-ref">InputPort specification</span></a>).  This difference extends to the use
> of a Mechanism in the <em>PROJECTIONS</em> entry of an <a class="reference internal" href="InputPort.html#inputport-specification-dictionary"><span class="std std-ref">InputPort specification dictionary</span></a> used in the <strong>state_features</strong> argument, where there too
> it designates shadowing of its <a class="reference internal" href="InputPort.html#inputport-primary"><span class="std std-ref">primary InputPort</span></a> rather than a <a class="reference internal" href="Projection.html"><span class="doc">Projection</span></a> from its
> <a class="reference internal" href="OutputPort.html#outputport-primary"><span class="std std-ref">primary OutputPort</span></a>.</p>
> </div>
> </li>
623c634
< that is, in either an InputPort specification dictionary &lt;InputPort_Specification_Dictionary&gt;` or a <a class="reference internal" href="#optimizationcontrolmechanism-tuple-state-feature"><span class="std std-ref">2-item tuple</span></a> in the <strong>state_features</strong> argument (see <a class="reference internal" href="#optimizationcontrolmechanism-state-features-arg"><span class="std std-ref">state_features</span></a>).  If either of the latter is specified, they override
---
> that is, in either an <a class="reference internal" href="InputPort.html#inputport-specification-dictionary"><span class="std std-ref">InputPort specification dictionary</span></a> or a <a class="reference internal" href="#optimizationcontrolmechanism-tuple-state-feature"><span class="std std-ref">2-item tuple</span></a> in the <strong>state_features</strong> argument (see <a class="reference internal" href="#optimizationcontrolmechanism-state-features-arg"><span class="std std-ref">state_features</span></a>).  If either of the latter is specified, they override
713,714c724,725
< <a class="reference internal" href="#id8" title="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">state</span></code></a> attribute, and <a class="reference internal" href="#psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state_dict" title="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state_dict"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">state_dict</span></code></a>
< contains the Components associated with each value of <a class="reference internal" href="#id8" title="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">state</span></code></a>.</p>
---
> <a class="reference internal" href="#id4" title="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">state</span></code></a> attribute, and <a class="reference internal" href="#psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state_dict" title="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state_dict"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">state_dict</span></code></a>
> contains the Components associated with each value of <a class="reference internal" href="#id4" title="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">state</span></code></a>.</p>
1138c1149
< <dd><p>dictionary containing information about the Components corresponding to the values in <a class="reference internal" href="#id8" title="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">state</span></code></a>.  Keys are (<a class="reference internal" href="Port.html"><span class="doc">Port</span></a>, <a class="reference internal" href="Mechanism.html"><span class="doc">Mechanism</span></a>, <a class="reference internal" href="Composition.html"><span class="doc">Composition</span></a>, index) tuples,
---
> <dd><p>dictionary containing information about the Components corresponding to the values in <a class="reference internal" href="#id4" title="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">state</span></code></a>.  Keys are (<a class="reference internal" href="Port.html"><span class="doc">Port</span></a>, <a class="reference internal" href="Mechanism.html"><span class="doc">Mechanism</span></a>, <a class="reference internal" href="Composition.html"><span class="doc">Composition</span></a>, index) tuples,
1140c1151
< <a class="reference internal" href="#id8" title="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">state</span></code></a>, and values are its value in <a class="reference internal" href="#id8" title="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">state</span></code></a>. The initial entries are for the OptimizationControlMechanism’s
---
> <a class="reference internal" href="#id4" title="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">state</span></code></a>, and values are its value in <a class="reference internal" href="#id4" title="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">state</span></code></a>. The initial entries are for the OptimizationControlMechanism’s
1480c1491
< <dt>if there more sources listed than INPUT Nodes, leave the excess ones, and label them as</dt><dd><p>‘EXPECTED INPUT NODE n’ for later resolution (see below).</p>
---
> <dt>if there more sources listed than INPUT Nodes, leave the excess ones, and label them as</dt><dd><p>‘EXPECT &lt;specified INPUT Node InputPort name&gt;’ for later resolution (see below).</p>
1650c1661
< <dd><p>source} for all INPUT Nodes of agent_rep and/or ones specified in state_feature_specs.
---
> <dd><p>source name} for all state_features.
1652c1663
< If existing INPUT Node is not specified in state_feature_specs, assign None as source
---
> If existing INPUT Node is not specified in state_feature_specs, assign state_feature_default as source
1655,1656c1666,1667
< <div><p>assign “EXPECTED INPUT NODE n” as the entry for the key (where n is the sequential numbering of such refs);
< it should be resolved by runtime, or an error is generated.</p>
---
> <div><p>assign “DEFERRED INPUT NODE &lt;InputPort name&gt; OF &lt;agent_rep&gt;” as key for the entry;
> (it should be resolved by runtime, or an error is generated).</p>
1658,1660c1669,1671
< <dl class="field-list simple">
< <dt class="field-odd">Type</dt>
< <dd class="field-odd"><p>Return {InputPort</p>
---
> <dl class="simple">
> <dt>If a state_feature_spec is referenced that is not yet in ocm.composition,</dt><dd><p>assign “&lt;InputPort name&gt; NOT (YET) IN &lt;agent_rep&gt;” as the value of the entry;
> (it should be resolved by runtime, or an error is generated).</p>
1663,1674d1673
< </dd></dl>
< 
< <dl class="py method">
< <dt class="sig sig-object py" id="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism._get_state_feature_sources">
< <span class="sig-name descname"><span class="pre">_get_state_feature_sources</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism._get_state_feature_sources" title="Permalink to this definition">¶</a></dt>
< <dd><p>Dict with {InputPort: source} for all INPUT Nodes of agent_rep, and sources in <a href="#id4"><span class="problematic" id="id5">**</span></a>state_feature_specs.</p>
< </dd></dl>
< 
< <dl class="py property">
< <dt class="sig sig-object py" id="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state_feature_sources">
< <em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">state_feature_sources</span></span><a class="headerlink" href="#psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state_feature_sources" title="Permalink to this definition">¶</a></dt>
< <dd><p>source} for all INPUT Nodes of agent_rep, and sources in <a href="#id6"><span class="problematic" id="id7">**</span></a>state_feature_specs.</p>
1677c1676
< <dd class="field-odd"><p>Dict with {InputPort</p>
---
> <dd class="field-odd"><p>Return {InputPort name</p>
1683,1684c1682,1683
< <dt class="sig sig-object py" id="id8">
< <em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">state</span></span><a class="headerlink" href="#id8" title="Permalink to this definition">¶</a></dt>
---
> <dt class="sig sig-object py" id="id4">
> <em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">state</span></span><a class="headerlink" href="#id4" title="Permalink to this definition">¶</a></dt>
1704a1704,1715
> </dd></dl>
> 
> <dl class="py property">
> <dt class="sig sig-object py" id="psyneulink.core.components.mechanisms.modulatory.control.optimizationcontrolmechanism.OptimizationControlMechanism.state_feature_sources">
> <em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">state_feature_sources</span></span><a class="headerlink" href="#psyneulink.core.components.mechanisms.modulatory.control.optimiza
...

See CI logs for the full diff.

@lgtm-com
Copy link
Contributor

lgtm-com bot commented Mar 23, 2022

This pull request introduces 3 alerts and fixes 1 when merging d96a87d into 6397513 - view on LGTM.com

new alerts:

  • 3 for Unused local variable

fixed alerts:

  • 1 for Comparison using is when operands support `__eq__`

@jdcpni jdcpni merged commit 7a406ca into devel Mar 23, 2022
@jdcpni jdcpni deleted the refactor/ocm/state_features_all_as_input_ports branch March 23, 2022 16:02
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

2 participants