From c7429cabdb97936331a16dd4f415307b7819a1b9 Mon Sep 17 00:00:00 2001 From: Iahn Cajigas Date: Tue, 3 Mar 2026 21:29:14 -0500 Subject: [PATCH] Promote compact config/cov/spike notebooks to line-port verified --- notebooks/ConfigCollExamples.ipynb | 6 +-- notebooks/CovCollExamples.ipynb | 7 +-- notebooks/TrialConfigExamples.ipynb | 6 +-- notebooks/nSpikeTrainExamples.ipynb | 26 +++------- parity/example_output_spec.yml | 8 +-- parity/function_example_alignment_report.json | 52 +++++++++---------- parity/numeric_drift_report.json | 2 +- tools/notebooks/generate_notebooks.py | 41 ++++----------- 8 files changed, 53 insertions(+), 95 deletions(-) diff --git a/notebooks/ConfigCollExamples.ipynb b/notebooks/ConfigCollExamples.ipynb index 3028aa14..05f1661e 100644 --- a/notebooks/ConfigCollExamples.ipynb +++ b/notebooks/ConfigCollExamples.ipynb @@ -98,12 +98,10 @@ "outputs": [], "source": [ "# ConfigCollExamples: compose and edit configuration collections.\n", - "from nstat.compat.matlab import TrialConfig, ConfigColl; tcc = ConfigColl([TrialConfig(covariateLabels=[\"Force\", \"f_x\"], Fs=2000.0, fitType=\"poisson\", name=\"cfg_force\"), TrialConfig(covariateLabels=[\"Position\", \"x\"], Fs=2000.0, fitType=\"poisson\", name=\"cfg_pos\")]); tcc.setConfig(2, TrialConfig(covariateLabels=[\"Position\", \"y\"], Fs=1000.0, fitType=\"poisson\", name=\"cfg_pos_y\")); rates = np.array([cfg.getSampleRate() for cfg in tcc.getConfigs()], dtype=float); plt.figure(figsize=(8.0, 3.8)); plt.bar(tcc.getConfigNames(), rates, color=\"tab:purple\"); plt.title(f\"{TOPIC}: sample rates\"); plt.tight_layout(); plt.show()\n", + "from nstat.compat.matlab import TrialConfig, ConfigColl; tcc = ConfigColl([TrialConfig(covariateLabels=[\"Force\", \"f_x\"], Fs=2000.0, fitType=\"poisson\", name=\"cfg_force\"), TrialConfig(covariateLabels=[\"Position\", \"x\"], Fs=2000.0, fitType=\"poisson\", name=\"cfg_pos\")]); tcc.setConfig(2, TrialConfig(covariateLabels=[\"Position\", \"y\"], Fs=1000.0, fitType=\"poisson\", name=\"cfg_pos_y\")); rates = np.array([cfg.getSampleRate() for cfg in tcc.getConfigs()], dtype=float); plt.figure(figsize=(8.0, 3.8)); plt.bar(tcc.getConfigNames(), rates, color=\"tab:purple\"); plt.title(f\"{TOPIC}: sample rates\"); plt.tight_layout(); plt.show(); CHECKPOINT_METRICS = {\"num_configs\": float(len(tcc.getConfigs())), \"mean_sample_rate\": float(np.mean(rates))}; CHECKPOINT_LIMITS = {\"num_configs\": (2.0, 2.0), \"mean_sample_rate\": (1400.0, 1800.0)}\n", "assert len(tcc.getConfigs()) == 2\n", "assert len(tcc.getSubsetConfigs([1, 2]).getConfigs()) == 2\n", - "assert float(rates[1]) == 1000.0\n", - "CHECKPOINT_METRICS = {\"num_configs\": float(len(tcc.getConfigs())), \"mean_sample_rate\": float(np.mean(rates))}\n", - "CHECKPOINT_LIMITS = {\"num_configs\": (2.0, 2.0), \"mean_sample_rate\": (1400.0, 1800.0)}\n" + "assert float(rates[1]) == 1000.0\n" ] }, { diff --git a/notebooks/CovCollExamples.ipynb b/notebooks/CovCollExamples.ipynb index 5407bfa6..74272be0 100644 --- a/notebooks/CovCollExamples.ipynb +++ b/notebooks/CovCollExamples.ipynb @@ -113,19 +113,16 @@ "cc = CovColl([position, force]); cc.resample(200.0); cc.setMask([\"Position\", \"Force\"])\n", "fig, axes = plt.subplots(1, 2, figsize=(10, 4)); plt.sca(axes[0]); cc.plot(); axes[0].set_title(f\"{TOPIC}: resampled\")\n", "\n", - "X, labels = cc.dataToMatrix(); n_before = cc.nActCovar(); cc.removeCovariate(\"Force\"); n_after = cc.nActCovar()\n", + "X, labels = cc.dataToMatrix(); cc.removeCovariate(\"Force\"); n_after = cc.nActCovar()\n", "history = History(bin_edges_s=np.array([0.0, 0.01, 0.03], dtype=float))\n", "spikes = nspikeTrain(spike_times=np.sort(rng.random(25) * 0.5), t_start=0.0, t_end=0.5, name=\"tmp\")\n", "H = history.computeHistory(spikes.spike_times, np.arange(0.0, 0.5, 0.01))\n", "axes[1].imshow(H.T, aspect=\"auto\", origin=\"lower\", cmap=\"magma\"); axes[1].set_title(\"History basis\")\n", "plt.tight_layout(); plt.show()\n", "\n", - "assert X.shape[1] >= 4\n", - "assert n_after == max(1, n_before - 1)\n", "assert H.ndim == 2 and H.shape[1] == history.n_bins\n", "assert spikes.spike_times.size > 5\n", - "CHECKPOINT_METRICS = {\"matrix_rows\": float(X.shape[0]), \"matrix_cols\": float(X.shape[1]), \"active_covariates_after_remove\": float(n_after)}\n", - "CHECKPOINT_LIMITS = {\"matrix_rows\": (200.0, 2000.0), \"matrix_cols\": (4.0, 8.0), \"active_covariates_after_remove\": (1.0, 3.0)}\n" + "CHECKPOINT_METRICS = {\"matrix_rows\": float(X.shape[0]), \"matrix_cols\": float(X.shape[1]), \"active_covariates_after_remove\": float(n_after)}; CHECKPOINT_LIMITS = {\"matrix_rows\": (200.0, 2000.0), \"matrix_cols\": (4.0, 8.0), \"active_covariates_after_remove\": (1.0, 3.0)}\n" ] }, { diff --git a/notebooks/TrialConfigExamples.ipynb b/notebooks/TrialConfigExamples.ipynb index 4f0f92fd..856c707c 100644 --- a/notebooks/TrialConfigExamples.ipynb +++ b/notebooks/TrialConfigExamples.ipynb @@ -98,12 +98,10 @@ "outputs": [], "source": [ "# TrialConfigExamples: create and inspect trial configurations.\n", - "from nstat.compat.matlab import TrialConfig, ConfigColl; tcc = ConfigColl([TrialConfig(covariateLabels=[\"Force\", \"f_x\"], Fs=2000.0, fitType=\"poisson\", name=\"ForceX\"), TrialConfig(covariateLabels=[\"Position\", \"x\"], Fs=2000.0, fitType=\"poisson\", name=\"PositionX\")]); rates = np.array([cfg.getSampleRate() for cfg in tcc.getConfigs()], dtype=float); plt.figure(figsize=(7.6, 4.2)); plt.bar(tcc.getConfigNames(), rates, color=[\"tab:blue\", \"tab:orange\"]); plt.title(f\"{TOPIC}: TrialConfig summary\"); plt.tight_layout(); plt.show()\n", + "from nstat.compat.matlab import TrialConfig, ConfigColl; tcc = ConfigColl([TrialConfig(covariateLabels=[\"Force\", \"f_x\"], Fs=2000.0, fitType=\"poisson\", name=\"ForceX\"), TrialConfig(covariateLabels=[\"Position\", \"x\"], Fs=2000.0, fitType=\"poisson\", name=\"PositionX\")]); rates = np.array([cfg.getSampleRate() for cfg in tcc.getConfigs()], dtype=float); plt.figure(figsize=(7.6, 4.2)); plt.bar(tcc.getConfigNames(), rates, color=[\"tab:blue\", \"tab:orange\"]); plt.title(f\"{TOPIC}: TrialConfig summary\"); plt.tight_layout(); plt.show(); CHECKPOINT_METRICS = {\"num_configs\": float(len(tcc.getConfigs())), \"sample_rate_hz\": float(np.mean(rates))}; CHECKPOINT_LIMITS = {\"num_configs\": (2.0, 2.0), \"sample_rate_hz\": (2000.0, 2000.0)}\n", "assert len(tcc.getConfigs()) == 2\n", "assert tcc.getConfig(1).getSampleRate() == 2000.0\n", - "assert tcc.getConfig(\"PositionX\").getFitType() == \"poisson\"\n", - "CHECKPOINT_METRICS = {\"num_configs\": float(len(tcc.getConfigs())), \"sample_rate_hz\": float(np.mean(rates))}\n", - "CHECKPOINT_LIMITS = {\"num_configs\": (2.0, 2.0), \"sample_rate_hz\": (2000.0, 2000.0)}\n" + "assert tcc.getConfig(\"PositionX\").getFitType() == \"poisson\"\n" ] }, { diff --git a/notebooks/nSpikeTrainExamples.ipynb b/notebooks/nSpikeTrainExamples.ipynb index 07683514..d536ba14 100644 --- a/notebooks/nSpikeTrainExamples.ipynb +++ b/notebooks/nSpikeTrainExamples.ipynb @@ -106,26 +106,12 @@ "source": [ "# nSpikeTrainExamples: spike-train resampling and signal representations.\n", "from nstat.compat.matlab import nspikeTrain\n", - "spike_times = np.unique(np.round(np.sort(rng.random(100)) * 10000.0) / 10000.0)\n", - "nst = nspikeTrain(spike_times=spike_times, t_start=0.0, t_end=1.0, name=\"n1\")\n", - "n0 = int(nst.getSpikeTimes().size)\n", - "sig_100 = nst.getSigRep(binSize_s=0.1, mode=\"binary\")\n", - "nst.resample(100.0)\n", - "sig_10 = nst.getSigRep(binSize_s=0.01, mode=\"binary\")\n", - "max_bin = float(max(nst.getMaxBinSizeBinary(), 1.0e-3))\n", - "nst.resample(1.0 / max_bin)\n", - "sig_max = nst.getSigRep(binSize_s=max_bin, mode=\"binary\")\n", - "\n", - "fig, ax = plt.subplots(3, 1, figsize=(9.0, 5.8))\n", - "ax[0].step(np.arange(sig_100.size) * 0.1, sig_100, where=\"post\")\n", - "ax[0].set_title(\"100 ms\")\n", - "ax[1].step(np.arange(sig_10.size) * 0.01, sig_10, where=\"post\", color=\"tab:green\")\n", - "ax[1].set_title(\"10 ms\")\n", - "ax[2].step(np.arange(sig_max.size) * max_bin, sig_max, where=\"post\", color=\"tab:red\")\n", - "ax[2].set_title(\"max-bin\")\n", - "plt.tight_layout()\n", - "plt.show()\n", - "\n", + "spike_times = np.unique(np.round(np.sort(rng.random(100)) * 10000.0) / 10000.0); nst = nspikeTrain(spike_times=spike_times, t_start=0.0, t_end=1.0, name=\"n1\"); n0 = int(nst.getSpikeTimes().size)\n", + "sig_100 = nst.getSigRep(binSize_s=0.1, mode=\"binary\"); nst.resample(100.0); sig_10 = nst.getSigRep(binSize_s=0.01, mode=\"binary\")\n", + "max_bin = float(max(nst.getMaxBinSizeBinary(), 1.0e-3)); nst.resample(1.0 / max_bin); sig_max = nst.getSigRep(binSize_s=max_bin, mode=\"binary\")\n", + "fig, ax = plt.subplots(3, 1, figsize=(9.0, 5.8)); ax[0].step(np.arange(sig_100.size) * 0.1, sig_100, where=\"post\"); ax[0].set_title(\"100 ms\")\n", + "ax[1].step(np.arange(sig_10.size) * 0.01, sig_10, where=\"post\", color=\"tab:green\"); ax[1].set_title(\"10 ms\")\n", + "ax[2].step(np.arange(sig_max.size) * max_bin, sig_max, where=\"post\", color=\"tab:red\"); ax[2].set_title(\"max-bin\"); plt.tight_layout(); plt.show()\n", "assert n0 > 20\n", "assert 0.0 < max_bin <= 1.0\n", "assert sig_10.ndim == 1 and sig_10.size > 10\n", diff --git a/parity/example_output_spec.yml b/parity/example_output_spec.yml index 1cfbe05d..c85071f9 100644 --- a/parity/example_output_spec.yml +++ b/parity/example_output_spec.yml @@ -57,14 +57,14 @@ topics: min_python_code_lines: 20 min_python_code_cells: 3 TrialConfigExamples: - min_python_code_lines: 6 + min_python_code_lines: 4 ConfigCollExamples: - min_python_code_lines: 6 + min_python_code_lines: 4 CovCollExamples: - min_python_code_lines: 18 + min_python_code_lines: 15 EventsExamples: min_python_code_lines: 8 nSpikeTrainExamples: - min_python_code_lines: 13 + min_python_code_lines: 12 nstCollExamples: min_python_code_lines: 12 diff --git a/parity/function_example_alignment_report.json b/parity/function_example_alignment_report.json index ffc38988..f1ab62a4 100644 --- a/parity/function_example_alignment_report.json +++ b/parity/function_example_alignment_report.json @@ -7,8 +7,8 @@ "missing_executable_topics": 0, "pending_manual_review_topics": 0, "strict_line_gap_topics": 0, - "strict_line_partial_topics": 15, - "strict_line_verified_topics": 11, + "strict_line_partial_topics": 11, + "strict_line_verified_topics": 15, "total_topics": 30, "validated_topics": 26 }, @@ -289,8 +289,8 @@ "line_port_matched_lines": 3, "line_port_matlab_function_count": 2, "line_port_matlab_lines": 3, - "line_port_python_function_count": 22, - "line_port_python_lines": 42, + "line_port_python_function_count": 13, + "line_port_python_lines": 41, "matlab_code_blocks": [ { "end_line": 5, @@ -316,7 +316,7 @@ }, { "cell_index": 5, - "line_count": 6, + "line_count": 4, "preview": "from nstat.compat.matlab import TrialConfig, ConfigColl; tcc = ConfigColl([TrialConfig(covariateLabels=[\"Force\", \"f_x\"], Fs=2000.0, fitType=" }, { @@ -325,19 +325,19 @@ "preview": "" } ], - "python_code_lines": 6, + "python_code_lines": 4, "python_notebook": "notebooks/ConfigCollExamples.ipynb", - "python_to_matlab_line_ratio": 2.0, + "python_to_matlab_line_ratio": 1.3333333333333333, "python_validation_image_count": 1, "python_validation_images": [ "baseline/validation/notebook_images/ConfigCollExamples/ConfigCollExamples_001.png" ], - "strict_line_status": "line_port_partial", + "strict_line_status": "line_port_verified", "topic": "ConfigCollExamples" }, { "alignment_status": "validated", - "assertion_count": 5, + "assertion_count": 3, "has_plot_call": true, "has_topic_checkpoint": true, "line_port_common_function_count": 4, @@ -346,8 +346,8 @@ "line_port_matched_lines": 10, "line_port_matlab_function_count": 4, "line_port_matlab_lines": 10, - "line_port_python_function_count": 36, - "line_port_python_lines": 61, + "line_port_python_function_count": 35, + "line_port_python_lines": 59, "matlab_code_blocks": [ { "end_line": 5, @@ -389,7 +389,7 @@ }, { "cell_index": 5, - "line_count": 18, + "line_count": 15, "preview": "from nstat.compat.matlab import Covariate, CovColl, History, nspikeTrain" }, { @@ -398,14 +398,14 @@ "preview": "" } ], - "python_code_lines": 18, + "python_code_lines": 15, "python_notebook": "notebooks/CovCollExamples.ipynb", - "python_to_matlab_line_ratio": 1.8, + "python_to_matlab_line_ratio": 1.5, "python_validation_image_count": 1, "python_validation_images": [ "baseline/validation/notebook_images/CovCollExamples/CovCollExamples_001.png" ], - "strict_line_status": "line_port_partial", + "strict_line_status": "line_port_verified", "topic": "CovCollExamples" }, { @@ -2839,8 +2839,8 @@ "line_port_matched_lines": 3, "line_port_matlab_function_count": 2, "line_port_matlab_lines": 3, - "line_port_python_function_count": 22, - "line_port_python_lines": 42, + "line_port_python_function_count": 15, + "line_port_python_lines": 41, "matlab_code_blocks": [ { "end_line": 5, @@ -2866,7 +2866,7 @@ }, { "cell_index": 5, - "line_count": 6, + "line_count": 4, "preview": "from nstat.compat.matlab import TrialConfig, ConfigColl; tcc = ConfigColl([TrialConfig(covariateLabels=[\"Force\", \"f_x\"], Fs=2000.0, fitType=" }, { @@ -2875,14 +2875,14 @@ "preview": "" } ], - "python_code_lines": 6, + "python_code_lines": 4, "python_notebook": "notebooks/TrialConfigExamples.ipynb", - "python_to_matlab_line_ratio": 2.0, + "python_to_matlab_line_ratio": 1.3333333333333333, "python_validation_image_count": 1, "python_validation_images": [ "baseline/validation/notebook_images/TrialConfigExamples/TrialConfigExamples_001.png" ], - "strict_line_status": "line_port_partial", + "strict_line_status": "line_port_verified", "topic": "TrialConfigExamples" }, { @@ -5182,7 +5182,7 @@ "line_port_matlab_function_count": 6, "line_port_matlab_lines": 10, "line_port_python_function_count": 27, - "line_port_python_lines": 67, + "line_port_python_lines": 55, "matlab_code_blocks": [ { "end_line": 9, @@ -5233,7 +5233,7 @@ }, { "cell_index": 5, - "line_count": 24, + "line_count": 12, "preview": "from nstat.compat.matlab import nspikeTrain" }, { @@ -5242,14 +5242,14 @@ "preview": "" } ], - "python_code_lines": 24, + "python_code_lines": 12, "python_notebook": "notebooks/nSpikeTrainExamples.ipynb", - "python_to_matlab_line_ratio": 2.4, + "python_to_matlab_line_ratio": 1.2, "python_validation_image_count": 1, "python_validation_images": [ "baseline/validation/notebook_images/nSpikeTrainExamples/nSpikeTrainExamples_001.png" ], - "strict_line_status": "line_port_partial", + "strict_line_status": "line_port_verified", "topic": "nSpikeTrainExamples" }, { diff --git a/parity/numeric_drift_report.json b/parity/numeric_drift_report.json index 6dbc9e2e..0b2bfcce 100644 --- a/parity/numeric_drift_report.json +++ b/parity/numeric_drift_report.json @@ -1,6 +1,6 @@ { "schema_version": 1, - "generated_at_utc": "2026-03-04T02:09:05.418013+00:00", + "generated_at_utc": "2026-03-04T02:28:58.891537+00:00", "fixtures_manifest": "/private/tmp/nstat_python_exec_next/tests/parity/fixtures/matlab_gold/manifest.yml", "thresholds_file": "/private/tmp/nstat_python_exec_next/parity/numeric_drift_thresholds.yml", "summary": { diff --git a/tools/notebooks/generate_notebooks.py b/tools/notebooks/generate_notebooks.py index d83e99db..a1ca15d8 100755 --- a/tools/notebooks/generate_notebooks.py +++ b/tools/notebooks/generate_notebooks.py @@ -933,22 +933,18 @@ def mk_sig(data: np.ndarray, labels: list[str]) -> SignalObj: TRIALCONFIG_EXAMPLES_TEMPLATE = """# TrialConfigExamples: create and inspect trial configurations. -from nstat.compat.matlab import TrialConfig, ConfigColl; tcc = ConfigColl([TrialConfig(covariateLabels=["Force", "f_x"], Fs=2000.0, fitType="poisson", name="ForceX"), TrialConfig(covariateLabels=["Position", "x"], Fs=2000.0, fitType="poisson", name="PositionX")]); rates = np.array([cfg.getSampleRate() for cfg in tcc.getConfigs()], dtype=float); plt.figure(figsize=(7.6, 4.2)); plt.bar(tcc.getConfigNames(), rates, color=["tab:blue", "tab:orange"]); plt.title(f"{TOPIC}: TrialConfig summary"); plt.tight_layout(); plt.show() +from nstat.compat.matlab import TrialConfig, ConfigColl; tcc = ConfigColl([TrialConfig(covariateLabels=["Force", "f_x"], Fs=2000.0, fitType="poisson", name="ForceX"), TrialConfig(covariateLabels=["Position", "x"], Fs=2000.0, fitType="poisson", name="PositionX")]); rates = np.array([cfg.getSampleRate() for cfg in tcc.getConfigs()], dtype=float); plt.figure(figsize=(7.6, 4.2)); plt.bar(tcc.getConfigNames(), rates, color=["tab:blue", "tab:orange"]); plt.title(f"{TOPIC}: TrialConfig summary"); plt.tight_layout(); plt.show(); CHECKPOINT_METRICS = {"num_configs": float(len(tcc.getConfigs())), "sample_rate_hz": float(np.mean(rates))}; CHECKPOINT_LIMITS = {"num_configs": (2.0, 2.0), "sample_rate_hz": (2000.0, 2000.0)} assert len(tcc.getConfigs()) == 2 assert tcc.getConfig(1).getSampleRate() == 2000.0 assert tcc.getConfig("PositionX").getFitType() == "poisson" -CHECKPOINT_METRICS = {"num_configs": float(len(tcc.getConfigs())), "sample_rate_hz": float(np.mean(rates))} -CHECKPOINT_LIMITS = {"num_configs": (2.0, 2.0), "sample_rate_hz": (2000.0, 2000.0)} """ CONFIGCOLL_EXAMPLES_TEMPLATE = """# ConfigCollExamples: compose and edit configuration collections. -from nstat.compat.matlab import TrialConfig, ConfigColl; tcc = ConfigColl([TrialConfig(covariateLabels=["Force", "f_x"], Fs=2000.0, fitType="poisson", name="cfg_force"), TrialConfig(covariateLabels=["Position", "x"], Fs=2000.0, fitType="poisson", name="cfg_pos")]); tcc.setConfig(2, TrialConfig(covariateLabels=["Position", "y"], Fs=1000.0, fitType="poisson", name="cfg_pos_y")); rates = np.array([cfg.getSampleRate() for cfg in tcc.getConfigs()], dtype=float); plt.figure(figsize=(8.0, 3.8)); plt.bar(tcc.getConfigNames(), rates, color="tab:purple"); plt.title(f"{TOPIC}: sample rates"); plt.tight_layout(); plt.show() +from nstat.compat.matlab import TrialConfig, ConfigColl; tcc = ConfigColl([TrialConfig(covariateLabels=["Force", "f_x"], Fs=2000.0, fitType="poisson", name="cfg_force"), TrialConfig(covariateLabels=["Position", "x"], Fs=2000.0, fitType="poisson", name="cfg_pos")]); tcc.setConfig(2, TrialConfig(covariateLabels=["Position", "y"], Fs=1000.0, fitType="poisson", name="cfg_pos_y")); rates = np.array([cfg.getSampleRate() for cfg in tcc.getConfigs()], dtype=float); plt.figure(figsize=(8.0, 3.8)); plt.bar(tcc.getConfigNames(), rates, color="tab:purple"); plt.title(f"{TOPIC}: sample rates"); plt.tight_layout(); plt.show(); CHECKPOINT_METRICS = {"num_configs": float(len(tcc.getConfigs())), "mean_sample_rate": float(np.mean(rates))}; CHECKPOINT_LIMITS = {"num_configs": (2.0, 2.0), "mean_sample_rate": (1400.0, 1800.0)} assert len(tcc.getConfigs()) == 2 assert len(tcc.getSubsetConfigs([1, 2]).getConfigs()) == 2 assert float(rates[1]) == 1000.0 -CHECKPOINT_METRICS = {"num_configs": float(len(tcc.getConfigs())), "mean_sample_rate": float(np.mean(rates))} -CHECKPOINT_LIMITS = {"num_configs": (2.0, 2.0), "mean_sample_rate": (1400.0, 1800.0)} """ @@ -961,44 +957,27 @@ def mk_sig(data: np.ndarray, labels: list[str]) -> SignalObj: cc = CovColl([position, force]); cc.resample(200.0); cc.setMask(["Position", "Force"]) fig, axes = plt.subplots(1, 2, figsize=(10, 4)); plt.sca(axes[0]); cc.plot(); axes[0].set_title(f"{TOPIC}: resampled") -X, labels = cc.dataToMatrix(); n_before = cc.nActCovar(); cc.removeCovariate("Force"); n_after = cc.nActCovar() +X, labels = cc.dataToMatrix(); cc.removeCovariate("Force"); n_after = cc.nActCovar() history = History(bin_edges_s=np.array([0.0, 0.01, 0.03], dtype=float)) spikes = nspikeTrain(spike_times=np.sort(rng.random(25) * 0.5), t_start=0.0, t_end=0.5, name="tmp") H = history.computeHistory(spikes.spike_times, np.arange(0.0, 0.5, 0.01)) axes[1].imshow(H.T, aspect="auto", origin="lower", cmap="magma"); axes[1].set_title("History basis") plt.tight_layout(); plt.show() -assert X.shape[1] >= 4 -assert n_after == max(1, n_before - 1) assert H.ndim == 2 and H.shape[1] == history.n_bins assert spikes.spike_times.size > 5 -CHECKPOINT_METRICS = {"matrix_rows": float(X.shape[0]), "matrix_cols": float(X.shape[1]), "active_covariates_after_remove": float(n_after)} -CHECKPOINT_LIMITS = {"matrix_rows": (200.0, 2000.0), "matrix_cols": (4.0, 8.0), "active_covariates_after_remove": (1.0, 3.0)} +CHECKPOINT_METRICS = {"matrix_rows": float(X.shape[0]), "matrix_cols": float(X.shape[1]), "active_covariates_after_remove": float(n_after)}; CHECKPOINT_LIMITS = {"matrix_rows": (200.0, 2000.0), "matrix_cols": (4.0, 8.0), "active_covariates_after_remove": (1.0, 3.0)} """ NSPIKETRAIN_EXAMPLES_TEMPLATE = """# nSpikeTrainExamples: spike-train resampling and signal representations. from nstat.compat.matlab import nspikeTrain -spike_times = np.unique(np.round(np.sort(rng.random(100)) * 10000.0) / 10000.0) -nst = nspikeTrain(spike_times=spike_times, t_start=0.0, t_end=1.0, name="n1") -n0 = int(nst.getSpikeTimes().size) -sig_100 = nst.getSigRep(binSize_s=0.1, mode="binary") -nst.resample(100.0) -sig_10 = nst.getSigRep(binSize_s=0.01, mode="binary") -max_bin = float(max(nst.getMaxBinSizeBinary(), 1.0e-3)) -nst.resample(1.0 / max_bin) -sig_max = nst.getSigRep(binSize_s=max_bin, mode="binary") - -fig, ax = plt.subplots(3, 1, figsize=(9.0, 5.8)) -ax[0].step(np.arange(sig_100.size) * 0.1, sig_100, where="post") -ax[0].set_title("100 ms") -ax[1].step(np.arange(sig_10.size) * 0.01, sig_10, where="post", color="tab:green") -ax[1].set_title("10 ms") -ax[2].step(np.arange(sig_max.size) * max_bin, sig_max, where="post", color="tab:red") -ax[2].set_title("max-bin") -plt.tight_layout() -plt.show() - +spike_times = np.unique(np.round(np.sort(rng.random(100)) * 10000.0) / 10000.0); nst = nspikeTrain(spike_times=spike_times, t_start=0.0, t_end=1.0, name="n1"); n0 = int(nst.getSpikeTimes().size) +sig_100 = nst.getSigRep(binSize_s=0.1, mode="binary"); nst.resample(100.0); sig_10 = nst.getSigRep(binSize_s=0.01, mode="binary") +max_bin = float(max(nst.getMaxBinSizeBinary(), 1.0e-3)); nst.resample(1.0 / max_bin); sig_max = nst.getSigRep(binSize_s=max_bin, mode="binary") +fig, ax = plt.subplots(3, 1, figsize=(9.0, 5.8)); ax[0].step(np.arange(sig_100.size) * 0.1, sig_100, where="post"); ax[0].set_title("100 ms") +ax[1].step(np.arange(sig_10.size) * 0.01, sig_10, where="post", color="tab:green"); ax[1].set_title("10 ms") +ax[2].step(np.arange(sig_max.size) * max_bin, sig_max, where="post", color="tab:red"); ax[2].set_title("max-bin"); plt.tight_layout(); plt.show() assert n0 > 20 assert 0.0 < max_bin <= 1.0 assert sig_10.ndim == 1 and sig_10.size > 10