File: release_notes.rst

package info (click to toggle)
brian 2.9.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 6,872 kB
  • sloc: python: 51,820; cpp: 2,033; makefile: 108; sh: 72
file content (2074 lines) | stat: -rw-r--r-- 109,734 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
Release notes
=============

Brian 2.9.0
-----------

New features
~~~~~~~~~~~~
- Simulations now stop "gracefully" if you interrupt them with Ctrl+C (or e.g. the interrupt button in a Jupyter notebook). This means that the simulation finishes the current time step and stops, making it possible to access the results for inspection (:issue:`1621`).
- The :ref:`linked_variables` mechanism is now more powerful and supports linked variables that use another variable for indexing, and linked variables in `Synapses` (:issue:`1584`).

Selected improvements and bug fixes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Improve C99 check on UNIX to avoid spurious errors when a non-standard compiler is used (e.g. via Anaconda) (:issue:`1618`).
- Raise an error when `~Network.run` is called with a negative duration (:issue:`1608`). Thanks to Palash Chitnavis for contributing this fix.
- Fix compatibility with recent setuptools versions (:issue:`1590`, :issue:`1622`)
- Raise an AttributeError instead of a KeyError, when accessing non-existing attributes of the preferences object (:issue:`1629`). This prevents an error on Google Collab when the Debugger is active. Thanks to forum user ``@SaeedF36`` for making us aware of this issue.

Infrastructure and documentation improvements
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- A new example :doc:`../examples/synapses.homeostatic_stdp_at_inhibitory_synapes`, demonstrating a homoestatic modulation of STDP, based on a population firing rate.
  Thanks to Paul Brodersen for contributing this example (:issue:`1581`).
- A new example :doc:`../examples/network_operation_stop`, demonstrating the use of `NetworkOperation` to stop a simulation when a certain condition is met. Thanks to Sagar Shahari for
  contributing this example (:issue:`1604`).
- GitHub Actions are now pinned by hash to avoid security issues (:issue:`1607`).
- A new GitHub Action to update ``CITATION.cff`` and ``README.md`` with the latest Zenodo and Software Heritage links, so that they are always up-to-date with the latest release (:issue:`1574`).

Contributions
~~~~~~~~~~~~~
GitHub code, documentation, and issue contributions (ordered by the number of
contributions):

* Marcel Stimberg (`@mstimberg <https://github.com/mstimberg>`_)
* Samuele De Cristofaro (`@De-Cri <https://github.com/De-Cri>`_)
* Dan Goodman (`@thesamovar <https://github.com/thesamovar>`_)
* Sagar Shahari (`@maverick4code <https://github.com/maverick4code>`_)
* `@mahipalimkar <https://github.com/mahipalimkar>`_
* Mrigesh Thakur (`@Legend101Zz <https://github.com/Legend101Zz>`_)
* Md Khurshid (`@alikhere <https://github.com/alikhere>`_)
* Palash Chitnavis (`@PalashChitnavis <https://github.com/PalashChitnavis>`_)
* Ben Evans (`@bdevans <https://github.com/bdevans>`_)
* `@clinssen <https://github.com/clinssen>`_
* shriyaise725 (`@shriya7ise <https://github.com/shriya7ise>`_)
* Ankur Sinha (`@sanjayankur31 <https://github.com/sanjayankur31>`_)
* Hong Zhu (`@Jasmine969 <https://github.com/Jasmine969>`_)
* 火焰青年 (`@zhengrenjie <https://github.com/zhengrenjie>`_)


Brian 2.8.0.1-2.8.0.4
---------------------
Several patch-level releases, correcting metadata files about authors and contributors, updating release scripts, and fixing issues in a test and in the
continuous integration infrastructure. Wheel packages for linux-aarch64 are now built on GitHub's recently added ARM runners, removing the need for emulation
and greatly improving the built time. No other user-facing changes are included in this release.

Contributions
~~~~~~~~~~~~~
GitHub code, documentation, and issue contributions (ordered by the number of
contributions):

* Marcel Stimberg (`@mstimberg <https://github.com/mstimberg>`_)


Brian 2.8.0
-----------
This release comes with an important performance improvement for random number generation in C++ standalone mode, various minor improvements and bugfixes, as well as a
number of behind-the-scenes improvements for our release process and compatibility with Python 3.13.

Selected improvements and bug fixes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Faster simulation of random numbers (by replacing our outdated random number generator), now up to 5 times faster, speeding up all uses of random numbers
  including noise and Poisson groups/inputs. Note that the random number algorithm behind the scenes is still the same, so simulations will still use the
  same sequence of random numbers with a given seed, with the limitations given in :ref:`seeding_and_reproducibility` (:issue:`1559`). 
- `~CPPStandaloneDevice.delete` has a new option to delete arrays stored on disk for the ``run_args`` feature – this can be useful for training paradigms,
  where the ``run_args`` are used to provide a large array of weights from a previous run.
- Fixes for compatiblity with recent versions of ``setuptools`` and ``sympy``. Thanks to Étienne Mollier for noticing and fixing a related test failure (:issue:`1553`).

Infrastructure and documentation improvements
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Full compatibility with Python 3.13, and corresponding binary wheels.
- A new mechanism to automatically update our ``CITATION.cff`` and README files with the latest links to the Zenodo and Software Heritage archives, so that they are
  always up-to-date with the latest release (:issue:`1575`).
