From 8cad4431059ffa7c709d83faa8b72d5ec1a350b4 Mon Sep 17 00:00:00 2001 From: "Ankur Sinha (Ankur Sinha Gmail)" Date: Thu, 2 Nov 2023 11:59:44 +0000 Subject: [PATCH 1/3] feat(pynml): do not import plotters if mpl is not already imported Note: remove these functions from pynml in the future See also: https://github.com/suny-downstate-medical-center/netpyne/pull/787 --- pyneuroml/pynml.py | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/pyneuroml/pynml.py b/pyneuroml/pynml.py index df1f45bb..6d025873 100644 --- a/pyneuroml/pynml.py +++ b/pyneuroml/pynml.py @@ -45,10 +45,31 @@ import neuroml.loaders as loaders import neuroml.writers as writers -# to maintain API compatibility: -# so that existing scripts that use: from pynml import generate_plot -# continue to work -from pyneuroml.plot import generate_plot, generate_interactive_plot # noqa +logger = logging.getLogger(__name__) +logger.setLevel(logging.INFO) + +matplotlib_imported = False +for k in sys.modules.keys(): + if "matplotlib" in k: + matplotlib_imported = True + break +if matplotlib_imported is True: + # to maintain API compatibility: + # so that existing scripts that use: from pynml import generate_plot + # continue to work + from pyneuroml.plot import generate_plot, generate_interactive_plot # noqa +else: + logger.warning("Matplotlib has not been imported, not importing plotting functions") + logger.warning("Please import these explicitly from pyneuroml.plot") + warnings.warn( + """ + Please note that these plotting methods will be removed from the pynml + module in the future. Please import plotting methods expliclitly from + the pyneuroml.plot sub module. + """, + FutureWarning, + stacklevel=2, + ) DEFAULTS = { "v": False, @@ -58,9 +79,6 @@ lems_model_with_units = None -logger = logging.getLogger(__name__) -logger.setLevel(logging.INFO) - version_string = "pyNeuroML v{} (libNeuroML v{}, jNeuroML v{})".format( __version__, neuroml.__version__, JNEUROML_VERSION ) From ce197fe5db17d46bd9f30dc221c77706e48cf040 Mon Sep 17 00:00:00 2001 From: "Ankur Sinha (Ankur Sinha Gmail)" Date: Thu, 2 Nov 2023 12:21:54 +0000 Subject: [PATCH 2/3] feat: use complete import for generate_plot --- pyneuroml/analysis/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pyneuroml/analysis/__init__.py b/pyneuroml/analysis/__init__.py index eff61cec..09a5a16c 100644 --- a/pyneuroml/analysis/__init__.py +++ b/pyneuroml/analysis/__init__.py @@ -8,6 +8,7 @@ from pyneuroml.lems.LEMSSimulation import LEMSSimulation from pyneuroml.lems import generate_lems_file_for_neuroml from pyneuroml.utils.plot import get_next_hex_color +from pyneuroml.plot import generate_plot import neuroml as nml from pyelectro.analysis import max_min from pyelectro.analysis import mean_spike_frequency @@ -381,7 +382,7 @@ def generate_current_vs_frequency_curve( iv_results[stims[i]] = v_end if plot_voltage_traces: - traces_ax = pynml.generate_plot( + traces_ax = generate_plot( times_results, volts_results, "Membrane potential traces for: %s" % nml2_file, From d32547f27bc08f2c2255a56ba783ff537642bad2 Mon Sep 17 00:00:00 2001 From: "Ankur Sinha (Ankur Sinha Gmail)" Date: Thu, 2 Nov 2023 12:44:55 +0000 Subject: [PATCH 3/3] fix: do not use `pynml.generateplot` --- pyneuroml/analysis/__init__.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pyneuroml/analysis/__init__.py b/pyneuroml/analysis/__init__.py index 09a5a16c..875818a0 100644 --- a/pyneuroml/analysis/__init__.py +++ b/pyneuroml/analysis/__init__.py @@ -404,7 +404,7 @@ def generate_current_vs_frequency_curve( stims = sorted(if_results.keys()) stims_pA = [ii * 1000 for ii in stims] freqs = [if_results[s] for s in stims] - if_ax = pynml.generate_plot( + if_ax = generate_plot( [stims_pA], [freqs], "Firing frequency versus injected current for: %s" % nml2_file, @@ -456,7 +456,7 @@ def generate_current_vs_frequency_curve( xs[-1].append(stim * 1000) ys[-1].append(iv_results[stim]) - iv_ax = pynml.generate_plot( + iv_ax = generate_plot( xs, ys, "V at %sms versus I below threshold for: %s" % (end_stim, nml2_file), @@ -622,7 +622,7 @@ def analyse_spiketime_vs_dt( markers.append("") colors.append("k") - pynml.generate_plot( + generate_plot( spxs, spys, "Spike times vs dt", @@ -636,7 +636,7 @@ def analyse_spiketime_vs_dt( ) if verbose: - pynml.generate_plot( + generate_plot( xs, ys, "Membrane potentials in %s for %s" % (simulator, dts),