{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "888cdefb",
   "metadata": {},
   "source": [
    "# The state paradigm\n",
    "\n",
    "**What you'll learn / who it's for (simulation *and* training).** Why a functional\n",
    "array library like JAX needs an explicit notion of *state*, how ``brainpy.state``\n",
    "provides it, and how to advance a model through time the right way — never with a\n",
    "bare Python loop. Everything else in the documentation builds on these primitives."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8ba1f0ba",
   "metadata": {},
   "source": [
    "## The problem: dynamics without mutable variables\n",
    "\n",
    "A spiking network *is* state evolving in time: membrane potentials, synaptic\n",
    "conductances, eligibility traces. But JAX — the engine underneath\n",
    "``brainpy.state`` — is **functional**. Its arrays are immutable, and its real power\n",
    "(``jit`` compilation, ``grad`` automatic differentiation, ``vmap`` batching) comes\n",
    "from transforming *pure* functions that take values in and return values out.\n",
    "\n",
    "Threading every hidden variable through every function call by hand would be\n",
    "unbearable for anything larger than a single neuron. ``brainstate.State`` resolves\n",
    "the tension: state is held in explicit, trackable containers, so your model code\n",
    "reads imperatively, while the framework still hands JAX the pure functions it\n",
    "needs. (``brainpy.state`` is the point-neuron layer built on ``brainstate``; the\n",
    "two names appear side by side throughout.)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "1b871531",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-17T09:11:23.525334Z",
     "iopub.status.busy": "2026-06-17T09:11:23.525171Z",
     "iopub.status.idle": "2026-06-17T09:11:27.617933Z",
     "shell.execute_reply": "2026-06-17T09:11:27.617049Z"
    }
   },
   "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": [
    "import brainpy\n",
    "import brainstate\n",
    "import braintools\n",
    "import brainunit as u\n",
    "import jax.numpy as jnp\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3fcc699e",
   "metadata": {},
   "source": [
    "## `State`: a trackable, differentiable variable\n",
    "\n",
    "A ``State`` wraps a value (almost always a JAX array, usually carrying physical\n",
    "units) and exposes it through ``.value``. You read and write ``.value`` like an\n",
    "ordinary attribute, but because the container is *tracked*, the framework can\n",
    "collect it, batch it, checkpoint it, and route gradients through it."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "74690774",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-17T09:11:27.620460Z",
     "iopub.status.busy": "2026-06-17T09:11:27.619987Z",
     "iopub.status.idle": "2026-06-17T09:11:27.766182Z",
     "shell.execute_reply": "2026-06-17T09:11:27.765374Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-65. mV\n",
      "-60. mV\n"
     ]
    }
   ],
   "source": [
    "# A scalar state and a matrix state.\n",
    "voltage = brainstate.State(-65.0 * u.mV)\n",
    "weights = brainstate.State(jnp.array([[0.1, 0.2], [0.3, 0.4]]))\n",
    "\n",
    "# Read and update through .value\n",
    "print(voltage.value)\n",
    "voltage.value = voltage.value + 5.0 * u.mV\n",
    "print(voltage.value)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "910d5b5d",
   "metadata": {},
   "source": [
    "### State *types* carry intent\n",
    "\n",
    "``brainpy.state`` distinguishes states by role, and transformations key off the\n",
    "distinction:\n",
    "\n",
    "- **``ParamState``** — trainable parameters (weights, learnable time constants).\n",
    "  ``brainstate.transform.grad`` differentiates with respect to these.\n",
    "- **``ShortTermState`` / ``HiddenState``** — dynamical variables that evolve every\n",
    "  step (membrane potential, conductance) and are reset between runs.\n",
    "\n",
    "You rarely create these by hand — the built-in neurons and synapses declare them\n",
    "for you — but knowing the split explains how training selects exactly the right\n",
    "variables:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "c0bd380b",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-17T09:11:27.768008Z",
     "iopub.status.busy": "2026-06-17T09:11:27.767677Z",
     "iopub.status.idle": "2026-06-17T09:11:27.772019Z",
     "shell.execute_reply": "2026-06-17T09:11:27.771456Z"
    }
   },
   "outputs": [],
   "source": [
    "class LeakyUnit(brainstate.nn.Module):\n",
    "    def __init__(self, size, tau=10.0 * u.ms):\n",
    "        super().__init__()\n",
    "        self.tau = brainstate.ParamState(tau)              # trainable\n",
    "        self.v = brainstate.ShortTermState(jnp.zeros(size) * u.mV)  # dynamical\n",
    "\n",
    "    def update(self, x):\n",
    "        dt = brainstate.environ.get_dt()\n",
    "        self.v.value = self.v.value + (-self.v.value + x) / self.tau.value * dt\n",
    "        return self.v.value"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6b9de613",
   "metadata": {},
   "source": [
    "## `init_all_states`: allocate the dynamical variables\n",
    "\n",
    "A freshly constructed model knows its *parameters* but has not yet allocated its\n",
    "*dynamical* state — that depends on the batch size you want to run. One call walks\n",
    "the whole module tree and initializes every state:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "22bc02ac",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-17T09:11:27.773696Z",
     "iopub.status.busy": "2026-06-17T09:11:27.773479Z",
     "iopub.status.idle": "2026-06-17T09:11:30.390996Z",
     "shell.execute_reply": "2026-06-17T09:11:30.390228Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "unbatched V shape: (100,)\n",
      "batched   V shape: (32, 100)\n"
     ]
    }
   ],
   "source": [
    "neuron = brainpy.state.LIF(\n",
    "    100,\n",
    "    V_rest=-65. * u.mV, V_th=-50. * u.mV, V_reset=-65. * u.mV,\n",
    "    tau=10. * u.ms,\n",
    ")\n",
    "\n",
    "# Allocate states for a single trial ...\n",
    "brainstate.nn.init_all_states(neuron)\n",
    "print('unbatched V shape:', neuron.V.value.shape)\n",
    "\n",
    "# ... or for a batch of 32 trials run in parallel.\n",
    "brainstate.nn.init_all_states(neuron, batch_size=32)\n",
    "print('batched   V shape:', neuron.V.value.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ec3e0b68",
   "metadata": {},
   "source": [
    "Call ``init_all_states`` again whenever you want to **reset** the model — for\n",
    "example at the start of every training epoch, so each minibatch starts from a clean\n",
    "slate (you'll see exactly this in {doc}`/concepts/differentiability`)."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e4da3143",
   "metadata": {},
   "source": [
    "## `environ.context`: the simulation clock\n",
    "\n",
    "Discrete-time dynamics need a time step ``dt`` (and often the current time ``t``).\n",
    "Rather than thread these through every call, ``brainpy.state`` reads them from a\n",
    "context manager. Set ``dt`` once around your run; set ``t`` inside the per-step\n",
    "function so time-dependent inputs and synapses see the right value."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "c45fb46b",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-17T09:11:30.393475Z",
     "iopub.status.busy": "2026-06-17T09:11:30.392862Z",
     "iopub.status.idle": "2026-06-17T09:11:30.398677Z",
     "shell.execute_reply": "2026-06-17T09:11:30.397686Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "dt = 0.1 ms\n",
      "t  = 3. ms\n"
     ]
    }
   ],
   "source": [
    "with brainstate.environ.context(dt=0.1 * u.ms):\n",
    "    print('dt =', brainstate.environ.get_dt())\n",
    "    # A per-step update would set t as well:\n",
    "    with brainstate.environ.context(t=3.0 * u.ms):\n",
    "        print('t  =', brainstate.environ.get('t'))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4e69d864",
   "metadata": {},
   "source": [
    "## Driving a model: use `transform`, never a bare Python loop\n",
    "\n",
    "This is the single most important runtime rule in ``brainpy.state``.\n",
    "\n",
    "A Python ``for``/``while`` loop over time steps executes **op by op**: each\n",
    "iteration pays Python dispatch overhead, nothing fuses, and under autodiff the body\n",
    "is re-traced on every step. The ``brainstate.transform`` primitives instead lower\n",
    "the *entire* loop into one compiled XLA program, tracing the body **once**. The\n",
    "speed-up is typically one to two orders of magnitude, and it is the difference\n",
    "between a model that trains and one that does not.\n",
    "\n",
    "Pick the primitive by the shape of the work:\n",
    "\n",
    "- **Single step / one-shot call** → ``brainstate.transform.jit`` — compile once,\n",
    "  reuse the trace.\n",
    "- **Many steps, collect outputs** → ``brainstate.transform.for_loop`` — repeat a\n",
    "  step ``length`` times or map over ``xs``; ``State`` is carried automatically and\n",
    "  stacked outputs are returned.\n",
    "- **Many steps with an explicit carry** → ``brainstate.transform.scan`` — thread a\n",
    "  carry value alongside ``State`` (``f(carry, x) -> (carry, y)``).\n",
    "- **Long rollout under autograd (BPTT)** →\n",
    "  ``brainstate.transform.checkpointed_for_loop`` / ``checkpointed_scan`` — same\n",
    "  semantics, but rematerialize activations on the backward pass to bound peak\n",
    "  memory at the cost of recomputation.\n",
    "\n",
    "Compose them freely (e.g. ``jit`` an outer driver that calls a ``for_loop``). An\n",
    "outer *optimization/epoch* loop in plain Python is fine — the rule is about\n",
    "time-stepping the model."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6802e755",
   "metadata": {},
   "source": [
    "### `for_loop` in action\n",
    "\n",
    "Inject a step current into a single LIF neuron and collect its voltage trace. The\n",
    "step function sets ``t`` and returns what we want stacked over time; ``for_loop``\n",
    "handles the rest."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "ba47b53d",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-17T09:11:30.400954Z",
     "iopub.status.busy": "2026-06-17T09:11:30.400708Z",
     "iopub.status.idle": "2026-06-17T09:11:30.715068Z",
     "shell.execute_reply": "2026-06-17T09:11:30.714407Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 900x300 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "neuron = brainpy.state.LIF(\n",
    "    1,\n",
    "    V_rest=-65. * u.mV, V_th=-50. * u.mV, V_reset=-65. * u.mV,\n",
    "    tau=10. * u.ms, spk_reset='hard',\n",
    ")\n",
    "brainstate.nn.init_all_states(neuron)\n",
    "\n",
    "def step(t):\n",
    "    with brainstate.environ.context(t=t):\n",
    "        current = u.math.where(t > 50. * u.ms, 20. * u.mA, 0. * u.mA)\n",
    "        neuron(jnp.ones(1) * current)\n",
    "        return neuron.V.value\n",
    "\n",
    "with brainstate.environ.context(dt=0.1 * u.ms):\n",
    "    times = u.math.arange(0. * u.ms, 200. * u.ms, brainstate.environ.get_dt())\n",
    "    voltages = brainstate.transform.for_loop(step, times)\n",
    "\n",
    "plt.figure(figsize=(9, 3))\n",
    "plt.plot(times.to_decimal(u.ms), voltages.to_decimal(u.mV).squeeze())\n",
    "plt.axhline(-50, color='r', ls='--', label='threshold')\n",
    "plt.xlabel('time (ms)'); plt.ylabel('V (mV)'); plt.legend(); plt.tight_layout()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9b3fc829",
   "metadata": {},
   "source": [
    "### `jit` for a single compiled call\n",
    "\n",
    "When you call the same step repeatedly from your own outer logic, wrap it in\n",
    "``jit`` so it compiles once and every subsequent call is fast:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "39b22dbf",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-17T09:11:30.717030Z",
     "iopub.status.busy": "2026-06-17T09:11:30.716784Z",
     "iopub.status.idle": "2026-06-17T09:11:30.872742Z",
     "shell.execute_reply": "2026-06-17T09:11:30.870959Z"
    }
   },
   "outputs": [],
   "source": [
    "@brainstate.transform.jit\n",
    "def one_step(current):\n",
    "    neuron(current)\n",
    "    return neuron.get_spike()\n",
    "\n",
    "brainstate.nn.init_all_states(neuron)\n",
    "with brainstate.environ.context(dt=0.1 * u.ms, t=0. * u.ms):\n",
    "    _ = one_step(jnp.ones(1) * 20. * u.mA)   # first call compiles\n",
    "    _ = one_step(jnp.ones(1) * 20. * u.mA)   # subsequent calls are fast"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1f254531",
   "metadata": {},
   "source": [
    "## Recap\n",
    "\n",
    "- A model is **state evolving in time**; ``brainstate.State`` makes that state\n",
    "  explicit and visible to JAX's transformations.\n",
    "- **``init_all_states``** allocates (and resets) dynamical variables, optionally\n",
    "  batched.\n",
    "- **``environ.context``** supplies ``dt`` and ``t``.\n",
    "- **Drive models with ``transform``** (``jit`` / ``for_loop`` / ``scan`` /\n",
    "  ``checkpointed_*``) — never a bare Python loop over time steps.\n",
    "\n",
    "## See also\n",
    "\n",
    "- {doc}`/concepts/physical-units` — the unit system every state carries.\n",
    "- {doc}`/concepts/model-anatomy` — the ``Dynamics`` contract these states live in.\n",
    "- {doc}`/concepts/alignpre-alignpost` — the keystone projection design.\n",
    "- {doc}`/concepts/differentiability` — ``for_loop`` and ``checkpointed_*`` under\n",
    "  ``grad`` for training."
   ]
  }
 ],
 "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
}