- We now provide a ``codemeta.json`` file for Brian (see https://codemeta.github.io; :issue:`1574`).
- We know push docker images for the latest release to the GitHub Container Registry (see https://github.com/brian-team/brian2/pkgs/container/brian and https://github.com/brian-team/brian2/pkgs/container/brian-dev) in addition to Docker Hub (:issue:`1551`).
- New example: :doc:`../examples/frompapers.Diehl_Cook_2015` – note that this example needs a long time to run, a faster version using C++ standalone mode is in preparation.
  Thanks to Björn A. Lindqvist for contributing this example (:issue:`1548`).

Contributions
~~~~~~~~~~~~~
GitHub code, documentation, and issue contributions (ordered by the number of
contributions):

* Marcel Stimberg (`@mstimberg <https://github.com/mstimberg>`_)
* `@neworderofjamie <https://github.com/neworderofjamie>`_
* `@NickChernov <https://github.com/NickChernov>`_
* Kyle Johnsen (`@kjohnsen <https://github.com/kjohnsen>`_)
* Liam Keegan (`@lkeegan <https://github.com/lkeegan>`_)
* Étienne Mollier (`@emollier <https://github.com/emollier>`_)
* Bernhard Vogginger (`@bvogginger <https://github.com/bvogginger>`_)
* Dan Goodman (`@thesamovar <https://github.com/thesamovar>`_)
* `@Treetalker <https://github.com/Treetalker>`_
* Björn Lindqvist (`@bjourne <https://github.com/bjourne>`_)
* `@wcx12306 <https://github.com/wcx12306>`_


Brian 2.7.1
-----------
This minor bug-fix release contains a fix for a regression in the handling of the ``on_event`` argument of `Synapses` for custom events and non-default pathways,
which was introduced in Brian 2.6.0.

Selected improvements and bug fixes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Fix a bug in interpreting the ``on_event`` argument of `Synapses` for custom events and non-default pathways (a regression introduced with Brian 2.6). Thanks to forum users
  ``mreynes`` and ``mmiekus`` for making us aware of this issue. (:issue:`1541`)
- Make parsing SWC files more robust, by not being as strict for a correct 3-point-soma format (which is often slightly inexact on https://neuromorpho.org). Thanks to forum
  user ``cbx`` for making us aware of this issue. (:issue:`1544`)

Infrastructure and documentation improvements
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Move to ``pytest-cov`` for coverage measurements – this fixes issues with wrong coverage reports on https://coveralls.io/github/brian-team/brian2. (:issue:`1545`)

Contributions
~~~~~~~~~~~~~
GitHub code, documentation, and issue contributions (ordered by the number of
contributions):

* Marcel Stimberg (`@mstimberg <https://github.com/mstimberg>`_)
* `@mareba2030 <https://github.com/mareba2030>`_
* Björn Lindqvist (`@bjourne <https://github.com/bjourne>`_)

Other contributions outside of GitHub (ordered alphabetically, apologies to
anyone we forgot...):

* `cbx <https://brian.discourse.group/u/cbx/summary>`_
* `mmiekus <https://brian.discourse.group/u/mmiekus/summary>`_
* `mreynes <https://brian.discourse.group/u/mreynes/summary>`_

Brian 2.7.0
-----------
This release contains a number of bug fixes and improvements. Notably, it is fully compatible with the upcoming numpy 2.0 release and can be installed 
alongside either numpy versions 1.23–1.26, or numpy 2.0.

Selected improvements and bug fixes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Objects (e.g. `NeuronGroup` or `Synapses`) that are not used now raise warnings, avoiding errors for accidentally unused objects (:issue:`1536`). Thanks
  to Jannik Luboeinski for suggesting this feature.
- Fix the :doc:`run_args <../user/computation>` feature for object names with upper case letters (:issue:`1533`). Thanks to DavidKing2020 for making us aware of this issue.
- Extremely short refractoriness periods were not converted into code correctly, truncating their value (:issue:`1521`). Thanks to YannaelB for reporting this issue.
- The numbers 0 and 1 were converted into ``true``/``false`` in C++ code, breaking tests expecting the numbers to appear (:issue:`1520`)
- The logging system was broken for 3rd-party packages that have names starting with ``brian`` (:issue:`1519`)

Infrastructure and documentation improvements
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- The reference documentation was not correctly built, missing a lot of the information present in the source code. Thanks to Harsh Khilawala for making us aware of
  this issue (:issue:`1534`)
- Binary wheels are built against numpy 2.0. These wheels are still backwards compatible with numpy >= 1.23 (:issue:`1527`)
- Faster tests on GitHub actions by caching the compiled Cython code (:issue:`1528`)
- The test suite was no longer testing the GSL integration (:issue:`1523` and :issue:`1526`)
- Brian no longer includes the date in its documentation for `reproducible builds <https://reproducible-builds.org/docs/source-date-epoch/>`_ (:issue:`1518`).

Contributions
~~~~~~~~~~~~~

GitHub code, documentation, and issue contributions (ordered by the number of
contributions):

* Marcel Stimberg (`@mstimberg <https://github.com/mstimberg>`_)
* Dan Goodman (`@thesamovar <https://github.com/thesamovar>`_)
* Harsh Khilawala (`@HarshKhilawala <https://github.com/HarshKhilawala>`_)
* Ben Evans (`@bdevans <https://github.com/bdevans>`_)
* Jannik Luboeinski (`@jlubo <https://github.com/jlubo>`_)
* `@flomlo <https://github.com/flomlo>`_
* Sven Leach (`@SvennoNito <https://github.com/SvennoNito>`_)

Other contributions outside of GitHub (ordered alphabetically, apologies to
anyone we forgot...):

* `DavidKing2020 <https://brian.discourse.group/u/davidking2020/summary>`_
* `YannaelB <https://brian.discourse.group/u/YannaelB/summary>`_

Brian 2.6.0
-----------
This release introduces a major new feature for running standalone simulations repeatedly (or in parallel), without having to recompile the code.
It also fixes a number of compatiblity issues with the upcoming numpy 2.0 release, and offers compiled wheels for Python 3.12. Finally, we now
offer pre-built docker images containing a full installation of Brian and related tools for convenient testing and development.

New features
~~~~~~~~~~~~
- The new ``run_args`` argument makes it possible to run standalone simulations repeatedly (or in parallel) with different parameters without
  recompiling the code. See :ref:`standalone_multiple_full_runs` for details (:issue:`1429`).
- We now provide regularly updated Docker images with a full installation of Brian and related tools. You can find the latest release images
  on https://hub.docker.com/repository/docker/briansimulator/brian/general, and temporary images for development versions on 
  https://hub.docker.com/repository/docker/briansimulator/brian-dev/general
  (:issue:`1503`).

Selected improvements and bug fixes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Various fixes for compatibility with recent Python versions and the future numpy 2.0 release (:issue:`1482`, :issue:`1484`, :issue:`1488`, :issue:`1510`).
- Do not assume that the test directory is writeable (:issue:`1507``)
- Fix the power operator for integer values in Cython (:issue:`1502`). Thanks to Hong Zhu for reporting this issue.
- Fix floor division on C++ (:issue:`1496`). Thanks to Brian forum user ``ansuz`` for reporting this issue.
  
Infrastructure and documentation improvements
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- We now build wheels and test against for Python 3.12 (:issue:`1481`).
- We now build and test on Apple Silicon (M1) hardware (:issue:`1501`).
- Improved support for 3rd-party packages to use Brian's logging system (:issue:`1480`).
- New examples: :doc:`../examples/frompapers.Spreizer_et_al_2019.Spreizer_et_al_2019`, :doc:`../examples/frompapers.Wang_2002` (:issue:`1447`, :issue:`1489`)
- Use dependabot to keep GitHub actions and the dev container up-to-date (:issue:`1513`).

Contributions
~~~~~~~~~~~~~

GitHub code, documentation, and issue contributions (ordered by the number of
contributions):

* Marcel Stimberg (`@mstimberg <https://github.com/mstimberg>`_)
* Ben Evans (`@bdevans <https://github.com/bdevans>`_)
* Jannik Luboeinski (`@jlubo <https://github.com/jlubo>`_)
* Dan Goodman (`@thesamovar <https://github.com/thesamovar>`_)
* Arash Golmohammadi (`@arashgmn <https://github.com/arashgmn>`_)
* xyz (`@DHRUVJ2003 <https://github.com/DHRUVJ2003>`_)
* Kyle Johnsen (`@kjohnsen <https://github.com/kjohnsen>`_)
* McCoy R. Becker (`@femtomc <https://github.com/femtomc>`_)
* Max Talanov (`@max-talanov <https://github.com/max-talanov>`_)
* `@lysea-haggie <https://github.com/lysea-haggie>`_
* Hong Zhu (`@Jasmine969 <https://github.com/Jasmine969>`_)
* Paul Brodersen (`@paulbrodersen <https://github.com/paulbrodersen>`_)
* `@MichielMoe <https://github.com/MichielMoe>`_
* Ian Quah  (`@IanQS <https://github.com/IanQS>`_)
* Adam Willats (`@awillats <https://github.com/awillats>`_)
* `@flomlo <https://github.com/flomlo>`_

Other contributions outside of GitHub (ordered alphabetically, apologies to
anyone we forgot...):

* `ansuz <https://brian.discourse.group/u/ansuz/summary>`_`
* `@l-luo1 <https://github.com/l-luo1>_``
* Klaus Wimmer (`@wklausitor <https://github.com/wklausito>_`)

Brian 2.5.4
-----------
Yet another minor release that fixes an issue with the documentation build. As a bonus, we now provide wheels built
with the `musl <https://musl.libc.org/>`_ standard library, which allows installing Brian on distributions such as
`Alpine Linux <https://alpinelinux.org/>`_.

Selected bug fixes
~~~~~~~~~~~~~~~~~~
- Re-introduce the tutorials and example plots that were omitted from the documentation by accident. Thanks to Felix Kern for making us aware of the issue.

Infrastructure improvements
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Provide ``musllinux`` (see `PEP 656 <https://peps.python.org/pep-0656/>`_) wheels for distributions such as Alpine Linux (:issue:`1478`).

Contributions
~~~~~~~~~~~~~

Github code, documentation, and issue contributions (ordered by the number of
contributions):

* Marcel Stimberg (`@mstimberg <https://github.com/mstimberg>`_)
* Felix Benjamin Kern (`@kernfel <https://github.com/kernfel>`_)

Brian 2.5.3
-----------
This new minor release only fixes two infrastructure issues that came up with the previous release.

Selected bug fixes
~~~~~~~~~~~~~~~~~~
- Re-introduce the reference documentation that was no longer created on https://brian2.readthedocs.org with the latest release (:issue:`1474`). Thanks to Michalis Pagkalos for making us aware of the issue.

Infrastructure improvements
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Brian's packaging infrastructure now switches to modern tools such as ``pyproject.toml`` for metadata declaration, ``build`` for source package creation, and ``setuptools_scm`` for versioning (:issue:`1475`). 


Contributions
~~~~~~~~~~~~~

Github code, documentation, and issue contributions (ordered by the number of
contributions):

* Marcel Stimberg (`@mstimberg <https://github.com/mstimberg>`_)


Brian 2.5.2
-----------
This new minor release fixes incompatibility issues with the latest numpy release, and a number of other issues.
To make it easier to contribute to Brian, we have now adopted a consistent code style and updated our infrastructure so
that the style gets enforced for all new code contributions (see :ref:`code_style` for details). Following
`NEP 29 <https://numpy.org/neps/nep-0029-deprecation_policy.html>`_, this release supports Python 3.9 & numpy 1.21 and
newer.

New features
~~~~~~~~~~~~
- We now provide Python wheels for the ``linux-aarch64`` architecture (:issue:`1463`), making it easier to install Brian
  on ARM-based systems running Linux (including recent Apple hardware).

Selected improvements and bug fixes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Fix compability with numpy 1.25 and avoid deprecation warnings (:issue:`1473`)
- Add missing ``volume`` attribute to `~.SpatialNeuron` (:issue:`1430`). Thanks to Sebastian Schmitt for contributing this
  fix.
- Fix an issue with pickling `~.Quantity` objects (:issue:`1438`). Thanks to Shailesh Appukuttan for making us aware of
  this issue.
- No longer use the deprecated ``distutils`` package (:issue:`1442`).
- Fix an issue with log files on Windows (:issue:`1454`). Thanks to discourse user
  ``@NiKnight`` for making us aware of the issue.
- Fix an issue that prevents building the documentation on recent Python versions (:issue:`1450`). Thanks to Étienne
  Mollier for contributing this fix.
- Fix an issue with the upcoming Cython version for GSL integration (:issue:`1471`).
- Fix a broken error message (:issue:`1467`). Thanks to ``@pjsph`` for contributing the fix.
- Fix an issue with user-provided header files (:issue:`1436`). Thanks to ``@wxie2013`` for reporting the issue.
- Fix an issue when using `SpatialNeuron` with `TimedArray` on Cython (:issue:`1428`). Thanks to Sebastian Schmitt for
  reporting the issue.

Infrastructure and documentation improvements
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- We now enforce a consistent code style for all new code contributions, and check/enforce the code style with tools
  such as ``black``, ``isort``, ``flake8``, and ``pyupgrade`` (:issue:`1435`, :issue:`1444`, :issue:`1446`).
  See :ref:`code_style` for details. Thanks to Oleksii Leonov for contributing this feature.
- A number of new examples have been added: :doc:`../examples/frompapers.Tetzlaff_2015`, :doc:`../examples/frompapers.Nicola_Clopath_2017`
  (contributed by Sebastian Schmitt) and :doc:`../examples/coupled_oscillators`.
- The development container has been updated, and the repository now contains a file with all the places where
  dependency versions are listed (:issue:`1451`, :issue:`1468`).

Backwards incompatible changes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Using `SpatialNeuron` with the ``numpy`` code generation target now requires the ``scipy`` package to be installed
  (:issue:`1460`).

Contributions
~~~~~~~~~~~~~

Github code, documentation, and issue contributions (ordered by the number of
contributions):

* Marcel Stimberg (`@mstimberg <https://github.com/mstimberg>`_)
* Dan Goodman (`@thesamovar <https://github.com/thesamovar>`_)
* Ben Evans (`@bdevans <https://github.com/bdevans>`_)
* Oleksii Leonov (`@oleksii-leonov <https://github.com/oleksii-leonov>`_)
* Sebastian Schmitt (`@schmitts <https://github.com/schmitts>`_)
* Denis Alevi (`@denisalevi <https://github.com/denisalevi>`_)
* Shailesh Appukuttan (`@appukuttan-shailesh <https://github.com/appukuttan-shailesh>`_)
* `@TheSquake <https://github.com/TheSquake>`_
* `@tim-ufer <https://github.com/tim-ufer>`_
* Akalanka (`@boneyag <https://github.com/boneyag>`_)
* `@pjsph <https://github.com/pjsph>`_
* `@Bitloader22 <https://github.com/Bitloader22>`_
* `@MunozatABI <https://github.com/MunozatABI>`_
* Étienne Mollier (`@emollier <https://github.com/emollier>`_)
* `@KarimHabashy <https://github.com/KarimHabashy>`_
* `@hunjunlee <https://github.com/hunjunlee>`_
* Arash Golmohammadi (`@arashgmn <https://github.com/arashgmn>`_)
* Steathy Spikes (`@steathy-spikes <https://github.com/steathy-spikes>`_)
* Adam Willats (`@awillats <https://github.com/awillats>`_)

Other contributions outside of github (ordered alphabetically, apologies to
anyone we forgot...):
* `@NiKnight <https://brian.discourse.group/u/niknight/summary>`_

Brian 2.5.1
-----------
This new minor release contains a large number of bug fixes and improvements, in particular for the C++ standalone mode,
as well as many new contributed examples. For users of Visual Studio Code, getting involved with Brian development is now
easier than ever, thanks to a new "development container" that automatically provides an environment with all the necessary
dependencies.

New features
~~~~~~~~~~~~
* Ben Evans added a Docker container for development with Visual Studio Code (:issue:`1387`).
* Synaptic indices of synapses created with manually provided indices can now be accessed in standalone mode even before
  the situation has been run. This makes certain complex situations (e.g. synapses modulating other synapses) easier to
  write and also makes more detailed error checking possible (:issue:`1403`).
* Additional "code slots", as well as more detailed profiling information about compilation times are avaiable for
  C++ standalone mode (:issue:`1390`, :issue:`1391`). Thanks to Denis Alevi for contributing this feature.
* LaTeX output for quantity arrays (which is automatically used for the "rich representation" in jupyter notebooks), is
  now limited to reasonable size and no longer tries to display all values for large arrays. It now also observes most
  of numpy's print options (:issue:`1426`)

Selected improvements and bug fixes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Internally, Brian objects now have more consistent names (used in the generated code), and variables declarations are
  generated in deterministic order. This should make repeated runs of models faster, since less code has to be recompiled
  (:issue:`1384`, :issue:`1417`).
* Running several simulations in parallel with Python's ``multiprocessing`` meant that all processes accessed the same
  log file which led to redundant information and could lead to crashes when several processes tried to rotate the same
  file. Brian now switches off logging in subprocesses, but users can enable also enable individual logs for each process,
  see :ref:`logging_and_multiprocessing`. The default log level for the file log has also been raised to ``DEBUG``
  (:issue:`1419`).
* Some common plotting idioms (e.g. ``plt.plot(spike_mon.t/ms, spike_mon.i, '.')``) were broken with the most recent
  matplotlib version and are now working again (:issue:`1412`)
* Very long runs (with more then 2e9 simulation time steps) failed to run in C++ standalone mode (:issue:`1394`). Thanks to
  Kai Chen for making us aware of the issue.

Infrastructure and documentation improvements
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Sebastian Schmitt has contributed several new :doc:`../examples/index`, reproducing results from several papers (e.g.
  :doc:`../examples/frompapers.Maass_Natschlaeger_Markram_2002` and :doc:`../examples/frompapers.Naud_et_al_2008_adex_firing_patterns`)
* Akif Erdem Sağtekin and Sebastian Schmitt contributed the example :doc:`../examples/frompapers.Izhikevich_2003`.
* A number of fixes to the documentation have been contributed by Sebastian Schmitt.

Contributions
~~~~~~~~~~~~~

Github code, documentation, and issue contributions (ordered by the number of
contributions):

* Marcel Stimberg (`@mstimberg <https://github.com/mstimberg>`_)
* Ben Evans (`@bdevans <https://github.com/bdevans>`_)
* Sebastian Schmitt (`@schmitts <https://github.com/schmitts>`_)
* Denis Alevi (`@denisalevi <https://github.com/denisalevi>`_)
* Akif Erdem Sağtekin (`@aesagtekin <https://github.com/aesagtekin>`_)
* `@MunozatABI <https://github.com/MunozatABI>`_
* Dan Goodman (`@thesamovar <https://github.com/thesamovar>`_)
* `@ivapl <https://github.com/ivapl>`_
* `@dokato <https://github.com/dokato>`_
* Davide Schiavone (`@davideschiavone <https://github.com/davideschiavone>`_)
* Kai Chen (`@NeoNeuron <https://github.com/NeoNeuron>`_)
* Yahya Ashrafi (`@yahya-ashrafi <https://github.com/yahya-ashrafi>`_)
* Ariel Martínez Silberstein (`@ariel-m-s <https://github.com/ariel-m-s>`_)
* Adam Willats (`@awillats <https://github.com/awillats>`_)


Brian 2.5.0.3
-------------
Another patch-level release that fixes incorrectly built Python wheels (the binary package
used to install packages with ``pip``). The wheels where mistakenly built against the most
recent version of ``numpy`` (1.22), which made them incompatible with earlier versions of
``numpy``. This release also fixes a few minor mistakes in the string representation of
monitors, contributed by Felix Benjamin Kern.

Brian 2.5.0.2
-------------
A new patch-level release that fixes a missing ``#include`` in the synapse generation code for C++ standalone code. This
does not matter for most compilers (in particular, it does not matter for the gcc, clang, and Visual Studio compilers
that we use for testing on Linux, OS X, and Windows), but it can matter for projects like Brian2GeNN that build on top
of Brian2 and use Nvidia's ``nvcc`` compiler. The release also fixes a minor string-formatting error (:issue:`1377`),
which led to quantities that were displayed without their units.

Brian 2.5.0.1
-------------
A new build to provide binary
`wheels <https://packaging.python.org/guides/distributing-packages-using-setuptools/#wheels>`_
for Python 3.10.

.. _brian2.5:

Brian 2.5
---------
This new major release contains a large number of bug fixes and improvements, as well as
important new features for synapse generation: the :ref:`generator_syntax` can now
create synapses "in both directions", and also supports random samples of fixed size.
In addition, several contributors have helped to improve the documentation, in
particular by adding several new :doc:`../examples/index`. We have also updated our test
infrastructure and removed workarounds and warnings related to older, now unsupported,
versions of Python. Our policy for supported Python and numpy versions now follows the
`NEP 29 policy <https://numpy.org/neps/nep-0029-deprecation_policy.html>`_ adopted by
most packages in the scientific Python ecosystem. This and other policies related to
compatibility have been documented in :doc:`compatibility`. As always, we recommend all
users of Brian 2 to upgrade.

New features
~~~~~~~~~~~~
* :ref:`generator_syntax` has become more powerful: it is now possible to express
  pre-synaptic indices as a function of post-synaptic indices – previously, only the
  other direction was supported (:issue:`1294`).
* Synapse generation can now make use of fixed-size random sampling (:issue:`1280`).
  Together with the more powerful generator syntax, this finally makes it possible to
  have networks where each cell receives a fixed number of random inputs:
  ``syn.connect(i='k for k in sample(N_pre, size=number_of_inputs)')``.

Selected improvements and bug fixes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Fair default build flags on several architectures (:issue:`1277`). Thanks to Étienne
  Mollier for contributing this feature.
* Better C++ compiler detection on UNIX systems, e.g. with Anaconda installations
  (:issue:`1304`). Thanks to Jan Marker for this contribution.
* Fixed LaTeX output for newer sympy versions (:issue:`1299`). Thanks to Sebastian
  Schmitt for reporting this issue. The problem and its fix is described in detail
  in this `blog post <https://briansimulator.org/posts/2021/bug-hunt-episode-1-broken-latex-output-for-equations/>`_.
* Fixed string representation for units (:issue:`1291`). Recreating a unit from
  its string representation gave wrong results in some corner cases.
* Fix an error during the determination of appropriate C++ compiler flags on Windows
  with Python 3.9 (:issue:`1286`), and fix the detection of a C99-compatible compiler
  on Windows (:issue:`1257`). Thanks to Kyle Johnsen for reporting the errors
  and providing both fixes.
* More robust usage of external constants in C++ standalone code, avoiding clashes
  when the user defines constants with common names like ``x`` (:issue:`1279`). Thanks
  to user ``@wxie2013`` for making us aware of this issue.
* Raise an error if summed variables refer to event-based variables (:issue:`1274`) and
  a general rework of the dependency checks (:issue:`1328`). Thanks to Rohith Varma
  Buddaraju for fixing this issue.
* Fix an error for deactivated spike-emitting objects (e.g. `NeuronGroup`,
  `PoissonGroup`). They continued to emit spikes despite ``active=False`` if they had
  spiked in the last time step of a previous run (:issue:`1319`). Thanks to forum user
  Shencong for making us aware of the issue.
* Avoid warnings about deprecated numpy aliases (:issue:`1273`).
* Avoid a warning about an "ignored attribute shape" in some interactive Python
  consoles (:issue:`1372`).
* Check units for summed variables (:issue:`1361`). Thanks to Jan-Hendrik Schleimer for
  reporting this issue.
* Do not raise an error if synapses use restore instead of Synapses.connect
  (:issue:`1359`). Thanks to forum user SIbanez for reporting this issue.
* Fix indexing for sections in SpatialNeuron (:issue:`1358`). Thanks to Sebastian
  Schmitt for reporting this issue
* Better error messages for missing threshold definition (:issue:`1363`).
* Raise a useful error for ``namespace`` entries that start with an underscore instead
  of failing during compilation if the name clashes with built-in functions
  (:issue:`1362`). Thanks to Denis Alevi for reporting this issue.
* Consistently use include/library directory preferences (:issue:`1353`). The
  preferences can now be used to override the list of include/library directories,
  replacing the inconsistent behavior where they were either prepended (C++ standalone
  mode) or appended (Cython runtime mode) to the default list. Thanks to Denis Alevi for
  opening the discussion on this issue.
* Remove a warning about the difference between Python 2 and Python 3 semantics related
  to division (:issue:`1351`).
* Do not generate spurious ``-.o`` files when checking compiler compatibility
  (:issue:`1348`). For more details, see this
  `blog post <https://briansimulator.org/posts/2021/bug-hunt-episode-2-a-strange-file-appears/>`_.
* Make `~.BrianGlobalPreferences.reset_to_defaults` work again, which was inadvertently
  broken in the Python 2 → 3 transition (:issue:`1342`). Thanks to Denis Alevi for
  reporting and fixing this issue.
* The commands to run and compile the code in C++ standalone mode can now be changed via
  a preference (:issue:`1338`).  This can be useful to run/compile on clusters where
  jobs have to submitted with special commands. Thanks to Denis Alevi for contributing
  this feature.

Backward-incompatible changes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* The ``default_preferences`` file that was part of the Brian installation has been
  removed, since it could lead to  problems when working with development versions of
  Brian, and was overwritten with each update (:issue:`1354`). Users can still use a
  system-wide or per-directory preference file (see :doc:`../advanced/preferences`).
* The preferences `codegen.cpp.include_dirs`, `codegen.cpp.library_dirs`, and
  `codegen.cpp.runtime_library_dirs` now all replace the respective default values.
  Previously they where prepended (C++ standalone mode) or appended (Cython runtime
  mode). Users relying on a combination of the default values and their manually set
  values need to include the default value (e.g.
  ``os.path.join(sys.prefix, 'include')``) manually.

Infrastructure and documentation improvements
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Tagging a release will now automatically upload the release to PyPI via a GitHub
  Action. Versions are automatically determined with
  `versioneer <https://github.com/python-versioneer/python-versioneer>`_ (:issue:`1267`)
  and include more detailed information when using a development version of Brian. See
  :ref:`which_version` for more details.
* The test suite has been moved to GitHub Actions for all operating systems
  (:issue:`1298`). Thanks to Rohith Varma Buddaraju for working on this.
* New :doc:`../examples/frompapers.Jansen_Rit_1995_single_column` (:issue:`1347`),
  contributed by Ruben Tikidji-Hamburyan.
* New :doc:`../examples/synapses.spike_based_homeostasis` (:issue:`1331`), contributed
  by Sebastian Schmitt.
* New :doc:`../examples/advanced.COBAHH_approximated` (:issue:`1309`), contributed by
  Sebastian Schmitt.
* Several new examples covering several Brian usage pattern, e.g. a
  :doc:`minimal C++ standalone script <../examples/standalone.simple_case>`, or
  demonstrations of running multiple simulations in parallel with
  :doc:`Cython <../examples/multiprocessing.01_using_cython>` or
  :doc:`C++ standalone <../examples/multiprocessing.02_using_standalone>`, contributed
  by A. Ziaeemehr.
* Corrected units in :doc:`../examples/frompapers.Kremer_et_al_2011_barrel_cortex`
  (:issue:`1355`). Thanks to Adam Willats for contributing this fix.
* Most of Brian's code base should now use a consistent string formatting style
  (:issue:`1364`), documented in the :doc:`../developer/guidelines/style`.
* Test reports will now show the project directory path for C++ standalone projects
  (:issue:`1336`). Thanks to Denis Alevi for contributing this feature.
* Fix the documentation for C++ compiler references (:issue:`1323`, :issue:`1321`).
  Thanks to Denis Alevi for fixing these issues.
* Examples are now listed in a deterministic order in the documentation (:issue:`1312`),
  and their title is now correctly formatted in the restructured text source
  (:issue:`1311`). Thanks to Felix C. Stegermann for contributing these fixes.
* Document how to plot model functions (e.g. time constants) in complex neuron models
  (:issue:`1308`). Contributed by Sebastian Schmitt.

Contributions
~~~~~~~~~~~~~

Github code, documentation, and issue contributions (ordered by the number of
contributions):

* Marcel Stimberg (`@mstimberg <https://github.com/mstimberg>`_)
* Dan Goodman (`@thesamovar <https://github.com/thesamovar>`_)
* Rohith Varma Buddaraju (`@rohithvarma3000 <https://github.com/rohithvarma3000>`_)
* Denis Alevi (`@denisalevi <https://github.com/denisalevi>`_)
* Dingkun.Liu (`@DingkunLiu <https://github.com/DingkunLiu>`_)
* Ruben Tikidji-Hamburyan (`@rat-h <https://github.com/rat-h>`_)
* Sebastian Schmitt (`@schmitts <https://github.com/schmitts>`_)
* `@ramapati166 <https://github.com/ramapati166>`_
* Jan Marker (`@jangmarker <https://github.com/jangmarker>`_)
* Kyle Johnsen (`@kjohnsen <https://github.com/kjohnsen>`_)
* Abolfazl Ziaeemehr (`@Ziaeemehr <https://github.com/Ziaeemehr>`_)
* Felix Benjamin Kern (`@kernfel <https://github.com/kernfel>`_)
* Yann Zerlaut (`@yzerlaut <https://github.com/yzerlaut>`_)
* Adam (`@Adam-Antios <https://github.com/Adam-Antios>`_)
* `@ShanqMa <https://github.com/ShanqMa>`_
* Ljubica Cimeša (`@LjubicaCimesa <https://github.com/LjubicaCimesa>`_)
* `@adididi <https://github.com/adididi>`_
* VigneswaranC (`@Vigneswaran-Chandrasekaran <https://github.com/Vigneswaran-Chandrasekaran>`_)
* Nunna Lakshmi Saranya (`@18sarru <https://github.com/18sarru>`_)
* Friedemann Zenke (`@fzenke <https://github.com/fzenke>`_)
* `@Alexis-Melot <https://github.com/Alexis-Melot>`_
* Adam Willats (`@awillats <https://github.com/awillats>`_)
* Felix C. Stegerman (`@obfusk <https://github.com/obfusk>`_)
* Eugen Skrebenkov (`@shcecter <https://github.com/shcecter>`_)
* Maurizio DE PITTA (`@mdepitta <https://github.com/mdepitta>`_)
* Simo (`@sivanni <https://github.com/sivanni>`_)
* Peter Quitta (`@peschn <https://github.com/peschn>`_)
* Étienne Mollier (`@emollier <https://github.com/emollier>`_)
* chaddy (`@chaddy1004 <https://github.com/chaddy1004>`_)
* `@DePasquale99 <https://github.com/DePasquale99>`_
* `@albertalbesa <https://github.com/albertalbesa>`_
* Christian Behrens (`@chbehrens <https://github.com/chbehrens>`_)

Other contributions outside of github (ordered alphabetically, apologies to
anyone we forgot...):

* forum user `Shencong <https://brian.discourse.group/u/shencong/>`_
* forum user `SIbanez <https://brian.discourse.group/u/sibanez/>`_

Brian 2.4.1
-----------
This is a bugfix release with a number of small fixes and updates to the continuous
integration testing.

Selected improvements and bug fixes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* The `check_units` decorator can now express that some arguments need to have the same
  units. This mechanism is now used to check the units of the `clip` function
  (:issue:`1234`). Thanks to Felix Kern for notifying us of this issue.
* Using `SpatialNeuron` with Cython no longer raises an unnecessary warning when the
  ``scipy`` library is not installed (:issue:`1230`).
* Raise an error for references to ``N_incoming`` or ``N_outgoing`` in calls to
  `Synapses.connect`. This use is ill-defined and led to compilation errors in previous
  versions (:issue:`1227`). Thanks to Denis Alevi for making us aware of this issue.

Infrastructure and documentation improvements
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Brian no longer officially supports installation on 32bit operating systems.
  Installation via ``pip`` will probably still work, but we are no longer testing this
  configuration (:issue:`1232`).
* Automatic continuous integration tests for Windows now use the
  `Microsoft Azure Pipeline <https://azure.microsoft.com/en-us/services/devops/pipelines/>`_
  infrastructure instead of `Appveyor <https://www.appveyor.com/>`_. This should speed
  up tests by running different configurations in parallel (:issue:`1233`).
* Fix an issue in the test suite that did not handle ``NotImplementedError`` correctly
  anymore after the changes introduced with :issue:`1196`.

Contributions
~~~~~~~~~~~~~
Github code, documentation, and issue contributions (ordered by the number of
contributions):

* Marcel Stimberg (`@mstimberg <https://github.com/mstimberg>`_)
* Dan Goodman (`@thesamovar <https://github.com/thesamovar>`_)
* Denis Alevi (`@denisalevi <https://github.com/denisalevi>`_)
* SK (`@akatav <https://github.com/akatav>`_)

Other contributions outside of github (ordered alphabetically, apologies to
anyone we forgot...):

* Felix B. Kern

Brian 2.4
---------
This new release contains a large number of small improvements and bug fixes. We
recommend all users of Brian 2 to upgrade. The biggest code change of this new version
is that Brian is now Python-3 only (thanks to Ben Evans for working on this).

Selected improvements and bug fixes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Removing objects from networks no longer fails (:issue:`1151`). Thanks to Wilhelm
  Braun for reporting the issue.
* Point currents marked as ``constant over dt`` are now correctly handled
  (:issue:`1160`). Thanks to Andrew Brughera for reporting the issue.
* Elapsed and estimated remaining time are now formatted as hours/minutes/etc.
  in standalone mode as well (:issue:`1162`). Thanks to Rahul Kumar Gupta,
  Syed Osama Hussain, Bhuwan Chandra, and Vigneswaran Chandrasekaran for working
  on this issue as part of the GSoC 2020 application process.
* To prevent log files filling up the disk (:issue:`1188`), their file size is now limited to
  10MB (configurable via the `logging.file_log_max_size` preference). Thanks to
  Rike-Benjamin Schuppner for contributing this feature.
* Add more complete support for operations on `.VariableView` attributes. Previously,
  operations like ``group.v**2`` failed and required the workaround ``group.v[:]**2`` (:issue:`1195`)
* Fix a number of compatibility issues with newer versions of numpy and sympy, and document our policy
  on :doc:`compatibility`.
* File locking (used to avoid problems when running multiple simulations in parallel) is now based on
  Benedikt Schmitt's `py-filelock <https://github.com/benediktschmitt/py-filelock>`_ package, which
  should hopefully make it more robust.
* String expressions in `Synapses.connect` are now checked for syntactic correctness
  before handing them over to the code generation process, improving error messages.
  Thanks to Denis Alevi for making us aware of this issue. (:issue:`1224`)
* Avoid duplicate messages in "chained" exceptions. Also introduces a new preference
  `logging.display_brian_error_message` to switch off the "Brian 2 encountered an unexpected
  error" message (:issue:`1196`).
* Brian's unit system now correctly deals with matrix multiplication, including the
  ``@`` operator (:issue:`1216`). Thanks to `@kjohnsen <https://github.com/kjohnsen>`_
  for reporting this issue.
* Avoid turning all integer numbers in equations into floating point values (:issue:`1202`).
  Thanks to Marco K. for making us aware of this issue.
* New attributes `.Synapses.N_outgoing_pre` and `.Synapses.N_incoming_post` to access
  the number of synapses per pre-/post-synaptic cell (see
  :ref:`accessing_synaptic_variables` for details; :issue:`1225`)

Contributions
~~~~~~~~~~~~~
Github code, documentation, and issue contributions (ordered by the number of
contributions):

* Marcel Stimberg (`@mstimberg <https://github.com/mstimberg>`_)
* Ben Evans (`@bdevans <https://github.com/bdevans>`_)
* Dan Goodman (`@thesamovar <https://github.com/thesamovar>`_)
* Denis Alevi (`@denisalevi <https://github.com/denisalevi>`_)
* Rike-Benjamin Schuppner (`@Debilski <https://github.com/Debilski>`_)
* Syed Osama Hussain (`@Syed-Osama-Hussain <https://github.com/Syed-Osama-Hussain>`_)
* VigneswaranC (`@Vigneswaran-Chandrasekaran <https://github.com/Vigneswaran-Chandrasekaran>`_)
* Tushar (`@smalltimer <https://github.com/smalltimer>`_)
* Felix Hoffmann (`@felix11h <https://github.com/felix11h>`_)
* Rahul Kumar Gupta (`@rahuliitg <https://github.com/rahuliitg>`_)
* Dominik Spicher (`@dspicher <https://github.com/dspicher>`_)
* `@nfzd <https://github.com/nfzd>`_
* `@Snow-Crash <https://github.com/Snow-Crash>`_
* `@cnjackhu <https://github.com/cnjackhu>`_
* `@neurologic <https://github.com/neurologic>`_
* `@kjohnsen <https://github.com/kjohnsen>`_
* Ashwin Viswanathan Kannan (`@ashwin4ever <https://github.com/ashwin4ever>`_)
* Bhuwan Chandra (`@zeph1yr <https://github.com/zeph1yr>`_)
* Wilhelm Braun (`@wilhelmbraun <https://github.com/wilhelmbraun>`_)
* `@cortical-iv <https://github.com/cortical-iv>`_
* Eugen Skrebenkov (`@shcecter <https://github.com/shcecter>`_)
* `@Aman-A <https://github.com/Aman-A>`_
* Felix Benjamin Kern (`@kernfel <https://github.com/kernfel>`_)
* Francesco Battaglia (`@fpbattaglia <https://github.com/fpbattaglia>`_)
* Shivam Chitnis (`@shivChitinous <https://github.com/shivChitinous>`_)
* Marco K. (`@spokli <https://github.com/spokli>`_)
* `@jcmharry <https://github.com/jcmharry>`_
* Friedemann Zenke (`@fzenke <https://github.com/fzenke>`_)
* `@Adam-Antios <https://github.com/Adam-Antios>`_

Other contributions outside of github (ordered alphabetically, apologies to
anyone we forgot...):

* Andrew Brughera
* William Xavier


.. _brian2.3:

Brian 2.3
---------
This release contains the usual mix of bug fixes and new features (see below), but
also makes some important changes to the Brian 2 code base to pave the way for
the full Python 2 -> 3 transition (the source code is now directly compatible with
Python 2 and Python 3, without the need for any translation at install time). Please
note that this release will be the last release that supports
Python 2, given that Python 2 reaches end-of-life in January 2020. Brian now also uses
`pytest <https://docs.pytest.org>`_ as its testing framework, since the previously used
``nose`` package is not maintained anymore. Since `brian2hears <https://brian2hears.readthedocs.io>`_
has been released as an independent package, using `brian2.hears` as a "bridge" to
Brian 1's ``brian.hears`` package is now deprecated.

Finally, the Brian project has adopted the "Contributor Covenant"
:doc:`code_of_conduct`, pledging "to make participation in our community a
harassment-free experience for everyone".

New features
~~~~~~~~~~~~
* The `restore` function can now also restore the state of the random number generator,
  allowing for exact reproducibility of stochastic simulations (:issue:`1134`)
* The functions `expm1`, `log1p`, and `exprel` can now be used (:issue:`1133`)
* The system for calling random number generating functions has been generalized (see
  :ref:`function_vectorisation`), and a new `poisson` function for Poisson-distrubted
  random numbers has been added (:issue:`1111`)
* New versions of Visual Studio are now supported for standalone mode on Windows
  (:issue:`1135`)

Selected improvements and bug fixes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* `~brian2.groups.group.Group.run_regularly` operations are now included in the network, even if they are
  created after the parent object was added to the network (:issue:`1009`).
  Contributed by `Vigneswaran Chandrasekaran <https://github.com/Vigneswaran-Chandrasekaran>`_.
* No longer incorrectly classify some equations as having "multiplicative noise" (:issue:`968`).
  Contributed by `Vigneswaran Chandrasekaran <https://github.com/Vigneswaran-Chandrasekaran>`_.
* Brian is now compatible with Python 3.8 (:issue:`1130`), and doctests are compatible
  with numpy 1.17 (:issue:`1120`)
* Progress reports for repeated runs have been fixed (:issue:`1116`), thanks to Ronaldo
  Nunes for reporting the issue.
* `SpikeGeneratorGroup` now correctly works with `restore` (:issue:`1084`), thanks to
  Tom Achache for reporting the issue.
* An indexing problem in `PopulationRateMonitor` has been fixed (:issue:`1119`).
* Handling of equations referring to ``-inf`` has been fixed (:issue:`1061`).
* Long simulations recording more than ~2 billion data points no longer crash with a
  segmentation fault (:issue:`1136`), thanks to Rike-Benjamin Schuppner for reporting
  the issue.

Backward-incompatible changes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* The fix for `~brian2.groups.group.Group.run_regularly` operations (:issue:`1009`, see above) entails
  a change in how objects are stored within `Network` objects. Previously, `Network.objects` stored a
  complete list of all objects, including objects such as `~brian2.groups.neurongroup.StateUpdater` that
  – often invisible to the user – are a part of major objects such as
  `NeuronGroup`. Now, `Network.objects` only stores the objects directly
  provided by the user (`NeuronGroup`, `Synapses`, `StateMonitor`, ...), the
  dependent objects (`~brian2.groups.neurongroup.StateUpdater`, `~brian2.groups.neurongroup.Thresholder`, ...) are taken into account
  at the time of the run. This might break code in some corner cases, e.g.
  when removing a `~brian2.groups.neurongroup.StateUpdater` from `Network.objects` via `Network.remove`.
* The `brian2.hears` interface to Brian 1's ``brian.hears`` package has been deprecated.

Infrastructure and documentation improvements
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* The same code base is used on Python 2 and Python 3 (:issue:`1073`).
* The test framework uses ``pytest`` (:issue:`1127`).
* We have adapoted a Code of Conduct (:issue:`1113`), thanks to Tapasweni Pathak for the
  suggestion.

Contributions
~~~~~~~~~~~~~
Github code, documentation, and issue contributions (ordered by the number of
contributions):

* Marcel Stimberg (`@mstimberg <https://github.com/mstimberg>`_)
* Dan Goodman (`@thesamovar <https://github.com/thesamovar>`_)
* Vigneswaran Chandrasekaran (`@Vigneswaran-Chandrasekaran <https://github.com/Vigneswaran-Chandrasekaran>`_)
* Moritz Orth (`@morth <https://github.com/morth>`_)
* Tristan Stöber (`@tristanstoeber <https://github.com/tristanstoeber>`_)
* `@ulyssek <https://github.com/ulyssek>`_
* Wilhelm Braun (`@wilhelmbraun <https://github.com/wilhelmbraun>`_)
* `@flomlo <https://github.com/flomlo>`_
* Rike-Benjamin Schuppner (`@Debilski <https://github.com/Debilski>`_)
* `@sdeiss <https://github.com/sdeiss>`_
* Ben Evans (`@bdevans <https://github.com/bdevans>`_)
* Tapasweni Pathak (`@tapaswenipathak <https://github.com/tapaswenipathak>`_)
* `@jonathanoesterle <https://github.com/jonathanoesterle>`_
* Richard C Gerkin (`@rgerkin <https://github.com/rgerkin>`_)
* Christian Behrens (`@chbehrens <https://github.com/chbehrens>`_)
* Romain Brette (`@romainbrette <https://github.com/romainbrette>`_)
* XiaoquinNUDT (`@XiaoquinNUDT <https://github.com/XiaoquinNUDT>`_)
* Dylan Muir (`@DylanMuir <https://github.com/DylanMuir>`_)
* Aleksandra Teska (`@alTeska <https://github.com/alTeska>`_)
* Felix Z. Hoffmann (`@felix11h <https://github.com/felix11h>`__)
* `@baixiaotian63648995 <https://github.com/baixiaotian63648995>`_
* Carlos de la Torre (`@c-torre <https://github.com/c-torre>`_)
* Sam Mathias (`@sammosummo <https://github.com/sammosummo>`_)
* `@Marghepano <https://github.com/Marghepano>`_
* Simon Brodeur (`@sbrodeur <https://github.com/sbrodeur>`_)
* Alex Dimitrov (`@adimitr <https://github.com/adimitr>`_)


Other contributions outside of github (ordered alphabetically, apologies to
anyone we forgot...):

* Ronaldo Nunes
* Tom Achache

Brian 2.2.2.1
-------------
This is a bug-fix release that fixes several bugs and adds a few minor new
features. We recommend all users of Brian 2 to upgrade.

As always, please report bugs or suggestions to the github bug tracker
(https://github.com/brian-team/brian2/issues) or to the brian-development
mailing list (brian-development@googlegroups.com).

[Note that the original upload of this release was version 2.2.2, but due to
a mistake in the released archive, it has been uploaded again as version 2.2.2.1]

Selected improvements and bug fixes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Fix an issue with the synapses generator syntax (:issue:`1037`).
* Fix an incorrect error when using a `SpikeGeneratorGroup` with a long period
  (:issue:`1041`). Thanks to Kévin Cuallado-Keltsch for reporting this issue.
* Improve the performance of `SpikeGeneratorGroup` by avoiding a conversion
  from time to integer time step (:issue:`1043`). This time step is now also
  available to user code as ``t_in_timesteps``.
* Function definitions for weave/Cython/C++ standalone can now declare
  additional header files and libraries. They also support a new ``sources``
  argument to use a function definition from an external file. See the
  :doc:`../advanced/functions` documentation for details.
* For convenience, single-neuron subgroups can now be created with a single
  index instead of with a slice (e.g. ``neurongroup[3]`` instead of
  ``neurongroup[3:4]``).
* Fix an issue when ``-inf`` is used in an equation (:issue:`1061`).

Contributions
~~~~~~~~~~~~~
Github code, documentation, and issue contributions (ordered by the number of
contributions):

* Marcel Stimberg (`@mstimberg <https://github.com/mstimberg>`_)
* Dan Goodman (`@thesamovar <https://github.com/thesamovar>`_)
* Felix Z. Hoffmann (`@Felix11H <https://github.com/Felix11H>`_)
* `@wjx0914 <https://github.com/wjx0914>`_
* Kévin Cuallado-Keltsch (`@kevincuallado <https://github.com/kevincuallado>`_)
* Romain Cazé (`@rcaze <https://github.com/rcaze>`_)
* Daphne (`@daphn3cor <https://github.com/daphn3cor>`_)
* Erik (`@parenthetical-e <https://github.com/parenthetical-e>`_)
* `@RahulMaram <https://github.com/RahulMaram>`_
* Eghbal Hosseini (`@eghbalhosseini <https://github.com/eghbalhosseini>`_)
* Martino Sorbaro (`@martinosorb <https://github.com/martinosorb>`_)
* Mihir Vaidya (`@MihirVaidya94 <https://github.com/MihirVaidya94>`_)
* `@hellolingling <https://github.com/hellolingling>`_
* Volodimir Slobodyanyuk (`@vslobody <https://github.com/vslobody>`_)
* Peter Duggins (`@psipeter <https://github.com/psipeter>`_)


Brian 2.2.1
-----------
This is a bug-fix release that fixes a few minor bugs and incompatibilites with
recent versions of the dependencies. We recommend all users of Brian 2 to
upgrade.

As always, please report bugs or suggestions to the github bug tracker
(https://github.com/brian-team/brian2/issues) or to the brian-development
mailing list (brian-development@googlegroups.com).

Selected improvements and bug fixes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Work around problems with the latest version of ``py-cpuinfo`` on Windows
  (:issue:`990`, :issue:`1020`) and no longer require it for Linux and OS X.
* Avoid warnings with newer versions of Cython (:issue:`1030`) and correctly
  build the Cython spike queue for Python 3.7 (:issue:`1026`), thanks to Fleur
  Zeldenrust and Ankur Sinha for reporting these issues.
* Fix error messages for ``SyntaxError`` exceptions in jupyter notebooks
  (:issue:`#964`).

Dependency and packaging changes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Conda packages in `conda-forge <https://conda-forge.org/>`_ are now avaible
  for Python 3.7 (but no longer for Python 3.5).
* Linux and OS X no longer depend on the ``py-cpuinfo`` package.
* Source packages on `pypi <https://pypi.org/>`_ now require a recent Cython
  version for installation.

Contributions
~~~~~~~~~~~~~
Github code, documentation, and issue contributions (ordered by the number of
contributions):

* Marcel Stimberg (`@mstimberg <https://github.com/mstimberg>`_)
* Dan Goodman (`@thesamovar <https://github.com/thesamovar>`_)
* Christopher (`@Chris-Currin <https://github.com/Chris-Currin>`_)
* Peter Duggins (`@psipeter <https://github.com/psipeter>`_)
* Paola Suárez (`@psrmx <https://github.com/psrmx>`_)
* Ankur Sinha (`@sanjayankur31 <https://github.com/sanjayankur31>`_)
* `@JingjinW <https://github.com/JingjinW>`_
* Denis Alevi (`@denisalevi <https://github.com/denisalevi>`_)
* `@lemonade117 <https://github.com/lemonade117>`_
* `@wjx0914 <https://github.com/wjx0914>`_
* Sven Leach (`@SvennoNito <https://github.com/SvennoNito>`_)
* svadams (`@svadams <https://github.com/svadams>`_)
* `@ghaessig <https://github.com/ghaessig>`_
* Varshith Sreeramdass (`@varshiths <https://github.com/varshiths>`_)


Brian 2.2
---------
This releases fixes a number of important bugs and comes with a number of
performance improvements. It also makes sure that simulation no longer give
platform-dependent results for certain corner cases that involve the division of
integers. These changes can break backwards-compatiblity in certain cases, see
below.  We recommend all users of Brian 2 to upgrade.

As always, please report bugs or suggestions to the github bug tracker
(https://github.com/brian-team/brian2/issues) or to the brian-development
mailing list (brian-development@googlegroups.com).

Selected improvements and bug fixes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Divisions involving integers now use floating point division, independent of
  Python version and code generation target. The ``//`` operator can now used in
  equations and expressions to denote flooring division (:issue:`984`).
* Simulations can now use single precision instead of double precision floats in
  simulations (:issue:`981`, :issue:`1004`). This is mostly intended for use
  with GPU code generation targets.
* The `~brian2.core.functions.timestep`, introduced in version 2.1.3, was
  further optimized for performance, making the refractoriness calculation
  faster (:issue:`996`).
* The ``lastupdate`` variable is only automatically added to synaptic models
  when event-driven equations are used, reducing the memory and performance
  footprint of simple synaptic models (:issue:`1003`). Thanks to Denis Alevi
  for bringing this up.
* A ``from brian2 import *`` imported names unrelated to Brian, and overwrote
  some Python builtins such as ``dir`` (:issue:`969`). Now, fewer names are
  imported (but note that this still includes numpy and plotting tools:
  :doc:`../user/import`).
* The ``exponential_euler`` state updater is no longer failing for systems of
  equations with differential equations that have trivial, constant
  right-hand-sides (:issue:`1010`). Thanks to Peter Duggins for making us aware
  of this issue.

Backward-incompatible changes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Code that divided integers (e.g. ``N/10``) with a C-based code generation
  target, or with the ``numpy`` target on Python 2, will now use floating point
  division instead of flooring division (i.e., Python 3 semantics). A warning
  will notify the user of this change, use either the flooring division operator
  (``N//10``), or the ``int`` function (``int(N/10)``) to make the expression
  unambiguous.
* Code that directly referred to the ``lastupdate`` variable in synaptic
  statements, without using any event-driven variables, now has to manually add
  ``lastupdate : second`` to the equations and update the variable at the end
  of ``on_pre`` and/or ``on_post`` with ``lastupdate = t``.
* Code that relied on ``from brian2 import *`` also importing unrelated names
  such as ``sympy``, now has to import such names explicitly.

Documentation improvements
~~~~~~~~~~~~~~~~~~~~~~~~~~
* Various small fixes and additions (e.g. installation instructions, available
  functions, fixes in examples)
* A new example, :doc:`Izhikevich 2007 <../examples/frompapers.Izhikevich_2007>`,
  provided by `Guillaume Dumas <https://github.com/deep-introspection>`_.

Contributions
~~~~~~~~~~~~~
Github code, documentation, and issue contributions (ordered by the number of
contributions):

* Marcel Stimberg (`@mstimberg <https://github.com/mstimberg>`_)
* Dan Goodman (`@thesamovar <https://github.com/thesamovar>`_)
* Denis Alevi (`@denisalevi <https://github.com/denisalevi>`_)
* Thomas Nowotny (`@tnowotny <https://github.com/tnowotny>`_)
* `@neworderofjamie <https://github.com/neworderofjamie>`_
* Paul Brodersen (`@paulbrodersen <https://github.com/paulbrodersen>`_)
* `@matrec4 <https://github.com/matrec4>`_
* svadams (`@svadams <https://github.com/svadams>`_)
* XiaoquinNUDT (`@XiaoquinNUDT <https://github.com/XiaoquinNUDT>`_)
* Peter Duggins (`@psipeter <https://github.com/psipeter>`_)
* `@nh17937 <https://github.com/nh17937>`_
* Patrick Nave (`@pnave95 <https://github.com/pnave95>`_)
* `@AI-pha <https://github.com/AI-pha>`_
* Guillaume Dumas (`@deep-introspection <https://github.com/deep-introspection>`_)
* `@godelicbach <https://github.com/godelicbach>`_
* `@galharth <https://github.com/galharth>`_


Brian 2.1.3.1
-------------
This is a bug-fix release that fixes two bugs in the recent 2.1.3 release:

* Fix an inefficiency in the newly introduced `~brian2.core.functions.timestep`
  function when using the ``numpy`` target (:issue:`965`)
* Fix inefficiencies in the unit system that could lead to slow operations
  and high memory use (:issue:`967`). Thanks to Kaustab Pal for making us
  aware of the issue.

Brian 2.1.3
-----------
This is a bug-fix release that fixes a number of important bugs (see below),
but does not introduce any new features. We recommend all users of Brian 2 to
upgrade.

As always, please report bugs or suggestions to the github bug tracker
(https://github.com/brian-team/brian2/issues) or to the brian-development
mailing list (brian-development@googlegroups.com).

Selected improvements and bug fixes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- The Cython cache on disk now uses significantly less space by deleting
  unnecessary source files (set the `codegen.runtime.cython.delete_source_files`
  preference to ``False`` if you want to keep these files for debugging). In
  addition, a warning will be given when the Cython or weave cache exceeds a
  configurable size (`codegen.max_cache_dir_size`). The
  `~brian2.__init__.clear_cache` function is provided to delete files from the
  cache (:issue:`914`).
- The C++ standalone mode now respects the ``profile`` option and therefore no
  longer collects profiling information by default. This can speed up
  simulations in certain cases (:issue:`935`).
- The exact number of time steps that a neuron stays in the state of
  refractoriness after a spike could vary by up to one time step when the
  requested refractory time was a multiple of the simulation time step. With
  this fix, the number of time steps is ensured to be as expected by making
  use of a new `~brian2.core.functions.timestep` function that avoids floating
  point rounding issues (:issue:`949`, first reported by
  `@zhouyanasd <https://github.com/zhouyanasd>`_ in issue :issue:`943`).
- When `restore` was called twice for a network, spikes that were not yet
  delivered to their target were not restored correctly (:issue:`938`, reported by
  `@zhouyanasd <https://github.com/zhouyanasd>`_).
- `SpikeGeneratorGroup` now uses a more efficient method for sorting spike
  indices and times, leading to a much faster preparation time for groups that
  store many spikes (:issue:`948`).
- Fix a memory leak in `TimedArray` (:issue:`923`, reported by Wilhelm Braun).
- Fix an issue with summed variables targetting subgroups (:issue:`925`,
  reported by `@AI-pha <https://github.com/AI-pha>`_).
- Fix the use of `~brian2.groups.group.Group.run_regularly` on subgroups
  (:issue:`922`, reported by `@AI-pha <https://github.com/AI-pha>`_).
- Improve performance for `SpatialNeuron` by removing redundant computations
  (:issue:`910`, thanks to `Moritz Augustin <https://github.com/moritzaugustin>`_
  for making us aware of the issue).
- Fix linked variables that link to scalar variables (:issue:`916`)
- Fix warnings for numpy 1.14 and avoid compilation issues when switching
  between versions of numpy (:issue:`913`)
- Fix problems when using logical operators in code generated for the numpy
  target which could lead to issues such as wrongly connected synapses
  (:issue:`901`, :issue:`900`).

Backward-incompatible changes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- No longer allow ``delay`` as a variable name in a synaptic model to avoid
  ambiguity with respect to the synaptic delay. Also no longer allow access to
  the ``delay`` variable in synaptic code since there is no way to distinguish
  between pre- and post-synaptic delay (:issue:`927`, reported by Denis Alevi).
- Due to the changed handling of refractoriness (see bug fixes above),
  simulations that make use of refractoriness will possibly no longer give
  exactly the same results. The preference `legacy.refractory_timing` can
  be set to ``True`` to reinstate the previous behaviour.

Infrastructure and documentation improvements
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- From this version on, conda packages will be available on
  `conda-forge <https://conda-forge.org/>`_. For a limited time, we will copy
  over packages to the ``brian-team`` channel as well.
- Conda packages are no longer tied to a specific numpy version (PR :issue:`954`)
- New example (:doc:`Brunel & Wang, 2001 <../examples/frompapers.Brunel_Wang_2001>`)
  contributed by `Teo Stocco <https://github.com/zifeo>`_ and
  `Alex Seeholzer <https://github.com/flinz>`_.

Contributions
~~~~~~~~~~~~~
Github code, documentation, and issue contributions (ordered by the number of
contributions):

* Marcel Stimberg (`@mstimberg <https://github.com/mstimberg>`_)
* Dan Goodman (`@thesamovar <https://github.com/thesamovar>`_)
* Teo Stocco (`@zifeo <https://github.com/zifeo>`_)
* Dylan Muir (`@DylanMuir <https://github.com/DylanMuir>`_)
* scarecrow (`@zhouyanasd <https://github.com/zhouyanasd>`_)
* `@fuadfukhasyi <https://github.com/fuadfukhasyi>`_
* Aditya Addepalli (`@Dyex719 <https://github.com/Dyex719>`_)
* Kapil kumar (`@kapilkd13 <https://github.com/kapilkd13>`_)
* svadams (`@svadams <https://github.com/svadams>`_)
* Vafa Andalibi (`@Vafa-Andalibi <https://github.com/Vafa-Andalibi>`_)
* Sven Leach (`@SvennoNito <https://github.com/SvennoNito>`_)
* `@matrec4 <https://github.com/matrec4>`_
* `@jarishna <https://github.com/jarishna>`_
* `@AI-pha <https://github.com/AI-pha>`_
* `@xdzhangxuejun <https://github.com/xdzhangxuejun>`_
* Denis Alevi (`@denisalevi <https://github.com/denisalevi>`_)
* Paul Pfeiffer (`@pfeffer90 <https://github.com/pfeffer90>`_)
* Romain Brette (`@romainbrette <https://github.com/romainbrette>`_)
* `@hustyanghui <https://github.com/hustyanghui>`_
* Adrien F. Vincent (`@afvincent <https://github.com/afvincent>`_)
* `@ckemere <https://github.com/ckemere>`_
* `@evearmstrong <https://github.com/evearmstrong>`_
* Paweł Kopeć (`@pawelkopec <https://github.com/pawelkopec>`_)
* Moritz Augustin (`@moritzaugustin <https://github.com/moritzaugustin>`_)
* Bart (`@louwers <https://github.com/louwers>`_)
* `@amarsdd <https://github.com/amarsdd>`_
* `@ttxtea <https://github.com/ttxtea>`_
* Maria Cervera (`@MariaCervera <https://github.com/MariaCervera>`_)
* ouyangxinrong (`@longzhixin <https://github.com/longzhixin>`_)

Other contributions outside of github (ordered alphabetically, apologies to
anyone we forgot...):

* Wilhelm Braun

Brian 2.1.2
-----------
This is another bug fix release that fixes a major bug in `Equations`'
substitution mechanism (:issue:`896`). Thanks to Teo Stocco for reporting this issue.

Brian 2.1.1
-----------
This is a bug fix release that re-activates parts of the caching mechanism for
code generation that had been erroneously deactivated in the previous release.

Brian 2.1
---------
This release introduces two main new features: a new "GSL integration" mode for
differential equation that offers to integrate equations with variable-timestep
methods provided by the GNU Scientific Library, and caching for the run
preparation phase that can significantly speed up simulations. It also comes
with a newly written tutorial, as well as additional documentation and examples.

As always, please report bugs or suggestions to the github bug tracker
(https://github.com/brian-team/brian2/issues) or to the brian-development
mailing list (brian-development@googlegroups.com).

New features
~~~~~~~~~~~~
* New numerical integration methods with variable time-step integration, based
  on the GNU Scientific Library (see :ref:`numerical_integration`). Contributed
  by `Charlee Fletterman <https://github.com/CharleeSF>`_, supported by 2017's
  `Google Summer of Code <https://summerofcode.withgoogle.com>`_ program.
* New caching mechanism for the code generation stage (application of numerical
  integration algorithms, analysis of equations and statements, etc.), reducing
  the preparation time before the actual run, in particular for simulations with
  multiple `run` statements.

Selected improvements and bug fixes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Fix a rare problem in Cython code generation caused by missing type information (:issue:`893`)
* Fix warnings about improperly closed files on Python 3.6 (:issue:`892`;
  reported and fixed by `Teo Stocco <https://github.com/zifeo>`_)
* Fix an error when using numpy integer types for synaptic indexing (:issue:`888`)
* Fix an error in numpy codegen target, triggered when assigning to a variable with an unfulfilled condition (:issue:`887`)
* Fix an error when repeatedly referring to subexpressions in multiline statements (:issue:`880`)
* Shorten long arrays in warning messages (:issue:`874`)
* Enable the use of ``if`` in the shorthand generator syntax for `Synapses.connect` (:issue:`873`)
* Fix the meaning of ``i`` and ``j`` in synapses connecting to/from other synapses (:issue:`854`)

Backward-incompatible changes and deprecations
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* In C++ standalone mode, information about the number of synapses and spikes
  will now only be displayed when built with ``debug=True`` (:issue:`882`).
* The ``linear`` state updater has been renamed to ``exact`` to avoid confusion
  (:issue:`877`). Users are encouraged to use ``exact``, but the name ``linear``
  is still available and does not raise any warning or error for now.
* The ``independent`` state updater has been marked as deprecated and might be
  removed in future versions.

Infrastructure and documentation improvements
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* A new, more advanced, :doc:`tutorial <../resources/tutorials/3-intro-to-brian-simulations>` "about
  managing the slightly more complicated tasks that crop up in research
  problems, rather than the toy examples we’ve been looking at so far."
* Additional documentation on :doc:`../advanced/custom_events` and
  :doc:`../user/converting_from_integrated_form` (including example code for
  typical synapse models).
* New example code reproducing published findings (:doc:`Platkiewicz and Brette, 2011 <../examples/frompapers.Platkiewicz_Brette_2011>`;
  :ref:`Stimberg et al., 2018 <frompapers.stimberg_et_al_2018>`)
* Fixes to the sphinx documentation creation process, the documentation can be downloaded as a PDF once again (705 pages!)
* Conda packages now have support for numpy 1.13 (but support for numpy 1.10 and 1.11 has been removed)

Contributions
~~~~~~~~~~~~~
Github code, documentation, and issue contributions (ordered by the number of
contributions):

* Marcel Stimberg (`@mstimberg <https://github.com/mstimberg>`_)
* Charlee Fletterman (`@CharleeSF <https://github.com/CharleeSF>`_)
* Dan Goodman (`@thesamovar <https://github.com/thesamovar>`_)
* Teo Stocco (`@zifeo <https://github.com/zifeo>`_)
* `@k47h4 <https://github.com/k47h4>`_

Other contributions outside of github (ordered alphabetically, apologies to
anyone we forgot...):

* Chaofei Hong
* Lucas ("lucascdst")


Brian 2.0.2.1
-------------

Fixes a bug in the tutorials' HMTL rendering on readthedocs.org (code blocks
were not displayed). Thanks to Flora Bouchacourt for making us aware of this
problem.

Brian 2.0.2
-----------

New features
~~~~~~~~~~~~
* `molar` and `liter` (as well as `litre`, scaled versions of the former, and a
  few useful abbreviations such as `mM`) have been added as new units (:issue:`574`).
* A new module `brian2.units.constants` provides physical constants such as the
  Faraday constants or the gas constant (see :ref:`constants` for details).
* `SpatialNeuron` now supports non-linear membrane currents (e.g.
  Goldman–Hodgkin–Katz equations) by linearizing them with respect to v.
* Multi-compartmental models can access the capacitive current via `Ic` in
  their equations (:issue:`677`)
* A new function `scheduling_summary` that displays information about the
  scheduling of all objects (see :ref:`scheduling` for details).
* Introduce a new preference to pass arguments to the ``make``/``nmake`` command
  in C++ standalone mode (`devices.cpp_standalone.extra_make_args_unix` for
  Linux/OS X and `devices.cpp_standalone.extra_make_args_windows` for Windows).
  For Linux/OS X, this enables parallel compilation by default.
* Anaconda packages for Brian 2 are now available for Python 3.6 (but Python 3.4
  support has been removed).

Selected improvements and bug fixes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Work around low performance for certain C++ standalone simulations on Linux,
  due to a bug in glibc (see :issue:`803`). Thanks to Oleg Strikov
  (`@xj8z <https://github.com/xj8z>`_) for debugging this
  issue and providing the workaround that is now in use.
* Make exact integration of ``event-driven`` synaptic variables use the
  ``linear`` numerical integration algorithm (instead of ``independent``),
  fixing rare occasions where integration failed despite the equations being
  linear (:issue:`801`).
* Better error messages for incorrect unit definitions in equations.
* Various fixes for the internal representation of physical units and the
  unit registration system.
* Fix a bug in the assignment of state variables in subtrees of `SpatialNeuron`
  (:issue:`822`)
* Numpy target: fix an indexing error for a `SpikeMonitor` that records from a
  subgroup (:issue:`824`)
* Summed variables targeting the same post-synaptic variable now raise an error
  (previously, only the one executed last was taken into account, see :issue:`766`).
* Fix bugs in synapse generation affecting Cython (:issue:`781`) respectively numpy
  (:issue:`835`)
* C++ standalone simulations with many objects no longer fail on Windows (:issue:`787`)

Backwards-incompatible changes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* `celsius` has been removed as a unit, because it was ambiguous in its relation
  to `kelvin` and gave wrong results when used as an absolute temperature (and
  not a temperature difference). For temperature differences, you can directly
  replace `celsius` by `kelvin`. To convert an absolute temperature in degree
  Celsius to Kelvin, add the `zero_celsius` constant from
  `brian2.units.constants` (:issue:`817`).
* State variables are no longer allowed to have names ending in ``_pre`` or
  ``_post`` to avoid confusion with references to pre- and post-synaptic
  variables in `Synapses` (:issue:`818`)

Changes to default settings
~~~~~~~~~~~~~~~~~~~~~~~~~~~
* In C++ standalone mode, the ``clean`` argument now defaults to ``False``,
  meaning that ``make clean`` will not be executed by default before building
  the simulation. This avoids recompiling all files for unchanged simulations
  that are executed repeatedly. To return to the previous behaviour, specify
  ``clean=True`` in the ``device.build`` call (or in ``set_device`` if your
  script does not have an explicit ``device.build``).

Contributions
~~~~~~~~~~~~~
Github code, documentation, and issue contributions (ordered by the number of
contributions):

* Marcel Stimberg (`@mstimberg <https://github.com/mstimberg>`_)
* Dan Goodman (`@thesamovar <https://github.com/thesamovar>`_)
* Thomas McColgan (`@phreeza <https://github.com/phreeza>`_)
* Daan Sprenkels (`@dsprenkels <https://github.com/dsprenkels>`_)
* Romain Brette (`@romainbrette <https://github.com/romainbrette>`_)
* Oleg Strikov (`@xj8z <https://github.com/xj8z>`_)
* Charlee Fletterman (`@CharleeSF <https://github.com/CharleeSF>`_)
* Meng Dong (`@whenov <https://github.com/whenov>`_)
* Denis Alevi (`@denisalevi <https://github.com/denisalevi>`_)
* Mihir Vaidya (`@MihirVaidya94 <https://github.com/MihirVaidya94>`_)
* Adam (`@ffa <https://github.com/ffa>`_)
* Sourav Singh (`@souravsingh <https://github.com/souravsingh>`_)
* Nick Hale (`@nik849 <https://github.com/nik849>`_)
* Cody Greer (`@Cody-G <https://github.com/Cody-G>`_)
* Jean-Sébastien Dessureault (`@jsdessureault <https://github.com/jsdessureault>`_)
* Michele Giugliano (`@mgiugliano <https://github.com/mgiugliano>`_)
* Teo Stocco (`@zifeo <https://github.com/zifeo>`_)
* Edward Betts (`@EdwardBetts <https://github.com/EdwardBetts>`_)

Other contributions outside of github (ordered alphabetically, apologies to
anyone we forgot...):

* Christopher Nolan
* Regimantas Jurkus
* Shailesh Appukuttan

Brian 2.0.1
-----------
This is a bug-fix release that fixes a number of important bugs (see below),
but does not introduce any new features. We recommend all users of Brian 2 to
upgrade.

As always, please report bugs or suggestions to the github bug tracker
(https://github.com/brian-team/brian2/issues) or to the brian-development
mailing list (brian-development@googlegroups.com).

Improvements and bug fixes
~~~~~~~~~~~~~~~~~~~~~~~~~~
* Fix `PopulationRateMonitor` for recordings from subgroups (:issue:`772`)
* Fix `SpikeMonitor` for recordings from subgroups (:issue:`777`)
* Check that string expressions provided as the ``rates`` argument for
  `PoissonGroup` have correct units.
* Fix compilation errors when multiple run statements with different ``report``
  arguments are used in C++ standalone mode.
* Several documentation updates and fixes

Contributions
~~~~~~~~~~~~~
Code and documentation contributions (ordered by the number of commits):

* Marcel Stimberg (`@mstimberg <https://github.com/mstimberg>`_)
* Dan Goodman (`@thesamovar <https://github.com/thesamovar>`_)
* Alex Seeholzer (`@flinz <https://github.com/flinz>`_)
* Meng Dong (`@whenov <https://github.com/whenov>`_)

Testing, suggestions and bug reports (ordered alphabetically, apologies to
anyone we forgot...):

* Myung Seok Shim
* Pamela Hathway


Brian 2.0 (changes since 1.4)
-----------------------------

Major new features
~~~~~~~~~~~~~~~~~~

* Much more flexible model definitions. The behaviour of all model elements
  can now be defined by arbitrary equations specified in standard
  mathematical notation.

* Code generation as standard. Behind the scenes, Brian automatically generates
  and compiles C++ code to simulate your model, making it much faster.

* "Standalone mode". In this mode, Brian generates a complete C++ project tree
  that implements your model. This can be then be compiled and run entirely
  independently of Brian. This leads to both highly efficient code, as well as
  making it much easier to run simulations on non-standard computational
  hardware, for example on robotics platforms.

* Multicompartmental modelling.

* Python 2 and 3 support.

New features
~~~~~~~~~~~~

* Installation should now be much easier, especially if using the
  Anaconda Python distribution. See :doc:`/introduction/install`.
* Many improvements to `Synapses` which replaces the old ``Connection``
  object in Brian 1. This includes:
  synapses that are triggered by non-spike events; synapses that target
  other synapses; huge speed improvements thanks to using code generation;
  new "generator syntax" when creating synapses is much more flexible and
  efficient. See :doc:`/user/synapses`.
* New model definitions allow for much more flexible refractoriness. See
  :doc:`/user/refractoriness`.
* `SpikeMonitor` and `StateMonitor` are now much more flexible, and cover a
  lot of what used to be covered by things like ``MultiStateMonitor``, etc.
  See :doc:`/user/recording`.
* Multiple event types. In addition to the default ``spike`` event, you can
  create arbitrary events, and have these trigger code blocks (like reset)
  or synaptic events. See :doc:`/advanced/custom_events`.
* New units system allows arrays to have units. This eliminates the need for
  a lot of the special casing that was required in Brian 1. See
  :doc:`/user/units`.
* Indexing variable by condition, e.g. you might write ``G.v['x>0']`` to
  return all values of variable ``v`` in `NeuronGroup` ``G`` where the
  group's variable ``x>0``. See :ref:`state_variables`.
* Correct numerical integration of stochastic differential equations.
  See :doc:`/user/numerical_integration`.
* "Magic" `run` system has been greatly simplified and is now much more
  transparent. In addition, if there is any ambiguity about what the user
  wants to run, an erorr will be raised rather than making a guess. This
  makes it much safer. In addition, there is now a `store`/`restore`
  mechanism that simplifies restarting simulations and managing separate
  training/testing runs. See :doc:`/user/running`.
* Changing an external variable between runs now works as expected, i.e.
  something like ``tau=1*ms; run(100*ms); tau=5*ms; run(100*ms)``. In
  Brian 1 this would have used ``tau=1*ms`` for both runs. More generally,
  in Brian 2 there is now better control over namespaces. See
  :doc:`/advanced/namespaces`.
* New "shared" variables with a single value shared between all neurons.
  See :ref:`shared_variables`.
* New `Group.run_regularly` method for a codegen-compatible way of doing
  things that used to be done with `network_operation` (which can still
  be used). See :ref:`regular_operations`.
* New system for handling externally defined functions. They have to specify
  which units they accept in their arguments, and what they return. In
  addition, you can easily specify the implementation of user-defined
  functions in different languages for code generation. See
  :doc:`/advanced/functions`.
* State variables can now be defined as integer or boolean values.
  See :doc:`/user/equations`.
* State variables can now be exported directly to Pandas data frame.
  See :ref:`storing_state_variables`.
* New generalised "flags" system for giving additional information when
  defining models. See :ref:`flags`.
* `TimedArray` now allows for 2D arrays with arbitrary indexing.
  See :ref:`timed_arrays`.
* Better support for using Brian in IPython/Jupyter. See, for example,
  `start_scope`.
* New preferences system. See :doc:`/advanced/preferences`.
* Random number generation can now be made reliably reproducible.
  See :doc:`/advanced/random`.
* New profiling option to see which parts of your simulation are taking
  the longest to run. See :ref:`profiling`.
* New logging system allows for more precise control. See
  :doc:`/advanced/logging`.
* New ways of importing Brian for advanced Python users. See
  :doc:`/user/import`.
* Improved control over the order in which objects are updated during
  a run. See :doc:`/advanced/scheduling`.
* Users can now easily define their own numerical integration methods.
  See :doc:`/advanced/state_update`.
* Support for parallel processing using the OpenMP version of
  standalone mode. Note that all Brian tests pass with this, but it is
  still considered to be experimental. See :ref:`openmp`.

Backwards incompatible changes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

See :doc:`brian1_to_2/index`.

Behind the scenes changes
~~~~~~~~~~~~~~~~~~~~~~~~~

* All user models are now passed through the code generation system.
  This allows us to be much more flexible about introducing new target
  languages for generated code to make use of non-standard computational
  hardware. See :doc:`/developer/codegen`.
* New standalone/device mode allows generation of a complete project tree
  that can be compiled and built independently of Brian and Python. This
  allows for even more flexible use of Brian on non-standard hardware.
  See :doc:`/developer/devices`.
* All objects now have a unique name, used in code generation. This can
  also be used to access the object through the `Network` object.

Contributions
~~~~~~~~~~~~~
Full list of all Brian 2 contributors, ordered by the time of their first
contribution:

* Dan Goodman (`@thesamovar <https://github.com/thesamovar>`_)
* Marcel Stimberg (`@mstimberg <https://github.com/mstimberg>`_)
* Romain Brette (`@romainbrette <https://github.com/romainbrette>`_)
* Cyrille Rossant (`@rossant <https://github.com/rossant>`_)
* Victor Benichoux (`@victorbenichoux <https://github.com/victorbenichoux>`_)
* Pierre Yger (`@yger <https://github.com/yger>`_)
* Werner Beroux (`@wernight <https://github.com/wernight>`_)
* Konrad Wartke (`@Kwartke <https://github.com/Kwartke>`_)
* Daniel Bliss (`@dabliss <https://github.com/dabliss>`_)
* Jan-Hendrik Schleimer (`@ttxtea <https://github.com/ttxtea>`_)
* Moritz Augustin (`@moritzaugustin <https://github.com/moritzaugustin>`_)
* Romain Cazé (`@rcaze <https://github.com/rcaze>`_)
* Dominik Krzemiński (`@dokato <https://github.com/dokato>`_)
* Martino Sorbaro (`@martinosorb <https://github.com/martinosorb>`_)
* Benjamin Evans (`@bdevans <https://github.com/bdevans>`_)


Brian 2.0 (changes since 2.0rc3)
--------------------------------

New features
~~~~~~~~~~~~
* A new flag ``constant over dt`` can be applied to subexpressions to have them
  only evaluated once per timestep (see :doc:`../user/models`). This flag is
  mandatory for stateful subexpressions, e.g. expressions using ``rand()`` or
  ``randn()``. (:issue:`720`, :issue:`721`)

Improvements and bug fixes
~~~~~~~~~~~~~~~~~~~~~~~~~~
* Fix `EventMonitor.values` and `SpikeMonitor.spike_trains` to always return
  sorted spike/event times (:issue:`725`).
* Respect the ``active`` attribute in C++ standalone mode (:issue:`718`).
* More consistent check of compatible time and dt values (:issue:`730`).
* Attempting to set a synaptic variable or to start a simulation with synapses
  without any preceding connect call now raises an error (:issue:`737`).
* Improve the performance of coordinate calculation for `Morphology` objects,
  which previously made plotting very slow for complex morphologies (:issue:`741`).
* Fix a bug in `SpatialNeuron` where it did not detect non-linear dependencies
  on v, introduced via point currents (:issue:`743`).

Infrastructure and documentation improvements
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* An interactive demo, tutorials, and examples can now be run in an interactive
  jupyter notebook on the `mybinder <http://mybinder.org/>`_ platform, without
  any need for a local Brian installation (:issue:`736`). Thanks to Ben Evans for the
  idea and help with the implementation.
* A new extensive guide for converting Brian 1 simulations to Brian 2 user
  coming from Brian 1: :doc:`changes`
* A re-organized :doc:`../user/index`, with clearer indications which
  information is important for new Brian users.

Contributions
~~~~~~~~~~~~~
Code and documentation contributions (ordered by the number of commits):

* Marcel Stimberg (`@mstimberg <https://github.com/mstimberg>`_)
* Dan Goodman (`@thesamovar <https://github.com/thesamovar>`_)
* Benjamin Evans (`@bdevans <https://github.com/bdevans>`_)

Testing, suggestions and bug reports (ordered alphabetically, apologies to
anyone we forgot...):

* Chaofei Hong
* Daniel Bliss
* Jacopo Bono
* Ruben Tikidji-Hamburyan


Brian 2.0rc3
------------
This is another "release candidate" for Brian 2.0 that fixes a range of bugs and introduces
better support for random numbers (see below). We are getting close to the final Brian 2.0
release, the remaining work will focus on bug fixes, and better error messages and
documentation.

As always, please report bugs or suggestions to the github bug tracker
(https://github.com/brian-team/brian2/issues) or to the brian-development mailing
list (brian-development@googlegroups.com).

New features
~~~~~~~~~~~~
* Brian now comes with its own `seed` function, allowing to seed the random number generator
  and thereby to make simulations reproducible. This function works for all code generation
  targets and in runtime and standalone mode. See :doc:`../advanced/random` for details.
* Brian can now export/import state variables of a group or a full network to/from a
  `pandas <http://pandas.pydata.org>`_ ``DataFrame`` and comes with a mechanism to extend
  this to other formats. Thanks to Dominik Krzemiński for this contribution (see :issue:`306`).

Improvements and bug fixes
~~~~~~~~~~~~~~~~~~~~~~~~~~
* Use a Mersenne-Twister pseudorandom number generator in C++ standalone mode, replacing the
  previously used low-quality random number generator from the C standard library (see :issue:`222`,
  :issue:`671` and :issue:`706`).
* Fix a memory leak in code running with the weave code generation target, and a smaller
  memory leak related to units stored repetitively in the `~brian2.units.fundamentalunits.UnitRegistry`.
* Fix a difference of one timestep in the number of simulated timesteps between
  runtime and standalone that could arise for very specific values of dt and t (see :issue:`695`).
* Fix standalone compilation failures with the most recent gcc version which defaults to
  C++14 mode (see :issue:`701`)
* Fix incorrect summation in synapses when using the ``(summed)`` flag and writing to
  *pre*-synaptic variables (see :issue:`704`)
* Make synaptic pathways work when connecting groups that define nested subexpressions,
  instead of failing with a cryptic error message (see :issue:`707`).

Contributions
~~~~~~~~~~~~~
Code and documentation contributions (ordered by the number of commits):

* Marcel Stimberg (`@mstimberg <https://github.com/mstimberg>`_)
* Dominik Krzemiński (`@dokato <https://github.com/dokato>`_)
* Dan Goodman (`@thesamovar <https://github.com/thesamovar>`_)
* Martino Sorbaro (`@martinosorb <https://github.com/martinosorb>`_)

Testing, suggestions and bug reports (ordered alphabetically, apologies to
anyone we forgot...):

* Craig Henriquez
* Daniel Bliss
* David Higgins
* Gordon Erlebacher
* Max Gillett
* Moritz Augustin
* Sami Abdul-Wahid


Brian 2.0rc1
------------
This is a bug fix release that we release only about two weeks after the previous
release because that release introduced a bug that could lead to wrong integration of
stochastic differential equations. Note that standard neuronal noise models were
not affected by this bug, it only concerned differential equations implementing a
"random walk". The release also fixes a few other issues reported by users, see below
for more information.

Improvements and bug fixes
~~~~~~~~~~~~~~~~~~~~~~~~~~
* Fix a regression from 2.0b4: stochastic differential equations without any non-stochastic
  part (e.g. ``dx/dt = xi/sqrt(ms)```) were not integrated correctly (see :issue:`686`).
* Repeatedly calling `restore` (or `Network.restore`) no longer raises an error (see :issue:`681`).
* Fix an issue that made `PoissonInput` refuse to run after a change of dt (see :issue:`684`).
* If the ``rates`` argument of `PoissonGroup` is a string, it will now be evaluated at
  every time step instead of once at construction time. This makes time-dependent rate
  expressions work as expected (see :issue:`660`).

Contributions
~~~~~~~~~~~~~
Code and documentation contributions (ordered by the number of commits):

* Marcel Stimberg (`@mstimberg <https://github.com/mstimberg>`_)

Testing, suggestions and bug reports (ordered alphabetically, apologies to
anyone we forgot...):

* Cian O'Donnell
* Daniel Bliss
* Ibrahim Ozturk
* Olivia Gozel


Brian 2.0rc
-----------
This is a release candidate for the final Brian 2.0 release, meaning that from
now on we will focus on bug fixes and documentation, without introducing new
major features or changing the syntax for the user. This release candidate itself
*does* however change a few important syntax elements, see "Backwards-incompatible
changes" below.

As always, please report bugs or suggestions to the github bug tracker
(https://github.com/brian-team/brian2/issues) or to the brian-development mailing
list (brian-development@googlegroups.com).

Major new features
~~~~~~~~~~~~~~~~~~
* New "generator syntax" to efficiently generate synapses (e.g. one-to-one connections), see :ref:`creating_synapses`
  for more details.
* For synaptic connections with multiple synapses between a pair of neurons, the number of the synapse can now be
  stored in a variable, allowing its use in expressions and statements (see :ref:`creating_synapses`).
* `Synapses` can now target other `Synapses` objects, useful for some models of synaptic modulation.
* The `Morphology` object has been completely re-worked and several issues have been fixed. The new `Section` object
  allows to model a section as a series of truncated cones (see :ref:`creating_morphology`).
* Scripts with a single `run` call, no longer need an explicit ``device.build()`` call to run with the C++
  standalone device. A `set_device` in the beginning is enough and will trigger the ``build`` call after the run
  (see :ref:`cpp_standalone`).
* All state variables within a `Network` can now be accessed by `Network.get_states` and `Network.set_states` and the
  `store`/`restore` mechanism can now store the full state of a simulation to disk.
* Stochastic differential equations with multiplicative noise can now be integrated using the Euler-Heun method
  (``heun``). Thanks to Jan-Hendrik Schleimer for this contribution.
* Error messages have been significantly improved: errors for unit mismatches are now much clearer and error messages
  triggered during the intialization phase point back to the line of code where the relevant object (e.g. a
  `NeuronGroup`) was created.
* `PopulationRateMonitor` now provides a `~brian2.monitors.ratemonitor.PopulationRateMonitor.smooth_rate` method for a filtered version of the
  stored rates.

Improvements and bug fixes
~~~~~~~~~~~~~~~~~~~~~~~~~~
* In addition to the new synapse creation syntax, sparse probabilistic connections are now created much faster.
* The time for the initialization phase at the beginning of a `run` has been significantly reduced.
* Multicompartmental simulations with a large number of compartments are now simulated more efficiently and are making
  better use of several processor cores when OpenMP is activated in C++ standalone mode. Thanks to Moritz Augustin for
  this contribution.
* Simulations will use compiler settings that optimize performance by default.
* Objects that have user-specified names are better supported for complex simulation scenarios (names no longer have to
  be unique at all times, but only across a network or across a standalone device).
* Various fixes for compatibility with recent versions of numpy and sympy

Important backwards-incompatible changes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* The argument names in `Synapses.connect` have changed and the first argument can no longer be an array of indices. To
  connect based on indices, use ``Synapses.connect(i=source_indices, j=target_indices)``. See :ref:`creating_synapses`
  and the documentation of `Synapses.connect` for more details.
* The actions triggered by pre-synaptic and post-synaptic spikes are now described by the ``on_pre`` and ``on_post``
  keyword arguments (instead of ``pre`` and ``post``).
* The `Morphology` object no longer allows to change attributes such as length and diameter after its creation. Complex
  morphologies should instead be created using the `Section` class, allowing for the specification of all details.
* `Morphology` objects that are defined with coordinates need to provide the start point (relative to the end point of
  the parent compartment) as the first coordinate. See :ref:`creating_morphology` for more details.
* For simulations using the C++ standalone mode, no longer call `Device.build` (if using a single `run` call), or
  use `set_device` with ``build_on_run=False`` (see :ref:`cpp_standalone`).

Infrastructure improvements
~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Our test suite is now also run on Mac OS-X (on the `Travis CI <https://travis-ci.org/>`_ platform).

Contributions
~~~~~~~~~~~~~
Code and documentation contributions (ordered by the number of commits):

* Marcel Stimberg (`@mstimberg <https://github.com/mstimberg>`_)
* Dan Goodman (`@thesamovar <https://github.com/thesamovar>`_)
* Moritz Augustin (`@moritzaugustin <https://github.com/moritzaugustin>`_)
* Jan-Hendrik Schleimer (`@ttxtea <https://github.com/ttxtea>`_)
* Romain Cazé (`@rcaze <https://github.com/rcaze>`_)
* Konrad Wartke (`@Kwartke <https://github.com/Kwartke>`_)
* Romain Brette (`@romainbrette <https://github.com/romainbrette>`_)

Testing, suggestions and bug reports (ordered alphabetically, apologies to
anyone we forgot...):

* Chaofei Hong
* Kees de Leeuw
* Luke Y Prince
* Myung Seok Shim
* Owen Mackwood
* Github users: @epaxon, @flinz, @mariomulansky, @martinosorb, @neuralyzer, @oleskiw, @prcastro, @sudoankit


Brian 2.0b4
-----------
This is the fourth (and probably last) beta release for Brian 2.0. This release
adds a few important new features and fixes a number of bugs so we recommend all
users of Brian 2 to upgrade. If you are a user new to Brian, we also recommend
to directly start with Brian 2 instead of using the stable release of Brian 1.
Note that the new recommended way to install Brian 2 is to use the Anaconda
distribution and to install the Brian 2 conda package (see :doc:`install`).

This is however still a Beta release, please report bugs or suggestions to the
github bug tracker (https://github.com/brian-team/brian2/issues) or to the
brian-development mailing list (brian-development@googlegroups.com).

Major new features
~~~~~~~~~~~~~~~~~~
* In addition to the standard threshold/reset, groups can now define "custom
  events". These can be recorded with the new `EventMonitor` (a generalization
  of `SpikeMonitor`) and `Synapses` can connect to these events instead of
  the standard spike event. See :doc:`../advanced/custom_events` for more
  details.
* `SpikeMonitor` and `EventMonitor` can now also record state variable values
  at the time of spikes (or custom events), thereby offering the functionality
  of ``StateSpikeMonitor`` from Brian 1. See
  :ref:`recording_variables_spike_time` for more details.
* The code generation modes that interact with C++ code (weave, Cython, and C++
  standalone) can now be more easily configured to work with external libraries
  (compiler and linker options, header files, etc.). See the documentation of
  the `~brian2.codegen.cpp_prefs` module for more details.

Improvemements and bug fixes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Cython simulations no longer interfere with each other when run in parallel
  (thanks to Daniel Bliss for reporting and fixing this).
* The C++ standalone now works with scalar delays and the spike queue
  implementation deals more efficiently with them in general.
* Dynamic arrays are now resized more efficiently, leading to faster monitors
  in runtime mode.
* The spikes generated by a `SpikeGeneratorGroup` can now be changed between
  runs using the
  `~brian2.input.spikegeneratorgroup.SpikeGeneratorGroup.set_spikes` method.
* Multi-step state updaters now work correctly for non-autonomous differential
  equations
* `PoissonInput` now correctly works with multiple clocks (thanks to Daniel
  Bliss for reporting and fixing this)
* The `~brian2.groups.group.Group.get_states` method now works for
  `StateMonitor`. This method provides a convenient way to access all the data
  stored in the monitor, e.g. in order to store it on disk.
* C++ compilation is now easier to get to work under Windows, see
  :doc:`install` for details.

Important backwards-incompatible changes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* The ``custom_operation`` method has been renamed to
  `~brian2.groups.group.Group.run_regularly` and can now be called without the
  need for storing its return value.
* `StateMonitor` will now by default record at the beginning of a time step
  instead of at the end. See :ref:`recording_variables_continuously` for
  details.
* Scalar quantities now behave as python scalars with respect to in-place
  modifications (augmented assignments). This means that
  ``x = 3*mV; y = x; y += 1*mV`` will no longer increase the value of the
  variable ``x`` as well.

Infrastructure improvements
~~~~~~~~~~~~~~~~~~~~~~~~~~~
* We now provide conda packages for Brian 2, making it very easy to install
  when using the Anaconda distribution (see :doc:`install`).

Contributions
~~~~~~~~~~~~~
Code and documentation contributions (ordered by the number of commits):

* Marcel Stimberg (`@mstimberg <https://github.com/mstimberg>`_)
* Dan Goodman (`@thesamovar <https://github.com/thesamovar>`_)
* Daniel Bliss (`@dabliss <https://github.com/dabliss>`_)
* Romain Brette (`@romainbrette <https://github.com/romainbrette>`_)

Testing, suggestions and bug reports (ordered alphabetically, apologies to
everyone we forgot...):

* Daniel Bliss
* Damien Drix
* Rainer Engelken
* Beatriz Herrera Figueredo
* Owen Mackwood
* Augustine Tan
* Ot de Wiljes


Brian 2.0b3
-----------
This is the third beta release for Brian 2.0. This release does not add many new
features but it fixes a number of important bugs so we recommend all users of
Brian 2 to upgrade. If you are a user new to Brian, we also recommend to
directly start with Brian 2 instead of using the stable release of Brian 1.

This is however still a Beta release, please report bugs or suggestions to the
github bug tracker (https://github.com/brian-team/brian2/issues) or to the
brian-development mailing list (brian-development@googlegroups.com).

Major new features
~~~~~~~~~~~~~~~~~~
* A new `PoissonInput` class for efficient simulation of Poisson-distributed
  input events.

Improvements
~~~~~~~~~~~~
* The order of execution for ``pre`` and ``post`` statements happending in the
  same time step was not well defined (it fell back to the default alphabetical
  ordering, executing ``post`` before ``pre``). It now explicitly specifies the
  ``order`` attribute so that ``pre`` gets executed before ``post`` (as in
  Brian 1). See the :doc:`../user/synapses` documentation for details.
* The default schedule that is used can now be set via a preference
  (`core.network.default_schedule`). New automatically generated scheduling
  slots relative to the explicitly defined ones can be used, e.g.
  ``before_resets`` or ``after_synapses``. See :ref:`scheduling` for details.
* The scipy_ package is no longer a dependency (note that weave_ for
  compiled C code under Python 2 is now available in a separate package). Note
  that multicompartmental models will still benefit from the scipy_ package
  if they are simulated in pure Python (i.e. with the ``numpy`` code generation
  target) -- otherwise Brian 2 will fall back to a numpy-only solution which is
  significantly slower.

Important bug fixes
~~~~~~~~~~~~~~~~~~~
* Fix `SpikeGeneratorGroup` which did not emit all the spikes under certain
  conditions for some code generation targets (:issue:`429`)
* Fix an incorrect update of pre-synaptic variables in synaptic statements for
  the ``numpy`` code generation target (:issue:`435`).
* Fix the possibility of an incorrect memory access when recording a subgroup
  with `SpikeMonitor` (:issue:`454`).
* Fix the storing of results on disk for C++ standalone on Windows -- variables
  that had the same name when ignoring case (e.g. ``i`` and ``I``) where
  overwriting each other (:issue:`455`).

Infrastructure improvements
~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Brian 2 now has a chat room on gitter_: https://gitter.im/brian-team/brian2
* The sphinx documentation can now be built from the release archive file
* After a big cleanup, all files in the repository have now simple LF line
  endings (see https://help.github.com/articles/dealing-with-line-endings/ on
  how to configure your own machine properly if you want to contribute to
  Brian).

.. _scipy: http://scipy.org
.. _weave: https://pypi.python.org/pypi/weave
.. _gitter: http://gitter.im

Contributions
~~~~~~~~~~~~~
Code and documentation contributions (ordered by the number of commits):

* Marcel Stimberg (`@mstimberg <https://github.com/mstimberg>`_)
* Dan Goodman (`@thesamovar <https://github.com/thesamovar>`_)
* Konrad Wartke (`@kwartke <https://github.com/Kwartke>`_)

Testing, suggestions and bug reports (ordered alphabetically, apologies to
everyone we forgot...):

* Daniel Bliss
* Owen Mackwood
* Ankur Sinha
* Richard Tomsett


Brian 2.0b2
-----------
This is the second beta release for Brian 2.0, we recommend all users of Brian 2
to upgrade. If you are a user new to Brian, we also recommend to directly start
with Brian 2 instead of using the stable release of Brian 1.

This is however still a Beta release, please report bugs or suggestions to the
github bug tracker (https://github.com/brian-team/brian2/issues) or to the
brian-development mailing list (brian-development@googlegroups.com).

Major new features
~~~~~~~~~~~~~~~~~~
* Multi-compartmental simulations can now be run using the
  :ref:`cpp_standalone` mode (this is not yet well-tested, though).
* The implementation of `TimedArray` now supports two-dimensional arrays, i.e.
  different input per neuron (or synapse, etc.), see :ref:`timed_arrays` for
  details.
* Previously, not setting a code generation target (using the `codegen.target`
  preference) would mean that the ``numpy`` target was used. Now,
  the default target is ``auto``, which means that a compiled language
  (``weave`` or ``cython``) will be used if possible. See
  :doc:`../user/computation` for details.
* The implementation of `SpikeGeneratorGroup` has been improved and it now
  supports a ``period`` argument to repeatedly generate a spike pattern.

Improvements
~~~~~~~~~~~~
* The selection of a numerical algorithm (if none has been specified by the
  user) has been simplified. See :ref:`numerical_integration` for details.
* Expressions that are shared among neurons/synapses are now updated only once
  instead of for every neuron/synapse which can lead to performance
  improvements.
* On Windows, The Microsoft Visual C compiler is now supported in the
  ``cpp_standalone`` mode, see the respective notes in the :doc:`install` and
  :doc:`../user/computation` documents.
* Simulation runs (using the standard "runtime" device) now collect profiling
  information. See :ref:`profiling` for details.

Infrastructure and documentation improvements
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* :doc:`Tutorials for beginners <../resources/tutorials/index>` in the form of
  ipython notebooks (currently only covering the basics of neurons and synapses)
  are now available.
* The :doc:`../examples/index` in the documentation now include the images
  they generated. Several examples have been adapted from Brian 1.
* The code is now automatically tested on Windows machines, using the
  `appveyor <http://ci.appveyor.com>`_ service. This complements the Linux
  testing on `travis <https://travis-ci.org>`_.
* Using a version of a dependency (e.g. sympy) that we don't support will now
  raise an error when you import ``brian2`` -- see :ref:`dependency_checks` for
  more details.
* Test coverage for the ``cpp_standalone`` mode has been significantly
  increased.

Important bug fixes
~~~~~~~~~~~~~~~~~~~
* The preparation time for complicated equations has been significantly reduced.
* The string representation of small physical quantities has been corrected
  (:issue:`361`)
* Linking variables from a group of size 1 now works correctly (:issue:`383`)

Contributions
~~~~~~~~~~~~~
Code and documentation contributions (ordered by the number of commits):

* Marcel Stimberg (`@mstimberg <https://github.com/mstimberg>`_)
* Dan Goodman (`@thesamovar <https://github.com/thesamovar>`_)
* Romain Brette (`@romainbrette <https://github.com/romainbrette>`_)
* Pierre Yger (`@yger <https://github.com/yger>`_)

Testing, suggestions and bug reports (ordered alphabetically, apologies to
everyone we forgot...):

* Conor Cox
* Gordon Erlebacher
* Konstantin Mergenthaler


Brian 2.0beta
-------------
This is the first beta release for Brian 2.0 and the first version of Brian 2.0
we recommend for general use. From now on, we will try to keep changes that
break existing code to a minimum. If you are a user new to Brian, we'd
recommend to start with the Brian 2 beta instead of using the stable release of
Brian 1.

This is however still a Beta release, please report bugs or suggestions to the
github bug tracker (https://github.com/brian-team/brian2/issues) or to the
brian-development mailing list (brian-development@googlegroups.com).

Major new features
~~~~~~~~~~~~~~~~~~
* New classes `Morphology` and `SpatialNeuron` for the simulation of
  :doc:`../user/multicompartmental`
* A temporary "bridge" for ``brian.hears`` that allows to use its Brian 1
  version from Brian 2 (:doc:`brian1_to_2/brian1hears_bridge`)
* Cython is now a new code generation target, therefore the performance benefits
  of compiled code are now also available to users running simulations under
  Python 3.x (where ``scipy.weave`` is not available)
* Networks can now store their current state and return to it at a later time,
  e.g. for simulating multiple trials starting from a fixed network state
  (:ref:`continue_repeat`)
* C++ standalone mode: multiple processors are now supported via OpenMP
  (:ref:`openmp`), although this code has not yet been well tested so may be
  inaccurate.
* C++ standalone mode: after a run, state variables and monitored values can
  be loaded from disk transparently. Most scripts therefore only need two
  additional lines to use standalone mode instead of Brian's default runtime
  mode (:ref:`cpp_standalone`).

Syntax changes
~~~~~~~~~~~~~~
* The syntax and semantics of everything around simulation time steps, clocks,
  and multiple runs have been cleaned up, making ``reinit`` obsolete and also
  making it unnecessary for most users to explicitly generate `Clock` objects --
  instead, a ``dt`` keyword can be specified for objects such as `NeuronGroup`
  (:doc:`../user/running`)
* The ``scalar`` flag for parameters/subexpressions has been renamed to
  ``shared``
* The "unit" for boolean variables has been renamed from ``bool`` to ``boolean``
* C++ standalone: several keywords of
  `CPPStandaloneDevice.build <brian2.devices.cpp_standalone.device.CPPStandaloneDevice.build>`
  have been renamed
* The preferences are now accessible via ``prefs`` instead of ``brian_prefs``
* The ``runner`` method has been renamed to `~brian2.groups.group.Group.custom_operation`

Improvements
~~~~~~~~~~~~
* Variables can now be linked across `NeuronGroup`\ s (:ref:`linked_variables`)
* More flexible progress reporting system, progress reporting also works in the
  C++ standalone mode (:ref:`progress_reporting`)
* State variables can be declared as ``integer`` (:ref:`equation_strings`)

Bug fixes
~~~~~~~~~
57 github issues have been closed since the alpha release, of which 26 had been
labeled as bugs. We recommend all users of Brian 2 to upgrade.

Contributions
~~~~~~~~~~~~~
Code and documentation contributions (ordered by the number of commits):

* Marcel Stimberg (`@mstimberg <https://github.com/mstimberg>`_)
* Dan Goodman (`@thesamovar <https://github.com/thesamovar>`_)
* Romain Brette (`@romainbrette <https://github.com/romainbrette>`_)
* Pierre Yger (`@yger <https://github.com/yger>`_)
* Werner Beroux (`@wernight <https://github.com/wernight>`_)

Testing, suggestions and bug reports (ordered alphabetically, apologies to
everyone we forgot…):

* Guillaume Bellec
* Victor Benichoux
* Laureline Logiaco
* Konstantin Mergenthaler
* Maurizio De Pitta
* Jan-Hendrick Schleimer
* Douglas Sterling
* Katharina Wilmes