Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions .github/workflows/notebook-full-fidelity.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: notebook-full-fidelity

on:
pull_request:
paths:
- "notebooks/**"
- "tools/notebooks/**"
- "nstat/notebook_*.py"
- "parity/notebook_fidelity.yml"
- "parity/report.md"
schedule:
- cron: "15 7 * * 6"
workflow_dispatch:

jobs:
helpfile-full:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
python -m pip install -e .[dev]
python -m pip install ipykernel
python -m ipykernel install --user --name python3 --display-name "Python 3"
- name: Execute mapped MATLAB helpfile notebooks
run: python tools/notebooks/run_notebooks.py --group helpfile_full --timeout 1200
6 changes: 3 additions & 3 deletions notebooks/AnalysisExamples.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@
"cells": [
{
"cell_type": "markdown",
"id": "db89e36d",
"id": "0f7ae1f5",
"metadata": {},
"source": [
"<!-- parity-note -->\n",
"## MATLAB Parity Note\n",
"- Source MATLAB helpfile: `AnalysisExamples.mlx`\n",
"- Fidelity status: `high_fidelity`\n",
"- Remaining justified differences: Advanced MATLAB algorithm-selection branches and some report plots are still lighter in Python."
"- Fidelity status: `partial`\n",
"- Remaining justified differences: Advanced MATLAB algorithm-selection branches and report plots remain lighter in Python, and the notebook still contains tracker-only visualization sections rather than a fully executable MATLAB-equivalent workflow."
]
},
{
Expand Down
6 changes: 3 additions & 3 deletions notebooks/DecodingExample.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@
"cells": [
{
"cell_type": "markdown",
"id": "72ddd907",
"id": "e78ea1c1",
"metadata": {},
"source": [
"<!-- parity-note -->\n",
"## MATLAB Parity Note\n",
"- Source MATLAB helpfile: `DecodingExample.mlx`\n",
"- Fidelity status: `high_fidelity`\n",
"- Remaining justified differences: Workflow, model fitting, and decoded-stimulus figures now follow the MATLAB helpfile closely; exact traces still depend on stochastic simulation draws and Python plotting defaults.\n"
"- Remaining justified differences: Workflow, model fitting, and decoded-stimulus figures now follow the MATLAB helpfile closely; exact traces still depend on stochastic simulation draws and Python plotting defaults."
]
},
{
Expand Down Expand Up @@ -215,4 +215,4 @@
},
"nbformat": 4,
"nbformat_minor": 5
}
}
6 changes: 3 additions & 3 deletions notebooks/DecodingExampleWithHist.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@
"cells": [
{
"cell_type": "markdown",
"id": "f624a68c",
"id": "04553c3e",
"metadata": {},
"source": [
"<!-- parity-note -->\n",
"## MATLAB Parity Note\n",
"- Source MATLAB helpfile: `DecodingExampleWithHist.mlx`\n",
"- Fidelity status: `high_fidelity`\n",
"- Remaining justified differences: The notebook now mirrors the MATLAB history-aware decoding workflow closely; exact stochastic trajectories and figure styling still vary slightly under Python execution.\n"
"- Remaining justified differences: The notebook now mirrors the MATLAB history-aware decoding workflow closely; exact stochastic trajectories and figure styling still vary slightly under Python execution."
]
},
{
Expand Down Expand Up @@ -174,4 +174,4 @@
},
"nbformat": 4,
"nbformat_minor": 5
}
}
22 changes: 11 additions & 11 deletions notebooks/ExplicitStimulusWhiskerData.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,20 @@
"cells": [
{
"cell_type": "markdown",
"id": "d90d2497",
"id": "1978cb81",
"metadata": {},
"source": [
"<!-- parity-note -->\n",
"## MATLAB Parity Note\n",
"- Source MATLAB helpfile: `ExplicitStimulusWhiskerData.mlx`\n",
"- Fidelity status: `high_fidelity`\n",
"- Remaining justified differences: The notebook now reproduces the dataset-backed lag search, stimulus-effect, and history-effect workflow with real figures; exact KS traces and coefficient values still vary modestly from MATLAB because the Python GLM backend and plotting defaults are different.\n"
"- Remaining justified differences: The notebook now reproduces the dataset-backed lag search, stimulus-effect, and history-effect workflow with real figures; exact KS traces and coefficient values still vary modestly from MATLAB because the Python GLM backend and plotting defaults are different."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "116b9deb",
"id": "9787cf60",
"metadata": {},
"outputs": [],
"source": [
Expand Down Expand Up @@ -83,7 +83,7 @@
{
"cell_type": "code",
"execution_count": null,
"id": "30d8a376",
"id": "a60a7a6d",
"metadata": {},
"outputs": [],
"source": [
Expand All @@ -106,7 +106,7 @@
{
"cell_type": "code",
"execution_count": null,
"id": "72f337ee",
"id": "862db342",
"metadata": {},
"outputs": [],
"source": [
Expand Down Expand Up @@ -134,7 +134,7 @@
{
"cell_type": "code",
"execution_count": null,
"id": "4b14768a",
"id": "98d686d5",
"metadata": {},
"outputs": [],
"source": [
Expand All @@ -149,7 +149,7 @@
{
"cell_type": "code",
"execution_count": null,
"id": "c3e25d63",
"id": "2b5d9da0",
"metadata": {},
"outputs": [],
"source": [
Expand All @@ -170,7 +170,7 @@
{
"cell_type": "code",
"execution_count": null,
"id": "d1a12c7a",
"id": "4a033d5c",
"metadata": {},
"outputs": [],
"source": [
Expand Down Expand Up @@ -198,7 +198,7 @@
{
"cell_type": "code",
"execution_count": null,
"id": "ebff91c2",
"id": "0a73d5e1",
"metadata": {},
"outputs": [],
"source": [
Expand Down Expand Up @@ -230,7 +230,7 @@
{
"cell_type": "code",
"execution_count": null,
"id": "368647ec",
"id": "5aa18805",
"metadata": {},
"outputs": [],
"source": [
Expand Down Expand Up @@ -290,4 +290,4 @@
},
"nbformat": 4,
"nbformat_minor": 5
}
}
18 changes: 9 additions & 9 deletions notebooks/HippocampalPlaceCellExample.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,20 @@
"cells": [
{
"cell_type": "markdown",
"id": "0ec92178",
"id": "e0aeece6",
"metadata": {},
"source": [
"<!-- parity-note -->\n",
"## MATLAB Parity Note\n",
"- Source MATLAB helpfile: `HippocampalPlaceCellExample.mlx`\n",
"- Fidelity status: `high_fidelity`\n",
"- Remaining justified differences: The notebook now reproduces the dataset-backed place-cell model-comparison and field-visualization workflow with real figures; the Python port still uses an approximate Zernike-like basis rather than the original MATLAB toolbox implementation.\n"
"- Remaining justified differences: The notebook now reproduces the dataset-backed place-cell model-comparison and field-visualization workflow with real figures; the Python port still uses an approximate Zernike-like basis rather than the original MATLAB toolbox implementation."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "ad01cf3d",
"id": "cadf7961",
"metadata": {},
"outputs": [],
"source": [
Expand Down Expand Up @@ -85,7 +85,7 @@
{
"cell_type": "code",
"execution_count": null,
"id": "5354bf29",
"id": "8c9b854e",
"metadata": {},
"outputs": [],
"source": [
Expand All @@ -105,7 +105,7 @@
{
"cell_type": "code",
"execution_count": null,
"id": "24af9e4c",
"id": "bca6b3c3",
"metadata": {},
"outputs": [],
"source": [
Expand All @@ -125,7 +125,7 @@
{
"cell_type": "code",
"execution_count": null,
"id": "bff7c68f",
"id": "7ad76d69",
"metadata": {},
"outputs": [],
"source": [
Expand All @@ -152,7 +152,7 @@
{
"cell_type": "code",
"execution_count": null,
"id": "03f1d8f7",
"id": "516eb14e",
"metadata": {},
"outputs": [],
"source": [
Expand All @@ -179,7 +179,7 @@
{
"cell_type": "code",
"execution_count": null,
"id": "a190b5ab",
"id": "711a2d08",
"metadata": {},
"outputs": [],
"source": [
Expand Down Expand Up @@ -270,4 +270,4 @@
},
"nbformat": 4,
"nbformat_minor": 5
}
}
29 changes: 13 additions & 16 deletions notebooks/HybridFilterExample.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,20 @@
"cells": [
{
"cell_type": "markdown",
"id": "dcd3b4c5",
"id": "deae92f2",
"metadata": {},
"source": [
"<!-- parity-note -->\n",
"## MATLAB Parity Note\n",
"- Source MATLAB helpfile: `HybridFilterExample.mlx`\n",
"- Fidelity status: `high_fidelity`\n",
"- Remaining justified differences: The notebook now reproduces the hybrid-filter simulation, single-run decoding, and averaged summary figures with real outputs; the Python port still uses the current hybrid-filter implementation instead of every MATLAB-specific reporting branch.\n"
"- Remaining justified differences: The notebook now reproduces the hybrid-filter simulation, single-run decoding, and averaged summary figures with real outputs; the Python port still uses the current hybrid-filter implementation instead of every MATLAB-specific reporting branch."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "e71ac4b2",
"id": "ad07c855",
"metadata": {},
"outputs": [],
"source": [
Expand Down Expand Up @@ -63,7 +63,7 @@
{
"cell_type": "code",
"execution_count": null,
"id": "3990bad9",
"id": "8ad6c4c4",
"metadata": {},
"outputs": [],
"source": [
Expand All @@ -87,31 +87,29 @@
{
"cell_type": "code",
"execution_count": null,
"id": "f7752054",
"id": "d3676bdb",
"metadata": {},
"outputs": [],
"source": [
"# SECTION 1: Problem Statement\n",
"# We infer both a discrete movement state and a continuous reach trajectory from point-process observations.\n",
"pass\n"
"# We infer both a discrete movement state and a continuous reach trajectory from point-process observations.\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "b271b968",
"id": "c0ac4ff8",
"metadata": {},
"outputs": [],
"source": [
"# SECTION 2: Hybrid state-space setup\n",
"# The Python port keeps the same two-state problem structure as MATLAB: a low-motion state and a movement state.\n",
"pass\n"
"# The Python port keeps the same two-state problem structure as MATLAB: a low-motion state and a movement state.\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "e4d6c294",
"id": "20954cd6",
"metadata": {},
"outputs": [],
"source": [
Expand Down Expand Up @@ -163,19 +161,18 @@
{
"cell_type": "code",
"execution_count": null,
"id": "ffd10a0a",
"id": "e59c36e8",
"metadata": {},
"outputs": [],
"source": [
"# SECTION 4: Simulate Neural Firing\n",
"# The simulated spike population depends on the latent state and the movement dynamics.\n",
"pass\n"
"# The simulated spike population depends on the latent state and the movement dynamics.\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "db1960aa",
"id": "1da0a680",
"metadata": {},
"outputs": [],
"source": [
Expand Down Expand Up @@ -251,4 +248,4 @@
},
"nbformat": 4,
"nbformat_minor": 5
}
}
Loading