Skip to content

Commit 6a9fa8e

Browse files
Merge pull request #269 from NeuroML/feat/do-not-import-mpl
feat(pynml): do not import plotters if mpl is not already imported
2 parents 9e1adce + d32547f commit 6a9fa8e

File tree

2 files changed

+31
-12
lines changed

2 files changed

+31
-12
lines changed

pyneuroml/analysis/__init__.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from pyneuroml.lems.LEMSSimulation import LEMSSimulation
99
from pyneuroml.lems import generate_lems_file_for_neuroml
1010
from pyneuroml.utils.plot import get_next_hex_color
11+
from pyneuroml.plot import generate_plot
1112
import neuroml as nml
1213
from pyelectro.analysis import max_min
1314
from pyelectro.analysis import mean_spike_frequency
@@ -381,7 +382,7 @@ def generate_current_vs_frequency_curve(
381382
iv_results[stims[i]] = v_end
382383

383384
if plot_voltage_traces:
384-
traces_ax = pynml.generate_plot(
385+
traces_ax = generate_plot(
385386
times_results,
386387
volts_results,
387388
"Membrane potential traces for: %s" % nml2_file,
@@ -403,7 +404,7 @@ def generate_current_vs_frequency_curve(
403404
stims = sorted(if_results.keys())
404405
stims_pA = [ii * 1000 for ii in stims]
405406
freqs = [if_results[s] for s in stims]
406-
if_ax = pynml.generate_plot(
407+
if_ax = generate_plot(
407408
[stims_pA],
408409
[freqs],
409410
"Firing frequency versus injected current for: %s" % nml2_file,
@@ -455,7 +456,7 @@ def generate_current_vs_frequency_curve(
455456
xs[-1].append(stim * 1000)
456457
ys[-1].append(iv_results[stim])
457458

458-
iv_ax = pynml.generate_plot(
459+
iv_ax = generate_plot(
459460
xs,
460461
ys,
461462
"V at %sms versus I below threshold for: %s" % (end_stim, nml2_file),
@@ -621,7 +622,7 @@ def analyse_spiketime_vs_dt(
621622
markers.append("")
622623
colors.append("k")
623624

624-
pynml.generate_plot(
625+
generate_plot(
625626
spxs,
626627
spys,
627628
"Spike times vs dt",
@@ -635,7 +636,7 @@ def analyse_spiketime_vs_dt(
635636
)
636637

637638
if verbose:
638-
pynml.generate_plot(
639+
generate_plot(
639640
xs,
640641
ys,
641642
"Membrane potentials in %s for %s" % (simulator, dts),

pyneuroml/pynml.py

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,31 @@
4545
import neuroml.loaders as loaders
4646
import neuroml.writers as writers
4747

48-
# to maintain API compatibility:
49-
# so that existing scripts that use: from pynml import generate_plot
50-
# continue to work
51-
from pyneuroml.plot import generate_plot, generate_interactive_plot # noqa
48+
logger = logging.getLogger(__name__)
49+
logger.setLevel(logging.INFO)
50+
51+
matplotlib_imported = False
52+
for k in sys.modules.keys():
53+
if "matplotlib" in k:
54+
matplotlib_imported = True
55+
break
56+
if matplotlib_imported is True:
57+
# to maintain API compatibility:
58+
# so that existing scripts that use: from pynml import generate_plot
59+
# continue to work
60+
from pyneuroml.plot import generate_plot, generate_interactive_plot # noqa
61+
else:
62+
logger.warning("Matplotlib has not been imported, not importing plotting functions")
63+
logger.warning("Please import these explicitly from pyneuroml.plot")
64+
warnings.warn(
65+
"""
66+
Please note that these plotting methods will be removed from the pynml
67+
module in the future. Please import plotting methods expliclitly from
68+
the pyneuroml.plot sub module.
69+
""",
70+
FutureWarning,
71+
stacklevel=2,
72+
)
5273

5374
DEFAULTS = {
5475
"v": False,
@@ -58,9 +79,6 @@
5879

5980
lems_model_with_units = None
6081

61-
logger = logging.getLogger(__name__)
62-
logger.setLevel(logging.INFO)
63-
6482
version_string = "pyNeuroML v{} (libNeuroML v{}, jNeuroML v{})".format(
6583
__version__, neuroml.__version__, JNEUROML_VERSION
6684
)

0 commit comments

Comments
 (0)