import contextlib
import io
import sys

import pytest

import psyneulink as pnl
from psyneulink.core.compositions.report import ReportOutput, ReportProgress, ReportSimulations, ReportDevices


class TestReport():

    @pytest.mark.skipif(sys.platform == 'win32', reason="<Incompatible UDF-8 formatting of rich Console output>")
    def test_simple_output_and_progress(self):
        """Test simple sequence of three Mechanisms, using all report_output and report_progress options
        """
        a = pnl.TransferMechanism(name='a')
        b = pnl.TransferMechanism(name='b')
        c = pnl.TransferMechanism(name='c')
        comp = pnl.Composition(pathways=[a,b,c], name='COMP')

        a.reportOutputPref=ReportOutput.FULL
        b.reportOutputPref=ReportOutput.OFF
        c.reportOutputPref=ReportOutput.FULL

        comp.run(report_output=ReportOutput.TERSE, report_to_devices=ReportDevices.DIVERT)
        actual_output = comp.rich_diverted_reports
        expected_output = '\'\\nCOMP TRIAL 0 ====================\\n Time Step 0 ---------\\n  a executed\\n Time Step 1 ---------\\n  b executed\\n Time Step 2 ---------\\n  c executed\\n\''
        assert repr(actual_output) == expected_output

        comp.run(report_output=ReportOutput.TERSE,
                 report_progress=ReportProgress.ON,
                 report_to_devices=ReportDevices.DIVERT)
        actual_output = comp.rich_diverted_reports
        expected_output = '\nCOMP TRIAL 0 ====================\n Time Step 0 ---------\n  a executed\n Time Step 1 ---------\n  b executed\n Time Step 2 ---------\n  c executed\nCOMP: Executed 1 of 1 trials\n'
        assert actual_output == expected_output

        comp.run(report_output=ReportOutput.USE_PREFS, report_to_devices=ReportDevices.DIVERT)
        actual_output = comp.rich_diverted_reports
        expected_output = '\nCOMP TRIAL 0 ====================\n Time Step 0 ---------\n╭───── a ─────╮\n│ input: 0.0  │\n│ output: 0.0 │\n╰─────────────╯\n Time Step 1 ---------\n Time Step 2 ---------\n╭───── c ─────╮\n│ input: 0.0  │\n│ output: 0.0 │\n╰─────────────╯\n'
        assert actual_output == expected_output

        comp.run(report_output=ReportOutput.USE_PREFS,
                 report_progress=ReportProgress.ON,
                 report_to_devices=ReportDevices.DIVERT)
        actual_output = comp.rich_diverted_reports
        expected_output = '\nCOMP TRIAL 0 ====================\n Time Step 0 ---------\n╭───── a ─────╮\n│ input: 0.0  │\n│ output: 0.0 │\n╰─────────────╯\n Time Step 1 ---------\n Time Step 2 ---------\n╭───── c ─────╮\n│ input: 0.0  │\n│ output: 0.0 │\n╰─────────────╯\nCOMP: Executed 1 of 1 trials\n'
        assert actual_output == expected_output

        comp.run(report_output=ReportOutput.FULL, report_to_devices=ReportDevices.DIVERT)
        actual_output = comp.rich_diverted_reports
        expected_output = '\n┏━━  COMP: Trial 0  ━━┓\n┃                     ┃\n┃ input: [[0.0]]      ┃\n┃                     ┃\n┃ ┌─  Time Step 0 ──┐ ┃\n┃ │ ╭───── a ─────╮ │ ┃\n┃ │ │ input: 0.0  │ │ ┃\n┃ │ │ output: 0.0 │ │ ┃\n┃ │ ╰─────────────╯ │ ┃\n┃ └─────────────────┘ ┃\n┃                     ┃\n┃ ┌─  Time Step 1 ──┐ ┃\n┃ │ ╭───── b ─────╮ │ ┃\n┃ │ │ input: 0.0  │ │ ┃\n┃ │ │ output: 0.0 │ │ ┃\n┃ │ ╰─────────────╯ │ ┃\n┃ └─────────────────┘ ┃\n┃                     ┃\n┃ ┌─  Time Step 2 ──┐ ┃\n┃ │ ╭───── c ─────╮ │ ┃\n┃ │ │ input: 0.0  │ │ ┃\n┃ │ │ output: 0.0 │ │ ┃\n┃ │ ╰─────────────╯ │ ┃\n┃ └─────────────────┘ ┃\n┃                     ┃\n┃ result: [[0.0]]     ┃\n┃                     ┃\n┗━━━━━━━━━━━━━━━━━━━━━┛\n\n'
        assert actual_output == expected_output

        comp.run(report_output=ReportOutput.FULL,
                 report_progress=ReportProgress.ON,
                 report_to_devices=ReportDevices.DIVERT)
        actual_output = comp.rich_diverted_reports
        expected_output = '\n┏━━  COMP: Trial 0  ━━┓\n┃                     ┃\n┃ input: [[0.0]]      ┃\n┃                     ┃\n┃ ┌─  Time Step 0 ──┐ ┃\n┃ │ ╭───── a ─────╮ │ ┃\n┃ │ │ input: 0.0  │ │ ┃\n┃ │ │ output: 0.0 │ │ ┃\n┃ │ ╰─────────────╯ │ ┃\n┃ └─────────────────┘ ┃\n┃                     ┃\n┃ ┌─  Time Step 1 ──┐ ┃\n┃ │ ╭───── b ─────╮ │ ┃\n┃ │ │ input: 0.0  │ │ ┃\n┃ │ │ output: 0.0 │ │ ┃\n┃ │ ╰─────────────╯ │ ┃\n┃ └─────────────────┘ ┃\n┃                     ┃\n┃ ┌─  Time Step 2 ──┐ ┃\n┃ │ ╭───── c ─────╮ │ ┃\n┃ │ │ input: 0.0  │ │ ┃\n┃ │ │ output: 0.0 │ │ ┃\n┃ │ ╰─────────────╯ │ ┃\n┃ └─────────────────┘ ┃\n┃                     ┃\n┃ result: [[0.0]]     ┃\n┃                     ┃\n┗━━━━━━━━━━━━━━━━━━━━━┛\n\nCOMP: Executed 1 of 1 trials\n'
        assert actual_output == expected_output

        # Run these tests after ones calling run() above to avoid having to reset trial counter,
        # which increments after calls to execute()
        comp.execute(report_output=ReportOutput.TERSE, report_to_devices=ReportDevices.DIVERT)
        actual_output = comp.rich_diverted_reports
        expected_output = '\'\\nCOMP TRIAL 0 ====================\\n Time Step 0 ---------\\n  a executed\\n Time Step 1 ---------\\n  b executed\\n Time Step 2 ---------\\n  c executed\\n\''
        assert repr(actual_output) == expected_output

        comp.execute(report_output=ReportOutput.TERSE,
                     report_progress=ReportProgress.ON,
                     report_to_devices=ReportDevices.DIVERT)
        actual_output = comp.rich_diverted_reports
        expected_output = '\'\\nCOMP TRIAL 1 ====================\\n Time Step 0 ---------\\n  a executed\\n Time Step 1 ---------\\n  b executed\\n Time Step 2 ---------\\n  c executed\\nCOMP: Executed 1 of 1 trials\\n\''
        assert repr(actual_output) == expected_output

        comp.execute(report_output=ReportOutput.USE_PREFS, report_to_devices=ReportDevices.DIVERT)
        actual_output = comp.rich_diverted_reports
        expected_output = '\nCOMP TRIAL 2 ====================\n Time Step 0 ---------\n╭───── a ─────╮\n│ input: 0.0  │\n│ output: 0.0 │\n╰─────────────╯\n Time Step 1 ---------\n Time Step 2 ---------\n╭───── c ─────╮\n│ input: 0.0  │\n│ output: 0.0 │\n╰─────────────╯\n'
        assert actual_output == expected_output

        comp.execute(report_output=ReportOutput.USE_PREFS,
                     report_progress=ReportProgress.ON,
                     report_to_devices=ReportDevices.DIVERT)
        actual_output = comp.rich_diverted_reports
        expected_output = '\nCOMP TRIAL 3 ====================\n Time Step 0 ---------\n╭───── a ─────╮\n│ input: 0.0  │\n│ output: 0.0 │\n╰─────────────╯\n Time Step 1 ---------\n Time Step 2 ---------\n╭───── c ─────╮\n│ input: 0.0  │\n│ output: 0.0 │\n╰─────────────╯\nCOMP: Executed 1 of 1 trials\n'
        assert actual_output == expected_output

        comp.execute(report_output=ReportOutput.FULL, report_to_devices=ReportDevices.DIVERT)
        actual_output = comp.rich_diverted_reports
        expected_output = '\n┏━━  COMP: Trial 4  ━━┓\n┃                     ┃\n┃ input: [[0.0]]      ┃\n┃                     ┃\n┃ ┌─  Time Step 0 ──┐ ┃\n┃ │ ╭───── a ─────╮ │ ┃\n┃ │ │ input: 0.0  │ │ ┃\n┃ │ │ output: 0.0 │ │ ┃\n┃ │ ╰─────────────╯ │ ┃\n┃ └─────────────────┘ ┃\n┃                     ┃\n┃ ┌─  Time Step 1 ──┐ ┃\n┃ │ ╭───── b ─────╮ │ ┃\n┃ │ │ input: 0.0  │ │ ┃\n┃ │ │ output: 0.0 │ │ ┃\n┃ │ ╰─────────────╯ │ ┃\n┃ └─────────────────┘ ┃\n┃                     ┃\n┃ ┌─  Time Step 2 ──┐ ┃\n┃ │ ╭───── c ─────╮ │ ┃\n┃ │ │ input: 0.0  │ │ ┃\n┃ │ │ output: 0.0 │ │ ┃\n┃ │ ╰─────────────╯ │ ┃\n┃ └─────────────────┘ ┃\n┃                     ┃\n┃ result: [[0.0]]     ┃\n┃                     ┃\n┗━━━━━━━━━━━━━━━━━━━━━┛\n\n'
        assert actual_output == expected_output

        comp.execute(report_output=ReportOutput.FULL,
                     report_progress=ReportProgress.ON,
                     report_to_devices=ReportDevices.DIVERT)
        actual_output = comp.rich_diverted_reports
        expected_output = '\n┏━━  COMP: Trial 5  ━━┓\n┃                     ┃\n┃ input: [[0.0]]      ┃\n┃                     ┃\n┃ ┌─  Time Step 0 ──┐ ┃\n┃ │ ╭───── a ─────╮ │ ┃\n┃ │ │ input: 0.0  │ │ ┃\n┃ │ │ output: 0.0 │ │ ┃\n┃ │ ╰─────────────╯ │ ┃\n┃ └─────────────────┘ ┃\n┃                     ┃\n┃ ┌─  Time Step 1 ──┐ ┃\n┃ │ ╭───── b ─────╮ │ ┃\n┃ │ │ input: 0.0  │ │ ┃\n┃ │ │ output: 0.0 │ │ ┃\n┃ │ ╰─────────────╯ │ ┃\n┃ └─────────────────┘ ┃\n┃                     ┃\n┃ ┌─  Time Step 2 ──┐ ┃\n┃ │ ╭───── c ─────╮ │ ┃\n┃ │ │ input: 0.0  │ │ ┃\n┃ │ │ output: 0.0 │ │ ┃\n┃ │ ╰─────────────╯ │ ┃\n┃ └─────────────────┘ ┃\n┃                     ┃\n┃ result: [[0.0]]     ┃\n┃                     ┃\n┗━━━━━━━━━━━━━━━━━━━━━┛\n\nCOMP: Executed 1 of 1 trials\n'
        assert actual_output == expected_output

    # def test_two_mechs_in_a_time_step(self):
    #     """Test that includes two (recurrently connected) Mechanisms executed within the same TIME_STEP
    #        FIX: NEED TO RESOLVE INDETERMINACY OF ORDER OF EXECUTION FOR TESTING
    #     """
    #     a = TransferMechanism(name='a')
    #     b = TransferMechanism(name='b')
    #     c = TransferMechanism(name='c')
    #     comp = Composition(pathways=[[a,b],[b,a], [a,c]], name='COMP')
    #
    #     a.reportOutputPref=True
    #     b.reportOutputPref=False
    #     c.reportOutputPref=True
    #
    #     comp.run(report_output=TERSE, report_progress=[False, ReportDevices.DIVERT])
    #     actual_output = comp.rich_diverted_reports
    #     expected_output = '\nCOMP TRIAL 0 ====================\n Time Step 0 ---------\n  a executed\n  b executed\n Time Step 1 ---------\n  c executed\n\nCOMP TRIAL 0 ====================\n Time Step 0 ---------\n  a executed\n  b executed\n Time Step 1 ---------\n  c executed\nCOMP TRIAL 1 ====================\n Time Step 0 ---------\n  a executed\n  b executed\n Time Step 1 ---------\n  c executed\n'
    #     assert actual_output == expected_output
    #
    #     comp.run(report_output=TERSE, report_progress=ReportDevices.DIVERT)
    #     actual_output = comp.rich_diverted_reports
    #     expected_output = '\nCOMP TRIAL 0 ====================\n Time Step 0 ---------\n  b executed\n  a executed\n Time Step 1 ---------\n  c executed\nCOMP: Executed 1 of 2 trials\nCOMP TRIAL 0 ====================\n Time Step 0 ---------\n  b executed\n  a executed\n Time Step 1 ---------\n  c executed\nCOMP TRIAL 1 ====================\n Time Step 0 ---------\n  b executed\n  a executed\n Time Step 1 ---------\n  c executed\nCOMP: Executed 2 of 2 trials'
    #     assert actual_output == expected_output
    #
    #     comp.run(report_output=True, report_progress=ReportDevices.DIVERT)
    #     actual_output = comp.rich_diverted_reports
    #     expected_output = '\nCOMP TRIAL 0 ====================\n Time Step 0 ---------\n╭───── a ─────╮\n│ input: 0.0  │\n│ output: 0.0 │\n╰─────────────╯\n Time Step 1 ---------\n╭───── c ─────╮\n│ input: 0.0  │\n│ output: 0.0 │\n╰─────────────╯\nCOMP: Executed 1 of 2 trials\nCOMP TRIAL 0 ====================\n Time Step 0 ---------\n╭───── a ─────╮\n│ input: 0.0  │\n│ output: 0.0 │\n╰─────────────╯\n Time Step 1 ---------\n╭───── c ─────╮\n│ input: 0.0  │\n│ output: 0.0 │\n╰─────────────╯\nCOMP TRIAL 1 ====================\n Time Step 0 ---------\n╭───── a ─────╮\n│ input: 0.0  │\n│ output: 0.0 │\n╰─────────────╯\n Time Step 1 ---------\n╭───── c ─────╮\n│ input: 0.0  │\n│ output: 0.0 │\n╰─────────────╯\nCOMP: Executed 2 of 2 trials'
    #     assert actual_output == expected_output
    #
    #     comp.run(num_trials=2, report_output=FULL, report_progress=ReportDevices.DIVERT)
    #     actual_output = comp.rich_diverted_reports
    #     expected_output = '\n┏━━━  COMP: Trial 0  ━━━┓\n┃                       ┃\n┃ input: [[0.0], [0.0]] ┃\n┃                       ┃\n┃ ┌─  Time Step 0 ──┐   ┃\n┃ │ ╭───── b ─────╮ │   ┃\n┃ │ │ input: 0.0  │ │   ┃\n┃ │ │ output: 0.0 │ │   ┃\n┃ │ ╰─────────────╯ │   ┃\n┃ │ ╭───── a ─────╮ │   ┃\n┃ │ │ input: 0.0  │ │   ┃\n┃ │ │ output: 0.0 │ │   ┃\n┃ │ ╰─────────────╯ │   ┃\n┃ └─────────────────┘   ┃\n┃                       ┃\n┃ ┌─  Time Step 1 ──┐   ┃\n┃ │ ╭───── c ─────╮ │   ┃\n┃ │ │ input: 0.0  │ │   ┃\n┃ │ │ output: 0.0 │ │   ┃\n┃ │ ╰─────────────╯ │   ┃\n┃ └─────────────────┘   ┃\n┃                       ┃\n┃ result: [[0.0]]       ┃\n┃                       ┃\n┗━━━━━━━━━━━━━━━━━━━━━━━┛\n\nCOMP: Executed 1 of 2 trials\n┏━━━  COMP: Trial 0  ━━━┓\n┃                       ┃\n┃ input: [[0.0], [0.0]] ┃\n┃                       ┃\n┃ ┌─  Time Step 0 ──┐   ┃\n┃ │ ╭───── b ─────╮ │   ┃\n┃ │ │ input: 0.0  │ │   ┃\n┃ │ │ output: 0.0 │ │   ┃\n┃ │ ╰─────────────╯ │   ┃\n┃ │ ╭───── a ─────╮ │   ┃\n┃ │ │ input: 0.0  │ │   ┃\n┃ │ │ output: 0.0 │ │   ┃\n┃ │ ╰─────────────╯ │   ┃\n┃ └─────────────────┘   ┃\n┃                       ┃\n┃ ┌─  Time Step 1 ──┐   ┃\n┃ │ ╭───── c ─────╮ │   ┃\n┃ │ │ input: 0.0  │ │   ┃\n┃ │ │ output: 0.0 │ │   ┃\n┃ │ ╰─────────────╯ │   ┃\n┃ └─────────────────┘   ┃\n┃                       ┃\n┃ result: [[0.0]]       ┃\n┃                       ┃\n┗━━━━━━━━━━━━━━━━━━━━━━━┛\n\n┏━━━  COMP: Trial 1  ━━━┓\n┃                       ┃\n┃ input: [[0.0], [0.0]] ┃\n┃                       ┃\n┃ ┌─  Time Step 0 ──┐   ┃\n┃ │ ╭───── b ─────╮ │   ┃\n┃ │ │ input: 0.0  │ │   ┃\n┃ │ │ output: 0.0 │ │   ┃\n┃ │ ╰─────────────╯ │   ┃\n┃ │ ╭───── a ─────╮ │   ┃\n┃ │ │ input: 0.0  │ │   ┃\n┃ │ │ output: 0.0 │ │   ┃\n┃ │ ╰─────────────╯ │   ┃\n┃ └─────────────────┘   ┃\n┃                       ┃\n┃ ┌─  Time Step 1 ──┐   ┃\n┃ │ ╭───── c ─────╮ │   ┃\n┃ │ │ input: 0.0  │ │   ┃\n┃ │ │ output: 0.0 │ │   ┃\n┃ │ ╰─────────────╯ │   ┃\n┃ └─────────────────┘   ┃\n┃                       ┃\n┃ result: [[0.0]]       ┃\n┃                       ┃\n┗━━━━━━━━━━━━━━━━━━━━━━━┛\n\nCOMP: Executed 2 of 2 trials'
    #     assert actual_output == expected_output

    @pytest.mark.skipif(sys.platform == 'win32', reason="<Incompatible UDF-8 formatting of rich Console output>")
    def test_nested_comps_output(self):
        """Test output and progress reports for execution of simulations by controller in both an outer and nested
        composition, using input dictionary, generator instance and generator function.
        """

        # instantiate mechanisms and inner comp
        ia = pnl.TransferMechanism(name='ia')
        ib = pnl.TransferMechanism(name='ib')
        icomp = pnl.Composition(name='icomp', controller_mode=pnl.AFTER)

        # set up structure of inner comp
        icomp.add_node(ia, required_roles=pnl.NodeRole.INPUT)
        icomp.add_node(ib, required_roles=pnl.NodeRole.OUTPUT)
        icomp.add_projection(pnl.MappingProjection(), sender=ia, receiver=ib)

        # add controller to inner comp
        icomp.add_controller(
                pnl.OptimizationControlMechanism(
                        agent_rep=icomp,
                        features=[ia.input_port],
                        name="iController",
                        objective_mechanism=pnl.ObjectiveMechanism(
                                monitor=ib.output_port,
                                function=pnl.SimpleIntegrator,
                                name="iController Objective Mechanism"
                        ),
                        function=pnl.GridSearch(direction=pnl.MAXIMIZE),
                        control_signals=[pnl.ControlSignal(projections=[(pnl.SLOPE, ia)],
                                                           variable=1.0,
                                                           intensity_cost_function=pnl.Linear(slope=0.0),
                                                           allocation_samples=pnl.SampleSpec(start=1.0,
                                                                                             stop=10.0,
                                                                                             num=3))])
        )

        # instantiate outer comp
        ocomp = pnl.Composition(name='ocomp', controller_mode=pnl.BEFORE)

        # setup structure of outer comp
        ocomp.add_node(icomp)

        ocomp._analyze_graph()

        # add controller to outer comp
        ocomp.add_controller(
                pnl.OptimizationControlMechanism(
                        agent_rep=ocomp,
                        # features=[ia.input_port],
                        features=[ocomp.input_CIM.output_ports[0]],
                        name="oController",
                        objective_mechanism=pnl.ObjectiveMechanism(
                                monitor=ib.output_port,
                                function=pnl.SimpleIntegrator,
                                name="oController Objective Mechanism"
                        ),
                        function=pnl.GridSearch(direction=pnl.MAXIMIZE),
                        control_signals=[pnl.ControlSignal(projections=[(pnl.SLOPE, ia)],
                                                           variable=1.0,
                                                           intensity_cost_function=pnl.Linear(slope=0.0),
                                                           allocation_samples=pnl.SampleSpec(start=1.0,
                                                                                             stop=10.0,
                                                                                             num=2))])
            )

        # set up input using three different formats:
        #  1) generator function
        #  2) instance of generator function
        #  3) inputs dict
        inputs_dict = {
            icomp:
                {
                    ia: [[-2], [1]]
                }
        }

        def inputs_generator_function():
            for i in range(2):
                yield {
                    icomp:
                        {
                            ia: inputs_dict[icomp][ia][i]
                        }
                }

        inputs_generator_instance = inputs_generator_function()

        # Test ReportOutput.ON (AKA TERSE)
        ocomp.run(inputs={icomp:-2},
                  report_output=ReportOutput.ON,
                  report_progress=ReportProgress.OFF,
                  report_simulations=ReportSimulations.OFF,
                  report_to_devices=ReportDevices.DIVERT
                  )
        actual_output = ocomp.rich_diverted_reports
        expected_output = '\noController simulation of ocomp before TRIAL 0\nocomp TRIAL 0 ====================\n Time Step 0 ---------\n    icomp TRIAL 0 ====================\n     Time Step 0 ---------\n      ia executed\n     Time Step 1 ---------\n      ib executed\n     Time Step 2 ---------\n      iController Objective Mechanism executed\n    iController simulation of icomp after TRIAL 0\n  icomp executed\n Time Step 1 ---------\n  oController Objective Mechanism executed\n'
        assert actual_output == expected_output

        ocomp.run(inputs={icomp:-2},
                  report_output=ReportOutput.OFF,
                  report_progress=ReportProgress.ON,
                  report_simulations=ReportSimulations.OFF,
                  report_to_devices=ReportDevices.DIVERT
                  )
        actual_output = ocomp.rich_diverted_reports
        expected_output = 'ocomp: Executed 1 of 1 trials\n        icomp: Executed 1 of 1 trials (depth: 2)\n        icomp: Executed 1 of 1 trials (depth: 2)\n    icomp: Executed 1 of 1 trials (depth: 1)\n'
        assert actual_output == expected_output

        ocomp.run(inputs={icomp:-2},
                  report_output=ReportOutput.ON,
                  report_progress=ReportProgress.ON,
                  report_simulations=ReportSimulations.OFF,
                  report_to_devices=ReportDevices.DIVERT
                  )
        actual_output = ocomp.rich_diverted_reports
        expected_output = '\noController simulation of ocomp before TRIAL 0\nocomp TRIAL 0 ====================\n Time Step 0 ---------\n    icomp TRIAL 2 ====================\n     Time Step 0 ---------\n      ia executed\n     Time Step 1 ---------\n      ib executed\n     Time Step 2 ---------\n      iController Objective Mechanism executed\n    iController simulation of icomp after TRIAL 2\n  icomp executed\n Time Step 1 ---------\n  oController Objective Mechanism executed\nocomp: Executed 1 of 1 trials\n        icomp: Executed 1 of 1 trials (depth: 2)\n        icomp: Executed 1 of 1 trials (depth: 2)\n    icomp: Executed 1 of 1 trials (depth: 1)\n'
        assert actual_output == expected_output

        ocomp.run(inputs={icomp:-2},
                  report_output=ReportOutput.ON,
                  report_progress=ReportProgress.OFF,
                  report_simulations=ReportSimulations.ON,
                  report_to_devices=ReportDevices.DIVERT
                  )
        actual_output = ocomp.rich_diverted_reports
        expected_output = '\noController simulation of ocomp before TRIAL 0\n    ocomp SIMULATION 0 TRIAL 0 ====================\n     Time Step 0 ---------\n        icomp TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        iController simulation of icomp after TRIAL 0\n            icomp SIMULATION 0 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 1 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 2 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n      icomp executed\n     Time Step 1 ---------\n      oController Objective Mechanism executed\n    ocomp SIMULATION 1 TRIAL 0 ====================\n     Time Step 0 ---------\n        icomp TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        iController simulation of icomp after TRIAL 0\n            icomp SIMULATION 0 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 1 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 2 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n      icomp executed\n     Time Step 1 ---------\n      oController Objective Mechanism executed\nocomp SIMULATION None TRIAL 0 ====================\n Time Step 0 ---------\n    icomp TRIAL 3 ====================\n     Time Step 0 ---------\n      ia executed\n     Time Step 1 ---------\n      ib executed\n     Time Step 2 ---------\n      iController Objective Mechanism executed\n    iController simulation of icomp after TRIAL 3\n        icomp SIMULATION 0 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        icomp SIMULATION 1 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        icomp SIMULATION 2 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n  icomp executed\n Time Step 1 ---------\n  oController Objective Mechanism executed\n'
        assert actual_output == expected_output

        ocomp.run(inputs={icomp:-2},
                  report_output=ReportOutput.OFF,
                  report_progress=ReportProgress.ON,
                  report_simulations=ReportSimulations.ON,
                  report_to_devices=ReportDevices.DIVERT
                  )
        actual_output = ocomp.rich_diverted_reports
        expected_output = 'ocomp: Executed 1 of 1 trials\n    ocomp: Simulated 2 trials (depth: 1)\n        icomp: Executed 1 of 1 trials (depth: 2)\n            icomp: Simulated 3 trials (depth: 3)\n        icomp: Executed 1 of 1 trials (depth: 2)\n            icomp: Simulated 3 trials (depth: 3)\n    icomp: Executed 1 of 1 trials (depth: 1)\n        icomp: Simulated 3 trials (depth: 2)\n'
        assert actual_output == expected_output

        ocomp.run(inputs=inputs_dict,
                  report_output=ReportOutput.ON,
                  report_progress=ReportProgress.ON,
                  report_simulations=ReportSimulations.ON,
                  report_to_devices=ReportDevices.DIVERT
                  )
        actual_output = ocomp.rich_diverted_reports
        expected_output = '\noController simulation of ocomp before TRIAL 0\n    ocomp SIMULATION 0 TRIAL 0 ====================\n     Time Step 0 ---------\n        icomp TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        iController simulation of icomp after TRIAL 0\n            icomp SIMULATION 0 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 1 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 2 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n      icomp executed\n     Time Step 1 ---------\n      oController Objective Mechanism executed\n    ocomp SIMULATION 1 TRIAL 0 ====================\n     Time Step 0 ---------\n        icomp TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        iController simulation of icomp after TRIAL 0\n            icomp SIMULATION 0 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 1 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 2 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n      icomp executed\n     Time Step 1 ---------\n      oController Objective Mechanism executed\nocomp SIMULATION None TRIAL 0 ====================\n Time Step 0 ---------\n    icomp TRIAL 5 ====================\n     Time Step 0 ---------\n      ia executed\n     Time Step 1 ---------\n      ib executed\n     Time Step 2 ---------\n      iController Objective Mechanism executed\n    iController simulation of icomp after TRIAL 5\n        icomp SIMULATION 0 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        icomp SIMULATION 1 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        icomp SIMULATION 2 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n  icomp executed\n Time Step 1 ---------\n  oController Objective Mechanism executed\nocomp: Executed 1 of 2 trials\n    ocomp: Simulated 2 trials (depth: 1)\n        icomp: Executed 1 of 1 trials (depth: 2)\n            icomp: Simulated 3 trials (depth: 3)\n        icomp: Executed 1 of 1 trials (depth: 2)\n            icomp: Simulated 3 trials (depth: 3)\n    icomp: Executed 1 of 1 trials (depth: 1)\n        icomp: Simulated 3 trials (depth: 2)\n\noController simulation of ocomp before TRIAL 0\n    ocomp SIMULATION 0 TRIAL 0 ====================\n     Time Step 0 ---------\n        icomp TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        iController simulation of icomp after TRIAL 0\n            icomp SIMULATION 0 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 1 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 2 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n      icomp executed\n     Time Step 1 ---------\n      oController Objective Mechanism executed\n    ocomp SIMULATION 1 TRIAL 0 ====================\n     Time Step 0 ---------\n        icomp TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        iController simulation of icomp after TRIAL 0\n            icomp SIMULATION 0 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 1 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 2 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n      icomp executed\n     Time Step 1 ---------\n      oController Objective Mechanism executed\nocomp SIMULATION None TRIAL 0 ====================\n Time Step 0 ---------\n    icomp TRIAL 5 ====================\n     Time Step 0 ---------\n      ia executed\n     Time Step 1 ---------\n      ib executed\n     Time Step 2 ---------\n      iController Objective Mechanism executed\n    iController simulation of icomp after TRIAL 5\n        icomp SIMULATION 0 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        icomp SIMULATION 1 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        icomp SIMULATION 2 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n  icomp executed\n Time Step 1 ---------\n  oController Objective Mechanism executed\noController simulation of ocomp before TRIAL 1\n    ocomp SIMULATION 0 TRIAL 0 ====================\n     Time Step 0 ---------\n        icomp TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        iController simulation of icomp after TRIAL 0\n            icomp SIMULATION 0 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 1 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 2 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n      icomp executed\n     Time Step 1 ---------\n      oController Objective Mechanism executed\n    ocomp SIMULATION 1 TRIAL 0 ====================\n     Time Step 0 ---------\n        icomp TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        iController simulation of icomp after TRIAL 0\n            icomp SIMULATION 0 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 1 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 2 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n      icomp executed\n     Time Step 1 ---------\n      oController Objective Mechanism executed\nocomp SIMULATION None TRIAL 1 ====================\n Time Step 0 ---------\n    icomp TRIAL 6 ====================\n     Time Step 0 ---------\n      ia executed\n     Time Step 1 ---------\n      ib executed\n     Time Step 2 ---------\n      iController Objective Mechanism executed\n    iController simulation of icomp after TRIAL 6\n        icomp SIMULATION 0 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        icomp SIMULATION 1 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        icomp SIMULATION 2 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n  icomp executed\n Time Step 1 ---------\n  oController Objective Mechanism executed\nocomp: Executed 2 of 2 trials\n    ocomp: Simulated 2 trials (depth: 1)\n        icomp: Executed 1 of 1 trials (depth: 2)\n            icomp: Simulated 3 trials (depth: 3)\n        icomp: Executed 1 of 1 trials (depth: 2)\n            icomp: Simulated 3 trials (depth: 3)\n    icomp: Executed 1 of 1 trials (depth: 1)\n        icomp: Simulated 3 trials (depth: 2)\n    ocomp: Simulated 2 trials (depth: 1)\n        icomp: Executed 1 of 1 trials (depth: 2)\n            icomp: Simulated 3 trials (depth: 3)\n        icomp: Executed 1 of 1 trials (depth: 2)\n            icomp: Simulated 3 trials (depth: 3)\n    icomp: Executed 1 of 1 trials (depth: 1)\n        icomp: Simulated 3 trials (depth: 2)\n'
        assert actual_output == expected_output

        ocomp.run(inputs=inputs_generator_instance,
                  report_output=ReportOutput.ON,
                  report_progress=ReportProgress.ON,
                  report_simulations=ReportSimulations.ON,
                  report_to_devices=ReportDevices.DIVERT
                  )
        actual_output = ocomp.rich_diverted_reports
        expected_output = '\noController simulation of ocomp before TRIAL 0\n    ocomp SIMULATION 0 TRIAL 0 ====================\n     Time Step 0 ---------\n        icomp TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        iController simulation of icomp after TRIAL 0\n            icomp SIMULATION 0 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 1 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 2 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n      icomp executed\n     Time Step 1 ---------\n      oController Objective Mechanism executed\n    ocomp SIMULATION 1 TRIAL 0 ====================\n     Time Step 0 ---------\n        icomp TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        iController simulation of icomp after TRIAL 0\n            icomp SIMULATION 0 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 1 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 2 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n      icomp executed\n     Time Step 1 ---------\n      oController Objective Mechanism executed\nocomp SIMULATION None TRIAL 0 ====================\n Time Step 0 ---------\n    icomp TRIAL 7 ====================\n     Time Step 0 ---------\n      ia executed\n     Time Step 1 ---------\n      ib executed\n     Time Step 2 ---------\n      iController Objective Mechanism executed\n    iController simulation of icomp after TRIAL 7\n        icomp SIMULATION 0 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        icomp SIMULATION 1 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        icomp SIMULATION 2 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n  icomp executed\n Time Step 1 ---------\n  oController Objective Mechanism executed\nocomp: Executed 1 trials\n    ocomp: Simulated 2 trials (depth: 1)\n        icomp: Executed 1 of 1 trials (depth: 2)\n            icomp: Simulated 3 trials (depth: 3)\n        icomp: Executed 1 of 1 trials (depth: 2)\n            icomp: Simulated 3 trials (depth: 3)\n    icomp: Executed 1 of 1 trials (depth: 1)\n        icomp: Simulated 3 trials (depth: 2)\n\noController simulation of ocomp before TRIAL 0\n    ocomp SIMULATION 0 TRIAL 0 ====================\n     Time Step 0 ---------\n        icomp TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        iController simulation of icomp after TRIAL 0\n            icomp SIMULATION 0 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 1 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 2 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n      icomp executed\n     Time Step 1 ---------\n      oController Objective Mechanism executed\n    ocomp SIMULATION 1 TRIAL 0 ====================\n     Time Step 0 ---------\n        icomp TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        iController simulation of icomp after TRIAL 0\n            icomp SIMULATION 0 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 1 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 2 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n      icomp executed\n     Time Step 1 ---------\n      oController Objective Mechanism executed\nocomp SIMULATION None TRIAL 0 ====================\n Time Step 0 ---------\n    icomp TRIAL 7 ====================\n     Time Step 0 ---------\n      ia executed\n     Time Step 1 ---------\n      ib executed\n     Time Step 2 ---------\n      iController Objective Mechanism executed\n    iController simulation of icomp after TRIAL 7\n        icomp SIMULATION 0 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        icomp SIMULATION 1 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        icomp SIMULATION 2 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n  icomp executed\n Time Step 1 ---------\n  oController Objective Mechanism executed\noController simulation of ocomp before TRIAL 1\n    ocomp SIMULATION 0 TRIAL 0 ====================\n     Time Step 0 ---------\n        icomp TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        iController simulation of icomp after TRIAL 0\n            icomp SIMULATION 0 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 1 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 2 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n      icomp executed\n     Time Step 1 ---------\n      oController Objective Mechanism executed\n    ocomp SIMULATION 1 TRIAL 0 ====================\n     Time Step 0 ---------\n        icomp TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        iController simulation of icomp after TRIAL 0\n            icomp SIMULATION 0 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 1 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 2 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n      icomp executed\n     Time Step 1 ---------\n      oController Objective Mechanism executed\nocomp SIMULATION None TRIAL 1 ====================\n Time Step 0 ---------\n    icomp TRIAL 8 ====================\n     Time Step 0 ---------\n      ia executed\n     Time Step 1 ---------\n      ib executed\n     Time Step 2 ---------\n      iController Objective Mechanism executed\n    iController simulation of icomp after TRIAL 8\n        icomp SIMULATION 0 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        icomp SIMULATION 1 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        icomp SIMULATION 2 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n  icomp executed\n Time Step 1 ---------\n  oController Objective Mechanism executed\nocomp: Executed 2 trials\n    ocomp: Simulated 2 trials (depth: 1)\n        icomp: Executed 1 of 1 trials (depth: 2)\n            icomp: Simulated 3 trials (depth: 3)\n        icomp: Executed 1 of 1 trials (depth: 2)\n            icomp: Simulated 3 trials (depth: 3)\n    icomp: Executed 1 of 1 trials (depth: 1)\n        icomp: Simulated 3 trials (depth: 2)\n    ocomp: Simulated 2 trials (depth: 1)\n        icomp: Executed 1 of 1 trials (depth: 2)\n            icomp: Simulated 3 trials (depth: 3)\n        icomp: Executed 1 of 1 trials (depth: 2)\n            icomp: Simulated 3 trials (depth: 3)\n    icomp: Executed 1 of 1 trials (depth: 1)\n        icomp: Simulated 3 trials (depth: 2)\n'
        assert actual_output == expected_output

        ocomp.run(inputs=inputs_generator_function(),
                  report_output=ReportOutput.ON,
                  report_progress=ReportProgress.ON,
                  report_simulations=ReportSimulations.ON,
                  report_to_devices=ReportDevices.DIVERT
                  )
        actual_output = ocomp.rich_diverted_reports
        expected_output = '\noController simulation of ocomp before TRIAL 0\n    ocomp SIMULATION 0 TRIAL 0 ====================\n     Time Step 0 ---------\n        icomp TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        iController simulation of icomp after TRIAL 0\n            icomp SIMULATION 0 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 1 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 2 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n      icomp executed\n     Time Step 1 ---------\n      oController Objective Mechanism executed\n    ocomp SIMULATION 1 TRIAL 0 ====================\n     Time Step 0 ---------\n        icomp TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        iController simulation of icomp after TRIAL 0\n            icomp SIMULATION 0 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 1 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 2 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n      icomp executed\n     Time Step 1 ---------\n      oController Objective Mechanism executed\nocomp SIMULATION None TRIAL 0 ====================\n Time Step 0 ---------\n    icomp TRIAL 9 ====================\n     Time Step 0 ---------\n      ia executed\n     Time Step 1 ---------\n      ib executed\n     Time Step 2 ---------\n      iController Objective Mechanism executed\n    iController simulation of icomp after TRIAL 9\n        icomp SIMULATION 0 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        icomp SIMULATION 1 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        icomp SIMULATION 2 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n  icomp executed\n Time Step 1 ---------\n  oController Objective Mechanism executed\nocomp: Executed 1 trials\n    ocomp: Simulated 2 trials (depth: 1)\n        icomp: Executed 1 of 1 trials (depth: 2)\n            icomp: Simulated 3 trials (depth: 3)\n        icomp: Executed 1 of 1 trials (depth: 2)\n            icomp: Simulated 3 trials (depth: 3)\n    icomp: Executed 1 of 1 trials (depth: 1)\n        icomp: Simulated 3 trials (depth: 2)\n\noController simulation of ocomp before TRIAL 0\n    ocomp SIMULATION 0 TRIAL 0 ====================\n     Time Step 0 ---------\n        icomp TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        iController simulation of icomp after TRIAL 0\n            icomp SIMULATION 0 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 1 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 2 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n      icomp executed\n     Time Step 1 ---------\n      oController Objective Mechanism executed\n    ocomp SIMULATION 1 TRIAL 0 ====================\n     Time Step 0 ---------\n        icomp TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        iController simulation of icomp after TRIAL 0\n            icomp SIMULATION 0 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 1 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 2 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n      icomp executed\n     Time Step 1 ---------\n      oController Objective Mechanism executed\nocomp SIMULATION None TRIAL 0 ====================\n Time Step 0 ---------\n    icomp TRIAL 9 ====================\n     Time Step 0 ---------\n      ia executed\n     Time Step 1 ---------\n      ib executed\n     Time Step 2 ---------\n      iController Objective Mechanism executed\n    iController simulation of icomp after TRIAL 9\n        icomp SIMULATION 0 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        icomp SIMULATION 1 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        icomp SIMULATION 2 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n  icomp executed\n Time Step 1 ---------\n  oController Objective Mechanism executed\noController simulation of ocomp before TRIAL 1\n    ocomp SIMULATION 0 TRIAL 0 ====================\n     Time Step 0 ---------\n        icomp TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        iController simulation of icomp after TRIAL 0\n            icomp SIMULATION 0 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 1 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 2 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n      icomp executed\n     Time Step 1 ---------\n      oController Objective Mechanism executed\n    ocomp SIMULATION 1 TRIAL 0 ====================\n     Time Step 0 ---------\n        icomp TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        iController simulation of icomp after TRIAL 0\n            icomp SIMULATION 0 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 1 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 2 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n      icomp executed\n     Time Step 1 ---------\n      oController Objective Mechanism executed\nocomp SIMULATION None TRIAL 1 ====================\n Time Step 0 ---------\n    icomp TRIAL 10 ====================\n     Time Step 0 ---------\n      ia executed\n     Time Step 1 ---------\n      ib executed\n     Time Step 2 ---------\n      iController Objective Mechanism executed\n    iController simulation of icomp after TRIAL 10\n        icomp SIMULATION 0 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        icomp SIMULATION 1 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        icomp SIMULATION 2 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n  icomp executed\n Time Step 1 ---------\n  oController Objective Mechanism executed\nocomp: Executed 2 trials\n    ocomp: Simulated 2 trials (depth: 1)\n        icomp: Executed 1 of 1 trials (depth: 2)\n            icomp: Simulated 3 trials (depth: 3)\n        icomp: Executed 1 of 1 trials (depth: 2)\n            icomp: Simulated 3 trials (depth: 3)\n    icomp: Executed 1 of 1 trials (depth: 1)\n        icomp: Simulated 3 trials (depth: 2)\n    ocomp: Simulated 2 trials (depth: 1)\n        icomp: Executed 1 of 1 trials (depth: 2)\n            icomp: Simulated 3 trials (depth: 3)\n        icomp: Executed 1 of 1 trials (depth: 2)\n            icomp: Simulated 3 trials (depth: 3)\n    icomp: Executed 1 of 1 trials (depth: 1)\n        icomp: Simulated 3 trials (depth: 2)\n'
        assert actual_output == expected_output

        # Test other combinations of controller_modes for outer and inner Compositions:
        icomp.controller_mode = pnl.AFTER
        ocomp.run(inputs=inputs_dict,
                  report_output=ReportOutput.ON,
                  report_progress=ReportProgress.ON,
                  report_simulations=ReportSimulations.ON,
                  report_to_devices=ReportDevices.DIVERT
                  )
        actual_output = ocomp.rich_diverted_reports
        expected_output = '\noController simulation of ocomp before TRIAL 0\n    ocomp SIMULATION 0 TRIAL 0 ====================\n     Time Step 0 ---------\n        icomp TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        iController simulation of icomp after TRIAL 0\n            icomp SIMULATION 0 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 1 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 2 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n      icomp executed\n     Time Step 1 ---------\n      oController Objective Mechanism executed\n    ocomp SIMULATION 1 TRIAL 0 ====================\n     Time Step 0 ---------\n        icomp TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        iController simulation of icomp after TRIAL 0\n            icomp SIMULATION 0 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 1 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 2 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n      icomp executed\n     Time Step 1 ---------\n      oController Objective Mechanism executed\nocomp SIMULATION None TRIAL 0 ====================\n Time Step 0 ---------\n    icomp TRIAL 11 ====================\n     Time Step 0 ---------\n      ia executed\n     Time Step 1 ---------\n      ib executed\n     Time Step 2 ---------\n      iController Objective Mechanism executed\n    iController simulation of icomp after TRIAL 11\n        icomp SIMULATION 0 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        icomp SIMULATION 1 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        icomp SIMULATION 2 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n  icomp executed\n Time Step 1 ---------\n  oController Objective Mechanism executed\nocomp: Executed 1 of 2 trials\n    ocomp: Simulated 2 trials (depth: 1)\n        icomp: Executed 1 of 1 trials (depth: 2)\n            icomp: Simulated 3 trials (depth: 3)\n        icomp: Executed 1 of 1 trials (depth: 2)\n            icomp: Simulated 3 trials (depth: 3)\n    icomp: Executed 1 of 1 trials (depth: 1)\n        icomp: Simulated 3 trials (depth: 2)\n\noController simulation of ocomp before TRIAL 0\n    ocomp SIMULATION 0 TRIAL 0 ====================\n     Time Step 0 ---------\n        icomp TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        iController simulation of icomp after TRIAL 0\n            icomp SIMULATION 0 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 1 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 2 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n      icomp executed\n     Time Step 1 ---------\n      oController Objective Mechanism executed\n    ocomp SIMULATION 1 TRIAL 0 ====================\n     Time Step 0 ---------\n        icomp TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        iController simulation of icomp after TRIAL 0\n            icomp SIMULATION 0 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 1 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 2 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n      icomp executed\n     Time Step 1 ---------\n      oController Objective Mechanism executed\nocomp SIMULATION None TRIAL 0 ====================\n Time Step 0 ---------\n    icomp TRIAL 11 ====================\n     Time Step 0 ---------\n      ia executed\n     Time Step 1 ---------\n      ib executed\n     Time Step 2 ---------\n      iController Objective Mechanism executed\n    iController simulation of icomp after TRIAL 11\n        icomp SIMULATION 0 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        icomp SIMULATION 1 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        icomp SIMULATION 2 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n  icomp executed\n Time Step 1 ---------\n  oController Objective Mechanism executed\noController simulation of ocomp before TRIAL 1\n    ocomp SIMULATION 0 TRIAL 0 ====================\n     Time Step 0 ---------\n        icomp TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        iController simulation of icomp after TRIAL 0\n            icomp SIMULATION 0 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 1 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 2 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n      icomp executed\n     Time Step 1 ---------\n      oController Objective Mechanism executed\n    ocomp SIMULATION 1 TRIAL 0 ====================\n     Time Step 0 ---------\n        icomp TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        iController simulation of icomp after TRIAL 0\n            icomp SIMULATION 0 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 1 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 2 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n      icomp executed\n     Time Step 1 ---------\n      oController Objective Mechanism executed\nocomp SIMULATION None TRIAL 1 ====================\n Time Step 0 ---------\n    icomp TRIAL 12 ====================\n     Time Step 0 ---------\n      ia executed\n     Time Step 1 ---------\n      ib executed\n     Time Step 2 ---------\n      iController Objective Mechanism executed\n    iController simulation of icomp after TRIAL 12\n        icomp SIMULATION 0 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        icomp SIMULATION 1 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        icomp SIMULATION 2 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n  icomp executed\n Time Step 1 ---------\n  oController Objective Mechanism executed\nocomp: Executed 2 of 2 trials\n    ocomp: Simulated 2 trials (depth: 1)\n        icomp: Executed 1 of 1 trials (depth: 2)\n            icomp: Simulated 3 trials (depth: 3)\n        icomp: Executed 1 of 1 trials (depth: 2)\n            icomp: Simulated 3 trials (depth: 3)\n    icomp: Executed 1 of 1 trials (depth: 1)\n        icomp: Simulated 3 trials (depth: 2)\n    ocomp: Simulated 2 trials (depth: 1)\n        icomp: Executed 1 of 1 trials (depth: 2)\n            icomp: Simulated 3 trials (depth: 3)\n        icomp: Executed 1 of 1 trials (depth: 2)\n            icomp: Simulated 3 trials (depth: 3)\n    icomp: Executed 1 of 1 trials (depth: 1)\n        icomp: Simulated 3 trials (depth: 2)\n'
        assert actual_output == expected_output

        icomp.controller_mode = pnl.BEFORE
        ocomp.run(inputs=inputs_dict,
                  report_output=ReportOutput.ON,
                  report_progress=ReportProgress.ON,
                  report_simulations=ReportSimulations.ON,
                  report_to_devices=ReportDevices.DIVERT
                  )
        actual_output = ocomp.rich_diverted_reports
        expected_output = '\noController simulation of ocomp before TRIAL 0\n    ocomp SIMULATION 0 TRIAL 0 ====================\n     Time Step 0 ---------\n        iController simulation of icomp before TRIAL 0\n            icomp SIMULATION 0 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 1 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 2 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n        icomp SIMULATION None TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n      icomp executed\n     Time Step 1 ---------\n      oController Objective Mechanism executed\n    ocomp SIMULATION 1 TRIAL 0 ====================\n     Time Step 0 ---------\n        iController simulation of icomp before TRIAL 0\n            icomp SIMULATION 0 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 1 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 2 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n        icomp SIMULATION None TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n      icomp executed\n     Time Step 1 ---------\n      oController Objective Mechanism executed\nocomp SIMULATION None TRIAL 0 ====================\n Time Step 0 ---------\n    iController simulation of icomp before TRIAL 13\n        icomp SIMULATION 0 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        icomp SIMULATION 1 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        icomp SIMULATION 2 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n    icomp SIMULATION None TRIAL 13 ====================\n     Time Step 0 ---------\n      ia executed\n     Time Step 1 ---------\n      ib executed\n     Time Step 2 ---------\n      iController Objective Mechanism executed\n  icomp executed\n Time Step 1 ---------\n  oController Objective Mechanism executed\nocomp: Executed 1 of 2 trials\n    ocomp: Simulated 2 trials (depth: 1)\n        icomp: Executed 1 of 1 trials (depth: 2)\n            icomp: Simulated 3 trials (depth: 3)\n        icomp: Executed 1 of 1 trials (depth: 2)\n            icomp: Simulated 3 trials (depth: 3)\n    icomp: Executed 1 of 1 trials (depth: 1)\n        icomp: Simulated 3 trials (depth: 2)\n\noController simulation of ocomp before TRIAL 0\n    ocomp SIMULATION 0 TRIAL 0 ====================\n     Time Step 0 ---------\n        iController simulation of icomp before TRIAL 0\n            icomp SIMULATION 0 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 1 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 2 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n        icomp SIMULATION None TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n      icomp executed\n     Time Step 1 ---------\n      oController Objective Mechanism executed\n    ocomp SIMULATION 1 TRIAL 0 ====================\n     Time Step 0 ---------\n        iController simulation of icomp before TRIAL 0\n            icomp SIMULATION 0 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 1 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 2 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n        icomp SIMULATION None TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n      icomp executed\n     Time Step 1 ---------\n      oController Objective Mechanism executed\nocomp SIMULATION None TRIAL 0 ====================\n Time Step 0 ---------\n    iController simulation of icomp before TRIAL 13\n        icomp SIMULATION 0 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        icomp SIMULATION 1 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        icomp SIMULATION 2 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n    icomp SIMULATION None TRIAL 13 ====================\n     Time Step 0 ---------\n      ia executed\n     Time Step 1 ---------\n      ib executed\n     Time Step 2 ---------\n      iController Objective Mechanism executed\n  icomp executed\n Time Step 1 ---------\n  oController Objective Mechanism executed\noController simulation of ocomp before TRIAL 1\n    ocomp SIMULATION 0 TRIAL 0 ====================\n     Time Step 0 ---------\n        iController simulation of icomp before TRIAL 0\n            icomp SIMULATION 0 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 1 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 2 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n        icomp SIMULATION None TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n      icomp executed\n     Time Step 1 ---------\n      oController Objective Mechanism executed\n    ocomp SIMULATION 1 TRIAL 0 ====================\n     Time Step 0 ---------\n        iController simulation of icomp before TRIAL 0\n            icomp SIMULATION 0 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 1 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 2 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n        icomp SIMULATION None TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n      icomp executed\n     Time Step 1 ---------\n      oController Objective Mechanism executed\nocomp SIMULATION None TRIAL 1 ====================\n Time Step 0 ---------\n    iController simulation of icomp before TRIAL 14\n        icomp SIMULATION 0 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        icomp SIMULATION 1 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        icomp SIMULATION 2 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n    icomp SIMULATION None TRIAL 14 ====================\n     Time Step 0 ---------\n      ia executed\n     Time Step 1 ---------\n      ib executed\n     Time Step 2 ---------\n      iController Objective Mechanism executed\n  icomp executed\n Time Step 1 ---------\n  oController Objective Mechanism executed\nocomp: Executed 2 of 2 trials\n    ocomp: Simulated 2 trials (depth: 1)\n        icomp: Executed 1 of 1 trials (depth: 2)\n            icomp: Simulated 3 trials (depth: 3)\n        icomp: Executed 1 of 1 trials (depth: 2)\n            icomp: Simulated 3 trials (depth: 3)\n    icomp: Executed 1 of 1 trials (depth: 1)\n        icomp: Simulated 3 trials (depth: 2)\n    ocomp: Simulated 2 trials (depth: 1)\n        icomp: Executed 1 of 1 trials (depth: 2)\n            icomp: Simulated 3 trials (depth: 3)\n        icomp: Executed 1 of 1 trials (depth: 2)\n            icomp: Simulated 3 trials (depth: 3)\n    icomp: Executed 1 of 1 trials (depth: 1)\n        icomp: Simulated 3 trials (depth: 2)\n'
        assert actual_output == expected_output

        ocomp.controller_mode = pnl.AFTER
        ocomp.run(inputs=inputs_dict,
                  report_output=ReportOutput.ON,
                  report_progress=ReportProgress.ON,
                  report_simulations=ReportSimulations.ON,
                  report_to_devices=ReportDevices.DIVERT
                  )
        actual_output = ocomp.rich_diverted_reports
        expected_output = '\nocomp TRIAL 0 ====================\n Time Step 0 ---------\n    iController simulation of icomp before TRIAL 15\n        icomp SIMULATION 0 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        icomp SIMULATION 1 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        icomp SIMULATION 2 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n    icomp SIMULATION None TRIAL 15 ====================\n     Time Step 0 ---------\n      ia executed\n     Time Step 1 ---------\n      ib executed\n     Time Step 2 ---------\n      iController Objective Mechanism executed\n  icomp executed\n Time Step 1 ---------\n  oController Objective Mechanism executed\nocomp: Executed 1 of 2 trials\n    icomp: Executed 1 of 1 trials (depth: 1)\n        icomp: Simulated 3 trials (depth: 2)\n\nocomp TRIAL 0 ====================\n Time Step 0 ---------\n    iController simulation of icomp before TRIAL 15\n        icomp SIMULATION 0 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        icomp SIMULATION 1 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        icomp SIMULATION 2 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n    icomp SIMULATION None TRIAL 15 ====================\n     Time Step 0 ---------\n      ia executed\n     Time Step 1 ---------\n      ib executed\n     Time Step 2 ---------\n      iController Objective Mechanism executed\n  icomp executed\n Time Step 1 ---------\n  oController Objective Mechanism executed\noController simulation of ocomp after TRIAL 0\n    ocomp SIMULATION 0 TRIAL 0 ====================\n     Time Step 0 ---------\n        iController simulation of icomp before TRIAL 0\n            icomp SIMULATION 0 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 1 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 2 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n        icomp SIMULATION None TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n      icomp executed\n     Time Step 1 ---------\n      oController Objective Mechanism executed\n    ocomp SIMULATION 1 TRIAL 0 ====================\n     Time Step 0 ---------\n        iController simulation of icomp before TRIAL 0\n            icomp SIMULATION 0 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 1 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n            icomp SIMULATION 2 TRIAL 0 ====================\n             Time Step 0 ---------\n              ia executed\n             Time Step 1 ---------\n              ib executed\n             Time Step 2 ---------\n              iController Objective Mechanism executed\n        icomp SIMULATION None TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n      icomp executed\n     Time Step 1 ---------\n      oController Objective Mechanism executed\nocomp SIMULATION None TRIAL 1 ====================\n Time Step 0 ---------\n    iController simulation of icomp before TRIAL 16\n        icomp SIMULATION 0 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        icomp SIMULATION 1 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n        icomp SIMULATION 2 TRIAL 0 ====================\n         Time Step 0 ---------\n          ia executed\n         Time Step 1 ---------\n          ib executed\n         Time Step 2 ---------\n          iController Objective Mechanism executed\n    icomp SIMULATION None TRIAL 16 ====================\n     Time Step 0 ---------\n      ia executed\n     Time Step 1 ---------\n      ib executed\n     Time Step 2 ---------\n      iController Objective Mechanism executed\n  icomp executed\n Time Step 1 ---------\n  oController Objective Mechanism executed\nocomp: Executed 2 of 2 trials\n    icomp: Executed 1 of 1 trials (depth: 1)\n        icomp: Simulated 3 trials (depth: 2)\n    ocomp: Simulated 2 trials (depth: 1)\n        icomp: Executed 1 of 1 trials (depth: 2)\n            icomp: Simulated 3 trials (depth: 3)\n        icomp: Executed 1 of 1 trials (depth: 2)\n            icomp: Simulated 3 trials (depth: 3)\n    icomp: Executed 1 of 1 trials (depth: 1)\n        icomp: Simulated 3 trials (depth: 2)\n'
        assert actual_output == expected_output

        # Test ReportOutput.FULL

        icomp.controller_mode = pnl.BEFORE
        ocomp.controller_mode = pnl.AFTER

        ocomp.run(inputs=inputs_dict,
                  report_output=ReportOutput.FULL,
                  report_progress=ReportProgress.ON,
                  report_simulations=ReportSimulations.OFF,
                  report_to_devices=ReportDevices.DIVERT
                  )
        actual_output = ocomp.rich_diverted_reports
        expected_output = '\n    ╭─── iController ───╮\n    │ input: -62.0, 1.0 │\n    │ output: 10.0      │\n    ╰───────────────────╯\n    ┏━━━━━━━━━━━━  icomp: Trial 17  ━━━━━━━━━━━━┓\n    ┃                                           ┃\n    ┃ input: [[-2.0]]                           ┃\n    ┃                                           ┃\n    ┃ ┌──  Time Step 0 ──┐                      ┃\n    ┃ │ ╭───── ia ─────╮ │                      ┃\n    ┃ │ │ input: -2.0  │ │                      ┃\n    ┃ │ │ output: -2.0 │ │                      ┃\n    ┃ │ ╰──────────────╯ │                      ┃\n    ┃ └──────────────────┘                      ┃\n    ┃                                           ┃\n    ┃ ┌──  Time Step 1 ──┐                      ┃\n    ┃ │ ╭───── ib ─────╮ │                      ┃\n    ┃ │ │ input: -2.0  │ │                      ┃\n    ┃ │ │ output: -2.0 │ │                      ┃\n    ┃ │ ╰──────────────╯ │                      ┃\n    ┃ └──────────────────┘                      ┃\n    ┃                                           ┃\n    ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n    ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n    ┃ │ │ input: -2.0                       │ │ ┃\n    ┃ │ │ output: -54.0                     │ │ ┃\n    ┃ │ ╰───────────────────────────────────╯ │ ┃\n    ┃ └───────────────────────────────────────┘ ┃\n    ┃                                           ┃\n    ┃ result: [[10.0]]                          ┃\n    ┃                                           ┃\n    ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n┏━━━━━━━━━━━━  ocomp: Trial 0  ━━━━━━━━━━━━━┓\n┃                                           ┃\n┃ input: [[-2]]                             ┃\n┃                                           ┃\n┃ ┌──  Time Step 0 ──┐                      ┃\n┃ │ ╭─── icomp ────╮ │                      ┃\n┃ │ │ input: -2.0  │ │                      ┃\n┃ │ │ output: -2.0 │ │                      ┃\n┃ │ ╰──────────────╯ │                      ┃\n┃ └──────────────────┘                      ┃\n┃                                           ┃\n┃ ┌────────────  Time Step 1 ─────────────┐ ┃\n┃ │ ╭─ oController Objective Mechanism ─╮ │ ┃\n┃ │ │ input: -2.0                       │ │ ┃\n┃ │ │ output: -54.0                     │ │ ┃\n┃ │ ╰───────────────────────────────────╯ │ ┃\n┃ └───────────────────────────────────────┘ ┃\n┃                                           ┃\n┃ result: [[10.0]]                          ┃\n┃                                           ┃\n┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\nocomp: Executed 1 of 2 trials\n    icomp: Executed 1 of 1 trials (depth: 1)\n\n    ╭─── iController ───╮\n    │ input: -62.0, 1.0 │\n    │ output: 10.0      │\n    ╰───────────────────╯\n    ┏━━━━━━━━━━━━  icomp: Trial 17  ━━━━━━━━━━━━┓\n    ┃                                           ┃\n    ┃ input: [[-2.0]]                           ┃\n    ┃                                           ┃\n    ┃ ┌──  Time Step 0 ──┐                      ┃\n    ┃ │ ╭───── ia ─────╮ │                      ┃\n    ┃ │ │ input: -2.0  │ │                      ┃\n    ┃ │ │ output: -2.0 │ │                      ┃\n    ┃ │ ╰──────────────╯ │                      ┃\n    ┃ └──────────────────┘                      ┃\n    ┃                                           ┃\n    ┃ ┌──  Time Step 1 ──┐                      ┃\n    ┃ │ ╭───── ib ─────╮ │                      ┃\n    ┃ │ │ input: -2.0  │ │                      ┃\n    ┃ │ │ output: -2.0 │ │                      ┃\n    ┃ │ ╰──────────────╯ │                      ┃\n    ┃ └──────────────────┘                      ┃\n    ┃                                           ┃\n    ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n    ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n    ┃ │ │ input: -2.0                       │ │ ┃\n    ┃ │ │ output: -54.0                     │ │ ┃\n    ┃ │ ╰───────────────────────────────────╯ │ ┃\n    ┃ └───────────────────────────────────────┘ ┃\n    ┃                                           ┃\n    ┃ result: [[10.0]]                          ┃\n    ┃                                           ┃\n    ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n┏━━━━━━━━━━━━  ocomp: Trial 0  ━━━━━━━━━━━━━┓\n┃                                           ┃\n┃ input: [[-2]]                             ┃\n┃                                           ┃\n┃ ┌──  Time Step 0 ──┐                      ┃\n┃ │ ╭─── icomp ────╮ │                      ┃\n┃ │ │ input: -2.0  │ │                      ┃\n┃ │ │ output: -2.0 │ │                      ┃\n┃ │ ╰──────────────╯ │                      ┃\n┃ └──────────────────┘                      ┃\n┃                                           ┃\n┃ ┌────────────  Time Step 1 ─────────────┐ ┃\n┃ │ ╭─ oController Objective Mechanism ─╮ │ ┃\n┃ │ │ input: -2.0                       │ │ ┃\n┃ │ │ output: -54.0                     │ │ ┃\n┃ │ ╰───────────────────────────────────╯ │ ┃\n┃ └───────────────────────────────────────┘ ┃\n┃                                           ┃\n┃ result: [[10.0]]                          ┃\n┃                                           ┃\n┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n╭─── oController ───╮\n│ input: -52.0, 1.0 │\n│ output: 1.0       │\n╰───────────────────╯\n    ╭─── iController ────╮\n    │ input: -52.0, -2.0 │\n    │ output: 1.0        │\n    ╰────────────────────╯\n    ┏━━━━━━━━━━━━  icomp: Trial 18  ━━━━━━━━━━━━┓\n    ┃                                           ┃\n    ┃ input: [[1.0]]                            ┃\n    ┃                                           ┃\n    ┃ ┌──  Time Step 0 ──┐                      ┃\n    ┃ │ ╭───── ia ─────╮ │                      ┃\n    ┃ │ │ input: 1.0   │ │                      ┃\n    ┃ │ │ output: 10.0 │ │                      ┃\n    ┃ │ ╰──────────────╯ │                      ┃\n    ┃ └──────────────────┘                      ┃\n    ┃                                           ┃\n    ┃ ┌──  Time Step 1 ──┐                      ┃\n    ┃ │ ╭───── ib ─────╮ │                      ┃\n    ┃ │ │ input: 10.0  │ │                      ┃\n    ┃ │ │ output: 10.0 │ │                      ┃\n    ┃ │ ╰──────────────╯ │                      ┃\n    ┃ └──────────────────┘                      ┃\n    ┃                                           ┃\n    ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n    ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n    ┃ │ │ input: 10.0                       │ │ ┃\n    ┃ │ │ output: -44.0                     │ │ ┃\n    ┃ │ ╰───────────────────────────────────╯ │ ┃\n    ┃ └───────────────────────────────────────┘ ┃\n    ┃                                           ┃\n    ┃ result: [[-2.0]]                          ┃\n    ┃                                           ┃\n    ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n┏━━━━━━━━━━━━  ocomp: Trial 1  ━━━━━━━━━━━━━┓\n┃                                           ┃\n┃ input: [[1]]                              ┃\n┃                                           ┃\n┃ ┌──  Time Step 0 ──┐                      ┃\n┃ │ ╭─── icomp ────╮ │                      ┃\n┃ │ │ input: 1.0   │ │                      ┃\n┃ │ │ output: 10.0 │ │                      ┃\n┃ │ ╰──────────────╯ │                      ┃\n┃ └──────────────────┘                      ┃\n┃                                           ┃\n┃ ┌────────────  Time Step 1 ─────────────┐ ┃\n┃ │ ╭─ oController Objective Mechanism ─╮ │ ┃\n┃ │ │ input: 10.0                       │ │ ┃\n┃ │ │ output: -44.0                     │ │ ┃\n┃ │ ╰───────────────────────────────────╯ │ ┃\n┃ └───────────────────────────────────────┘ ┃\n┃                                           ┃\n┃ result: [[-2.0]]                          ┃\n┃                                           ┃\n┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\nocomp: Executed 2 of 2 trials\n    icomp: Executed 1 of 1 trials (depth: 1)\n        icomp: Executed 1 of 1 trials (depth: 2)\n        icomp: Executed 1 of 1 trials (depth: 2)\n    icomp: Executed 1 of 1 trials (depth: 1)\n'
        assert actual_output == expected_output

        ocomp.run(inputs=inputs_dict,
                  report_output=ReportOutput.FULL,
                  report_progress=ReportProgress.ON,
                  report_simulations=ReportSimulations.ON,
                  report_to_devices=ReportDevices.DIVERT
                  )
        actual_output = ocomp.rich_diverted_reports
        expected_output = '\n    ╭─── iController ───╮\n    │ input: -54.0, 1.0 │\n    │ output: 10.0      │\n    ╰───────────────────╯\n        ┏━━━━━━  icomp SIMULATION 0: Trial 0  ━━━━━━┓\n        ┃                                           ┃\n        ┃ input: [[-2.0]]                           ┃\n        ┃                                           ┃\n        ┃ ┌──  Time Step 0 ──┐                      ┃\n        ┃ │ ╭───── ia ─────╮ │                      ┃\n        ┃ │ │ input: -2.0  │ │                      ┃\n        ┃ │ │ output: -2.0 │ │                      ┃\n        ┃ │ ╰──────────────╯ │                      ┃\n        ┃ └──────────────────┘                      ┃\n        ┃                                           ┃\n        ┃ ┌──  Time Step 1 ──┐                      ┃\n        ┃ │ ╭───── ib ─────╮ │                      ┃\n        ┃ │ │ input: -2.0  │ │                      ┃\n        ┃ │ │ output: -2.0 │ │                      ┃\n        ┃ │ ╰──────────────╯ │                      ┃\n        ┃ └──────────────────┘                      ┃\n        ┃                                           ┃\n        ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n        ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n        ┃ │ │ input: -2.0                       │ │ ┃\n        ┃ │ │ output: -46.0                     │ │ ┃\n        ┃ │ ╰───────────────────────────────────╯ │ ┃\n        ┃ └───────────────────────────────────────┘ ┃\n        ┃                                           ┃\n        ┃ result: [[10.0]]                          ┃\n        ┃                                           ┃\n        ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n        ┏━━━━━━  icomp SIMULATION 1: Trial 0  ━━━━━━┓\n        ┃                                           ┃\n        ┃ input: [[-2.0]]                           ┃\n        ┃                                           ┃\n        ┃ ┌──  Time Step 0 ───┐                     ┃\n        ┃ │ ╭───── ia ──────╮ │                     ┃\n        ┃ │ │ input: -2.0   │ │                     ┃\n        ┃ │ │ output: -11.0 │ │                     ┃\n        ┃ │ ╰───────────────╯ │                     ┃\n        ┃ └───────────────────┘                     ┃\n        ┃                                           ┃\n        ┃ ┌──  Time Step 1 ───┐                     ┃\n        ┃ │ ╭───── ib ──────╮ │                     ┃\n        ┃ │ │ input: -11.0  │ │                     ┃\n        ┃ │ │ output: -11.0 │ │                     ┃\n        ┃ │ ╰───────────────╯ │                     ┃\n        ┃ └───────────────────┘                     ┃\n        ┃                                           ┃\n        ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n        ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n        ┃ │ │ input: -11.0                      │ │ ┃\n        ┃ │ │ output: -55.0                     │ │ ┃\n        ┃ │ ╰───────────────────────────────────╯ │ ┃\n        ┃ └───────────────────────────────────────┘ ┃\n        ┃                                           ┃\n        ┃ result: [[10.0]]                          ┃\n        ┃                                           ┃\n        ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n        ┏━━━━━━  icomp SIMULATION 2: Trial 0  ━━━━━━┓\n        ┃                                           ┃\n        ┃ input: [[-2.0]]                           ┃\n        ┃                                           ┃\n        ┃ ┌──  Time Step 0 ───┐                     ┃\n        ┃ │ ╭───── ia ──────╮ │                     ┃\n        ┃ │ │ input: -2.0   │ │                     ┃\n        ┃ │ │ output: -20.0 │ │                     ┃\n        ┃ │ ╰───────────────╯ │                     ┃\n        ┃ └───────────────────┘                     ┃\n        ┃                                           ┃\n        ┃ ┌──  Time Step 1 ───┐                     ┃\n        ┃ │ ╭───── ib ──────╮ │                     ┃\n        ┃ │ │ input: -20.0  │ │                     ┃\n        ┃ │ │ output: -20.0 │ │                     ┃\n        ┃ │ ╰───────────────╯ │                     ┃\n        ┃ └───────────────────┘                     ┃\n        ┃                                           ┃\n        ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n        ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n        ┃ │ │ input: -20.0                      │ │ ┃\n        ┃ │ │ output: -64.0                     │ │ ┃\n        ┃ │ ╰───────────────────────────────────╯ │ ┃\n        ┃ └───────────────────────────────────────┘ ┃\n        ┃                                           ┃\n        ┃ result: [[10.0]]                          ┃\n        ┃                                           ┃\n        ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n    ┏━━━━  icomp SIMULATION None: Trial 19  ━━━━┓\n    ┃                                           ┃\n    ┃ input: [[-2.0]]                           ┃\n    ┃                                           ┃\n    ┃ ┌──  Time Step 0 ──┐                      ┃\n    ┃ │ ╭───── ia ─────╮ │                      ┃\n    ┃ │ │ input: -2.0  │ │                      ┃\n    ┃ │ │ output: -2.0 │ │                      ┃\n    ┃ │ ╰──────────────╯ │                      ┃\n    ┃ └──────────────────┘                      ┃\n    ┃                                           ┃\n    ┃ ┌──  Time Step 1 ──┐                      ┃\n    ┃ │ ╭───── ib ─────╮ │                      ┃\n    ┃ │ │ input: -2.0  │ │                      ┃\n    ┃ │ │ output: -2.0 │ │                      ┃\n    ┃ │ ╰──────────────╯ │                      ┃\n    ┃ └──────────────────┘                      ┃\n    ┃                                           ┃\n    ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n    ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n    ┃ │ │ input: -2.0                       │ │ ┃\n    ┃ │ │ output: -46.0                     │ │ ┃\n    ┃ │ ╰───────────────────────────────────╯ │ ┃\n    ┃ └───────────────────────────────────────┘ ┃\n    ┃                                           ┃\n    ┃ result: [[10.0]]                          ┃\n    ┃                                           ┃\n    ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n┏━━━━━━━━━━━━  ocomp: Trial 0  ━━━━━━━━━━━━━┓\n┃                                           ┃\n┃ input: [[-2]]                             ┃\n┃                                           ┃\n┃ ┌──  Time Step 0 ──┐                      ┃\n┃ │ ╭─── icomp ────╮ │                      ┃\n┃ │ │ input: -2.0  │ │                      ┃\n┃ │ │ output: -2.0 │ │                      ┃\n┃ │ ╰──────────────╯ │                      ┃\n┃ └──────────────────┘                      ┃\n┃                                           ┃\n┃ ┌────────────  Time Step 1 ─────────────┐ ┃\n┃ │ ╭─ oController Objective Mechanism ─╮ │ ┃\n┃ │ │ input: -2.0                       │ │ ┃\n┃ │ │ output: -46.0                     │ │ ┃\n┃ │ ╰───────────────────────────────────╯ │ ┃\n┃ └───────────────────────────────────────┘ ┃\n┃                                           ┃\n┃ result: [[10.0]]                          ┃\n┃                                           ┃\n┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\nocomp: Executed 1 of 2 trials\n    icomp: Executed 1 of 1 trials (depth: 1)\n        icomp: Simulated 3 trials (depth: 2)\n\n    ╭─── iController ───╮\n    │ input: -54.0, 1.0 │\n    │ output: 10.0      │\n    ╰───────────────────╯\n        ┏━━━━━━  icomp SIMULATION 0: Trial 0  ━━━━━━┓\n        ┃                                           ┃\n        ┃ input: [[-2.0]]                           ┃\n        ┃                                           ┃\n        ┃ ┌──  Time Step 0 ──┐                      ┃\n        ┃ │ ╭───── ia ─────╮ │                      ┃\n        ┃ │ │ input: -2.0  │ │                      ┃\n        ┃ │ │ output: -2.0 │ │                      ┃\n        ┃ │ ╰──────────────╯ │                      ┃\n        ┃ └──────────────────┘                      ┃\n        ┃                                           ┃\n        ┃ ┌──  Time Step 1 ──┐                      ┃\n        ┃ │ ╭───── ib ─────╮ │                      ┃\n        ┃ │ │ input: -2.0  │ │                      ┃\n        ┃ │ │ output: -2.0 │ │                      ┃\n        ┃ │ ╰──────────────╯ │                      ┃\n        ┃ └──────────────────┘                      ┃\n        ┃                                           ┃\n        ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n        ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n        ┃ │ │ input: -2.0                       │ │ ┃\n        ┃ │ │ output: -46.0                     │ │ ┃\n        ┃ │ ╰───────────────────────────────────╯ │ ┃\n        ┃ └───────────────────────────────────────┘ ┃\n        ┃                                           ┃\n        ┃ result: [[10.0]]                          ┃\n        ┃                                           ┃\n        ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n        ┏━━━━━━  icomp SIMULATION 1: Trial 0  ━━━━━━┓\n        ┃                                           ┃\n        ┃ input: [[-2.0]]                           ┃\n        ┃                                           ┃\n        ┃ ┌──  Time Step 0 ───┐                     ┃\n        ┃ │ ╭───── ia ──────╮ │                     ┃\n        ┃ │ │ input: -2.0   │ │                     ┃\n        ┃ │ │ output: -11.0 │ │                     ┃\n        ┃ │ ╰───────────────╯ │                     ┃\n        ┃ └───────────────────┘                     ┃\n        ┃                                           ┃\n        ┃ ┌──  Time Step 1 ───┐                     ┃\n        ┃ │ ╭───── ib ──────╮ │                     ┃\n        ┃ │ │ input: -11.0  │ │                     ┃\n        ┃ │ │ output: -11.0 │ │                     ┃\n        ┃ │ ╰───────────────╯ │                     ┃\n        ┃ └───────────────────┘                     ┃\n        ┃                                           ┃\n        ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n        ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n        ┃ │ │ input: -11.0                      │ │ ┃\n        ┃ │ │ output: -55.0                     │ │ ┃\n        ┃ │ ╰───────────────────────────────────╯ │ ┃\n        ┃ └───────────────────────────────────────┘ ┃\n        ┃                                           ┃\n        ┃ result: [[10.0]]                          ┃\n        ┃                                           ┃\n        ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n        ┏━━━━━━  icomp SIMULATION 2: Trial 0  ━━━━━━┓\n        ┃                                           ┃\n        ┃ input: [[-2.0]]                           ┃\n        ┃                                           ┃\n        ┃ ┌──  Time Step 0 ───┐                     ┃\n        ┃ │ ╭───── ia ──────╮ │                     ┃\n        ┃ │ │ input: -2.0   │ │                     ┃\n        ┃ │ │ output: -20.0 │ │                     ┃\n        ┃ │ ╰───────────────╯ │                     ┃\n        ┃ └───────────────────┘                     ┃\n        ┃                                           ┃\n        ┃ ┌──  Time Step 1 ───┐                     ┃\n        ┃ │ ╭───── ib ──────╮ │                     ┃\n        ┃ │ │ input: -20.0  │ │                     ┃\n        ┃ │ │ output: -20.0 │ │                     ┃\n        ┃ │ ╰───────────────╯ │                     ┃\n        ┃ └───────────────────┘                     ┃\n        ┃                                           ┃\n        ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n        ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n        ┃ │ │ input: -20.0                      │ │ ┃\n        ┃ │ │ output: -64.0                     │ │ ┃\n        ┃ │ ╰───────────────────────────────────╯ │ ┃\n        ┃ └───────────────────────────────────────┘ ┃\n        ┃                                           ┃\n        ┃ result: [[10.0]]                          ┃\n        ┃                                           ┃\n        ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n    ┏━━━━  icomp SIMULATION None: Trial 19  ━━━━┓\n    ┃                                           ┃\n    ┃ input: [[-2.0]]                           ┃\n    ┃                                           ┃\n    ┃ ┌──  Time Step 0 ──┐                      ┃\n    ┃ │ ╭───── ia ─────╮ │                      ┃\n    ┃ │ │ input: -2.0  │ │                      ┃\n    ┃ │ │ output: -2.0 │ │                      ┃\n    ┃ │ ╰──────────────╯ │                      ┃\n    ┃ └──────────────────┘                      ┃\n    ┃                                           ┃\n    ┃ ┌──  Time Step 1 ──┐                      ┃\n    ┃ │ ╭───── ib ─────╮ │                      ┃\n    ┃ │ │ input: -2.0  │ │                      ┃\n    ┃ │ │ output: -2.0 │ │                      ┃\n    ┃ │ ╰──────────────╯ │                      ┃\n    ┃ └──────────────────┘                      ┃\n    ┃                                           ┃\n    ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n    ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n    ┃ │ │ input: -2.0                       │ │ ┃\n    ┃ │ │ output: -46.0                     │ │ ┃\n    ┃ │ ╰───────────────────────────────────╯ │ ┃\n    ┃ └───────────────────────────────────────┘ ┃\n    ┃                                           ┃\n    ┃ result: [[10.0]]                          ┃\n    ┃                                           ┃\n    ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n┏━━━━━━━━━━━━  ocomp: Trial 0  ━━━━━━━━━━━━━┓\n┃                                           ┃\n┃ input: [[-2]]                             ┃\n┃                                           ┃\n┃ ┌──  Time Step 0 ──┐                      ┃\n┃ │ ╭─── icomp ────╮ │                      ┃\n┃ │ │ input: -2.0  │ │                      ┃\n┃ │ │ output: -2.0 │ │                      ┃\n┃ │ ╰──────────────╯ │                      ┃\n┃ └──────────────────┘                      ┃\n┃                                           ┃\n┃ ┌────────────  Time Step 1 ─────────────┐ ┃\n┃ │ ╭─ oController Objective Mechanism ─╮ │ ┃\n┃ │ │ input: -2.0                       │ │ ┃\n┃ │ │ output: -46.0                     │ │ ┃\n┃ │ ╰───────────────────────────────────╯ │ ┃\n┃ └───────────────────────────────────────┘ ┃\n┃                                           ┃\n┃ result: [[10.0]]                          ┃\n┃                                           ┃\n┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n╭─── oController ───╮\n│ input: -44.0, 1.0 │\n│ output: 1.0       │\n╰───────────────────╯\n        ╭─── iController ────╮\n        │ input: -44.0, -2.0 │\n        │ output: 1.0        │\n        ╰────────────────────╯\n            ┏━━━━━━  icomp SIMULATION 0: Trial 0  ━━━━━━┓\n            ┃                                           ┃\n            ┃ input: [[0.0]]                            ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 0 ──┐                       ┃\n            ┃ │ ╭──── ia ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 1 ──┐                       ┃\n            ┃ │ ╭──── ib ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n            ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n            ┃ │ │ input: 0.0                        │ │ ┃\n            ┃ │ │ output: -46.0                     │ │ ┃\n            ┃ │ ╰───────────────────────────────────╯ │ ┃\n            ┃ └───────────────────────────────────────┘ ┃\n            ┃                                           ┃\n            ┃ result: [[-2.0]]                          ┃\n            ┃                                           ┃\n            ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n            ┏━━━━━━  icomp SIMULATION 1: Trial 0  ━━━━━━┓\n            ┃                                           ┃\n            ┃ input: [[0.0]]                            ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 0 ──┐                       ┃\n            ┃ │ ╭──── ia ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 1 ──┐                       ┃\n            ┃ │ ╭──── ib ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n            ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n            ┃ │ │ input: 0.0                        │ │ ┃\n            ┃ │ │ output: -46.0                     │ │ ┃\n            ┃ │ ╰───────────────────────────────────╯ │ ┃\n            ┃ └───────────────────────────────────────┘ ┃\n            ┃                                           ┃\n            ┃ result: [[-2.0]]                          ┃\n            ┃                                           ┃\n            ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n            ┏━━━━━━  icomp SIMULATION 2: Trial 0  ━━━━━━┓\n            ┃                                           ┃\n            ┃ input: [[0.0]]                            ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 0 ──┐                       ┃\n            ┃ │ ╭──── ia ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 1 ──┐                       ┃\n            ┃ │ ╭──── ib ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n            ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n            ┃ │ │ input: 0.0                        │ │ ┃\n            ┃ │ │ output: -46.0                     │ │ ┃\n            ┃ │ ╰───────────────────────────────────╯ │ ┃\n            ┃ └───────────────────────────────────────┘ ┃\n            ┃                                           ┃\n            ┃ result: [[-2.0]]                          ┃\n            ┃                                           ┃\n            ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n        ┏━━━━  icomp SIMULATION None: Trial 0  ━━━━━┓\n        ┃                                           ┃\n        ┃ input: [[0.0]]                            ┃\n        ┃                                           ┃\n        ┃ ┌─  Time Step 0 ──┐                       ┃\n        ┃ │ ╭──── ia ─────╮ │                       ┃\n        ┃ │ │ input: 0.0  │ │                       ┃\n        ┃ │ │ output: 0.0 │ │                       ┃\n        ┃ │ ╰─────────────╯ │                       ┃\n        ┃ └─────────────────┘                       ┃\n        ┃                                           ┃\n        ┃ ┌─  Time Step 1 ──┐                       ┃\n        ┃ │ ╭──── ib ─────╮ │                       ┃\n        ┃ │ │ input: 0.0  │ │                       ┃\n        ┃ │ │ output: 0.0 │ │                       ┃\n        ┃ │ ╰─────────────╯ │                       ┃\n        ┃ └─────────────────┘                       ┃\n        ┃                                           ┃\n        ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n        ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n        ┃ │ │ input: 0.0                        │ │ ┃\n        ┃ │ │ output: -46.0                     │ │ ┃\n        ┃ │ ╰───────────────────────────────────╯ │ ┃\n        ┃ └───────────────────────────────────────┘ ┃\n        ┃                                           ┃\n        ┃ result: [[-2.0]]                          ┃\n        ┃                                           ┃\n        ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n    ┏━━━━━━  ocomp SIMULATION 0: Trial 0  ━━━━━━┓\n    ┃                                           ┃\n    ┃ input: [[0.0]]                            ┃\n    ┃                                           ┃\n    ┃ ┌─  Time Step 0 ──┐                       ┃\n    ┃ │ ╭─── icomp ───╮ │                       ┃\n    ┃ │ │ input: 0.0  │ │                       ┃\n    ┃ │ │ output: 0.0 │ │                       ┃\n    ┃ │ ╰─────────────╯ │                       ┃\n    ┃ └─────────────────┘                       ┃\n    ┃                                           ┃\n    ┃ ┌────────────  Time Step 1 ─────────────┐ ┃\n    ┃ │ ╭─ oController Objective Mechanism ─╮ │ ┃\n    ┃ │ │ input: 0.0                        │ │ ┃\n    ┃ │ │ output: -46.0                     │ │ ┃\n    ┃ │ ╰───────────────────────────────────╯ │ ┃\n    ┃ └───────────────────────────────────────┘ ┃\n    ┃                                           ┃\n    ┃ result: [[10.0]]                          ┃\n    ┃                                           ┃\n    ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n        ╭─── iController ────╮\n        │ input: -44.0, -2.0 │\n        │ output: 1.0        │\n        ╰────────────────────╯\n            ┏━━━━━━  icomp SIMULATION 0: Trial 0  ━━━━━━┓\n            ┃                                           ┃\n            ┃ input: [[0.0]]                            ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 0 ──┐                       ┃\n            ┃ │ ╭──── ia ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 1 ──┐                       ┃\n            ┃ │ ╭──── ib ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n            ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n            ┃ │ │ input: 0.0                        │ │ ┃\n            ┃ │ │ output: -46.0                     │ │ ┃\n            ┃ │ ╰───────────────────────────────────╯ │ ┃\n            ┃ └───────────────────────────────────────┘ ┃\n            ┃                                           ┃\n            ┃ result: [[-2.0]]                          ┃\n            ┃                                           ┃\n            ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n            ┏━━━━━━  icomp SIMULATION 1: Trial 0  ━━━━━━┓\n            ┃                                           ┃\n            ┃ input: [[0.0]]                            ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 0 ──┐                       ┃\n            ┃ │ ╭──── ia ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 1 ──┐                       ┃\n            ┃ │ ╭──── ib ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n            ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n            ┃ │ │ input: 0.0                        │ │ ┃\n            ┃ │ │ output: -46.0                     │ │ ┃\n            ┃ │ ╰───────────────────────────────────╯ │ ┃\n            ┃ └───────────────────────────────────────┘ ┃\n            ┃                                           ┃\n            ┃ result: [[-2.0]]                          ┃\n            ┃                                           ┃\n            ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n            ┏━━━━━━  icomp SIMULATION 2: Trial 0  ━━━━━━┓\n            ┃                                           ┃\n            ┃ input: [[0.0]]                            ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 0 ──┐                       ┃\n            ┃ │ ╭──── ia ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 1 ──┐                       ┃\n            ┃ │ ╭──── ib ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n            ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n            ┃ │ │ input: 0.0                        │ │ ┃\n            ┃ │ │ output: -46.0                     │ │ ┃\n            ┃ │ ╰───────────────────────────────────╯ │ ┃\n            ┃ └───────────────────────────────────────┘ ┃\n            ┃                                           ┃\n            ┃ result: [[-2.0]]                          ┃\n            ┃                                           ┃\n            ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n        ┏━━━━  icomp SIMULATION None: Trial 0  ━━━━━┓\n        ┃                                           ┃\n        ┃ input: [[0.0]]                            ┃\n        ┃                                           ┃\n        ┃ ┌─  Time Step 0 ──┐                       ┃\n        ┃ │ ╭──── ia ─────╮ │                       ┃\n        ┃ │ │ input: 0.0  │ │                       ┃\n        ┃ │ │ output: 0.0 │ │                       ┃\n        ┃ │ ╰─────────────╯ │                       ┃\n        ┃ └─────────────────┘                       ┃\n        ┃                                           ┃\n        ┃ ┌─  Time Step 1 ──┐                       ┃\n        ┃ │ ╭──── ib ─────╮ │                       ┃\n        ┃ │ │ input: 0.0  │ │                       ┃\n        ┃ │ │ output: 0.0 │ │                       ┃\n        ┃ │ ╰─────────────╯ │                       ┃\n        ┃ └─────────────────┘                       ┃\n        ┃                                           ┃\n        ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n        ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n        ┃ │ │ input: 0.0                        │ │ ┃\n        ┃ │ │ output: -46.0                     │ │ ┃\n        ┃ │ ╰───────────────────────────────────╯ │ ┃\n        ┃ └───────────────────────────────────────┘ ┃\n        ┃                                           ┃\n        ┃ result: [[-2.0]]                          ┃\n        ┃                                           ┃\n        ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n    ┏━━━━━━  ocomp SIMULATION 1: Trial 0  ━━━━━━┓\n    ┃                                           ┃\n    ┃ input: [[0.0]]                            ┃\n    ┃                                           ┃\n    ┃ ┌─  Time Step 0 ──┐                       ┃\n    ┃ │ ╭─── icomp ───╮ │                       ┃\n    ┃ │ │ input: 0.0  │ │                       ┃\n    ┃ │ │ output: 0.0 │ │                       ┃\n    ┃ │ ╰─────────────╯ │                       ┃\n    ┃ └─────────────────┘                       ┃\n    ┃                                           ┃\n    ┃ ┌────────────  Time Step 1 ─────────────┐ ┃\n    ┃ │ ╭─ oController Objective Mechanism ─╮ │ ┃\n    ┃ │ │ input: 0.0                        │ │ ┃\n    ┃ │ │ output: -46.0                     │ │ ┃\n    ┃ │ ╰───────────────────────────────────╯ │ ┃\n    ┃ └───────────────────────────────────────┘ ┃\n    ┃                                           ┃\n    ┃ result: [[10.0]]                          ┃\n    ┃                                           ┃\n    ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n    ╭─── iController ────╮\n    │ input: -44.0, -2.0 │\n    │ output: 1.0        │\n    ╰────────────────────╯\n        ┏━━━━━━  icomp SIMULATION 0: Trial 0  ━━━━━━┓\n        ┃                                           ┃\n        ┃ input: [[1.0]]                            ┃\n        ┃                                           ┃\n        ┃ ┌─  Time Step 0 ──┐                       ┃\n        ┃ │ ╭──── ia ─────╮ │                       ┃\n        ┃ │ │ input: 1.0  │ │                       ┃\n        ┃ │ │ output: 1.0 │ │                       ┃\n        ┃ │ ╰─────────────╯ │                       ┃\n        ┃ └─────────────────┘                       ┃\n        ┃                                           ┃\n        ┃ ┌─  Time Step 1 ──┐                       ┃\n        ┃ │ ╭──── ib ─────╮ │                       ┃\n        ┃ │ │ input: 1.0  │ │                       ┃\n        ┃ │ │ output: 1.0 │ │                       ┃\n        ┃ │ ╰─────────────╯ │                       ┃\n        ┃ └─────────────────┘                       ┃\n        ┃                                           ┃\n        ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n        ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n        ┃ │ │ input: 1.0                        │ │ ┃\n        ┃ │ │ output: -45.0                     │ │ ┃\n        ┃ │ ╰───────────────────────────────────╯ │ ┃\n        ┃ └───────────────────────────────────────┘ ┃\n        ┃                                           ┃\n        ┃ result: [[-2.0]]                          ┃\n        ┃                                           ┃\n        ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n        ┏━━━━━━  icomp SIMULATION 1: Trial 0  ━━━━━━┓\n        ┃                                           ┃\n        ┃ input: [[1.0]]                            ┃\n        ┃                                           ┃\n        ┃ ┌─  Time Step 0 ──┐                       ┃\n        ┃ │ ╭──── ia ─────╮ │                       ┃\n        ┃ │ │ input: 1.0  │ │                       ┃\n        ┃ │ │ output: 5.5 │ │                       ┃\n        ┃ │ ╰─────────────╯ │                       ┃\n        ┃ └─────────────────┘                       ┃\n        ┃                                           ┃\n        ┃ ┌─  Time Step 1 ──┐                       ┃\n        ┃ │ ╭──── ib ─────╮ │                       ┃\n        ┃ │ │ input: 5.5  │ │                       ┃\n        ┃ │ │ output: 5.5 │ │                       ┃\n        ┃ │ ╰─────────────╯ │                       ┃\n        ┃ └─────────────────┘                       ┃\n        ┃                                           ┃\n        ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n        ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n        ┃ │ │ input: 5.5                        │ │ ┃\n        ┃ │ │ output: -40.5                     │ │ ┃\n        ┃ │ ╰───────────────────────────────────╯ │ ┃\n        ┃ └───────────────────────────────────────┘ ┃\n        ┃                                           ┃\n        ┃ result: [[-2.0]]                          ┃\n        ┃                                           ┃\n        ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n        ┏━━━━━━  icomp SIMULATION 2: Trial 0  ━━━━━━┓\n        ┃                                           ┃\n        ┃ input: [[1.0]]                            ┃\n        ┃                                           ┃\n        ┃ ┌──  Time Step 0 ──┐                      ┃\n        ┃ │ ╭───── ia ─────╮ │                      ┃\n        ┃ │ │ input: 1.0   │ │                      ┃\n        ┃ │ │ output: 10.0 │ │                      ┃\n        ┃ │ ╰──────────────╯ │                      ┃\n        ┃ └──────────────────┘                      ┃\n        ┃                                           ┃\n        ┃ ┌──  Time Step 1 ──┐                      ┃\n        ┃ │ ╭───── ib ─────╮ │                      ┃\n        ┃ │ │ input: 10.0  │ │                      ┃\n        ┃ │ │ output: 10.0 │ │                      ┃\n        ┃ │ ╰──────────────╯ │                      ┃\n        ┃ └──────────────────┘                      ┃\n        ┃                                           ┃\n        ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n        ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n        ┃ │ │ input: 10.0                       │ │ ┃\n        ┃ │ │ output: -36.0                     │ │ ┃\n        ┃ │ ╰───────────────────────────────────╯ │ ┃\n        ┃ └───────────────────────────────────────┘ ┃\n        ┃                                           ┃\n        ┃ result: [[-2.0]]                          ┃\n        ┃                                           ┃\n        ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n    ┏━━━━  icomp SIMULATION None: Trial 20  ━━━━┓\n    ┃                                           ┃\n    ┃ input: [[1.0]]                            ┃\n    ┃                                           ┃\n    ┃ ┌──  Time Step 0 ──┐                      ┃\n    ┃ │ ╭───── ia ─────╮ │                      ┃\n    ┃ │ │ input: 1.0   │ │                      ┃\n    ┃ │ │ output: 10.0 │ │                      ┃\n    ┃ │ ╰──────────────╯ │                      ┃\n    ┃ └──────────────────┘                      ┃\n    ┃                                           ┃\n    ┃ ┌──  Time Step 1 ──┐                      ┃\n    ┃ │ ╭───── ib ─────╮ │                      ┃\n    ┃ │ │ input: 10.0  │ │                      ┃\n    ┃ │ │ output: 10.0 │ │                      ┃\n    ┃ │ ╰──────────────╯ │                      ┃\n    ┃ └──────────────────┘                      ┃\n    ┃                                           ┃\n    ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n    ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n    ┃ │ │ input: 10.0                       │ │ ┃\n    ┃ │ │ output: -36.0                     │ │ ┃\n    ┃ │ ╰───────────────────────────────────╯ │ ┃\n    ┃ └───────────────────────────────────────┘ ┃\n    ┃                                           ┃\n    ┃ result: [[-2.0]]                          ┃\n    ┃                                           ┃\n    ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n┏━━━━  ocomp SIMULATION None: Trial 1  ━━━━━┓\n┃                                           ┃\n┃ input: [[1]]                              ┃\n┃                                           ┃\n┃ ┌──  Time Step 0 ──┐                      ┃\n┃ │ ╭─── icomp ────╮ │                      ┃\n┃ │ │ input: 1.0   │ │                      ┃\n┃ │ │ output: 10.0 │ │                      ┃\n┃ │ ╰──────────────╯ │                      ┃\n┃ └──────────────────┘                      ┃\n┃                                           ┃\n┃ ┌────────────  Time Step 1 ─────────────┐ ┃\n┃ │ ╭─ oController Objective Mechanism ─╮ │ ┃\n┃ │ │ input: 10.0                       │ │ ┃\n┃ │ │ output: -36.0                     │ │ ┃\n┃ │ ╰───────────────────────────────────╯ │ ┃\n┃ └───────────────────────────────────────┘ ┃\n┃                                           ┃\n┃ result: [[-2.0]]                          ┃\n┃                                           ┃\n┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\nocomp: Executed 2 of 2 trials\n    icomp: Executed 1 of 1 trials (depth: 1)\n        icomp: Simulated 3 trials (depth: 2)\n    ocomp: Simulated 2 trials (depth: 1)\n        icomp: Executed 1 of 1 trials (depth: 2)\n            icomp: Simulated 3 trials (depth: 3)\n        icomp: Executed 1 of 1 trials (depth: 2)\n            icomp: Simulated 3 trials (depth: 3)\n    icomp: Executed 1 of 1 trials (depth: 1)\n        icomp: Simulated 3 trials (depth: 2)\n'
        assert actual_output == expected_output

        icomp.controller_mode = pnl.AFTER
        ocomp.controller_mode = pnl.BEFORE

        ocomp.run(inputs=inputs_dict,
                  report_output=ReportOutput.FULL,
                  report_progress=ReportProgress.ON,
                  report_simulations=ReportSimulations.OFF,
                  report_to_devices=ReportDevices.DIVERT
                  )
        actual_output = ocomp.rich_diverted_reports
        expected_output = '\n╭─── oController ───╮\n│ input: -36.0, 1.0 │\n│ output: 1.0       │\n╰───────────────────╯\n    ┏━━━━━━━━━━━━  icomp: Trial 21  ━━━━━━━━━━━━┓\n    ┃                                           ┃\n    ┃ input: [[-2.0]]                           ┃\n    ┃                                           ┃\n    ┃ ┌──  Time Step 0 ───┐                     ┃\n    ┃ │ ╭───── ia ──────╮ │                     ┃\n    ┃ │ │ input: -2.0   │ │                     ┃\n    ┃ │ │ output: -20.0 │ │                     ┃\n    ┃ │ ╰───────────────╯ │                     ┃\n    ┃ └───────────────────┘                     ┃\n    ┃                                           ┃\n    ┃ ┌──  Time Step 1 ───┐                     ┃\n    ┃ │ ╭───── ib ──────╮ │                     ┃\n    ┃ │ │ input: -20.0  │ │                     ┃\n    ┃ │ │ output: -20.0 │ │                     ┃\n    ┃ │ ╰───────────────╯ │                     ┃\n    ┃ └───────────────────┘                     ┃\n    ┃                                           ┃\n    ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n    ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n    ┃ │ │ input: -20.0                      │ │ ┃\n    ┃ │ │ output: -56.0                     │ │ ┃\n    ┃ │ ╰───────────────────────────────────╯ │ ┃\n    ┃ └───────────────────────────────────────┘ ┃\n    ┃                                           ┃\n    ┃ result: [[10.0]]                          ┃\n    ┃                                           ┃\n    ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n    ╭─── iController ───╮\n    │ input: -46.0, 1.0 │\n    │ output: 10.0      │\n    ╰───────────────────╯\n┏━━━━━━━━━━━━  ocomp: Trial 0  ━━━━━━━━━━━━━┓\n┃                                           ┃\n┃ input: [[-2]]                             ┃\n┃                                           ┃\n┃ ┌──  Time Step 0 ───┐                     ┃\n┃ │ ╭──── icomp ────╮ │                     ┃\n┃ │ │ input: -2.0   │ │                     ┃\n┃ │ │ output: -20.0 │ │                     ┃\n┃ │ ╰───────────────╯ │                     ┃\n┃ └───────────────────┘                     ┃\n┃                                           ┃\n┃ ┌────────────  Time Step 1 ─────────────┐ ┃\n┃ │ ╭─ oController Objective Mechanism ─╮ │ ┃\n┃ │ │ input: -20.0                      │ │ ┃\n┃ │ │ output: -56.0                     │ │ ┃\n┃ │ ╰───────────────────────────────────╯ │ ┃\n┃ └───────────────────────────────────────┘ ┃\n┃                                           ┃\n┃ result: [[10.0]]                          ┃\n┃                                           ┃\n┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\nocomp: Executed 1 of 2 trials\n        icomp: Executed 1 of 1 trials (depth: 2)\n        icomp: Executed 1 of 1 trials (depth: 2)\n    icomp: Executed 1 of 1 trials (depth: 1)\n\n╭─── oController ───╮\n│ input: -36.0, 1.0 │\n│ output: 1.0       │\n╰───────────────────╯\n    ┏━━━━━━━━━━━━  icomp: Trial 21  ━━━━━━━━━━━━┓\n    ┃                                           ┃\n    ┃ input: [[-2.0]]                           ┃\n    ┃                                           ┃\n    ┃ ┌──  Time Step 0 ───┐                     ┃\n    ┃ │ ╭───── ia ──────╮ │                     ┃\n    ┃ │ │ input: -2.0   │ │                     ┃\n    ┃ │ │ output: -20.0 │ │                     ┃\n    ┃ │ ╰───────────────╯ │                     ┃\n    ┃ └───────────────────┘                     ┃\n    ┃                                           ┃\n    ┃ ┌──  Time Step 1 ───┐                     ┃\n    ┃ │ ╭───── ib ──────╮ │                     ┃\n    ┃ │ │ input: -20.0  │ │                     ┃\n    ┃ │ │ output: -20.0 │ │                     ┃\n    ┃ │ ╰───────────────╯ │                     ┃\n    ┃ └───────────────────┘                     ┃\n    ┃                                           ┃\n    ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n    ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n    ┃ │ │ input: -20.0                      │ │ ┃\n    ┃ │ │ output: -56.0                     │ │ ┃\n    ┃ │ ╰───────────────────────────────────╯ │ ┃\n    ┃ └───────────────────────────────────────┘ ┃\n    ┃                                           ┃\n    ┃ result: [[10.0]]                          ┃\n    ┃                                           ┃\n    ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n    ╭─── iController ───╮\n    │ input: -46.0, 1.0 │\n    │ output: 10.0      │\n    ╰───────────────────╯\n┏━━━━━━━━━━━━  ocomp: Trial 0  ━━━━━━━━━━━━━┓\n┃                                           ┃\n┃ input: [[-2]]                             ┃\n┃                                           ┃\n┃ ┌──  Time Step 0 ───┐                     ┃\n┃ │ ╭──── icomp ────╮ │                     ┃\n┃ │ │ input: -2.0   │ │                     ┃\n┃ │ │ output: -20.0 │ │                     ┃\n┃ │ ╰───────────────╯ │                     ┃\n┃ └───────────────────┘                     ┃\n┃                                           ┃\n┃ ┌────────────  Time Step 1 ─────────────┐ ┃\n┃ │ ╭─ oController Objective Mechanism ─╮ │ ┃\n┃ │ │ input: -20.0                      │ │ ┃\n┃ │ │ output: -56.0                     │ │ ┃\n┃ │ ╰───────────────────────────────────╯ │ ┃\n┃ └───────────────────────────────────────┘ ┃\n┃                                           ┃\n┃ result: [[10.0]]                          ┃\n┃                                           ┃\n┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n╭─── oController ────╮\n│ input: -36.0, -2.0 │\n│ output: 1.0        │\n╰────────────────────╯\n    ┏━━━━━━━━━━━━  icomp: Trial 22  ━━━━━━━━━━━━┓\n    ┃                                           ┃\n    ┃ input: [[1.0]]                            ┃\n    ┃                                           ┃\n    ┃ ┌─  Time Step 0 ──┐                       ┃\n    ┃ │ ╭──── ia ─────╮ │                       ┃\n    ┃ │ │ input: 1.0  │ │                       ┃\n    ┃ │ │ output: 1.0 │ │                       ┃\n    ┃ │ ╰─────────────╯ │                       ┃\n    ┃ └─────────────────┘                       ┃\n    ┃                                           ┃\n    ┃ ┌─  Time Step 1 ──┐                       ┃\n    ┃ │ ╭──── ib ─────╮ │                       ┃\n    ┃ │ │ input: 1.0  │ │                       ┃\n    ┃ │ │ output: 1.0 │ │                       ┃\n    ┃ │ ╰─────────────╯ │                       ┃\n    ┃ └─────────────────┘                       ┃\n    ┃                                           ┃\n    ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n    ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n    ┃ │ │ input: 1.0                        │ │ ┃\n    ┃ │ │ output: -55.0                     │ │ ┃\n    ┃ │ ╰───────────────────────────────────╯ │ ┃\n    ┃ └───────────────────────────────────────┘ ┃\n    ┃                                           ┃\n    ┃ result: [[-20.0]]                         ┃\n    ┃                                           ┃\n    ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n    ╭─── iController ────╮\n    │ input: -56.0, -2.0 │\n    │ output: 1.0        │\n    ╰────────────────────╯\n┏━━━━━━━━━━━━  ocomp: Trial 1  ━━━━━━━━━━━━━┓\n┃                                           ┃\n┃ input: [[1]]                              ┃\n┃                                           ┃\n┃ ┌─  Time Step 0 ──┐                       ┃\n┃ │ ╭─── icomp ───╮ │                       ┃\n┃ │ │ input: 1.0  │ │                       ┃\n┃ │ │ output: 1.0 │ │                       ┃\n┃ │ ╰─────────────╯ │                       ┃\n┃ └─────────────────┘                       ┃\n┃                                           ┃\n┃ ┌────────────  Time Step 1 ─────────────┐ ┃\n┃ │ ╭─ oController Objective Mechanism ─╮ │ ┃\n┃ │ │ input: 1.0                        │ │ ┃\n┃ │ │ output: -55.0                     │ │ ┃\n┃ │ ╰───────────────────────────────────╯ │ ┃\n┃ └───────────────────────────────────────┘ ┃\n┃                                           ┃\n┃ result: [[-20.0]]                         ┃\n┃                                           ┃\n┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\nocomp: Executed 2 of 2 trials\n        icomp: Executed 1 of 1 trials (depth: 2)\n        icomp: Executed 1 of 1 trials (depth: 2)\n    icomp: Executed 1 of 1 trials (depth: 1)\n        icomp: Executed 1 of 1 trials (depth: 2)\n        icomp: Executed 1 of 1 trials (depth: 2)\n    icomp: Executed 1 of 1 trials (depth: 1)\n'
        assert actual_output == expected_output

        ocomp.run(inputs=inputs_dict,
                  report_output=ReportOutput.FULL,
                  report_progress=ReportProgress.ON,
                  report_simulations=ReportSimulations.ON,
                  report_to_devices=ReportDevices.DIVERT
                  )
        actual_output = ocomp.rich_diverted_reports
        expected_output = '\n╭─── oController ───╮\n│ input: -56.0, 1.0 │\n│ output: 1.0       │\n╰───────────────────╯\n        ┏━━━━━━━━━━━━  icomp: Trial 0  ━━━━━━━━━━━━━┓\n        ┃                                           ┃\n        ┃ input: [[0.0]]                            ┃\n        ┃                                           ┃\n        ┃ ┌─  Time Step 0 ──┐                       ┃\n        ┃ │ ╭──── ia ─────╮ │                       ┃\n        ┃ │ │ input: 0.0  │ │                       ┃\n        ┃ │ │ output: 0.0 │ │                       ┃\n        ┃ │ ╰─────────────╯ │                       ┃\n        ┃ └─────────────────┘                       ┃\n        ┃                                           ┃\n        ┃ ┌─  Time Step 1 ──┐                       ┃\n        ┃ │ ╭──── ib ─────╮ │                       ┃\n        ┃ │ │ input: 0.0  │ │                       ┃\n        ┃ │ │ output: 0.0 │ │                       ┃\n        ┃ │ ╰─────────────╯ │                       ┃\n        ┃ └─────────────────┘                       ┃\n        ┃                                           ┃\n        ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n        ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n        ┃ │ │ input: 0.0                        │ │ ┃\n        ┃ │ │ output: -55.0                     │ │ ┃\n        ┃ │ ╰───────────────────────────────────╯ │ ┃\n        ┃ └───────────────────────────────────────┘ ┃\n        ┃                                           ┃\n        ┃ result: [[1.0]]                           ┃\n        ┃                                           ┃\n        ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n        ╭─── iController ───╮\n        │ input: -55.0, 1.0 │\n        │ output: 10.0      │\n        ╰───────────────────╯\n            ┏━━━━━━  icomp SIMULATION 0: Trial 0  ━━━━━━┓\n            ┃                                           ┃\n            ┃ input: [[0.0]]                            ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 0 ──┐                       ┃\n            ┃ │ ╭──── ia ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 1 ──┐                       ┃\n            ┃ │ ╭──── ib ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n            ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n            ┃ │ │ input: 0.0                        │ │ ┃\n            ┃ │ │ output: -55.0                     │ │ ┃\n            ┃ │ ╰───────────────────────────────────╯ │ ┃\n            ┃ └───────────────────────────────────────┘ ┃\n            ┃                                           ┃\n            ┃ result: [[1.0]]                           ┃\n            ┃                                           ┃\n            ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n            ┏━━━━━━  icomp SIMULATION 1: Trial 0  ━━━━━━┓\n            ┃                                           ┃\n            ┃ input: [[0.0]]                            ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 0 ──┐                       ┃\n            ┃ │ ╭──── ia ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 1 ──┐                       ┃\n            ┃ │ ╭──── ib ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n            ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n            ┃ │ │ input: 0.0                        │ │ ┃\n            ┃ │ │ output: -55.0                     │ │ ┃\n            ┃ │ ╰───────────────────────────────────╯ │ ┃\n            ┃ └───────────────────────────────────────┘ ┃\n            ┃                                           ┃\n            ┃ result: [[1.0]]                           ┃\n            ┃                                           ┃\n            ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n            ┏━━━━━━  icomp SIMULATION 2: Trial 0  ━━━━━━┓\n            ┃                                           ┃\n            ┃ input: [[0.0]]                            ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 0 ──┐                       ┃\n            ┃ │ ╭──── ia ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 1 ──┐                       ┃\n            ┃ │ ╭──── ib ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n            ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n            ┃ │ │ input: 0.0                        │ │ ┃\n            ┃ │ │ output: -55.0                     │ │ ┃\n            ┃ │ ╰───────────────────────────────────╯ │ ┃\n            ┃ └───────────────────────────────────────┘ ┃\n            ┃                                           ┃\n            ┃ result: [[1.0]]                           ┃\n            ┃                                           ┃\n            ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n    ┏━━━━━━  ocomp SIMULATION 0: Trial 0  ━━━━━━┓\n    ┃                                           ┃\n    ┃ input: [[0.0]]                            ┃\n    ┃                                           ┃\n    ┃ ┌─  Time Step 0 ──┐                       ┃\n    ┃ │ ╭─── icomp ───╮ │                       ┃\n    ┃ │ │ input: 0.0  │ │                       ┃\n    ┃ │ │ output: 0.0 │ │                       ┃\n    ┃ │ ╰─────────────╯ │                       ┃\n    ┃ └─────────────────┘                       ┃\n    ┃                                           ┃\n    ┃ ┌────────────  Time Step 1 ─────────────┐ ┃\n    ┃ │ ╭─ oController Objective Mechanism ─╮ │ ┃\n    ┃ │ │ input: 0.0                        │ │ ┃\n    ┃ │ │ output: -55.0                     │ │ ┃\n    ┃ │ ╰───────────────────────────────────╯ │ ┃\n    ┃ └───────────────────────────────────────┘ ┃\n    ┃                                           ┃\n    ┃ result: [[1.0]]                           ┃\n    ┃                                           ┃\n    ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n        ┏━━━━━━━━━━━━  icomp: Trial 0  ━━━━━━━━━━━━━┓\n        ┃                                           ┃\n        ┃ input: [[0.0]]                            ┃\n        ┃                                           ┃\n        ┃ ┌─  Time Step 0 ──┐                       ┃\n        ┃ │ ╭──── ia ─────╮ │                       ┃\n        ┃ │ │ input: 0.0  │ │                       ┃\n        ┃ │ │ output: 0.0 │ │                       ┃\n        ┃ │ ╰─────────────╯ │                       ┃\n        ┃ └─────────────────┘                       ┃\n        ┃                                           ┃\n        ┃ ┌─  Time Step 1 ──┐                       ┃\n        ┃ │ ╭──── ib ─────╮ │                       ┃\n        ┃ │ │ input: 0.0  │ │                       ┃\n        ┃ │ │ output: 0.0 │ │                       ┃\n        ┃ │ ╰─────────────╯ │                       ┃\n        ┃ └─────────────────┘                       ┃\n        ┃                                           ┃\n        ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n        ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n        ┃ │ │ input: 0.0                        │ │ ┃\n        ┃ │ │ output: -55.0                     │ │ ┃\n        ┃ │ ╰───────────────────────────────────╯ │ ┃\n        ┃ └───────────────────────────────────────┘ ┃\n        ┃                                           ┃\n        ┃ result: [[1.0]]                           ┃\n        ┃                                           ┃\n        ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n        ╭─── iController ───╮\n        │ input: -55.0, 1.0 │\n        │ output: 10.0      │\n        ╰───────────────────╯\n            ┏━━━━━━  icomp SIMULATION 0: Trial 0  ━━━━━━┓\n            ┃                                           ┃\n            ┃ input: [[0.0]]                            ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 0 ──┐                       ┃\n            ┃ │ ╭──── ia ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 1 ──┐                       ┃\n            ┃ │ ╭──── ib ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n            ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n            ┃ │ │ input: 0.0                        │ │ ┃\n            ┃ │ │ output: -55.0                     │ │ ┃\n            ┃ │ ╰───────────────────────────────────╯ │ ┃\n            ┃ └───────────────────────────────────────┘ ┃\n            ┃                                           ┃\n            ┃ result: [[1.0]]                           ┃\n            ┃                                           ┃\n            ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n            ┏━━━━━━  icomp SIMULATION 1: Trial 0  ━━━━━━┓\n            ┃                                           ┃\n            ┃ input: [[0.0]]                            ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 0 ──┐                       ┃\n            ┃ │ ╭──── ia ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 1 ──┐                       ┃\n            ┃ │ ╭──── ib ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n            ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n            ┃ │ │ input: 0.0                        │ │ ┃\n            ┃ │ │ output: -55.0                     │ │ ┃\n            ┃ │ ╰───────────────────────────────────╯ │ ┃\n            ┃ └───────────────────────────────────────┘ ┃\n            ┃                                           ┃\n            ┃ result: [[1.0]]                           ┃\n            ┃                                           ┃\n            ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n            ┏━━━━━━  icomp SIMULATION 2: Trial 0  ━━━━━━┓\n            ┃                                           ┃\n            ┃ input: [[0.0]]                            ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 0 ──┐                       ┃\n            ┃ │ ╭──── ia ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 1 ──┐                       ┃\n            ┃ │ ╭──── ib ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n            ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n            ┃ │ │ input: 0.0                        │ │ ┃\n            ┃ │ │ output: -55.0                     │ │ ┃\n            ┃ │ ╰───────────────────────────────────╯ │ ┃\n            ┃ └───────────────────────────────────────┘ ┃\n            ┃                                           ┃\n            ┃ result: [[1.0]]                           ┃\n            ┃                                           ┃\n            ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n    ┏━━━━━━  ocomp SIMULATION 1: Trial 0  ━━━━━━┓\n    ┃                                           ┃\n    ┃ input: [[0.0]]                            ┃\n    ┃                                           ┃\n    ┃ ┌─  Time Step 0 ──┐                       ┃\n    ┃ │ ╭─── icomp ───╮ │                       ┃\n    ┃ │ │ input: 0.0  │ │                       ┃\n    ┃ │ │ output: 0.0 │ │                       ┃\n    ┃ │ ╰─────────────╯ │                       ┃\n    ┃ └─────────────────┘                       ┃\n    ┃                                           ┃\n    ┃ ┌────────────  Time Step 1 ─────────────┐ ┃\n    ┃ │ ╭─ oController Objective Mechanism ─╮ │ ┃\n    ┃ │ │ input: 0.0                        │ │ ┃\n    ┃ │ │ output: -55.0                     │ │ ┃\n    ┃ │ ╰───────────────────────────────────╯ │ ┃\n    ┃ └───────────────────────────────────────┘ ┃\n    ┃                                           ┃\n    ┃ result: [[1.0]]                           ┃\n    ┃                                           ┃\n    ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n    ┏━━━━━━━━━━━━  icomp: Trial 23  ━━━━━━━━━━━━┓\n    ┃                                           ┃\n    ┃ input: [[-2.0]]                           ┃\n    ┃                                           ┃\n    ┃ ┌──  Time Step 0 ───┐                     ┃\n    ┃ │ ╭───── ia ──────╮ │                     ┃\n    ┃ │ │ input: -2.0   │ │                     ┃\n    ┃ │ │ output: -20.0 │ │                     ┃\n    ┃ │ ╰───────────────╯ │                     ┃\n    ┃ └───────────────────┘                     ┃\n    ┃                                           ┃\n    ┃ ┌──  Time Step 1 ───┐                     ┃\n    ┃ │ ╭───── ib ──────╮ │                     ┃\n    ┃ │ │ input: -20.0  │ │                     ┃\n    ┃ │ │ output: -20.0 │ │                     ┃\n    ┃ │ ╰───────────────╯ │                     ┃\n    ┃ └───────────────────┘                     ┃\n    ┃                                           ┃\n    ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n    ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n    ┃ │ │ input: -20.0                      │ │ ┃\n    ┃ │ │ output: -75.0                     │ │ ┃\n    ┃ │ ╰───────────────────────────────────╯ │ ┃\n    ┃ └───────────────────────────────────────┘ ┃\n    ┃                                           ┃\n    ┃ result: [[1.0]]                           ┃\n    ┃                                           ┃\n    ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n    ╭─── iController ───╮\n    │ input: -55.0, 1.0 │\n    │ output: 10.0      │\n    ╰───────────────────╯\n        ┏━━━━━━  icomp SIMULATION 0: Trial 0  ━━━━━━┓\n        ┃                                           ┃\n        ┃ input: [[-2.0]]                           ┃\n        ┃                                           ┃\n        ┃ ┌──  Time Step 0 ──┐                      ┃\n        ┃ │ ╭───── ia ─────╮ │                      ┃\n        ┃ │ │ input: -2.0  │ │                      ┃\n        ┃ │ │ output: -2.0 │ │                      ┃\n        ┃ │ ╰──────────────╯ │                      ┃\n        ┃ └──────────────────┘                      ┃\n        ┃                                           ┃\n        ┃ ┌──  Time Step 1 ──┐                      ┃\n        ┃ │ ╭───── ib ─────╮ │                      ┃\n        ┃ │ │ input: -2.0  │ │                      ┃\n        ┃ │ │ output: -2.0 │ │                      ┃\n        ┃ │ ╰──────────────╯ │                      ┃\n        ┃ └──────────────────┘                      ┃\n        ┃                                           ┃\n        ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n        ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n        ┃ │ │ input: -2.0                       │ │ ┃\n        ┃ │ │ output: -77.0                     │ │ ┃\n        ┃ │ ╰───────────────────────────────────╯ │ ┃\n        ┃ └───────────────────────────────────────┘ ┃\n        ┃                                           ┃\n        ┃ result: [[1.0]]                           ┃\n        ┃                                           ┃\n        ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n        ┏━━━━━━  icomp SIMULATION 1: Trial 0  ━━━━━━┓\n        ┃                                           ┃\n        ┃ input: [[-2.0]]                           ┃\n        ┃                                           ┃\n        ┃ ┌──  Time Step 0 ───┐                     ┃\n        ┃ │ ╭───── ia ──────╮ │                     ┃\n        ┃ │ │ input: -2.0   │ │                     ┃\n        ┃ │ │ output: -11.0 │ │                     ┃\n        ┃ │ ╰───────────────╯ │                     ┃\n        ┃ └───────────────────┘                     ┃\n        ┃                                           ┃\n        ┃ ┌──  Time Step 1 ───┐                     ┃\n        ┃ │ ╭───── ib ──────╮ │                     ┃\n        ┃ │ │ input: -11.0  │ │                     ┃\n        ┃ │ │ output: -11.0 │ │                     ┃\n        ┃ │ ╰───────────────╯ │                     ┃\n        ┃ └───────────────────┘                     ┃\n        ┃                                           ┃\n        ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n        ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n        ┃ │ │ input: -11.0                      │ │ ┃\n        ┃ │ │ output: -86.0                     │ │ ┃\n        ┃ │ ╰───────────────────────────────────╯ │ ┃\n        ┃ └───────────────────────────────────────┘ ┃\n        ┃                                           ┃\n        ┃ result: [[1.0]]                           ┃\n        ┃                                           ┃\n        ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n        ┏━━━━━━  icomp SIMULATION 2: Trial 0  ━━━━━━┓\n        ┃                                           ┃\n        ┃ input: [[-2.0]]                           ┃\n        ┃                                           ┃\n        ┃ ┌──  Time Step 0 ───┐                     ┃\n        ┃ │ ╭───── ia ──────╮ │                     ┃\n        ┃ │ │ input: -2.0   │ │                     ┃\n        ┃ │ │ output: -20.0 │ │                     ┃\n        ┃ │ ╰───────────────╯ │                     ┃\n        ┃ └───────────────────┘                     ┃\n        ┃                                           ┃\n        ┃ ┌──  Time Step 1 ───┐                     ┃\n        ┃ │ ╭───── ib ──────╮ │                     ┃\n        ┃ │ │ input: -20.0  │ │                     ┃\n        ┃ │ │ output: -20.0 │ │                     ┃\n        ┃ │ ╰───────────────╯ │                     ┃\n        ┃ └───────────────────┘                     ┃\n        ┃                                           ┃\n        ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n        ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n        ┃ │ │ input: -20.0                      │ │ ┃\n        ┃ │ │ output: -95.0                     │ │ ┃\n        ┃ │ ╰───────────────────────────────────╯ │ ┃\n        ┃ └───────────────────────────────────────┘ ┃\n        ┃                                           ┃\n        ┃ result: [[1.0]]                           ┃\n        ┃                                           ┃\n        ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n┏━━━━  ocomp SIMULATION None: Trial 0  ━━━━━┓\n┃                                           ┃\n┃ input: [[-2]]                             ┃\n┃                                           ┃\n┃ ┌──  Time Step 0 ───┐                     ┃\n┃ │ ╭──── icomp ────╮ │                     ┃\n┃ │ │ input: -2.0   │ │                     ┃\n┃ │ │ output: -20.0 │ │                     ┃\n┃ │ ╰───────────────╯ │                     ┃\n┃ └───────────────────┘                     ┃\n┃                                           ┃\n┃ ┌────────────  Time Step 1 ─────────────┐ ┃\n┃ │ ╭─ oController Objective Mechanism ─╮ │ ┃\n┃ │ │ input: -20.0                      │ │ ┃\n┃ │ │ output: -75.0                     │ │ ┃\n┃ │ ╰───────────────────────────────────╯ │ ┃\n┃ └───────────────────────────────────────┘ ┃\n┃                                           ┃\n┃ result: [[1.0]]                           ┃\n┃                                           ┃\n┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\nocomp: Executed 1 of 2 trials\n    ocomp: Simulated 2 trials (depth: 1)\n        icomp: Executed 1 of 1 trials (depth: 2)\n            icomp: Simulated 3 trials (depth: 3)\n        icomp: Executed 1 of 1 trials (depth: 2)\n            icomp: Simulated 3 trials (depth: 3)\n    icomp: Executed 1 of 1 trials (depth: 1)\n        icomp: Simulated 3 trials (depth: 2)\n\n╭─── oController ───╮\n│ input: -56.0, 1.0 │\n│ output: 1.0       │\n╰───────────────────╯\n        ┏━━━━━━━━━━━━  icomp: Trial 0  ━━━━━━━━━━━━━┓\n        ┃                                           ┃\n        ┃ input: [[0.0]]                            ┃\n        ┃                                           ┃\n        ┃ ┌─  Time Step 0 ──┐                       ┃\n        ┃ │ ╭──── ia ─────╮ │                       ┃\n        ┃ │ │ input: 0.0  │ │                       ┃\n        ┃ │ │ output: 0.0 │ │                       ┃\n        ┃ │ ╰─────────────╯ │                       ┃\n        ┃ └─────────────────┘                       ┃\n        ┃                                           ┃\n        ┃ ┌─  Time Step 1 ──┐                       ┃\n        ┃ │ ╭──── ib ─────╮ │                       ┃\n        ┃ │ │ input: 0.0  │ │                       ┃\n        ┃ │ │ output: 0.0 │ │                       ┃\n        ┃ │ ╰─────────────╯ │                       ┃\n        ┃ └─────────────────┘                       ┃\n        ┃                                           ┃\n        ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n        ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n        ┃ │ │ input: 0.0                        │ │ ┃\n        ┃ │ │ output: -55.0                     │ │ ┃\n        ┃ │ ╰───────────────────────────────────╯ │ ┃\n        ┃ └───────────────────────────────────────┘ ┃\n        ┃                                           ┃\n        ┃ result: [[1.0]]                           ┃\n        ┃                                           ┃\n        ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n        ╭─── iController ───╮\n        │ input: -55.0, 1.0 │\n        │ output: 10.0      │\n        ╰───────────────────╯\n            ┏━━━━━━  icomp SIMULATION 0: Trial 0  ━━━━━━┓\n            ┃                                           ┃\n            ┃ input: [[0.0]]                            ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 0 ──┐                       ┃\n            ┃ │ ╭──── ia ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 1 ──┐                       ┃\n            ┃ │ ╭──── ib ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n            ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n            ┃ │ │ input: 0.0                        │ │ ┃\n            ┃ │ │ output: -55.0                     │ │ ┃\n            ┃ │ ╰───────────────────────────────────╯ │ ┃\n            ┃ └───────────────────────────────────────┘ ┃\n            ┃                                           ┃\n            ┃ result: [[1.0]]                           ┃\n            ┃                                           ┃\n            ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n            ┏━━━━━━  icomp SIMULATION 1: Trial 0  ━━━━━━┓\n            ┃                                           ┃\n            ┃ input: [[0.0]]                            ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 0 ──┐                       ┃\n            ┃ │ ╭──── ia ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 1 ──┐                       ┃\n            ┃ │ ╭──── ib ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n            ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n            ┃ │ │ input: 0.0                        │ │ ┃\n            ┃ │ │ output: -55.0                     │ │ ┃\n            ┃ │ ╰───────────────────────────────────╯ │ ┃\n            ┃ └───────────────────────────────────────┘ ┃\n            ┃                                           ┃\n            ┃ result: [[1.0]]                           ┃\n            ┃                                           ┃\n            ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n            ┏━━━━━━  icomp SIMULATION 2: Trial 0  ━━━━━━┓\n            ┃                                           ┃\n            ┃ input: [[0.0]]                            ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 0 ──┐                       ┃\n            ┃ │ ╭──── ia ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 1 ──┐                       ┃\n            ┃ │ ╭──── ib ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n            ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n            ┃ │ │ input: 0.0                        │ │ ┃\n            ┃ │ │ output: -55.0                     │ │ ┃\n            ┃ │ ╰───────────────────────────────────╯ │ ┃\n            ┃ └───────────────────────────────────────┘ ┃\n            ┃                                           ┃\n            ┃ result: [[1.0]]                           ┃\n            ┃                                           ┃\n            ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n    ┏━━━━━━  ocomp SIMULATION 0: Trial 0  ━━━━━━┓\n    ┃                                           ┃\n    ┃ input: [[0.0]]                            ┃\n    ┃                                           ┃\n    ┃ ┌─  Time Step 0 ──┐                       ┃\n    ┃ │ ╭─── icomp ───╮ │                       ┃\n    ┃ │ │ input: 0.0  │ │                       ┃\n    ┃ │ │ output: 0.0 │ │                       ┃\n    ┃ │ ╰─────────────╯ │                       ┃\n    ┃ └─────────────────┘                       ┃\n    ┃                                           ┃\n    ┃ ┌────────────  Time Step 1 ─────────────┐ ┃\n    ┃ │ ╭─ oController Objective Mechanism ─╮ │ ┃\n    ┃ │ │ input: 0.0                        │ │ ┃\n    ┃ │ │ output: -55.0                     │ │ ┃\n    ┃ │ ╰───────────────────────────────────╯ │ ┃\n    ┃ └───────────────────────────────────────┘ ┃\n    ┃                                           ┃\n    ┃ result: [[1.0]]                           ┃\n    ┃                                           ┃\n    ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n        ┏━━━━━━━━━━━━  icomp: Trial 0  ━━━━━━━━━━━━━┓\n        ┃                                           ┃\n        ┃ input: [[0.0]]                            ┃\n        ┃                                           ┃\n        ┃ ┌─  Time Step 0 ──┐                       ┃\n        ┃ │ ╭──── ia ─────╮ │                       ┃\n        ┃ │ │ input: 0.0  │ │                       ┃\n        ┃ │ │ output: 0.0 │ │                       ┃\n        ┃ │ ╰─────────────╯ │                       ┃\n        ┃ └─────────────────┘                       ┃\n        ┃                                           ┃\n        ┃ ┌─  Time Step 1 ──┐                       ┃\n        ┃ │ ╭──── ib ─────╮ │                       ┃\n        ┃ │ │ input: 0.0  │ │                       ┃\n        ┃ │ │ output: 0.0 │ │                       ┃\n        ┃ │ ╰─────────────╯ │                       ┃\n        ┃ └─────────────────┘                       ┃\n        ┃                                           ┃\n        ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n        ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n        ┃ │ │ input: 0.0                        │ │ ┃\n        ┃ │ │ output: -55.0                     │ │ ┃\n        ┃ │ ╰───────────────────────────────────╯ │ ┃\n        ┃ └───────────────────────────────────────┘ ┃\n        ┃                                           ┃\n        ┃ result: [[1.0]]                           ┃\n        ┃                                           ┃\n        ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n        ╭─── iController ───╮\n        │ input: -55.0, 1.0 │\n        │ output: 10.0      │\n        ╰───────────────────╯\n            ┏━━━━━━  icomp SIMULATION 0: Trial 0  ━━━━━━┓\n            ┃                                           ┃\n            ┃ input: [[0.0]]                            ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 0 ──┐                       ┃\n            ┃ │ ╭──── ia ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 1 ──┐                       ┃\n            ┃ │ ╭──── ib ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n            ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n            ┃ │ │ input: 0.0                        │ │ ┃\n            ┃ │ │ output: -55.0                     │ │ ┃\n            ┃ │ ╰───────────────────────────────────╯ │ ┃\n            ┃ └───────────────────────────────────────┘ ┃\n            ┃                                           ┃\n            ┃ result: [[1.0]]                           ┃\n            ┃                                           ┃\n            ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n            ┏━━━━━━  icomp SIMULATION 1: Trial 0  ━━━━━━┓\n            ┃                                           ┃\n            ┃ input: [[0.0]]                            ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 0 ──┐                       ┃\n            ┃ │ ╭──── ia ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 1 ──┐                       ┃\n            ┃ │ ╭──── ib ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n            ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n            ┃ │ │ input: 0.0                        │ │ ┃\n            ┃ │ │ output: -55.0                     │ │ ┃\n            ┃ │ ╰───────────────────────────────────╯ │ ┃\n            ┃ └───────────────────────────────────────┘ ┃\n            ┃                                           ┃\n            ┃ result: [[1.0]]                           ┃\n            ┃                                           ┃\n            ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n            ┏━━━━━━  icomp SIMULATION 2: Trial 0  ━━━━━━┓\n            ┃                                           ┃\n            ┃ input: [[0.0]]                            ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 0 ──┐                       ┃\n            ┃ │ ╭──── ia ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 1 ──┐                       ┃\n            ┃ │ ╭──── ib ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n            ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n            ┃ │ │ input: 0.0                        │ │ ┃\n            ┃ │ │ output: -55.0                     │ │ ┃\n            ┃ │ ╰───────────────────────────────────╯ │ ┃\n            ┃ └───────────────────────────────────────┘ ┃\n            ┃                                           ┃\n            ┃ result: [[1.0]]                           ┃\n            ┃                                           ┃\n            ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n    ┏━━━━━━  ocomp SIMULATION 1: Trial 0  ━━━━━━┓\n    ┃                                           ┃\n    ┃ input: [[0.0]]                            ┃\n    ┃                                           ┃\n    ┃ ┌─  Time Step 0 ──┐                       ┃\n    ┃ │ ╭─── icomp ───╮ │                       ┃\n    ┃ │ │ input: 0.0  │ │                       ┃\n    ┃ │ │ output: 0.0 │ │                       ┃\n    ┃ │ ╰─────────────╯ │                       ┃\n    ┃ └─────────────────┘                       ┃\n    ┃                                           ┃\n    ┃ ┌────────────  Time Step 1 ─────────────┐ ┃\n    ┃ │ ╭─ oController Objective Mechanism ─╮ │ ┃\n    ┃ │ │ input: 0.0                        │ │ ┃\n    ┃ │ │ output: -55.0                     │ │ ┃\n    ┃ │ ╰───────────────────────────────────╯ │ ┃\n    ┃ └───────────────────────────────────────┘ ┃\n    ┃                                           ┃\n    ┃ result: [[1.0]]                           ┃\n    ┃                                           ┃\n    ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n    ┏━━━━━━━━━━━━  icomp: Trial 23  ━━━━━━━━━━━━┓\n    ┃                                           ┃\n    ┃ input: [[-2.0]]                           ┃\n    ┃                                           ┃\n    ┃ ┌──  Time Step 0 ───┐                     ┃\n    ┃ │ ╭───── ia ──────╮ │                     ┃\n    ┃ │ │ input: -2.0   │ │                     ┃\n    ┃ │ │ output: -20.0 │ │                     ┃\n    ┃ │ ╰───────────────╯ │                     ┃\n    ┃ └───────────────────┘                     ┃\n    ┃                                           ┃\n    ┃ ┌──  Time Step 1 ───┐                     ┃\n    ┃ │ ╭───── ib ──────╮ │                     ┃\n    ┃ │ │ input: -20.0  │ │                     ┃\n    ┃ │ │ output: -20.0 │ │                     ┃\n    ┃ │ ╰───────────────╯ │                     ┃\n    ┃ └───────────────────┘                     ┃\n    ┃                                           ┃\n    ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n    ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n    ┃ │ │ input: -20.0                      │ │ ┃\n    ┃ │ │ output: -75.0                     │ │ ┃\n    ┃ │ ╰───────────────────────────────────╯ │ ┃\n    ┃ └───────────────────────────────────────┘ ┃\n    ┃                                           ┃\n    ┃ result: [[1.0]]                           ┃\n    ┃                                           ┃\n    ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n    ╭─── iController ───╮\n    │ input: -55.0, 1.0 │\n    │ output: 10.0      │\n    ╰───────────────────╯\n        ┏━━━━━━  icomp SIMULATION 0: Trial 0  ━━━━━━┓\n        ┃                                           ┃\n        ┃ input: [[-2.0]]                           ┃\n        ┃                                           ┃\n        ┃ ┌──  Time Step 0 ──┐                      ┃\n        ┃ │ ╭───── ia ─────╮ │                      ┃\n        ┃ │ │ input: -2.0  │ │                      ┃\n        ┃ │ │ output: -2.0 │ │                      ┃\n        ┃ │ ╰──────────────╯ │                      ┃\n        ┃ └──────────────────┘                      ┃\n        ┃                                           ┃\n        ┃ ┌──  Time Step 1 ──┐                      ┃\n        ┃ │ ╭───── ib ─────╮ │                      ┃\n        ┃ │ │ input: -2.0  │ │                      ┃\n        ┃ │ │ output: -2.0 │ │                      ┃\n        ┃ │ ╰──────────────╯ │                      ┃\n        ┃ └──────────────────┘                      ┃\n        ┃                                           ┃\n        ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n        ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n        ┃ │ │ input: -2.0                       │ │ ┃\n        ┃ │ │ output: -77.0                     │ │ ┃\n        ┃ │ ╰───────────────────────────────────╯ │ ┃\n        ┃ └───────────────────────────────────────┘ ┃\n        ┃                                           ┃\n        ┃ result: [[1.0]]                           ┃\n        ┃                                           ┃\n        ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n        ┏━━━━━━  icomp SIMULATION 1: Trial 0  ━━━━━━┓\n        ┃                                           ┃\n        ┃ input: [[-2.0]]                           ┃\n        ┃                                           ┃\n        ┃ ┌──  Time Step 0 ───┐                     ┃\n        ┃ │ ╭───── ia ──────╮ │                     ┃\n        ┃ │ │ input: -2.0   │ │                     ┃\n        ┃ │ │ output: -11.0 │ │                     ┃\n        ┃ │ ╰───────────────╯ │                     ┃\n        ┃ └───────────────────┘                     ┃\n        ┃                                           ┃\n        ┃ ┌──  Time Step 1 ───┐                     ┃\n        ┃ │ ╭───── ib ──────╮ │                     ┃\n        ┃ │ │ input: -11.0  │ │                     ┃\n        ┃ │ │ output: -11.0 │ │                     ┃\n        ┃ │ ╰───────────────╯ │                     ┃\n        ┃ └───────────────────┘                     ┃\n        ┃                                           ┃\n        ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n        ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n        ┃ │ │ input: -11.0                      │ │ ┃\n        ┃ │ │ output: -86.0                     │ │ ┃\n        ┃ │ ╰───────────────────────────────────╯ │ ┃\n        ┃ └───────────────────────────────────────┘ ┃\n        ┃                                           ┃\n        ┃ result: [[1.0]]                           ┃\n        ┃                                           ┃\n        ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n        ┏━━━━━━  icomp SIMULATION 2: Trial 0  ━━━━━━┓\n        ┃                                           ┃\n        ┃ input: [[-2.0]]                           ┃\n        ┃                                           ┃\n        ┃ ┌──  Time Step 0 ───┐                     ┃\n        ┃ │ ╭───── ia ──────╮ │                     ┃\n        ┃ │ │ input: -2.0   │ │                     ┃\n        ┃ │ │ output: -20.0 │ │                     ┃\n        ┃ │ ╰───────────────╯ │                     ┃\n        ┃ └───────────────────┘                     ┃\n        ┃                                           ┃\n        ┃ ┌──  Time Step 1 ───┐                     ┃\n        ┃ │ ╭───── ib ──────╮ │                     ┃\n        ┃ │ │ input: -20.0  │ │                     ┃\n        ┃ │ │ output: -20.0 │ │                     ┃\n        ┃ │ ╰───────────────╯ │                     ┃\n        ┃ └───────────────────┘                     ┃\n        ┃                                           ┃\n        ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n        ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n        ┃ │ │ input: -20.0                      │ │ ┃\n        ┃ │ │ output: -95.0                     │ │ ┃\n        ┃ │ ╰───────────────────────────────────╯ │ ┃\n        ┃ └───────────────────────────────────────┘ ┃\n        ┃                                           ┃\n        ┃ result: [[1.0]]                           ┃\n        ┃                                           ┃\n        ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n┏━━━━  ocomp SIMULATION None: Trial 0  ━━━━━┓\n┃                                           ┃\n┃ input: [[-2]]                             ┃\n┃                                           ┃\n┃ ┌──  Time Step 0 ───┐                     ┃\n┃ │ ╭──── icomp ────╮ │                     ┃\n┃ │ │ input: -2.0   │ │                     ┃\n┃ │ │ output: -20.0 │ │                     ┃\n┃ │ ╰───────────────╯ │                     ┃\n┃ └───────────────────┘                     ┃\n┃                                           ┃\n┃ ┌────────────  Time Step 1 ─────────────┐ ┃\n┃ │ ╭─ oController Objective Mechanism ─╮ │ ┃\n┃ │ │ input: -20.0                      │ │ ┃\n┃ │ │ output: -75.0                     │ │ ┃\n┃ │ ╰───────────────────────────────────╯ │ ┃\n┃ └───────────────────────────────────────┘ ┃\n┃                                           ┃\n┃ result: [[1.0]]                           ┃\n┃                                           ┃\n┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n╭─── oController ────╮\n│ input: -55.0, -2.0 │\n│ output: 1.0        │\n╰────────────────────╯\n        ┏━━━━━━━━━━━━  icomp: Trial 0  ━━━━━━━━━━━━━┓\n        ┃                                           ┃\n        ┃ input: [[0.0]]                            ┃\n        ┃                                           ┃\n        ┃ ┌─  Time Step 0 ──┐                       ┃\n        ┃ │ ╭──── ia ─────╮ │                       ┃\n        ┃ │ │ input: 0.0  │ │                       ┃\n        ┃ │ │ output: 0.0 │ │                       ┃\n        ┃ │ ╰─────────────╯ │                       ┃\n        ┃ └─────────────────┘                       ┃\n        ┃                                           ┃\n        ┃ ┌─  Time Step 1 ──┐                       ┃\n        ┃ │ ╭──── ib ─────╮ │                       ┃\n        ┃ │ │ input: 0.0  │ │                       ┃\n        ┃ │ │ output: 0.0 │ │                       ┃\n        ┃ │ ╰─────────────╯ │                       ┃\n        ┃ └─────────────────┘                       ┃\n        ┃                                           ┃\n        ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n        ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n        ┃ │ │ input: 0.0                        │ │ ┃\n        ┃ │ │ output: -75.0                     │ │ ┃\n        ┃ │ ╰───────────────────────────────────╯ │ ┃\n        ┃ └───────────────────────────────────────┘ ┃\n        ┃                                           ┃\n        ┃ result: [[-20.0]]                         ┃\n        ┃                                           ┃\n        ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n        ╭─── iController ────╮\n        │ input: -75.0, -2.0 │\n        │ output: 1.0        │\n        ╰────────────────────╯\n            ┏━━━━━━  icomp SIMULATION 0: Trial 0  ━━━━━━┓\n            ┃                                           ┃\n            ┃ input: [[0.0]]                            ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 0 ──┐                       ┃\n            ┃ │ ╭──── ia ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 1 ──┐                       ┃\n            ┃ │ ╭──── ib ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n            ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n            ┃ │ │ input: 0.0                        │ │ ┃\n            ┃ │ │ output: -75.0                     │ │ ┃\n            ┃ │ ╰───────────────────────────────────╯ │ ┃\n            ┃ └───────────────────────────────────────┘ ┃\n            ┃                                           ┃\n            ┃ result: [[-20.0]]                         ┃\n            ┃                                           ┃\n            ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n            ┏━━━━━━  icomp SIMULATION 1: Trial 0  ━━━━━━┓\n            ┃                                           ┃\n            ┃ input: [[0.0]]                            ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 0 ──┐                       ┃\n            ┃ │ ╭──── ia ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 1 ──┐                       ┃\n            ┃ │ ╭──── ib ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n            ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n            ┃ │ │ input: 0.0                        │ │ ┃\n            ┃ │ │ output: -75.0                     │ │ ┃\n            ┃ │ ╰───────────────────────────────────╯ │ ┃\n            ┃ └───────────────────────────────────────┘ ┃\n            ┃                                           ┃\n            ┃ result: [[-20.0]]                         ┃\n            ┃                                           ┃\n            ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n            ┏━━━━━━  icomp SIMULATION 2: Trial 0  ━━━━━━┓\n            ┃                                           ┃\n            ┃ input: [[0.0]]                            ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 0 ──┐                       ┃\n            ┃ │ ╭──── ia ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 1 ──┐                       ┃\n            ┃ │ ╭──── ib ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n            ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n            ┃ │ │ input: 0.0                        │ │ ┃\n            ┃ │ │ output: -75.0                     │ │ ┃\n            ┃ │ ╰───────────────────────────────────╯ │ ┃\n            ┃ └───────────────────────────────────────┘ ┃\n            ┃                                           ┃\n            ┃ result: [[-20.0]]                         ┃\n            ┃                                           ┃\n            ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n    ┏━━━━━━  ocomp SIMULATION 0: Trial 0  ━━━━━━┓\n    ┃                                           ┃\n    ┃ input: [[0.0]]                            ┃\n    ┃                                           ┃\n    ┃ ┌─  Time Step 0 ──┐                       ┃\n    ┃ │ ╭─── icomp ───╮ │                       ┃\n    ┃ │ │ input: 0.0  │ │                       ┃\n    ┃ │ │ output: 0.0 │ │                       ┃\n    ┃ │ ╰─────────────╯ │                       ┃\n    ┃ └─────────────────┘                       ┃\n    ┃                                           ┃\n    ┃ ┌────────────  Time Step 1 ─────────────┐ ┃\n    ┃ │ ╭─ oController Objective Mechanism ─╮ │ ┃\n    ┃ │ │ input: 0.0                        │ │ ┃\n    ┃ │ │ output: -75.0                     │ │ ┃\n    ┃ │ ╰───────────────────────────────────╯ │ ┃\n    ┃ └───────────────────────────────────────┘ ┃\n    ┃                                           ┃\n    ┃ result: [[-20.0]]                         ┃\n    ┃                                           ┃\n    ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n        ┏━━━━━━━━━━━━  icomp: Trial 0  ━━━━━━━━━━━━━┓\n        ┃                                           ┃\n        ┃ input: [[0.0]]                            ┃\n        ┃                                           ┃\n        ┃ ┌─  Time Step 0 ──┐                       ┃\n        ┃ │ ╭──── ia ─────╮ │                       ┃\n        ┃ │ │ input: 0.0  │ │                       ┃\n        ┃ │ │ output: 0.0 │ │                       ┃\n        ┃ │ ╰─────────────╯ │                       ┃\n        ┃ └─────────────────┘                       ┃\n        ┃                                           ┃\n        ┃ ┌─  Time Step 1 ──┐                       ┃\n        ┃ │ ╭──── ib ─────╮ │                       ┃\n        ┃ │ │ input: 0.0  │ │                       ┃\n        ┃ │ │ output: 0.0 │ │                       ┃\n        ┃ │ ╰─────────────╯ │                       ┃\n        ┃ └─────────────────┘                       ┃\n        ┃                                           ┃\n        ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n        ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n        ┃ │ │ input: 0.0                        │ │ ┃\n        ┃ │ │ output: -75.0                     │ │ ┃\n        ┃ │ ╰───────────────────────────────────╯ │ ┃\n        ┃ └───────────────────────────────────────┘ ┃\n        ┃                                           ┃\n        ┃ result: [[-20.0]]                         ┃\n        ┃                                           ┃\n        ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n        ╭─── iController ────╮\n        │ input: -75.0, -2.0 │\n        │ output: 1.0        │\n        ╰────────────────────╯\n            ┏━━━━━━  icomp SIMULATION 0: Trial 0  ━━━━━━┓\n            ┃                                           ┃\n            ┃ input: [[0.0]]                            ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 0 ──┐                       ┃\n            ┃ │ ╭──── ia ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 1 ──┐                       ┃\n            ┃ │ ╭──── ib ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n            ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n            ┃ │ │ input: 0.0                        │ │ ┃\n            ┃ │ │ output: -75.0                     │ │ ┃\n            ┃ │ ╰───────────────────────────────────╯ │ ┃\n            ┃ └───────────────────────────────────────┘ ┃\n            ┃                                           ┃\n            ┃ result: [[-20.0]]                         ┃\n            ┃                                           ┃\n            ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n            ┏━━━━━━  icomp SIMULATION 1: Trial 0  ━━━━━━┓\n            ┃                                           ┃\n            ┃ input: [[0.0]]                            ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 0 ──┐                       ┃\n            ┃ │ ╭──── ia ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 1 ──┐                       ┃\n            ┃ │ ╭──── ib ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n            ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n            ┃ │ │ input: 0.0                        │ │ ┃\n            ┃ │ │ output: -75.0                     │ │ ┃\n            ┃ │ ╰───────────────────────────────────╯ │ ┃\n            ┃ └───────────────────────────────────────┘ ┃\n            ┃                                           ┃\n            ┃ result: [[-20.0]]                         ┃\n            ┃                                           ┃\n            ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n            ┏━━━━━━  icomp SIMULATION 2: Trial 0  ━━━━━━┓\n            ┃                                           ┃\n            ┃ input: [[0.0]]                            ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 0 ──┐                       ┃\n            ┃ │ ╭──── ia ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌─  Time Step 1 ──┐                       ┃\n            ┃ │ ╭──── ib ─────╮ │                       ┃\n            ┃ │ │ input: 0.0  │ │                       ┃\n            ┃ │ │ output: 0.0 │ │                       ┃\n            ┃ │ ╰─────────────╯ │                       ┃\n            ┃ └─────────────────┘                       ┃\n            ┃                                           ┃\n            ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n            ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n            ┃ │ │ input: 0.0                        │ │ ┃\n            ┃ │ │ output: -75.0                     │ │ ┃\n            ┃ │ ╰───────────────────────────────────╯ │ ┃\n            ┃ └───────────────────────────────────────┘ ┃\n            ┃                                           ┃\n            ┃ result: [[-20.0]]                         ┃\n            ┃                                           ┃\n            ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n    ┏━━━━━━  ocomp SIMULATION 1: Trial 0  ━━━━━━┓\n    ┃                                           ┃\n    ┃ input: [[0.0]]                            ┃\n    ┃                                           ┃\n    ┃ ┌─  Time Step 0 ──┐                       ┃\n    ┃ │ ╭─── icomp ───╮ │                       ┃\n    ┃ │ │ input: 0.0  │ │                       ┃\n    ┃ │ │ output: 0.0 │ │                       ┃\n    ┃ │ ╰─────────────╯ │                       ┃\n    ┃ └─────────────────┘                       ┃\n    ┃                                           ┃\n    ┃ ┌────────────  Time Step 1 ─────────────┐ ┃\n    ┃ │ ╭─ oController Objective Mechanism ─╮ │ ┃\n    ┃ │ │ input: 0.0                        │ │ ┃\n    ┃ │ │ output: -75.0                     │ │ ┃\n    ┃ │ ╰───────────────────────────────────╯ │ ┃\n    ┃ └───────────────────────────────────────┘ ┃\n    ┃                                           ┃\n    ┃ result: [[-20.0]]                         ┃\n    ┃                                           ┃\n    ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n    ┏━━━━━━━━━━━━  icomp: Trial 24  ━━━━━━━━━━━━┓\n    ┃                                           ┃\n    ┃ input: [[1.0]]                            ┃\n    ┃                                           ┃\n    ┃ ┌─  Time Step 0 ──┐                       ┃\n    ┃ │ ╭──── ia ─────╮ │                       ┃\n    ┃ │ │ input: 1.0  │ │                       ┃\n    ┃ │ │ output: 1.0 │ │                       ┃\n    ┃ │ ╰─────────────╯ │                       ┃\n    ┃ └─────────────────┘                       ┃\n    ┃                                           ┃\n    ┃ ┌─  Time Step 1 ──┐                       ┃\n    ┃ │ ╭──── ib ─────╮ │                       ┃\n    ┃ │ │ input: 1.0  │ │                       ┃\n    ┃ │ │ output: 1.0 │ │                       ┃\n    ┃ │ ╰─────────────╯ │                       ┃\n    ┃ └─────────────────┘                       ┃\n    ┃                                           ┃\n    ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n    ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n    ┃ │ │ input: 1.0                        │ │ ┃\n    ┃ │ │ output: -74.0                     │ │ ┃\n    ┃ │ ╰───────────────────────────────────╯ │ ┃\n    ┃ └───────────────────────────────────────┘ ┃\n    ┃                                           ┃\n    ┃ result: [[-20.0]]                         ┃\n    ┃                                           ┃\n    ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n    ╭─── iController ────╮\n    │ input: -75.0, -2.0 │\n    │ output: 1.0        │\n    ╰────────────────────╯\n        ┏━━━━━━  icomp SIMULATION 0: Trial 0  ━━━━━━┓\n        ┃                                           ┃\n        ┃ input: [[1.0]]                            ┃\n        ┃                                           ┃\n        ┃ ┌─  Time Step 0 ──┐                       ┃\n        ┃ │ ╭──── ia ─────╮ │                       ┃\n        ┃ │ │ input: 1.0  │ │                       ┃\n        ┃ │ │ output: 1.0 │ │                       ┃\n        ┃ │ ╰─────────────╯ │                       ┃\n        ┃ └─────────────────┘                       ┃\n        ┃                                           ┃\n        ┃ ┌─  Time Step 1 ──┐                       ┃\n        ┃ │ ╭──── ib ─────╮ │                       ┃\n        ┃ │ │ input: 1.0  │ │                       ┃\n        ┃ │ │ output: 1.0 │ │                       ┃\n        ┃ │ ╰─────────────╯ │                       ┃\n        ┃ └─────────────────┘                       ┃\n        ┃                                           ┃\n        ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n        ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n        ┃ │ │ input: 1.0                        │ │ ┃\n        ┃ │ │ output: -73.0                     │ │ ┃\n        ┃ │ ╰───────────────────────────────────╯ │ ┃\n        ┃ └───────────────────────────────────────┘ ┃\n        ┃                                           ┃\n        ┃ result: [[-20.0]]                         ┃\n        ┃                                           ┃\n        ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n        ┏━━━━━━  icomp SIMULATION 1: Trial 0  ━━━━━━┓\n        ┃                                           ┃\n        ┃ input: [[1.0]]                            ┃\n        ┃                                           ┃\n        ┃ ┌─  Time Step 0 ──┐                       ┃\n        ┃ │ ╭──── ia ─────╮ │                       ┃\n        ┃ │ │ input: 1.0  │ │                       ┃\n        ┃ │ │ output: 5.5 │ │                       ┃\n        ┃ │ ╰─────────────╯ │                       ┃\n        ┃ └─────────────────┘                       ┃\n        ┃                                           ┃\n        ┃ ┌─  Time Step 1 ──┐                       ┃\n        ┃ │ ╭──── ib ─────╮ │                       ┃\n        ┃ │ │ input: 5.5  │ │                       ┃\n        ┃ │ │ output: 5.5 │ │                       ┃\n        ┃ │ ╰─────────────╯ │                       ┃\n        ┃ └─────────────────┘                       ┃\n        ┃                                           ┃\n        ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n        ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n        ┃ │ │ input: 5.5                        │ │ ┃\n        ┃ │ │ output: -68.5                     │ │ ┃\n        ┃ │ ╰───────────────────────────────────╯ │ ┃\n        ┃ └───────────────────────────────────────┘ ┃\n        ┃                                           ┃\n        ┃ result: [[-20.0]]                         ┃\n        ┃                                           ┃\n        ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n        ┏━━━━━━  icomp SIMULATION 2: Trial 0  ━━━━━━┓\n        ┃                                           ┃\n        ┃ input: [[1.0]]                            ┃\n        ┃                                           ┃\n        ┃ ┌──  Time Step 0 ──┐                      ┃\n        ┃ │ ╭───── ia ─────╮ │                      ┃\n        ┃ │ │ input: 1.0   │ │                      ┃\n        ┃ │ │ output: 10.0 │ │                      ┃\n        ┃ │ ╰──────────────╯ │                      ┃\n        ┃ └──────────────────┘                      ┃\n        ┃                                           ┃\n        ┃ ┌──  Time Step 1 ──┐                      ┃\n        ┃ │ ╭───── ib ─────╮ │                      ┃\n        ┃ │ │ input: 10.0  │ │                      ┃\n        ┃ │ │ output: 10.0 │ │                      ┃\n        ┃ │ ╰──────────────╯ │                      ┃\n        ┃ └──────────────────┘                      ┃\n        ┃                                           ┃\n        ┃ ┌────────────  Time Step 2 ─────────────┐ ┃\n        ┃ │ ╭─ iController Objective Mechanism ─╮ │ ┃\n        ┃ │ │ input: 10.0                       │ │ ┃\n        ┃ │ │ output: -64.0                     │ │ ┃\n        ┃ │ ╰───────────────────────────────────╯ │ ┃\n        ┃ └───────────────────────────────────────┘ ┃\n        ┃                                           ┃\n        ┃ result: [[-20.0]]                         ┃\n        ┃                                           ┃\n        ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n┏━━━━  ocomp SIMULATION None: Trial 1  ━━━━━┓\n┃                                           ┃\n┃ input: [[1]]                              ┃\n┃                                           ┃\n┃ ┌─  Time Step 0 ──┐                       ┃\n┃ │ ╭─── icomp ───╮ │                       ┃\n┃ │ │ input: 1.0  │ │                       ┃\n┃ │ │ output: 1.0 │ │                       ┃\n┃ │ ╰─────────────╯ │                       ┃\n┃ └─────────────────┘                       ┃\n┃                                           ┃\n┃ ┌────────────  Time Step 1 ─────────────┐ ┃\n┃ │ ╭─ oController Objective Mechanism ─╮ │ ┃\n┃ │ │ input: 1.0                        │ │ ┃\n┃ │ │ output: -74.0                     │ │ ┃\n┃ │ ╰───────────────────────────────────╯ │ ┃\n┃ └───────────────────────────────────────┘ ┃\n┃                                           ┃\n┃ result: [[-20.0]]                         ┃\n┃                                           ┃\n┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\nocomp: Executed 2 of 2 trials\n    ocomp: Simulated 2 trials (depth: 1)\n        icomp: Executed 1 of 1 trials (depth: 2)\n            icomp: Simulated 3 trials (depth: 3)\n        icomp: Executed 1 of 1 trials (depth: 2)\n            icomp: Simulated 3 trials (depth: 3)\n    icomp: Executed 1 of 1 trials (depth: 1)\n        icomp: Simulated 3 trials (depth: 2)\n    ocomp: Simulated 2 trials (depth: 1)\n        icomp: Executed 1 of 1 trials (depth: 2)\n            icomp: Simulated 3 trials (depth: 3)\n        icomp: Executed 1 of 1 trials (depth: 2)\n            icomp: Simulated 3 trials (depth: 3)\n    icomp: Executed 1 of 1 trials (depth: 1)\n        icomp: Simulated 3 trials (depth: 2)\n'
        assert actual_output == expected_output


    @pytest.mark.skipif(sys.platform == 'win32', reason="<Incompatible formatting of output>")
    def test_reportOutputPref_true(self):
        t = pnl.TransferMechanism()
        t.reportOutputPref = ReportOutput.FULL

        f = io.StringIO()
        with contextlib.redirect_stdout(f):
            t.execute(1)
        output = f.getvalue()

        assert 'input: 1.0' in output
        assert 'output: 1.0' in output
        assert 'params' not in output

    @pytest.mark.skipif(sys.platform == 'win32', reason="<Incompatible formatting of output>")
    def test_reportOutputPref_params(self):
        t = pnl.TransferMechanism()
        t.reportOutputPref = 'params'

        f = io.StringIO()
        with contextlib.redirect_stdout(f):
            t.execute(1, report_output=ReportOutput.FULL)
        output = f.getvalue()

        assert 'input: 1.0' in output
        assert 'output: 1.0' in output
        assert 'params' in output

        # NOTE: parameters are not consistent in printed form with
        # their underlying values (e.g. dimension brackets are removed)
        # So, don't check output for all parameters and correct values
        assert 'noise:' in output
        assert 'integration_rate:' in output

        assert 'Parameter(' not in output
        assert 'pnl_internal=' not in output
