From 3d187ee6a984e8f0e0edd8423fdde2b39974404f Mon Sep 17 00:00:00 2001 From: "Michael R. Crusoe" Date: Mon, 24 Feb 2025 14:21:11 +0100 Subject: [PATCH] Defer importing the optional dependency "dipde". --- bmtk/simulator/popnet/popnetwork.py | 10 ++++++---- bmtk/simulator/popnet/popsimulator.py | 15 +++++++++------ 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/bmtk/simulator/popnet/popnetwork.py b/bmtk/simulator/popnet/popnetwork.py index 7ee57b520..20b4e8c3b 100644 --- a/bmtk/simulator/popnet/popnetwork.py +++ b/bmtk/simulator/popnet/popnetwork.py @@ -28,10 +28,6 @@ from bmtk.simulator.popnet import utils as poputils from bmtk.simulator.popnet.sonata_adaptors import PopEdgeAdaptor -from dipde.internals.internalpopulation import InternalPopulation -from dipde.internals.externalpopulation import ExternalPopulation -from dipde.internals.connection import Connection - class Population(object): def __init__(self, pop_id): @@ -59,6 +55,8 @@ def record(self): return True def build(self): + from dipde.internals.internalpopulation import InternalPopulation + params = self._nodes[0].dynamics_params self._dipde_obj = InternalPopulation(**params) @@ -94,6 +92,8 @@ def firing_rate(self, value): self.build(value) def build(self, firing_rate): + from dipde.internals.externalpopulation import ExternalPopulation + if firing_rate is not None: self._firing_rate = firing_rate @@ -132,6 +132,8 @@ def add_edge(self, edge): self._edges.append(edge) def build(self): + from dipde.internals.connection import Connection + edge = self._edges[0] self._dipde_conn = Connection(self._src_pop._dipde_obj, self._trg_pop._dipde_obj, edge.nsyns, edge.delay, edge.syn_weight) diff --git a/bmtk/simulator/popnet/popsimulator.py b/bmtk/simulator/popnet/popsimulator.py index 8792beafe..e1dd3a7b9 100644 --- a/bmtk/simulator/popnet/popsimulator.py +++ b/bmtk/simulator/popnet/popsimulator.py @@ -24,11 +24,6 @@ import logging from six import string_types -from dipde.internals.internalpopulation import InternalPopulation -from dipde.internals.externalpopulation import ExternalPopulation -from dipde.internals.connection import Connection -import dipde - from bmtk.simulator.core.simulator import Simulator from . import config as cfg from . import utils as poputils @@ -203,12 +198,14 @@ def set_recurrent_connections(self): self.__connection_list.append(self.__create_connection(source_pop, target_pop, edge)) def run(self, tstop=None): + from dipde import Network + # TODO: Check if cells/connections need to be rebuilt. # Create the network dipde_pops = [p.dipde_obj for p in self._graph.populations] dipde_conns = [c.dipde_obj for c in self._graph.connections] - self._dipde_network = dipde.Network(population_list=dipde_pops, connection_list=dipde_conns) + self._dipde_network = Network(population_list=dipde_pops, connection_list=dipde_conns) if tstop is None: tstop = self.tstop @@ -220,16 +217,22 @@ def run(self, tstop=None): self.io.log_info("Finished simulation.") def __create_internal_pop(self, params): + from dipde.internals.internalpopulation import InternalPopulation + # TODO: use getter methods directly in case arguments are not stored in dynamics params # pop = InternalPopulation(**params.dynamics_params) pop = InternalPopulation(**params.model_params) return pop def __create_external_pop(self, params, rates): + from dipde.internals.externalpopulation import ExternalPopulation + pop = ExternalPopulation(rates, record=False) return pop def __create_connection(self, source, target, params): + from dipde.internals.connection import Connection + return Connection(source, target, nsyn=params.nsyns, delays=params.delay, weights=params.weight) def __record_rates(self):