def test_control_signal_intensity_cost_function(self): mech = TransferMechanism() ctl_sig = ControlSignal(projections=[(SLOPE, mech)], intensity_cost_function=Exponential(rate=1)) ctl_mech = ControlMechanism(control_signals=[ctl_sig]) ctl_mech.execute() assert True
def test_params_for_modulatory_projection_in_parameter_port(self): T1 = TransferMechanism() T2 = TransferMechanism() CTL = ControlMechanism(control=ControlSignal(projections=('slope',T2))) C = Composition(pathways=[[T1,T2,CTL]]) # Run 0 C.run(inputs={T1: 2.0}, runtime_params={ T2: { PARAMETER_PORT_PARAMS: { CONTROL_PROJECTION_PARAMS: { 'variable':(5, AtTrial(3)), # variable of all Projection to all ParameterPorts 'value':(10, AtTrial(4)), 'value':(21, AtTrial(5)), }, # Test individual Projection specifications outside of type-specific dict CTL.control_signals[0].efferents[0]: {'value':(32, AtTrial(6))}, 'ControlProjection for TransferMechanism-1[slope]': {'value':(43, AtTrial(7))}, } }, }, num_trials=8 ) CTL.control_signals[0].modulation = OVERRIDE # Run 1 C.run(inputs={T1: 2.0}, runtime_params={ T2: { PARAMETER_PORT_PARAMS: { CONTROL_PROJECTION_PARAMS: { 'value':(5, Any(AtTrial(0), AtTrial(2))), 'variable':(10, AtTrial(1)), # Test individual Projection specifications inside of type-specific dict 'ControlProjection for TransferMechanism-1[slope]': {'value':(19, AtTrial(3))}, CTL.control_signals[0].efferents[0]: {'value':(33, AtTrial(4))}, }, } }, }, num_trials=5 ) assert np.allclose(C.results,[ # Conditions satisfied: np.array([[2]]), # Run 0, Trial 0: None (2 input; no control since that requires a cycle) np.array([[4]]), # Run 0, Trial 1: None (2 input * 2 control gathered last cycle) np.array([[8]]), # Run 0, Trial 2: None (2 input * 4 control gathered last cycle) np.array([[10]]), # Run 0, Trial 3: ControlProjection variable (2*5) np.array([[20]]), # Run 0, Trial 4: ControlProjection value (2*10) np.array([[42]]), # Run 0, Trial 5: ControlProjection value using Projection type-specific keyword (2*210) np.array([[64]]), # Run 0, Trial 6: ControlProjection value using individual Projection (2*32) np.array([[86]]), # Run 0, Trial 7: ControlProjection value using individual Projection by name (2*43) np.array([[10]]), # Run 1, Tria1 0: ControlProjection value with OVERRIDE using value (2*5) np.array([[20]]), # Run 1, Tria1 1: ControlProjection value with OVERRIDE using variable (2*10) np.array([[10]]), # Run 1, Tria1 2: ControlProjection value with OVERRIDE using value again (in Any) (2*5) np.array([[38]]), # Run 1, Tria1 3: ControlProjection value with OVERRIDE using individ Proj by name (2*19) np.array([[66]]), # Run 1: Trial 4: ControlProjection value with OVERRIDE using individ Proj (2*33) ])
def test_alias_equivalence_for_modulates_and_projections(self): inputs = [1, 9, 4, 3, 2] comp1 = Composition() tMech1 = TransferMechanism() tMech2 = TransferMechanism() cMech1 = ControlMechanism( control_signals=ControlSignal(modulates=(SLOPE, tMech2)), objective_mechanism=ObjectiveMechanism(monitor=(RESULT, tMech2))) comp1.add_nodes([tMech1, tMech2, cMech1]) comp1.add_linear_processing_pathway([cMech1, tMech1, tMech2]) comp1.run(inputs=inputs) comp2 = Composition() tMech3 = TransferMechanism() tMech4 = TransferMechanism() cMech2 = ControlMechanism( control_signals=ControlSignal(projections=(SLOPE, tMech4)), objective_mechanism=ObjectiveMechanism(monitor=(RESULT, tMech4))) comp2.add_nodes([tMech3, tMech4, cMech2]) comp2.add_linear_processing_pathway([cMech2, tMech3, tMech4]) comp2.run(inputs=inputs) assert comp1.results == comp2.results
def test_parameter_CIM_routing_from_ControlMechanism(self): # Inner Composition ia = TransferMechanism(name='ia') ib = TransferMechanism(name='ib') icomp = Composition(name='icomp', pathways=[ia]) # Outer Composition ocomp = Composition(name='ocomp', pathways=[icomp]) cm = ControlMechanism( name='control_mechanism', control_signals=ControlSignal(projections=[(SLOPE, ib)])) icomp.add_linear_processing_pathway([ia, ib]) ocomp.add_linear_processing_pathway([cm, icomp]) res = ocomp.run([[2], [2], [2]]) assert np.allclose(res, [[4], [4], [4]]) assert len(ib.mod_afferents) == 1 assert ib.mod_afferents[0].sender == icomp.parameter_CIM.output_port assert icomp.parameter_CIM_ports[ib.parameter_ports['slope']][ 0].path_afferents[0].sender == cm.output_port
def test_nested_control_projection_count_control_mech(self): # Inner Composition ia = TransferMechanism(name='ia') icomp = Composition(name='icomp', pathways=[ia]) # Outer Composition oa = TransferMechanism(name='oa') cm = ControlMechanism(name='cm', control=[ ControlSignal(projections=[(NOISE, ia)]), ControlSignal(projections=[(INTERCEPT, ia)]), ControlSignal(projections=[(SLOPE, ia)]) ]) ocomp = Composition(name='ocomp', pathways=[[oa, icomp], [cm]]) assert len(cm.efferents) == 3 assert all([ proj.receiver.owner == icomp.parameter_CIM for proj in cm.efferents ]) assert len(ia.mod_afferents) == 3 assert all([ proj.sender.owner == icomp.parameter_CIM for proj in ia.mod_afferents ])