{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "3886c27c",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-19T09:16:11.165940Z",
     "iopub.status.busy": "2026-06-19T09:16:11.165788Z",
     "iopub.status.idle": "2026-06-19T09:16:15.791902Z",
     "shell.execute_reply": "2026-06-19T09:16:15.791108Z"
    },
    "tags": [
     "remove-cell"
    ]
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "An NVIDIA GPU may be present on this machine, but a CUDA-enabled jaxlib is not installed. Falling back to cpu.\n"
     ]
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "import numpy as np\n",
    "import jax\n",
    "import jax.numpy as jnp\n",
    "import matplotlib.pyplot as plt\n",
    "import brainmass\n",
    "import brainstate\n",
    "import braintools\n",
    "import brainunit as u\n",
    "from brainstate.nn import Param\n",
    "brainstate.random.seed(0)\n",
    "brainstate.environ.set(dt=0.1 * u.ms)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "67bc553a",
   "metadata": {},
   "source": [
    "# Building a Data-Driven Workflow\n",
    "\n",
    "This is the **extension playbook** for data-driven modeling in `brainmass`:\n",
    "the stable contract you build a custom, *fittable* model against. Every piece\n",
    "below is a public API the rest of the ecosystem -- and future tooling like the\n",
    "deferred `Trainer` (see the final section) -- composes with.\n",
    "\n",
    "We will go end to end:\n",
    "\n",
    "1. **Expose trainable parameters** on a custom model with `Param(value, fit=True)`.\n",
    "2. **Write a loss** as a small `objectives`-style `callable(prediction, target)`.\n",
    "3. **Fit it** two ways: with the high-level `brainmass.Fitter`, and with a\n",
    "   hand-written training loop over `braintools.optim` + `brainstate.transform.grad`.\n",
    "4. **Batch the search** with `vmap`.\n",
    "\n",
    "The data-driven layer is the center of gravity of `brainmass` (see\n",
    "{doc}`/data_driven/index`). Read {doc}`creating_models` first for the model\n",
    "contract itself; this guide is about making a model *learnable*."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b673ff01",
   "metadata": {},
   "source": [
    "## 1. A model with trainable parameters\n",
    "\n",
    "A trainable parameter is just a `brainstate.nn.Param` with `fit=True`. That wraps\n",
    "the value in a `ParamState` (a leaf the optimizers see); a plain float or\n",
    "`Param.init(float)` stays a non-trainable `Const`. The model is otherwise an\n",
    "ordinary `brainstate.nn.Dynamics` (see {doc}`creating_models`).\n",
    "\n",
    "Two rules make a parameter *gradient-friendly* (learned the hard way across the\n",
    "fitting tutorials):\n",
    "\n",
    "- **Make the trainable dimensionless.** A `mV`-valued `Param` crashes the\n",
    "  best-parameter snapshot inside `Fitter` (`jnp.asarray` refuses a unit-carrying\n",
    "  value). Keep the knob a plain scalar; let units live on the *states*.\n",
    "- **Fit a scalar summary, not a raw oscillatory trace.** Point-by-point time-series\n",
    "  RMSE of a limit cycle is phase-degenerate and the gradient collapses. A steady\n",
    "  state, an amplitude, an FC value, or a spectral peak is well-conditioned.\n",
    "\n",
    "Here is a one-population leaky-rate model whose input gain `g` is trainable:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "60ab8406",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-19T09:16:15.794784Z",
     "iopub.status.busy": "2026-06-19T09:16:15.794293Z",
     "iopub.status.idle": "2026-06-19T09:16:15.835171Z",
     "shell.execute_reply": "2026-06-19T09:16:15.834537Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[('g', 'val')]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "class GainPopulation(brainstate.nn.Dynamics):\n",
    "    \"\"\"Leaky firing-rate population with a trainable input gain ``g``.\n",
    "\n",
    "    dr/dt = (-r + g * tanh(input)) / tau\n",
    "    \"\"\"\n",
    "\n",
    "    def __init__(self, in_size, g=1.0, tau=10. * u.ms):\n",
    "        super().__init__(in_size)\n",
    "        self.tau = tau\n",
    "        # fit=True -> a trainable ParamState; a dimensionless scalar knob.\n",
    "        self.g = Param(g, fit=True)\n",
    "\n",
    "    def init_state(self, batch_size=None):\n",
    "        self.r = brainstate.HiddenState(\n",
    "            braintools.init.param(braintools.init.Constant(0.0),\n",
    "                                  self.varshape, batch_size)\n",
    "        )\n",
    "\n",
    "    def update(self, inp=0.0):\n",
    "        r = self.r.value\n",
    "        dr = (-r + self.g.value() * jnp.tanh(inp)) / self.tau\n",
    "        self.r.value = r + dr * brainstate.environ.get_dt()\n",
    "        return self.r.value\n",
    "\n",
    "\n",
    "model = GainPopulation(1, g=0.5)\n",
    "brainstate.nn.init_all_states(model)\n",
    "# The trainable leaves the optimizers will see:\n",
    "list(model.states(brainstate.ParamState).keys())"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4f8327e9",
   "metadata": {},
   "source": [
    "`states(ParamState)` returns the trainable leaves keyed by **tuple** paths\n",
    "(`('g', 'val')`). Keep this in mind: a raw `brainstate.transform.grad` returns\n",
    "gradients keyed by exactly these tuples, whereas `FitResult.best_params` uses the\n",
    "**dotted** form (`'g'`, or `'node.g'` for a nested model). Same parameter, two\n",
    "key conventions."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "68a93f3a",
   "metadata": {},
   "source": [
    "## 2. A loss as a composable objective\n",
    "\n",
    "An objective is a *builder* that returns a small `callable(prediction, target) ->\n",
    "scalar`, jit/grad/vmap-safe and unit-aware. This is exactly the shape of the\n",
    "built-ins in `brainmass.objectives`, so a custom loss drops into the same slots.\n",
    "The convention: strip units with `brainunit.get_magnitude` only where the metric\n",
    "is scale-invariant; keep them on a difference you want unit-checked. See\n",
    "{doc}`creating_an_objective` for the full contract.\n",
    "\n",
    "Here the target behaviour is a *steady-state mean rate*, a clean scalar summary:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "20ce6d54",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-19T09:16:15.837133Z",
     "iopub.status.busy": "2026-06-19T09:16:15.836899Z",
     "iopub.status.idle": "2026-06-19T09:16:15.961776Z",
     "shell.execute_reply": "2026-06-19T09:16:15.961200Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.5184532403945923"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def steadystate_loss(n_tail=50):\n",
    "    \"\"\"Squared error between the settled mean rate and a scalar target.\"\"\"\n",
    "    def loss(prediction, target):\n",
    "        amp = jnp.mean(u.get_magnitude(prediction[-n_tail:]))\n",
    "        return (amp - target) ** 2\n",
    "    return loss\n",
    "\n",
    "\n",
    "def predict(m):\n",
    "    \"\"\"Run the model and return its rate trajectory (the prediction).\"\"\"\n",
    "    sim = brainmass.Simulator(m, dt=0.1 * u.ms)\n",
    "    res = sim.run(60. * u.ms, inputs=lambda i, t: 1.0, monitors=['r'])\n",
    "    return res['r']\n",
    "\n",
    "\n",
    "# Ground truth: the trajectory of the model at g* = 2.0.\n",
    "truth = GainPopulation(1, g=2.0)\n",
    "target_amp = jnp.mean(u.get_magnitude(predict(truth)[-50:]))\n",
    "float(target_amp)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8f06923f",
   "metadata": {},
   "source": [
    "## 3a. Fit with `brainmass.Fitter`\n",
    "\n",
    "`Fitter` is the one-call path. You hand it the model, an optimizer, and either a\n",
    "`loss_fn(model) -> (scalar, aux)` *or* an `objective` + `predict` pair (as here).\n",
    "It registers the trainable weights, builds the jitted gradient step, tracks the\n",
    "best-seen point, and returns a `FitResult`. The `'grad'` backend reproduces the\n",
    "canonical hand-rolled loop exactly -- which we verify next."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "2414c961",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-19T09:16:15.963838Z",
     "iopub.status.busy": "2026-06-19T09:16:15.963646Z",
     "iopub.status.idle": "2026-06-19T09:16:16.122014Z",
     "shell.execute_reply": "2026-06-19T09:16:16.121234Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "FitResult(backend='grad', best_loss=1.66887e-05, n_steps=60, params=[g])\n",
      "recovered g = {'g': 1.9878}\n",
      "best loss   = 1.6688674804754555e-05\n"
     ]
    }
   ],
   "source": [
    "model = GainPopulation(1, g=0.5)\n",
    "fitter = brainmass.Fitter(\n",
    "    model,\n",
    "    braintools.optim.Adam(lr=0.1),\n",
    "    objective=steadystate_loss(),\n",
    "    predict=predict,\n",
    ")\n",
    "result = fitter.fit(target=target_amp, n_steps=60)\n",
    "print(result)\n",
    "print('recovered g =', {k: round(float(v), 4) for k, v in result.best_params.items()})\n",
    "print('best loss   =', float(result.best_loss))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "6a54d4c5",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-19T09:16:16.123884Z",
     "iopub.status.busy": "2026-06-19T09:16:16.123637Z",
     "iopub.status.idle": "2026-06-19T09:16:16.527445Z",
     "shell.execute_reply": "2026-06-19T09:16:16.526528Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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jnEaV0r0mDfmup/hdJi35lOiv7w12wAl+kvJvUUnIuL+639ERERERETkjfg3eURERERERBrCQx4REREREZGG8JBHRERERESkITzkERERERERaQgPeURERERERBrCQx4REREREZGG8JBHRERERESkITzkERERERERaQgPeURERERERBrCQx6RxmVkZOCFF17w9DKIiIgUx44jGhoPeURERERERBrCQx6RRhw8eBDR0dHw9/dHcHAwkpKSkJ2djX379uHIkSPQ6XTQ6XSw2WwAgOvXr+PFF1+EyWRCUFAQUlNTce3aNefjDfx29J133kFoaCiMRiMyMzPR09PjmYBERPSfxY4jco/e0wsgopFrbm5GWloaPvjgAyxZsgSdnZ0oLS3Fyy+/jKamJnR0dCAvLw8AEBQUhN7eXiQnJ8NqtaK0tBR6vR7vv/8+Fi1ahJqaGhgMBgBAcXExxo8fD5vNhmvXrmHlypUIDg7Gtm3bPBmXiIj+Q9hxRO7jIY9IA5qbm9HX14elS5fCYrEAAKKjowEA/v7+6O7uhtlsds7fv38/HA4Hdu/eDZ1OBwDIy8uDyWSCzWbDwoULAQAGgwF79uxBQEAAZs+ejXfffRfZ2dl477334OPDNwIQEdHoY8cRuY/PYCINiImJQWJiIqKjo7Fs2TLs2rULf/zxx33nnz9/HpcvX8ZDDz2EwMBABAYGIigoCH///TeuXLni8rgBAQHOz61WK7q6unD9+vVRzUNERDSAHUfkPr6SR6QB48aNQ1FREX788UecPHkSO3fuxObNm2G324ec39XVhdjYWBw4cOCesdDQ0NFeLhER0QNjxxG5j4c8Io3Q6XRISEhAQkIC3n77bVgsFhQUFMBgMKC/v99l7vz58/HVV18hLCwMRqPxvo95/vx53L17F/7+/gCA8vJyBAYGYsqUKaOahYiI6N/YcUTu4ds1iTTAbrdj+/btqKioQFNTEw4dOoRbt25h5syZmDp1KmpqatDQ0IDbt2+jt7cX6enpCAkJQWpqKkpLS9HY2AibzYa1a9fit99+cz5uT08PVq1ahfr6ehQWFmLLli1Ys2YN/1aBiIjGDDuOyH18JY9IA4xGI86cOYNPPvkEHR0dsFgs+Oijj5CSkoK4uDjYbDbExcWhq6sLp0+fxrPPPoszZ85g48aNWLp0KTo7OzF58mQkJia6/NYzMTERUVFRePrpp9Hd3Y20tDRs3brVc0GJiOg/hx1H5D6diIinF0FE3icjIwPt7e04fPiwp5dCRESkKHYcaR1fjyYiIiIiItIQHvKIiIiIiIg0hG/XJCIiIiIi0hC+kkdERERERKQhPOQRERERERFpCA95REREREREGsJDHhERERERkYbwkEdERERERKQhPOQRERERERFpCA95REREREREGsJDHhERERERkYb8D80OlGepuMWSAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 900x320 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots(1, 2, figsize=(9, 3.2))\n",
    "ax[0].plot(result.history)\n",
    "ax[0].set(xlabel='step', ylabel='loss', title='Fitter (grad) convergence')\n",
    "ax[0].set_yscale('log')\n",
    "ax[1].axhline(float(target_amp), ls='--', c='k', label='target')\n",
    "ax[1].plot(u.get_magnitude(predict(model)), label='fitted model')\n",
    "ax[1].set(xlabel='step', ylabel='rate', title='settled rate matches target')\n",
    "ax[1].legend()\n",
    "fig.tight_layout()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0253aa10",
   "metadata": {},
   "source": [
    "## 3b. The same fit, hand-written\n",
    "\n",
    "`Fitter`'s `'grad'` backend *is* this loop. Writing it out is worth doing once,\n",
    "because the moment you need something `Fitter` does not expose -- minibatches, an\n",
    "epoch loop, a held-out metric -- you drop down to exactly this and add your own\n",
    "control flow. The five lines that matter:\n",
    "\n",
    "1. `weights = model.states(brainstate.ParamState)` -- the trainable leaves.\n",
    "2. `optimizer.register_trainable_weights(weights)`.\n",
    "3. a loss closure run inside `model.param_precompute()` (applies transforms /\n",
    "   precompute), adding `model.reg_loss()`.\n",
    "4. `brainstate.transform.grad(loss, weights, return_value=True)`.\n",
    "5. `optimizer.step(grads)` -- all wrapped in `brainstate.transform.jit`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "5bb2f2df",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-19T09:16:16.530100Z",
     "iopub.status.busy": "2026-06-19T09:16:16.529820Z",
     "iopub.status.idle": "2026-06-19T09:16:17.020550Z",
     "shell.execute_reply": "2026-06-19T09:16:17.019845Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "hand-rolled g = 1.9546\n",
      "final loss    = 0.0016139140352606773\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "raw grad keys = [('g', 'val')]\n"
     ]
    }
   ],
   "source": [
    "model2 = GainPopulation(1, g=0.5)\n",
    "weights = model2.states(brainstate.ParamState)\n",
    "optimizer = braintools.optim.Adam(lr=0.1)\n",
    "optimizer.register_trainable_weights(weights)\n",
    "\n",
    "def loss_closure():\n",
    "    with model2.param_precompute():\n",
    "        loss = steadystate_loss()(predict(model2), target_amp)\n",
    "        return loss + model2.reg_loss()\n",
    "\n",
    "@brainstate.transform.jit\n",
    "def train_step():\n",
    "    grad_fn = brainstate.transform.grad(loss_closure, weights, return_value=True)\n",
    "    grads, loss = grad_fn()\n",
    "    optimizer.step(grads)\n",
    "    return loss\n",
    "\n",
    "history = [float(train_step()) for _ in range(60)]\n",
    "print('hand-rolled g =', round(float(model2.g.value()), 4))\n",
    "print('final loss    =', history[-1])\n",
    "# Same key gotcha: a standalone grad is keyed by the ParamState tuple, not 'g'.\n",
    "grad_fn = brainstate.transform.grad(loss_closure, weights, return_value=True)\n",
    "grads, _ = grad_fn()\n",
    "print('raw grad keys =', list(grads.keys()))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d849d4d4",
   "metadata": {},
   "source": [
    "Both paths converge to the same `g ~ 2.0`. The hand-rolled loop is the template a\n",
    "task-shaped trainer extends -- see the final section, *Where this is going*."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9a6aa1fc",
   "metadata": {},
   "source": [
    "## 4. Batch the search with `vmap`\n",
    "\n",
    "To evaluate the loss across many parameter values at once, `vmap` **over\n",
    "parameters** -- build a fresh model inside the mapped function and map over the\n",
    "scalar. This is the supported batching axis. (Batching *states* through\n",
    "`init_all_states(batch_size=...)` is the right tool for an ensemble of one model,\n",
    "but a delay-coupled network's prefetch does not vectorise that way -- vmap over\n",
    "parameters instead.)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "8fc9d0ac",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-19T09:16:17.022266Z",
     "iopub.status.busy": "2026-06-19T09:16:17.022080Z",
     "iopub.status.idle": "2026-06-19T09:16:17.477683Z",
     "shell.execute_reply": "2026-06-19T09:16:17.476971Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "vmap grid minimum at g = 2.0\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 500x300 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def loss_at(g_value):\n",
    "    m = GainPopulation(1, g=g_value)\n",
    "    return steadystate_loss()(predict(m), target_amp)\n",
    "\n",
    "grid = jnp.linspace(0.5, 3.5, 25)\n",
    "losses = jax.vmap(loss_at)(grid)        # all 25 evaluated in one compiled call\n",
    "best = grid[jnp.argmin(losses)]\n",
    "print('vmap grid minimum at g =', round(float(best), 3))\n",
    "\n",
    "plt.figure(figsize=(5, 3))\n",
    "plt.plot(grid, losses)\n",
    "plt.axvline(2.0, ls='--', c='k', label='true g')\n",
    "plt.xlabel('g'); plt.ylabel('loss'); plt.title('vmapped loss landscape')\n",
    "plt.legend(); plt.tight_layout()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "72cf0580",
   "metadata": {},
   "source": [
    "## Where this is going\n",
    "\n",
    "Everything above is the stable, public contract:\n",
    "\n",
    "| Piece | API |\n",
    "| --- | --- |\n",
    "| trainable parameter | `Param(value, fit=True)` |\n",
    "| loss | `objectives`-style `callable(prediction, target)` |\n",
    "| one-call fit | `brainmass.Fitter(...).fit(target=...)` |\n",
    "| custom loop | `states(ParamState)` -> `register_trainable_weights` -> `grad` -> `step` |\n",
    "| batched search | `jax.vmap` over parameters |\n",
    "\n",
    "**`Fitter` fits one fixed target** -- a single `predict(model) -> prediction`\n",
    "compared against one `target`. Task training (minibatched `(inputs, targets)`, an\n",
    "epoch loop, a held-out metric) is *not* something `Fitter` exposes; you reach for\n",
    "the hand-written loop in section 3b and add the batching yourself.\n",
    "\n",
    "That gap is named and given a home -- but deliberately **not built yet** -- as the\n",
    "deferred **`Trainer`** in the {doc}`/data_driven/roadmap`. A future goal will build\n",
    "the `Trainer` (and model-discovery tooling) *against this exact contract*: it wraps\n",
    "the section-3b loop plus batched state initialisation, and registers its datasets\n",
    "through `brainmass.datasets`. Authoring a custom model, objective, and loop the way\n",
    "this guide does is precisely what makes it slot in without restructuring.\n",
    "\n",
    "## See Also\n",
    "\n",
    "- {doc}`creating_models` -- the model contract this builds on.\n",
    "- {doc}`creating_an_objective` -- the objective contract in depth.\n",
    "- {doc}`/data_driven/index` -- the data-driven pillar and its roadmap.\n",
    "- {doc}`/tutorials/06_fitting_with_gradients` -- a worked end-to-end fit."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.13.11"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
