示例#1
0
    def __init__(self,
                 network,
                 dt=0.001,
                 seed=None,
                 model=None,
                 progress_bar=True,
                 optimize=True):
        self.closed = True  # Start closed in case constructor raises exception
        self.progress_bar = progress_bar
        self.optimize = optimize

        if model is None:
            self.model = Model(
                dt=float(dt),
                label="%s, dt=%f" % (network, dt),
                decoder_cache=get_default_decoder_cache(),
            )
        else:
            self.model = model

        pt = ProgressTracker(progress_bar, Progress("Building", "Build"))
        with pt:
            if network is not None:
                # Build the network into the model
                self.model.build(network,
                                 progress=pt.next_stage("Building", "Build"))

            # Order the steps (they are made in `Simulator.reset`)
            self.dg = operator_dependency_graph(self.model.operators)

            if optimize:
                with pt.next_stage("Building (running optimizer)",
                                   "Optimization"):
                    opmerge_optimize(self.model, self.dg)

        self._step_order = [
            op for op in toposort(self.dg) if hasattr(op, "make_step")
        ]

        # -- map from Signal.base -> ndarray
        self.signals = SignalDict()
        for op in self.model.operators:
            op.init_signals(self.signals)

        # Add built states to the raw simulation data dictionary
        self._sim_data = self.model.params

        # Provide a nicer interface to simulation data
        self.data = SimulationData(self._sim_data)

        if seed is None:
            if network is not None and network.seed is not None:
                seed = network.seed + 1
            else:
                seed = np.random.randint(npext.maxint)

        self.closed = False
        self.reset(seed=seed)
示例#2
0
def test_progress_tracker():
    update_interval = 0.001
    sleep_interval = 20 * update_interval
    stages = 4
    steps = 3
    total_progress = Progress(name_during="total_prog", max_steps=stages)
    progress_bar = ProgressBarMock()
    tracker = ProgressTracker(progress_bar,
                              total_progress,
                              update_interval=update_interval)

    assert not progress_bar.closed
    with tracker:
        for i in range(stages):
            sub_progress = tracker.next_stage(name_during="stage%d" % i,
                                              max_steps=steps)
            with sub_progress:
                for j in range(steps):
                    sub_progress.step()
                    time.sleep(sleep_interval)
                    assert progress_bar.updates[
                        -1].name_during == "stage%d" % i
                    assert progress_bar.updates[-1].n_steps == j + 1

            time.sleep(sleep_interval)
            assert progress_bar.updates[-1].name_during == "total_prog"
            assert progress_bar.updates[-1].n_steps == i

    assert progress_bar.closed