{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "c533ccb8",
   "metadata": {},
   "source": [
    "# Connect a network\n",
    "\n",
    "**What you'll learn / who it's for (simulation).** NEST-like wiring with connection rules, assembled into a small **Brunel (2000) random balanced network** — the canonical sparse E/I network. We use delta synapses (`iaf_psc_delta`), so weights are membrane-voltage jumps in `mV`.\n",
    "\n",
    "We keep `order` small here so the notebook runs fast; the [example gallery](../../examples/nest-gallery.rst) has full-scale Brunel variants. Ported from `examples/nest_like/brunel_delta.py`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "f1b88222",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-17T09:12:53.736780Z",
     "iopub.status.busy": "2026-06-17T09:12:53.736562Z",
     "iopub.status.idle": "2026-06-17T09:12:57.685387Z",
     "shell.execute_reply": "2026-06-17T09:12:57.684564Z"
    }
   },
   "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 jax\n",
    "jax.config.update('jax_enable_x64', True)\n",
    "import brainstate\n",
    "brainstate.environ.set(precision=64)\n",
    "\n",
    "import numpy as np\n",
    "import brainunit as u\n",
    "import braintools\n",
    "import matplotlib.pyplot as plt\n",
    "from brainpy import state as bp"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cf760f5a",
   "metadata": {},
   "source": [
    "## Brunel parameters\n",
    "\n",
    "The standard Brunel knobs: `g` (relative inhibition), `eta` (external drive relative to threshold), `epsilon` (connection density). `NE`/`NI` are the population sizes and `CE`/`CI` the in-degrees. We pick a small `order` for a quick run."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "d7f851a6",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-17T09:12:57.687882Z",
     "iopub.status.busy": "2026-06-17T09:12:57.687388Z",
     "iopub.status.idle": "2026-06-17T09:12:57.692067Z",
     "shell.execute_reply": "2026-06-17T09:12:57.691139Z"
    }
   },
   "outputs": [],
   "source": [
    "order = 100                         # small for a fast notebook run\n",
    "g, eta, epsilon = 5.0, 2.0, 0.1\n",
    "delay = 1.5                         # ms\n",
    "NE, NI = 4 * order, 1 * order\n",
    "CE, CI = int(epsilon * NE), int(epsilon * NI)\n",
    "N_rec = 50\n",
    "tauMem, CMem, theta, tref = 20.0, 1.0, 20.0, 2.0\n",
    "\n",
    "J = 0.1                             # mV, delta postsynaptic jump\n",
    "J_ex = J\n",
    "J_in = -g * J_ex\n",
    "nu_th = theta / (J * CE * tauMem)\n",
    "p_rate = 1000.0 * (eta * nu_th) * CE   # external Poisson rate (Hz)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "03a59b2d",
   "metadata": {},
   "source": [
    "## Create populations and the external drive\n",
    "\n",
    "Two `iaf_psc_delta` populations and a `poisson_generator` background. Each population also gets a `spike_recorder` tapping the first `N_rec` neurons."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "ebfdabc6",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-17T09:12:57.693834Z",
     "iopub.status.busy": "2026-06-17T09:12:57.693664Z",
     "iopub.status.idle": "2026-06-17T09:13:00.422362Z",
     "shell.execute_reply": "2026-06-17T09:13:00.421380Z"
    }
   },
   "outputs": [],
   "source": [
    "npar = dict(C_m=CMem * u.pF, tau_m=tauMem * u.ms, t_ref=tref * u.ms,\n",
    "            E_L=0. * u.mV, V_reset=0. * u.mV, V_th=theta * u.mV,\n",
    "            V_initializer=braintools.init.Constant(0. * u.mV))\n",
    "\n",
    "sim = bp.Simulator(dt=0.1 * u.ms)\n",
    "ne = sim.create(bp.iaf_psc_delta, NE, params=npar)\n",
    "ni = sim.create(bp.iaf_psc_delta, NI, params=npar)\n",
    "noise = sim.create(bp.poisson_generator, rate=p_rate * u.Hz)\n",
    "esr = sim.create(bp.spike_recorder)\n",
    "isr = sim.create(bp.spike_recorder)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "09d50a6e",
   "metadata": {},
   "source": [
    "## Wire the network with connection rules\n",
    "\n",
    "- The background drives every neuron: `rule=all_to_all`.\n",
    "- Recurrent excitation and inhibition use `fixed_indegree(K)` — each target draws `K` random presynaptic partners (the Brunel rule). `comm='sparse'` keeps the event communication memory-light; `seed=` makes the draw reproducible.\n",
    "- `ne + ni` targets the whole network in one call; `ne[:N_rec]` records a sub-sample."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "2f1c5d36",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-17T09:13:00.425678Z",
     "iopub.status.busy": "2026-06-17T09:13:00.424942Z",
     "iopub.status.idle": "2026-06-17T09:13:11.256878Z",
     "shell.execute_reply": "2026-06-17T09:13:11.255677Z"
    }
   },
   "outputs": [],
   "source": [
    "sim.connect(noise, ne, weight=J_ex * u.mV, delay=delay * u.ms, rule=bp.all_to_all)\n",
    "sim.connect(noise, ni, weight=J_ex * u.mV, delay=delay * u.ms, rule=bp.all_to_all)\n",
    "sim.connect(ne, ne + ni, weight=J_ex * u.mV, delay=delay * u.ms,\n",
    "            rule=bp.fixed_indegree(CE), comm='sparse', allow_multapses=True, seed=1)\n",
    "sim.connect(ni, ne + ni, weight=J_in * u.mV, delay=delay * u.ms,\n",
    "            rule=bp.fixed_indegree(CI), comm='sparse', allow_multapses=True, seed=2)\n",
    "sim.connect(ne[:N_rec], esr)\n",
    "sim.connect(ni[:N_rec], isr)\n",
    "\n",
    "res = sim.simulate(1000. * u.ms)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8d205675",
   "metadata": {},
   "source": [
    "## Firing rates and the excitatory raster"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "74e97dcc",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-17T09:13:11.260313Z",
     "iopub.status.busy": "2026-06-17T09:13:11.259887Z",
     "iopub.status.idle": "2026-06-17T09:13:11.547919Z",
     "shell.execute_reply": "2026-06-17T09:13:11.547127Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "excitatory rate: 60.56 spks/s\n",
      "inhibitory rate: 60.18 spks/s\n"
     ]
    },
    {
     "data": {
      "image/png": "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mNzcXDFq1Chx2223ifDwcBEaGipuu+028fbbb7vFtWnTRtStW7fI8YmJiaJTp05FXgfg1sL27NmzYuDAgaJixYoiLCxMpKWlib179xZpo+nNdrN+fn4iOjpa3H333WLLli1usQUtTn/55Zdic82ePVtUr15dBAUFiQYNGoilS5det93s5MmTi73+cePGub124MAB0a9fPxEXFyfKlCkjKleuLDp37iw+//zzG15/ca5X/4wZMwQAcejQIbfXv/jiC9GyZUsRGhoqQkNDRa1atcSQIUNERkaGK+b8+fPigQceEFFRUQJAkXvepEkTAUBs2rTJ9dpPP/0kAIiqVasWW+fy5ctFixYtREhIiIiIiBBdunQRe/bs8ehahHBvN1vg119/FXXq1BFxcXFi3759171HMm3btk107dpVVKhQQQQHB4vExETRs2dPsWLFCiGEEG+++aYAIL744gu3444ePSoiIiJEx44dXa9dvXpVTJ48WdSqVUsEBQWJSpUqifT0dLc5e+37RAgh3n33XVG9enUREBDgNmfWr18vmjdvLkJCQkR8fLwYPXq0q/1r4Xl1o/H++eefXe/XoKAgUb9+fbf20ULceP4X1rFjRwFAfPvtt39wV/84b35+vpg4caJITEwUwcHBomHDhuKrr74q8t78/PPPxZ/+9CcRExMjgoKCREJCgnj00UfFyZMnPbqHQvz+XkxLSxORkZGibNmyIjk5WQwYMEB8//33rpji5icR3ZifEDb/1SgiIiIq1e677z7s3LkT+/fvV10KEWmAeyyIiIjIspMnT2LRokXo27ev6lKISBPcY0FEREQeO3ToENavX4/33nsPZcqUwaOPPqq6JCLSBH9jQURERB5bs2YN+vbti0OHDmHWrFlS/+0OIjIL91gQEREREVGJ8TcWRERERERUYlxYEBERERFRifn85u38/HycOHEC4eHhrn9NloiIiIiI/pgQAjk5OYiPj4e//41/J+HzC4sTJ06gatWqqssgIiIiIjLWsWPHUKVKlRvG+PzCIjw8HMDvNyMiIkJxNURERERE5sjOzkbVqlVdP1PfiM8vLAo+/hQREcGFBRERERGRDZ5sKeDmbSIiIiIiKjGlC4vx48fDz8/P7atWrVqu71+6dAlDhgxBhQoVEBYWhm7duuHnn39WWDERERERERVH+W8s6tati5MnT7q+1q1b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8OEiISFBlC1bVlSvXl0899xzbm1BOSd826pVq4r9GaJ///5CCO+N/44dO0TLli1FcHCwqFy5snjllVecukQXPyEK/dOPRERERERENnCPBRERERERlRgXFkREREREVGJcWBARERERUYlxYUFERERERCXGhQUREREREZUYFxZERERERFRiXFgQEREREVGJcWFBREREREQlxoUFEREVsXr1avj5+eHcuXNKzr9ixQrUrl0beXl50s7RvHlzfPHFF9LyExGVNvyXt4mISrm2bduiQYMGmDJliuu1y5cv48yZM4iNjYWfn5/jNTVq1AgjR45Enz59pJ3jq6++wpNPPomMjAz4+/O/sxERlRSfpEREVERQUBDi4uKULCrWrVuHAwcOoFu3blLPk56ejpycHCxZskTqeYiISgsuLIiISrEBAwZgzZo1ePPNN+Hn5wc/Pz8cPny4yEehZs6ciaioKHz11VeoWbMmypUrh+7du+PChQuYNWsWqlWrhvLly+OJJ55w+/hSbm4unnrqKVSuXBmhoaFo1qwZVq9efcOa5s2bh/bt26Ns2bKu18aPH48GDRrggw8+QEJCAsLCwjB48GDk5eXhtddeQ1xcHGJiYvDyyy+7jhFCYPz48UhISEBwcDDi4+PxxBNPuL4fEBCAjh07Yt68ed65mUREpVyg6gKIiEidN998E//73/9Qr149/PWvfwUAVKpUCYcPHy4Se+HCBbz11luYN28ecnJy0LVrV9x3332IiorC4sWLcfDgQXTr1g0tWrTA/fffDwAYOnQo9uzZg3nz5iE+Ph4LFixAhw4dsHPnTtSoUaPYmtauXYsHHnigyOsHDhzAkiVL8PXXX+PAgQPo3r07Dh48iFtuuQVr1qzBt99+iwcffBCpqalo1qwZvvjiC7zxxhuYN28e6tati8zMTOzYscMtZ9OmTfHKK6+U8C4SERHAhQURUakWGRmJoKAglCtXDnFxcTeMvXLlCqZNm4bk5GQAQPfu3fHRRx/h559/RlhYGOrUqYM777wTq1atwv3334+jR49ixowZOHr0KOLj4wEATz31FL7++mvMmDEDEydOLPY8R44cccUXlp+fjw8++ADh4eGuc2VkZGDx4sXw9/dHzZo18eqrr2LVqlVo1qwZjh49iri4OKSmpqJMmTJISEhA06ZN3XLGx8fj2LFjyM/P5z4LIqIS4lOUiIg8Uq5cOdeiAgBiY2NRrVo1hIWFub126tQpAMDOnTuRl5eHW265BWFhYa6vNWvW4MCBA9c9z8WLF90+BlWgWrVqCA8PdztXnTp13BYEhc/fo0cPXLx4EdWrV8fDDz+MBQsW4OrVq245Q0JCkJ+fj9zcXIt3g4iIrsXfWBARkUfKlCnj9mc/P79iX8vPzwcAnD9/HgEBAdiyZQsCAgLc4govRq5VsWJFnD17tsTnr1q1KjIyMrB8+XIsW7YMgwcPxuTJk7FmzRrXcWfOnEFoaChCQkJudOlEROQBLiyIiEq5oKAgKf9eRMOGDZGXl4dTp06hVatWlo7bs2ePV2oICQlBly5d0KVLFwwZMgS1atXCzp07cfvttwMAdu3ahYYNG3rlXEREpR0XFkREpVy1atWwadMmHD58GGFhYYiOjvZK3ltuuQV9+vRBv3798Pe//x0NGzbEL7/8ghUrVuDWW29Fp06dij0uLS0Ns2bNKvH5Z86ciby8PDRr1gzlypXD7NmzERISgsTERFfM2rVr8ac//anE5yIiIu6xICIq9Z566ikEBASgTp06qFSpEo4ePeq13DNmzEC/fv3wl7/8BTVr1sS9996LzZs3IyEh4brH9OnTB7t370ZGRkaJzh0VFYV3330XLVq0wK233orly5fjyy+/RIUKFQAAx48fx7fffouBAweW6DxERPQ7/svbRESknVGjRiE7OxvvvPOOtHM8/fTTOHv2LP71r39JOwcRUWnC31gQEZF2nnvuOSQmJro2YssQExODF198UVp+IqLShr+xICIiIiKiEuNvLIiIiIiIqMS4sCAiIiIiohLjwoKIiIiIiEqMCwsiIiIiIioxLiyIiIiIiKjEuLAgIiIiIqIS48KCiIiIiIhKjAsLIiIiIiIqMS4siIiIiIioxLiwICIiIiKiEvt/BGdcDnS8S4sAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 800x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "erate = res.rate(esr.segments[0].population)\n",
    "irate = res.rate(isr.segments[0].population)\n",
    "print(f'excitatory rate: {erate:.2f} spks/s')\n",
    "print(f'inhibitory rate: {irate:.2f} spks/s')\n",
    "\n",
    "spk = np.asarray(res.spikes(esr.segments[0].population))   # (T, N_rec)\n",
    "ts, ids = np.nonzero(spk > 0)\n",
    "plt.figure(figsize=(8, 4))\n",
    "plt.scatter(ts * 0.1, ids, s=1.0, color='k')\n",
    "plt.xlabel('time (ms)'); plt.ylabel('exc neuron')\n",
    "plt.title('small Brunel network — excitatory raster')\n",
    "plt.tight_layout()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "37caacd0",
   "metadata": {},
   "source": [
    "## See also\n",
    "\n",
    "- [Connectivity](../connectivity.rst) — connection rules and the synapse spec.\n",
    "- [Porting walkthrough](../porting-walkthrough.ipynb) — Brunel side by side with NEST.\n",
    "- [Example gallery](../../examples/nest-gallery.rst) — full-scale Brunel and other networks.\n",
    "- [Validation status](../validation-status.rst) — how network parity is asserted (distributional, category D)."
   ]
  }
 ],
 "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
}
