diff --git a/.circleci/config.yml b/.circleci/config.yml index d4c387b3be0..644fd8b31b7 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -433,13 +433,9 @@ jobs: mne sys_info -pd - run: name: make linkcheck + no_output_timeout: 40m command: | make -C doc linkcheck - - run: - name: make linkcheck-grep - when: always - command: | - make -C doc linkcheck-grep - store_artifacts: path: doc/_build/linkcheck destination: linkcheck diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs index d4f5921e70c..1199ffc4fcd 100644 --- a/.git-blame-ignore-revs +++ b/.git-blame-ignore-revs @@ -1,7 +1,14 @@ -e81ec528a42ac687f3d961ed5cf8e25f236925b0 # black -12395f9d9cf6ea3c72b225b62e052dd0d17d9889 # YAML indentation -d6d2f8c6a2ed4a0b27357da9ddf8e0cd14931b59 # isort -e7dd1588013179013a50d3f6b8e8f9ae0a185783 # ruff format -e39995d9be6fc831c7a4a59f09b7a7c0a41ae315 # percent formatting -940ac9553ce42c15b4c16ecd013824ca3ea7244a # whitespace -1c5b39ff1d99bbcb2fc0e0071a989b3f3845ff30 # ruff UP028 +# PR number should follow the commit number so that our code credit +# can parse this file correctly: +d71e497dcf6f98e19eb81e82e641404a71d2d663 # 1420, split up viz.py +203a96cbba2732d2e349a8f96065e74bbfd2a53b # 5862, split utils.py +ff349f356edb04e1b5f0db13deda8d1a20aca351 # 6767, move around manual parts +31a83063557fbd54d898f00f9527ffc547888395 # 10407, alphabetize docdict +e81ec528a42ac687f3d961ed5cf8e25f236925b0 # 11667, black +12395f9d9cf6ea3c72b225b62e052dd0d17d9889 # 11868, YAML indentation +d6d2f8c6a2ed4a0b27357da9ddf8e0cd14931b59 # 12097, isort +e7dd1588013179013a50d3f6b8e8f9ae0a185783 # 12261, ruff format +940ac9553ce42c15b4c16ecd013824ca3ea7244a # 12533, whitespace +e39995d9be6fc831c7a4a59f09b7a7c0a41ae315 # 12588, percent formatting +1c5b39ff1d99bbcb2fc0e0071a989b3f3845ff30 # 12603, ruff UP028 +b8b168088cb474f27833f5f9db9d60abe00dca83 # 12779, PR JSONs \ No newline at end of file diff --git a/.github/workflows/credit.yml b/.github/workflows/credit.yml new file mode 100644 index 00000000000..7c63b4dffd5 --- /dev/null +++ b/.github/workflows/credit.yml @@ -0,0 +1,43 @@ +name: Contributor credit + +on: # yamllint disable-line rule:truthy + # Scheduled actions only run on the main repo branch, which is exactly what we want + schedule: + # TODO: After making sure it works in `main` for a while, switch to monthly + # - cron: '0 0 1 * *' # first day of the month at midnight + - cron: '0 0 * * *' # every day at midnight + +permissions: + pull-requests: write + +jobs: + update_credit: + name: Update + runs-on: ubuntu-latest + env: + GH_TOKEN: ${{ github.token }} + GITHUB_TOKEN: ${{ github.token }} + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: '3.12' + - run: pip install pygithub -e . + - run: git checkout -b credit + - run: python tools/dev/update_credit_json.py + - run: python tools/dev/update_credit_rst.py + - run: git add -f doc/sphinxext/prs/*.json + - run: | + git diff && git status --porcelain + if [[ $(git status --porcelain) ]]; then + echo "dirty=true" >> $GITHUB_OUTPUT + fi + id: status + - name: Create PR + run: | + set -xeo pipefail + git config --global user.email "114827586+autofix-ci[bot]@users.noreply.github.com" + git config --global user.name "autofix-ci[bot]" + git commit -am "MAINT: Update code credit" + gh pr create -B main -H credit --title "MAINT: Update code credit" --body "Created by \"${{ github.workflow }}\" GitHub action." --label "no-changelog-entry-needed" + if: steps.status.outputs.dirty == 'true' diff --git a/.gitignore b/.gitignore index 79d03aac44f..d66fbef96de 100644 --- a/.gitignore +++ b/.gitignore @@ -97,7 +97,7 @@ cover .venv/ venv/ -*.json +/*.json !codemeta.json .hypothesis/ .ruff_cache/ diff --git a/.mailmap b/.mailmap index d71df509cc2..accf48d96e5 100644 --- a/.mailmap +++ b/.mailmap @@ -2,8 +2,8 @@ Adam Li Adam Li Adam Li Adam Li Alan Leggitt leggitta Alessandro Tonin Lychfindel <58313635+Lychfindel@users.noreply.github.com> -Alex Rockhill Alex Alex Rockhill Alex +Alex Rockhill Alex Alex Rockhill Alex Rockhill Alex Rockhill Alex Rockhill Alexander Rudiuk Alexander Rudiuk @@ -14,19 +14,23 @@ Alexandre Gramfort Alexandre Gramfort Alexandre Gramfort Alexandre Gramfort Alexandre Gramfort Ana Radanovic anaradanovic <79697247+anaradanovic@users.noreply.github.com> +Andres Rodriguez Andrew Dykstra Andrew Quinn AJQuinn +Andy Gilbert <7andy121@gmail.com> Andrew Gilbert Andy Gilbert <7andy121@gmail.com> Andrew Gilbert -Anna Padee <44297909+apadee@users.noreply.github.com> apadee <44297909+apadee@users.noreply.github.com> +Anna Padee apadee <44297909+apadee@users.noreply.github.com> Anne-Sophie Dubarry annesodub Archit Singhal <43236121+architsinghal-mriirs@users.noreply.github.com> archit singhal Arne Pelzer aplzr <7202498+aplzr@users.noreply.github.com> Arne Pelzer pzr -Ashley Drew <33734402+ashdrew@users.noreply.github.com> ashdrew <33734402+ashdrew@users.noreply.github.com> +Ashley Drew ashdrew <33734402+ashdrew@users.noreply.github.com> Asish Panda kaichogami Basile Pinsard Brad Buran Brad Buran Britta Westner britta-wstnr +btkcodedev +buildqa Burkhard Maess Burkhard Maess Carina Forster Carina Carlos de la Torre carlos @@ -43,15 +47,18 @@ Christina Zhao ChristinaZhao Christoph Dinh Christoph Dinh Christopher J. Bailey Chris Bailey Claire Braboszcz claire-braboszcz +Clemens Brunner Clément Moutard -Cora Kim <41998428+kimcoco@users.noreply.github.com> kimcoco <41998428+kimcoco@users.noreply.github.com> +Cora Kim kimcoco <41998428+kimcoco@users.noreply.github.com> Cristóbal Moënne-Loccoz Cristóbal Dan G. Wakeman Daniel G. Wakeman Dan G. Wakeman Daniel Wakeman Dan G. Wakeman dgwakeman Dan G. Wakeman dgwakeman -Daniel Carlström Schad Daniel C Schad +Daniel C Schad Daniel C Schad +Daniel C Schad Daniel Carlström Schad Daniel McCloy Daniel McCloy +Daniel McCloy Daniel McCloy Daniel McCloy drammock Daniel Strohmeier Daniel Strohmeier Daniel Strohmeier joewalter @@ -70,6 +77,7 @@ Dmitrii Altukhov dmalt Dominik Krzemiński dokato Dominik Welke dominikwelke <33089761+dominikwelke@users.noreply.github.com> Dominik Welke dominikwelke +Dominik Wetzel Dominik Wetzel Eberhard Eich ebeich Eduard Ort Eduard Ort Eduard Ort eort @@ -77,7 +85,7 @@ Eduard Ort examplename Ellen Lau ellenlau Emily Stephen Emily P. Stephen Emily Stephen emilyps14 -Enrico Varano <69973551+enricovara@users.noreply.github.com> enricovara <69973551+enricovara@users.noreply.github.com> +Enrico Varano enricovara <69973551+enricovara@users.noreply.github.com> Enzo Altamiranda enzo Eric Larson Eric Larson Eric Larson Eric Larson @@ -93,7 +101,7 @@ Erkka Heinila Teekuningas Etienne de Montalivet Evgenii Kalenkovich kalenkovich Evgeny Goldstein <84768107+evgenygoldstein@users.noreply.github.com> evgenygoldstein <84768107+evgenygoldstein@users.noreply.github.com> -Ezequiel Mikulan <39155887+ezemikulan@users.noreply.github.com> ezemikulan <39155887+ezemikulan@users.noreply.github.com> +Ezequiel Mikulan ezemikulan <39155887+ezemikulan@users.noreply.github.com> Fahimeh Mamashli <33672431+fmamashli@users.noreply.github.com> fmamashli <33672431+fmamashli@users.noreply.github.com> Fede Raimondo Fede Fede Raimondo Fede Raimondo @@ -104,21 +112,23 @@ Fede Raimondo Federico Raimondo Federico Zamberlan <44038765+fzamberlan@users.noreply.github.com> Felix Klotzsche eioe Felix Klotzsche eioe -Félix Raimundo Felix Raimundo Frederik D. Weber Frederik-D-Weber Fu-Te Wong foucault Fu-Te Wong zuxfoucault +Félix Raimundo Felix Raimundo Gansheng Tan <49130176+GanshengT@users.noreply.github.com> Gansheng TAN <49130176+GanshengT@users.noreply.github.com> Gennadiy Belonosov <7503709+Genuster@users.noreply.github.com> Gennadiy <7503709+Genuster@users.noreply.github.com> Giorgio Marinato neurogima <76406896+neurogima@users.noreply.github.com> +Giulio Gabrieli Guillaume Dumas deep-introspection Guillaume Dumas Guillaume Dumas +Hakimeh Aslsardroud Hamid Maymandi <46011104+HamidMandi@users.noreply.github.com> Hamid <46011104+HamidMandi@users.noreply.github.com> -Hasrat Ali Arzoo <56307533+hasrat17@users.noreply.github.com> hasrat17 <56307533+hasrat17@users.noreply.github.com> +Hasrat Ali Arzoo hasrat17 <56307533+hasrat17@users.noreply.github.com> Hongjiang Ye YE Hongjiang Hubert Banville hubertjb -Hüseyin Orkun Elmas Hüseyin Hyonyoung Shin <55095699+mcvain@users.noreply.github.com> mcvain <55095699+mcvain@users.noreply.github.com> +Hüseyin Orkun Elmas Hüseyin Ingoo Lee dlsrnsi Ivo de Jong ivopascal Jaakko Leppakangas Jaakko Leppakangas @@ -126,15 +136,17 @@ Jaakko Leppakangas jaeilepp Jaakko Leppakangas jaeilepp Jair Montoya jmontoyam Jan Ebert janEbert +Jan Sedivy Jan Sosulski jsosulski Jean-Baptiste Schiratti Jean-Baptiste SCHIRATTI Jean-Remi King Jean-Rémi KING Jean-Remi King kingjr -Jean-Remi King kingjr Jean-Remi King kingjr +Jean-Remi King kingjr Jean-Remi King UMR9752 Jean-Remi King UMR9752 Jeff Stout jstout211 +Jennifer Behnke Jesper Duemose Nielsen jdue Jevri Hanna Jeff Hanna Jevri Hanna Jevri Hanna @@ -151,16 +163,18 @@ Jona Sassenhagen jona-sassenhagen jona-sassenhagen@ Jona Sassenhagen jona.sassenhagen@gmail.com Jona Sassenhagen sassenha +Jonathan Kuziek Jordan Drew <39603454+jadrew43@users.noreply.github.com> jadrew43 <39603454+jadrew43@users.noreply.github.com> Joris Van den Bossche Joris Van den Bossche +Joshua Calder-Travis <38797399+jCalderTravis@users.noreply.github.com> jCalderTravis <38797399+jCalderTravis@users.noreply.github.com> +Joshua J Bear +Joshua Teves Joshua Teves José C. García Alanis Jose Alanis José C. García Alanis Jose C. G. Alanis <12409129+JoseAlanis@users.noreply.github.com> José C. García Alanis José C. G. Alanis <12409129+JoseAlanis@users.noreply.github.com> José C. García Alanis José C. García Alanis <12409129+JoseAlanis@users.noreply.github.com> -Joshua J Bear -Joshua Teves Joshua Teves -Joshua Calder-Travis <38797399+jCalderTravis@users.noreply.github.com> jCalderTravis <38797399+jCalderTravis@users.noreply.github.com> Julius Welzel <52565341+JuliusWelzel@users.noreply.github.com> jwelzel <52565341+JuliusWelzel@users.noreply.github.com> +Justus Schwabedal Kaisu Lankinen <41806798+klankinen@users.noreply.github.com> klankinen <41806798+klankinen@users.noreply.github.com> Kambiz Tabavi Kambiz Tavabi Kambiz Tabavi kambysese @@ -171,11 +185,12 @@ Kostiantyn Maksymenko Maksymenko Kostiantyn LaetitiaG Larry Eisenman lneisenman Lenny Varghese lennyvarghese +Liberty Hamilton Lorenz Esch Lorenz Esch Lorenzo Alfine lorrandal Louis Thibault = Louis Thibault Louis Thibault -Lukas Gemein gemeinl +Lukas Gemein gemeinl Lukáš Hejtmánek hejtmy Mads Jensen mads jensen Mainak Jas Mainak @@ -185,21 +200,26 @@ Mainak Jas Mainak Jas mainakjas Manoj Kumar MechCoder Manu Sutela MJAS1 -Marian Dovgialo Marian Dovgialo -Marian Dovgialo mdovgialo +Marian Dovgialo Marian Dovgialo +Marian Dovgialo Marian Dovgialo +Marian Dovgialo mdovgialo Marijn van Vliet Marijn van Vliet -Mark Alexander Henney Mark -Mark Alexander Henney Mark Henney <120719655+henneysq@users.noreply.github.com> +Mark Henney Mark +Mark Henney Mark Alexander Henney +Mark Henney Mark Henney <120719655+henneysq@users.noreply.github.com> Mark Wronkiewicz wronk Marmaduke Woodman maedoc -Martin Billinger kazemakase -Martin Billinger Martin -Martin Billinger Martin Billinger -Martin Billinger mbillingr +Martin BaBer +Martin Billinger kazemakase +Martin Billinger kazemakase +Martin Billinger Martin Billinger +Martin Billinger mbillingr Martin Luessi martin Martin Luessi martin Martin Luessi mluessi@nmr.mgh.harvard.edu -Martin Schulz Martin Schulz <46245704+marsipu@users.noreply.github.com> +Martin Perez-Guevara +Martin Schulz Martin Schulz <46245704+marsipu@users.noreply.github.com> +Martin Schulz Martin Schulz Martin van Harmelen <1544429+MPvHarmelen@users.noreply.github.com> Martin <1544429+MPvHarmelen@users.noreply.github.com> Mathieu Scheltienne Mathieu Scheltienne <73893616+mscheltienne@users.noreply.github.com> Mathieu Scheltienne Mathieu Scheltienne @@ -209,7 +229,7 @@ Mats van Es Mats monkeyman192 Matteo Anelli Matteo Anelli Matteo Visconti di Oleggio Castello Matteo Visconti dOC -Matthias Dold <62005770+matthiasdold@users.noreply.github.com> matthiasdold <62005770+matthiasdold@users.noreply.github.com> +Matthias Dold matthiasdold <62005770+matthiasdold@users.noreply.github.com> Matthias Eberlein <41163089+MatthiasEb@users.noreply.github.com> MatthiasEb <41163089+MatthiasEb@users.noreply.github.com> Matti Hämäläinen Matti Hamalainen Matti Hämäläinen Matti Hamalainen @@ -229,6 +249,7 @@ Nathalie Gayraud Nathalie Naveen <172697+naveensrinivasan@users.noreply.github.com> Nicolas Barascud nbara Nicolas Barascud Nicolas Barascud <10333715+nbara@users.noreply.github.com> +Nicolas Fourcaud-Trocmé Nicolas Gensollen Gensollen Nicolas Legrand Legrand Nicolas Nicolas Legrand LegrandNico @@ -241,9 +262,11 @@ Nikolas Chalas Nichalas Olaf Hauk Olaf Hauk Olaf Hauk olafhauk Omer Shubi Omer S +Pablo Arias Paul Pasler ppasler Paul Roujansky Paul ROUJANSKY Paul Roujansky paulroujansky +Pavel Navratil Pedro Silva pbnsilva Phillip Alday Phillip Alday Phillip Alday Phillip Alday @@ -253,6 +276,7 @@ Pierre-Antoine Bannier Pierre-Antoine Bannier Pierre-Antoine Bannier Pierre-Antoine Bannier Pierre-Antoine Bannier Pierre-Antoine Bannier Pierre-Antoine Bannier Pierre-Antoine Bannier +Ping-Keng Jao nafraw Praveen Sripad prav Praveen Sripad prav Proloy Das pdas6 @@ -261,9 +285,14 @@ Ramonapariciog Apariciogarcia ramonapariciog roraa Reza Nasri Reza Reza Nasri RezaNasri +Riessarius Stargardsky Roan LaPlante aestrivex Rob Luke Robert Luke <748691+rob-luke@users.noreply.github.com> +Rob Luke Robert Luke +Robert Seymour Robin Tibor Schirrmeister robintibor +Roeland Hancock +Romain Derollepot Romain Trachel Romain Trachel Romain Trachel Romain Trachel Romain Trachel trachelr @@ -271,9 +300,12 @@ Roman Goj Ross Maddox rkmaddox Ross Maddox Ross Maddox Ross Maddox unknown -Rotem Falach Falach +Rotem Falach Falach Ryan Law Ryan Law +Ryan Law Ryan M.C. Law +Sammi Chekroud Samuel Deslauriers-Gauthier Samuel Deslauriers-Gauthier +Santeri Ruuskanen Santeri Ruuskanen <66060772+ruuskas@users.noreply.github.com> Sara Sommariva sarasommariva Sebastien Treguer DataFox Sena Er <2799280+sena-neuro@users.noreply.github.com> Sena <2799280+sena-neuro@users.noreply.github.com> @@ -283,32 +315,39 @@ Simon Kern Simon Kern <14980558+skjerns@users.noreply.git Simon Kern skjerns <14980558+skjerns@users.noreply.github.com> Simon Kern skjerns Sondre Foslien sondrfos +Sophie Herbst Steve Matindi stevemats Steven Bierer Steven Bierer <40672003+NeuroLaunch@users.noreply.github.com> Steven M. Gutstein S. M. Gutstein Steven M. Gutstein smgutstein -T. Wang <81429617+twang5@users.noreply.github.com> twang5 <81429617+twang5@users.noreply.github.com> +sviter +T. Wang twang5 <81429617+twang5@users.noreply.github.com> Tanay Gahlot Tanay -Teon Brooks -Teon Brooks -Teon Brooks Teon -Teon Brooks Teon Brooks +Teon L Brooks +Teon L Brooks +Teon L Brooks Teon +Teon L Brooks Teon Brooks Thomas Donoghue Tom Thomas Radman -Timon Merk <38216460+timonmerk@users.noreply.github.com> timonmerk <38216460+timonmerk@users.noreply.github.com> +Timon Merk +Timon Merk Timon Merk <38216460+timonmerk@users.noreply.github.com> +Timon Merk timonmerk <38216460+timonmerk@users.noreply.github.com> Timothy Gates Tim Gates +Timur Sokhin Tod Flak <45362686+todflak@users.noreply.github.com> todflak <45362686+todflak@users.noreply.github.com> Tom Ma myd7349 -Tom Stone tomdstone <77251489+tomdstone@users.noreply.github.com> Tom Stone Stone +Tom Stone tomdstone <77251489+tomdstone@users.noreply.github.com> Tristan Stenner Tristan Stenner Tziona NessAiver TzionaN Valerii Chirkov Valerii <42982039+vagechirkov@users.noreply.github.com> Valerii Chirkov Valerii +Velu Prabhakar Kumaravel Velu Prabhakar Kumaravel Victoria Peterson vpeterson +Will Turner Will Turner +Yiping Zuo Frostime Yousra Bekhti Yoursa BEKHTI Yousra Bekhti Yoursa BEKHTI Yousra Bekhti Yousra BEKHTI Yousra Bekhti yousrabk -Yiping Zuo Frostime Zhi Zhang <850734033@qq.com> ZHANG Zhi <850734033@qq.com> diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 8f937143c53..7abb75f43b4 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -6,11 +6,12 @@ repos: - id: ruff name: ruff lint mne args: ["--fix"] - files: ^mne/ + files: ^mne/|^tools/ + exclude: vulture_allowlist.py - id: ruff name: ruff lint mne preview args: ["--fix", "--preview", "--select=NPY201"] - files: ^mne/ + files: ^mne/|^tools/ - id: ruff name: ruff lint doc, tutorials, and examples # D103: missing docstring in public function @@ -18,7 +19,7 @@ repos: args: ["--ignore=D103,D400", "--fix"] files: ^doc/|^tutorials/|^examples/ - id: ruff-format - files: ^mne/|^doc/|^tutorials/|^examples/ + files: ^mne/|^doc/|^tutorials/|^examples/|^tools/ # Codespell - repo: https://github.com/codespell-project/codespell @@ -27,7 +28,7 @@ repos: - id: codespell additional_dependencies: - tomli - files: ^mne/|^doc/|^examples/|^tutorials/ + files: ^mne/|^doc/|^examples/|^tutorials/|^tools/ types_or: [python, bib, rst, inc] # yamllint @@ -51,7 +52,7 @@ repos: rev: v4.6.0 hooks: - id: file-contents-sorter - files: ^doc/changes/names.inc + files: ^doc/changes/names.inc|^.mailmap args: ["--ignore-case"] # The following are too slow to run on local commits, so let's only run on CIs: diff --git a/doc/Makefile b/doc/Makefile index 6569adab0f3..ab8219473b0 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -65,10 +65,7 @@ html_dev-noplot: html-noplot html_dev-front: html-front linkcheck: - @$(SPHINXBUILD) -b linkcheck -D nitpicky=0 -D plot_gallery=0 -D exclude_patterns="cited.rst,whats_new.rst,configure_git.rst,_includes,changes/devel" -d _build/doctrees . _build/linkcheck - -linkcheck-grep: - @! grep -h "^.*:.*: \[\(\(local\)\|\(broken\)\)\]" _build/linkcheck/output.txt + @$(SPHINXBUILD) -b linkcheck -D nitpicky=0 -q -D plot_gallery=0 -D exclude_patterns="cited.rst,whats_new.rst,configure_git.rst,_includes,changes/devel" -d _build/doctrees . _build/linkcheck doctest: $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) _build/doctest diff --git a/doc/_templates/sidebar-quicklinks.html b/doc/_templates/sidebar-quicklinks.html index fad7be67401..fa26fc0f298 100644 --- a/doc/_templates/sidebar-quicklinks.html +++ b/doc/_templates/sidebar-quicklinks.html @@ -7,6 +7,7 @@
Version {{ release }}
  • Get help
  • Cite
  • Contribute
  • +
  • Contributors
  • diff --git a/doc/credit.rst b/doc/credit.rst new file mode 100644 index 00000000000..1644a490e1d --- /dev/null +++ b/doc/credit.rst @@ -0,0 +1,395 @@ +.. THIS FILE IS AUTOGENERATED BY update_credit_rst DO NOT EDIT DIRECTLY + +:orphan: + +.. _contributors: + +============ +Contributors +============ + +There are many different ways to contribute to MNE-Python! So far we only list +code contributions below, but plan to add other metrics in the future. + +.. _code_credit: + +Code credit +=========== + +Below are lists of code contributors to MNE-Python. The numbers in parentheses are the +number of lines changed in our code history. + +- :bdg-primary-line:`This Color` is used for the top 10% of contributors. +- :bdg-info-line:`This Color` is used for the remaining 90% of contributors. + +.. raw:: html + + + +Entire codebase +--------------- + + + +.. card:: mne + :class-card: overflow-auto + :link: https://github.com/mne-tools/mne-python/graphs/contributors + + :bdg-primary-line:`Eric Larson (580k)` :bdg-primary-line:`Daniel McCloy (180k)` :bdg-primary-line:`Alexandre Gramfort (76k)` :bdg-primary-line:`Guillaume Favelier (49k)` :bdg-primary-line:`Richard Höchenberger (46k)` :bdg-primary-line:`Denis A. Engemann (42k)` :bdg-primary-line:`Clemens Brunner (40k)` :bdg-primary-line:`Alex Rockhill (31k)` :bdg-primary-line:`Marijn van Vliet (29k)` :bdg-primary-line:`Teon L Brooks (25k)` :bdg-primary-line:`Joan Massich (24k)` :bdg-primary-line:`Jaakko Leppakangas (22k)` :bdg-primary-line:`Christian Brodbeck (21k)` :bdg-primary-line:`Adam Li (20k)` :bdg-primary-line:`Mathieu Scheltienne (18k)` :bdg-primary-line:`Stefan Appelhoff (14k)` :bdg-primary-line:`Martin Luessi (14k)` :bdg-primary-line:`Rob Luke (12k)` :bdg-primary-line:`Mainak Jas (12k)` :bdg-primary-line:`Jona Sassenhagen (10k)` :bdg-primary-line:`Martin Schulz (8.9k)` :bdg-primary-line:`Britta Westner (8.2k)` :bdg-primary-line:`Joris Van den Bossche (8.0k)` :bdg-primary-line:`Jean-Rémi KING (8.0k)` :bdg-primary-line:`Valerii Chirkov (7.6k)` :bdg-primary-line:`Scott Huberty (7.2k)` :bdg-primary-line:`Mark Wronkiewicz (5.6k)` :bdg-primary-line:`Luke Bloy (5.0k)` :bdg-primary-line:`Chris Holdgraf (5.0k)` :bdg-primary-line:`Mikołaj Magnuski (4.8k)` :bdg-primary-line:`Tommy Clausner (4.0k)` :bdg-primary-line:`Alan Leggitt (3.2k)` :bdg-primary-line:`Yousra Bekhti (3.1k)` :bdg-primary-line:`Olaf Hauk (3.0k)` :bdg-primary-line:`Roman Goj (2.8k)` :bdg-primary-line:`Dominik Welke (2.8k)` :bdg-primary-line:`alexandre barachant (2.6k)` :bdg-primary-line:`Thomas Hartmann (2.3k)` :bdg-primary-line:`Phillip Alday (1.8k)` :bdg-info-line:`Daniel Strohmeier (1.8k)` :bdg-info-line:`Fede Raimondo (1.8k)` :bdg-info-line:`Andrew R. Dykstra (1.6k)` :bdg-info-line:`Jevri Hanna (1.6k)` :bdg-info-line:`George O'Neill (1.5k)` :bdg-info-line:`Mathurin Massias (1.5k)` :bdg-info-line:`Kostiantyn Maksymenko (1.5k)` :bdg-info-line:`Johann Benerradi (1.4k)` :bdg-info-line:`Nicolas Barascud (1.3k)` :bdg-info-line:`Jussi Nurminen (1.3k)` :bdg-info-line:`Keith Doelling (1.3k)` :bdg-info-line:`Asish Panda (1.2k)` :bdg-info-line:`Dimitri Papadopoulos Orfanos (1.2k)` :bdg-info-line:`Robert Seymour (1.2k)` :bdg-info-line:`Evan Hathaway (1.2k)` :bdg-info-line:`Henrich Kolkhorst (1.1k)` :bdg-info-line:`Hasrat Ali Arzoo (1.1k)` :bdg-info-line:`Stanislas Chambon (1.1k)` :bdg-info-line:`Nick Foti (1.1k)` :bdg-info-line:`Dirk Gütlin (1.0k)` :bdg-info-line:`Erica Peterson (1.0k)` :bdg-info-line:`Victoria Peterson (970)` :bdg-info-line:`Kristijan Armeni (890)` :bdg-info-line:`Proloy Das (850)` :bdg-info-line:`José C. García Alanis (850)` :bdg-info-line:`Adonay Nunes (820)` :bdg-info-line:`Dmitrii Altukhov (820)` :bdg-info-line:`Ramonapariciog Apariciogarcia (810)` :bdg-info-line:`Dan G. Wakeman (790)` :bdg-info-line:`Jacob Woessner (770)` :bdg-info-line:`Evgenii Kalenkovich (760)` :bdg-info-line:`Valerii (760)` :bdg-info-line:`Kyle Mathewson (710)` :bdg-info-line:`Michiru Kaneda (690)` :bdg-info-line:`Yu-Han Luo (690)` :bdg-info-line:`Florian Hofer (650)` :bdg-info-line:`Annalisa Pascarella (640)` :bdg-info-line:`Martin Billinger (640)` :bdg-info-line:`Felix Klotzsche (630)` :bdg-info-line:`Jonathan Kuziek (630)` :bdg-info-line:`PAB (600)` :bdg-info-line:`Pierre-Antoine Bannier (600)` :bdg-info-line:`Romain Trachel (600)` :bdg-info-line:`Moritz Gerster (590)` :bdg-info-line:`Paul Roujansky (560)` :bdg-info-line:`Stefan Repplinger (550)` :bdg-info-line:`Tristan Stenner (540)` :bdg-info-line:`Jack Zhang (540)` :bdg-info-line:`Sophie Herbst (530)` :bdg-info-line:`Christopher J. Bailey (530)` :bdg-info-line:`Tal Linzen (510)` :bdg-info-line:`Judy D Zhu (490)` :bdg-info-line:`Christian O'Reilly (480)` :bdg-info-line:`Johannes Kasper (480)` :bdg-info-line:`Carina Forster (470)` :bdg-info-line:`Ana Radanovic (460)` :bdg-info-line:`Hubert Banville (460)` :bdg-info-line:`Jair Montoya (450)` :bdg-info-line:`Eduard Ort (440)` :bdg-info-line:`Pablo Mainar (420)` :bdg-info-line:`Ping-Keng Jao (420)` :bdg-info-line:`Victor Férat (390)` :bdg-info-line:`Richard M. Köhler (390)` :bdg-info-line:`Liberty Hamilton (390)` :bdg-info-line:`Justus Schwabedal (370)` :bdg-info-line:`Pierre Ablin (360)` :bdg-info-line:`Ashley Drew (360)` :bdg-info-line:`Hari Bharadwaj (330)` :bdg-info-line:`Roeland Hancock (330)` :bdg-info-line:`Clément Moutard (330)` :bdg-info-line:`Ivana Kojcic (310)` :bdg-info-line:`Santeri Ruuskanen (310)` :bdg-info-line:`David Julien (300)` :bdg-info-line:`Romain Derollepot (300)` :bdg-info-line:`Sheraz Khan (300)` :bdg-info-line:`Jennifer Behnke (290)` :bdg-info-line:`Hakimeh Aslsardroud (290)` :bdg-info-line:`Pavel Navratil (290)` :bdg-info-line:`Theodore Papadopoulo (290)` :bdg-info-line:`Steven Bierer (290)` :bdg-info-line:`Yaroslav Halchenko (280)` :bdg-info-line:`Josh Koen (280)` :bdg-info-line:`Hamza Abdelhedi (250)` :bdg-info-line:`Lorenz Esch (240)` :bdg-info-line:`Jan Sedivy (240)` :bdg-info-line:`John Samuelsson (240)` :bdg-info-line:`Brad Buran (240)` :bdg-info-line:`Thomas S. Binns (240)` :bdg-info-line:`Ram PARI (230)` :bdg-info-line:`Qian Chu (230)` :bdg-info-line:`Jean-Remi King (220)` :bdg-info-line:`Nabil Alibou (220)` :bdg-info-line:`Nathalie Gayraud (220)` :bdg-info-line:`Matt Sanderson (210)` :bdg-info-line:`Nikolai Kapralov (210)` :bdg-info-line:`Martin Perez-Guevara (200)` :bdg-info-line:`Kaisu Lankinen (190)` :bdg-info-line:`Laura Gwilliams (180)` :bdg-info-line:`Alessandro Tonin (180)` :bdg-info-line:`marmaduke woodman (180)` :bdg-info-line:`Velu Prabhakar Kumaravel (180)` :bdg-info-line:`Simon Kornblith (170)` :bdg-info-line:`Quentin Barthélemy (170)` :bdg-info-line:`Andres Rodriguez (170)` :bdg-info-line:`Simon Kern (160)` :bdg-info-line:`Félix Raimundo (160)` :bdg-info-line:`Alexander Rudiuk (160)` :bdg-info-line:`Giorgio Marinato (160)` :bdg-info-line:`Cristóbal Moënne-Loccoz (150)` :bdg-info-line:`Samuel Deslauriers-Gauthier (150)` :bdg-info-line:`Hüseyin Orkun Elmas (150)` :bdg-info-line:`Ilias Machairas (150)` :bdg-info-line:`Alejandro Weinstein (140)` :bdg-info-line:`Cora Kim (140)` :bdg-info-line:`Ross Maddox (140)` :bdg-info-line:`Chun-Hui Li (140)` :bdg-info-line:`Pablo Arias (140)` :bdg-info-line:`Tod Flak (140)` :bdg-info-line:`Peter J. Molfese (130)` :bdg-info-line:`Nikolai M Chapochnikov (130)` :bdg-info-line:`Fahimeh Mamashli (130)` :bdg-info-line:`Katarina Slama (130)` :bdg-info-line:`Matt Boggess (130)` :bdg-info-line:`Quentin Bertrand (120)` :bdg-info-line:`Larry Eisenman (120)` :bdg-info-line:`Leonardo S. Barbosa (120)` :bdg-info-line:`Steven Bethard (120)` :bdg-info-line:`Matt Courtemanche (120)` :bdg-info-line:`Marian Dovgialo (110)` :bdg-info-line:`Hafeza Anevar (110)` :bdg-info-line:`Antoine Gauthier (110)` :bdg-info-line:`Jan Ebert (100)` :bdg-info-line:`Timon Merk (100)` :bdg-info-line:`Jeff Stout (99)` :bdg-info-line:`Zhenya (98)` :bdg-info-line:`ZHANG Zhi (97)` :bdg-info-line:`Oleh Kozynets (96)` :bdg-info-line:`Anna Padee (95)` :bdg-info-line:`Jon Houck (93)` :bdg-info-line:`Lau Møller Andersen (91)` :bdg-info-line:`Silvia Cotroneo (91)` :bdg-info-line:`Erkka Heinila (90)` :bdg-info-line:`Rotem Falach (86)` :bdg-info-line:`Matthias Eberlein (82)` :bdg-info-line:`Andrew Quinn (79)` :bdg-info-line:`Apoorva Karekal (78)` :bdg-info-line:`Camilo Lamus (78)` :bdg-info-line:`Matteo Anelli (76)` :bdg-info-line:`buildqa (76)` :bdg-info-line:`Gennadiy (75)` :bdg-info-line:`Diptyajit Das (75)` :bdg-info-line:`Robert Oostenveld (75)` :bdg-info-line:`Jean-Baptiste Schiratti (73)` :bdg-info-line:`Michal Žák (70)` :bdg-info-line:`Mads Jensen (69)` :bdg-info-line:`Joshua Teves (67)` :bdg-info-line:`Roan LaPlante (67)` :bdg-info-line:`Nicole Proulx (67)` :bdg-info-line:`Manorama Kadwani (66)` :bdg-info-line:`Jesper Duemose Nielsen (65)` :bdg-info-line:`Abram Hindle (64)` :bdg-info-line:`AnneSo (64)` :bdg-info-line:`Jan Sosulski (63)` :bdg-info-line:`Deleted user (61)` :bdg-info-line:`Nicolas Fourcaud-Trocmé (60)` :bdg-info-line:`Maggie Clarke (59)` :bdg-info-line:`Paul Pasler (59)` :bdg-info-line:`Jakub Kaczmarzyk (59)` :bdg-info-line:`Catalina M. Galván (59)` :bdg-info-line:`Ivan Zubarev (58)` :bdg-info-line:`enzo (57)` :bdg-info-line:`Christian Mista (57)` :bdg-info-line:`Motofumi Fushimi (54)` :bdg-info-line:`Mohammad Daneshzand (52)` :bdg-info-line:`Darlene Heliokinde (51)` :bdg-info-line:`Sen-wen DENG (48)` :bdg-info-line:`T. Wang (48)` :bdg-info-line:`Sawradip Saha (48)` :bdg-info-line:`Gonzalo Reina (47)` :bdg-info-line:`Louis Thibault (47)` :bdg-info-line:`luz paz (46)` :bdg-info-line:`Lukas Gemein (46)` :bdg-info-line:`Jordan Drew (45)` :bdg-info-line:`Thomas Donoghue (43)` :bdg-info-line:`Evgeny Goldstein (42)` :bdg-info-line:`Drew, J. (41)` :bdg-info-line:`Aaron Earle-Richardson (39)` :bdg-info-line:`Praveen Sripad (39)` :bdg-info-line:`Nikolas Chalas (39)` :bdg-info-line:`Johannes Niediek (39)` :bdg-info-line:`Rahul Nadkarni (38)` :bdg-info-line:`Sammi Chekroud (36)` :bdg-info-line:`Matthias Dold (35)` :bdg-info-line:`Chetan Gohil (35)` :bdg-info-line:`Joshua Calder-Travis (35)` :bdg-info-line:`Dominique Makowski (35)` :bdg-info-line:`Sebastiaan Mathot (34)` :bdg-info-line:`Sara Sommariva (34)` :bdg-info-line:`Nataliia Kozhemiako (34)` :bdg-info-line:`Christopher Mullins (34)` :bdg-info-line:`Milan Rybář (33)` :bdg-info-line:`Ivo Pascal de Jong (33)` :bdg-info-line:`TzionaN (32)` :bdg-info-line:`akshay0724 (32)` :bdg-info-line:`Maureen Shader (32)` :bdg-info-line:`Arne Pelzer (31)` :bdg-info-line:`Simeon Wong (29)` :bdg-info-line:`Guillaume Dumas (29)` :bdg-info-line:`Juergen Dammers (29)` :bdg-info-line:`Sena (28)` :bdg-info-line:`Daniel C Schad (27)` :bdg-info-line:`Xiaokai Xia (27)` :bdg-info-line:`Mats (26)` :bdg-info-line:`Toomas Erik Anijärv (26)` :bdg-info-line:`Fu-Te Wong (26)` :bdg-info-line:`ChristinaZhao (26)` :bdg-info-line:`Sebastian Major (25)` :bdg-info-line:`Andreas Højlund (25)` :bdg-info-line:`David Haslacher (25)` :bdg-info-line:`Florin Pop (24)` :bdg-info-line:`Thomas Moreau (24)` :bdg-info-line:`Erik Hornberger (24)` :bdg-info-line:`David Sabbagh (24)` :bdg-info-line:`Richard Scholz (23)` :bdg-info-line:`HY Shin (22)` :bdg-info-line:`Natalie Klein (22)` :bdg-info-line:`Katrin Leinweber (22)` :bdg-info-line:`Adina Wagner (20)` :bdg-info-line:`Matti Toivonen (20)` :bdg-info-line:`Darin Erat Sleiter (20)` :bdg-info-line:`Saket Choudhary (20)` :bdg-info-line:`Sebastien Treguer (20)` :bdg-info-line:`Nicolas Gensollen (20)` :bdg-info-line:`Dominik Krzemiński (19)` :bdg-info-line:`Reza Shoorangiz (18)` :bdg-info-line:`Enrico Varano (18)` :bdg-info-line:`Andy Gilbert (18)` :bdg-info-line:`Jeroen Van Der Donckt (17)` :bdg-info-line:`NoahMarkowitz (17)` :bdg-info-line:`Kevin Schiesser (16)` :bdg-info-line:`Tim Gates (16)` :bdg-info-line:`Alexander Kiefer (16)` :bdg-info-line:`Ezequiel Mikulan (16)` :bdg-info-line:`Sam Perry (15)` :bdg-info-line:`Frederik D. Weber (15)` :bdg-info-line:`Carlos de la Torre (15)` :bdg-info-line:`Timur Sokhin (15)` :bdg-info-line:`Mohamed Sherif (15)` :bdg-info-line:`Farzin Negahbani (15)` :bdg-info-line:`Desislava Petkova (15)` :bdg-info-line:`Mark Henney (14)` :bdg-info-line:`Tom Stone (14)` :bdg-info-line:`Riessarius Stargardsky (14)` :bdg-info-line:`Etienne de Montalivet (14)` :bdg-info-line:`Jen Evans (14)` :bdg-info-line:`Dominik Wetzel (13)` :bdg-info-line:`Mauricio Cespedes (13)` :bdg-info-line:`Geoff Brookshire (12)` :bdg-info-line:`Svea Marie Meyer (12)` :bdg-info-line:`Xabier de Zuazo (12)` :bdg-info-line:`Kambiz Tabavi (12)` :bdg-info-line:`Steve Matindi (12)` :bdg-info-line:`Jasper J.F. van den Bosch (12)` :bdg-info-line:`Rodrigo Hübner (12)` :bdg-info-line:`Zvi Baratz (11)` :bdg-info-line:`Ramiro Gatti (11)` :bdg-info-line:`Sumalyo Datta (11)` :bdg-info-line:`Daniel Tse (10)` :bdg-info-line:`Aniket Pradhan (10)` :bdg-info-line:`Johan van der Meer (10)` :bdg-info-line:`Sergey Antopolskiy (10)` :bdg-info-line:`Julia Guiomar Niso Galán (10)` :bdg-info-line:`Manu Sutela (10)` :bdg-info-line:`Emily Stephen (10)` :bdg-info-line:`Jan Zerfowski (9)` :bdg-info-line:`Sebastián Castaño-Candamil (9)` :bdg-info-line:`Naveen (9)` :bdg-info-line:`Laetitia Grabot (9)` :bdg-info-line:`Hongjiang YE (8)` :bdg-info-line:`btkcodedev (8)` :bdg-info-line:`Tom Dupré la Tour (8)` :bdg-info-line:`Ryan Law (8)` :bdg-info-line:`Mingjian He (7)` :bdg-info-line:`Reza Nasri (7)` :bdg-info-line:`Tom Ma (7)` :bdg-info-line:`Thomas Radman (7)` :bdg-info-line:`Rasmus Aagaard (7)` :bdg-info-line:`Will Turner (7)` :bdg-info-line:`Niklas Wilming (7)` :bdg-info-line:`Thomas Jochmann (7)` :bdg-info-line:`Martin (6)` :bdg-info-line:`Daniel Hasegan (6)` :bdg-info-line:`Gansheng TAN (6)` :bdg-info-line:`Nicolas Legrand (6)` :bdg-info-line:`Maksym Balatsko (6)` :bdg-info-line:`Ilian AZZ (6)` :bdg-info-line:`sviter (6)` :bdg-info-line:`Lukas Hecker (6)` :bdg-info-line:`Giulio Gabrieli (6)` :bdg-info-line:`Adeline Fecker (6)` :bdg-info-line:`Matteo Visconti di Oleggio Castello (6)` :bdg-info-line:`alexandra.corneyllie (5)` :bdg-info-line:`Martin Oberg (5)` :bdg-info-line:`Seyed (Yahya) Shirazi (5)` :bdg-info-line:`Hamid (5)` :bdg-info-line:`John Veillette (5)` :bdg-info-line:`Federico Zamberlan (5)` :bdg-info-line:`Bruno Nicenboim (5)` :bdg-info-line:`Martin BaBer (4)` :bdg-info-line:`Dinara Issagaliyeva (4)` :bdg-info-line:`Lukáš Hejtmánek (4)` :bdg-info-line:`Robin Tibor Schirrmeister (4)` :bdg-info-line:`Sagun Pai (4)` :bdg-info-line:`Omer Shubi (4)` :bdg-info-line:`Archit Singhal (4)` :bdg-info-line:`Elizabeth DuPre (4)` :bdg-info-line:`Achilleas Koutsou (3)` :bdg-info-line:`Burkhard Maess (3)` :bdg-info-line:`Steven Gutstein (3)` :bdg-info-line:`Ellen Lau (2)` :bdg-info-line:`Basile (2)` :bdg-info-line:`Padma Sundaram (2)` :bdg-info-line:`Anton Nikolas Waniek (2)` :bdg-info-line:`Ariel Rokem (2)` :bdg-info-line:`Frostime (2)` :bdg-info-line:`manoj kumar (2)` :bdg-info-line:`Sondre Foslien (2)` :bdg-info-line:`Michael (2)` :bdg-info-line:`Pedro Silva (2)` :bdg-info-line:`Marcin Koculak (2)` :bdg-info-line:`Ben Beasley (2)` :bdg-info-line:`jwelzel (2)` :bdg-info-line:`Christoph Dinh (2)` :bdg-info-line:`Matthew A. Tucker (2)` :bdg-info-line:`Tanay Gahlot (2)` :bdg-info-line:`Alex Ciok (2)` :bdg-info-line:`Eric Brayet (2)` :bdg-info-line:`Niels Focke (2)` :bdg-info-line:`Sourav Singh (2)` :bdg-info-line:`Lorenzo Alfine (2)` :bdg-info-line:`Simon-Shlomo Poil (2)` :bdg-info-line:`Claire Braboszcz (2)` :bdg-info-line:`Samuel Louviot (1)` :bdg-info-line:`Emanuele Olivetti (1)` :bdg-info-line:`Christian Clauss (1)` + + + +By submodule +------------ + +Contributors often have domain-specific expertise, so we've broken down the +contributions by submodule as well below. + +.. grid:: 1 2 3 3 + :gutter: 1 + + + + .. grid-item-card:: mne.annotations + :class-card: overflow-auto + :link: https://github.com/mne-tools/mne-python/blame/main/mne/annotations.py + + :bdg-primary-line:`Eric Larson (1.4k)` :bdg-primary-line:`Joan Massich (700)` :bdg-primary-line:`Alexandre Gramfort (380)` :bdg-info-line:`Daniel McCloy (350)` :bdg-info-line:`Jaakko Leppakangas (250)` :bdg-info-line:`Adam Li (230)` :bdg-info-line:`Clemens Brunner (160)` :bdg-info-line:`Rob Luke (130)` :bdg-info-line:`Nicolas Barascud (100)` :bdg-info-line:`Mathieu Scheltienne (70)` :bdg-info-line:`Richard Höchenberger (47)` :bdg-info-line:`Paul Roujansky (47)` :bdg-info-line:`AnneSo (43)` :bdg-info-line:`Mikołaj Magnuski (32)` :bdg-info-line:`Michiru Kaneda (30)` :bdg-info-line:`Stefan Appelhoff (27)` :bdg-info-line:`Alessandro Tonin (21)` :bdg-info-line:`Jona Sassenhagen (20)` :bdg-info-line:`Dirk Gütlin (20)` :bdg-info-line:`Adonay Nunes (19)` :bdg-info-line:`Eduard Ort (10)` :bdg-info-line:`Stanislas Chambon (8)` :bdg-info-line:`Timur Sokhin (7)` :bdg-info-line:`Mainak Jas (7)` :bdg-info-line:`Etienne de Montalivet (6)` :bdg-info-line:`Dimitri Papadopoulos Orfanos (6)` :bdg-info-line:`Kostiantyn Maksymenko (3)` + + + + .. grid-item-card:: mne.beamformer + :class-card: overflow-auto + :link: https://github.com/mne-tools/mne-python/tree/main/mne/beamformer + + :bdg-primary-line:`Eric Larson (7.8k)` :bdg-primary-line:`Britta Westner (4.1k)` :bdg-primary-line:`Marijn van Vliet (3.9k)` :bdg-primary-line:`Roman Goj (1.6k)` :bdg-info-line:`Alex Rockhill (1.4k)` :bdg-info-line:`Alexandre Gramfort (1.3k)` :bdg-info-line:`Martin Luessi (470)` :bdg-info-line:`Tommy Clausner (440)` :bdg-info-line:`Yousra Bekhti (430)` :bdg-info-line:`Olaf Hauk (200)` :bdg-info-line:`Theodore Papadopoulo (180)` :bdg-info-line:`Daniel McCloy (170)` :bdg-info-line:`Mathieu Scheltienne (140)` :bdg-info-line:`Clemens Brunner (120)` :bdg-info-line:`Richard Höchenberger (85)` :bdg-info-line:`Nick Foti (54)` :bdg-info-line:`Denis A. Engemann (53)` :bdg-info-line:`Jaakko Leppakangas (45)` :bdg-info-line:`Andrew R. Dykstra (43)` :bdg-info-line:`Stefan Appelhoff (18)` :bdg-info-line:`Cora Kim (16)` :bdg-info-line:`Christian Brodbeck (15)` :bdg-info-line:`Joan Massich (15)` :bdg-info-line:`Guillaume Favelier (9)` :bdg-info-line:`Milan Rybář (6)` :bdg-info-line:`Jona Sassenhagen (6)` :bdg-info-line:`Pablo Mainar (4)` :bdg-info-line:`Paul Pasler (4)` :bdg-info-line:`Luke Bloy (4)` :bdg-info-line:`Burkhard Maess (3)` :bdg-info-line:`luz paz (2)` :bdg-info-line:`Dimitri Papadopoulos Orfanos (2)` :bdg-info-line:`Katrin Leinweber (2)` + + + + .. grid-item-card:: mne.bem + :class-card: overflow-auto + :link: https://github.com/mne-tools/mne-python/blame/main/mne/bem.py + + :bdg-primary-line:`Eric Larson (4.0k)` :bdg-primary-line:`Alexandre Gramfort (1.1k)` :bdg-primary-line:`Daniel McCloy (160)` :bdg-info-line:`Richard Höchenberger (160)` :bdg-info-line:`Mathieu Scheltienne (140)` :bdg-info-line:`Jaakko Leppakangas (140)` :bdg-info-line:`Clemens Brunner (92)` :bdg-info-line:`Yu-Han Luo (92)` :bdg-info-line:`Matt Courtemanche (62)` :bdg-info-line:`Joan Massich (61)` :bdg-info-line:`Stefan Appelhoff (38)` :bdg-info-line:`Mainak Jas (30)` :bdg-info-line:`Christian Brodbeck (18)` :bdg-info-line:`Jean-Rémi KING (17)` :bdg-info-line:`Luke Bloy (14)` :bdg-info-line:`Jona Sassenhagen (12)` :bdg-info-line:`Mikołaj Magnuski (10)` :bdg-info-line:`Alex Rockhill (10)` :bdg-info-line:`Denis A. Engemann (6)` :bdg-info-line:`luz paz (4)` :bdg-info-line:`Dimitri Papadopoulos Orfanos (4)` :bdg-info-line:`Guillaume Favelier (4)` :bdg-info-line:`Andrew Quinn (3)` :bdg-info-line:`Teon L Brooks (3)` :bdg-info-line:`Hamza Abdelhedi (2)` :bdg-info-line:`Fu-Te Wong (2)` + + + + .. grid-item-card:: mne.channels + :class-card: overflow-auto + :link: https://github.com/mne-tools/mne-python/tree/main/mne/channels + + :bdg-primary-line:`Eric Larson (9.2k)` :bdg-primary-line:`Joan Massich (7.2k)` :bdg-primary-line:`Richard Höchenberger (1.7k)` :bdg-primary-line:`Denis A. Engemann (1.5k)` :bdg-primary-line:`Daniel McCloy (1.4k)` :bdg-primary-line:`Alexandre Gramfort (1.3k)` :bdg-primary-line:`Teon L Brooks (1.3k)` :bdg-primary-line:`Alex Rockhill (1.3k)` :bdg-primary-line:`Marijn van Vliet (1.1k)` :bdg-primary-line:`Mathieu Scheltienne (1.0k)` :bdg-info-line:`Rob Luke (830)` :bdg-info-line:`Clemens Brunner (800)` :bdg-info-line:`Jaakko Leppakangas (740)` :bdg-info-line:`Stefan Appelhoff (670)` :bdg-info-line:`Christian Brodbeck (560)` :bdg-info-line:`Johann Benerradi (480)` :bdg-info-line:`Adam Li (410)` :bdg-info-line:`Mainak Jas (400)` :bdg-info-line:`Jona Sassenhagen (260)` :bdg-info-line:`Ana Radanovic (230)` :bdg-info-line:`Chris Holdgraf (200)` :bdg-info-line:`Erica Peterson (130)` :bdg-info-line:`Matt Boggess (120)` :bdg-info-line:`Leonardo S. Barbosa (110)` :bdg-info-line:`Martin Luessi (110)` :bdg-info-line:`Jack Zhang (100)` :bdg-info-line:`Mikołaj Magnuski (72)` :bdg-info-line:`Luke Bloy (64)` :bdg-info-line:`Fede Raimondo (60)` :bdg-info-line:`Yousra Bekhti (56)` :bdg-info-line:`ZHANG Zhi (56)` :bdg-info-line:`Evan Hathaway (56)` :bdg-info-line:`Jean-Baptiste Schiratti (51)` :bdg-info-line:`Richard M. Köhler (48)` :bdg-info-line:`Rotem Falach (46)` :bdg-info-line:`Britta Westner (46)` :bdg-info-line:`Johannes Kasper (44)` :bdg-info-line:`Martin Perez-Guevara (39)` :bdg-info-line:`Ivan Zubarev (37)` :bdg-info-line:`Christopher Mullins (30)` :bdg-info-line:`Hari Bharadwaj (29)` :bdg-info-line:`Tal Linzen (27)` :bdg-info-line:`Martin Schulz (25)` :bdg-info-line:`Scott Huberty (24)` :bdg-info-line:`Dominik Welke (24)` :bdg-info-line:`TzionaN (23)` :bdg-info-line:`Dimitri Papadopoulos Orfanos (22)` :bdg-info-line:`Jean-Rémi KING (20)` :bdg-info-line:`Evgeny Goldstein (20)` :bdg-info-line:`Andrew Quinn (19)` :bdg-info-line:`Felix Klotzsche (18)` :bdg-info-line:`Mark Wronkiewicz (18)` :bdg-info-line:`Rahul Nadkarni (18)` :bdg-info-line:`Jan Ebert (15)` :bdg-info-line:`Hubert Banville (15)` :bdg-info-line:`Kyle Mathewson (14)` :bdg-info-line:`Jonathan Kuziek (14)` :bdg-info-line:`Pablo Mainar (11)` :bdg-info-line:`Keith Doelling (10)` :bdg-info-line:`Valerii Chirkov (10)` :bdg-info-line:`Ilias Machairas (9)` :bdg-info-line:`Moritz Gerster (8)` :bdg-info-line:`Nikolai Kapralov (8)` :bdg-info-line:`Erkka Heinila (8)` :bdg-info-line:`Diptyajit Das (7)` :bdg-info-line:`akshay0724 (6)` :bdg-info-line:`Stefan Repplinger (6)` :bdg-info-line:`Jevri Hanna (6)` :bdg-info-line:`Ping-Keng Jao (6)` :bdg-info-line:`Catalina M. Galván (6)` :bdg-info-line:`Clément Moutard (6)` :bdg-info-line:`Christopher J. Bailey (6)` :bdg-info-line:`Matti Toivonen (5)` :bdg-info-line:`Federico Zamberlan (5)` :bdg-info-line:`Matthias Dold (4)` :bdg-info-line:`Dinara Issagaliyeva (4)` :bdg-info-line:`Farzin Negahbani (4)` :bdg-info-line:`Lukáš Hejtmánek (4)` :bdg-info-line:`Larry Eisenman (4)` :bdg-info-line:`Achilleas Koutsou (3)` :bdg-info-line:`Robert Seymour (3)` :bdg-info-line:`marmaduke woodman (3)` :bdg-info-line:`Dan G. Wakeman (2)` :bdg-info-line:`Guillaume Favelier (2)` :bdg-info-line:`Daniel Hasegan (2)` :bdg-info-line:`Maksym Balatsko (2)` :bdg-info-line:`Alejandro Weinstein (2)` :bdg-info-line:`Jean-Remi King (2)` :bdg-info-line:`Samuel Louviot (1)` :bdg-info-line:`Alexander Rudiuk (1)` :bdg-info-line:`Andrew R. Dykstra (1)` + + + + .. grid-item-card:: mne.chpi + :class-card: overflow-auto + :link: https://github.com/mne-tools/mne-python/blame/main/mne/chpi.py + + :bdg-primary-line:`Eric Larson (3.6k)` :bdg-primary-line:`Luke Bloy (760)` :bdg-info-line:`Daniel McCloy (210)` :bdg-info-line:`Clemens Brunner (100)` :bdg-info-line:`Matt Sanderson (94)` :bdg-info-line:`Steven Bierer (56)` :bdg-info-line:`Eduard Ort (52)` :bdg-info-line:`Richard Höchenberger (50)` :bdg-info-line:`Marijn van Vliet (20)` :bdg-info-line:`Mathieu Scheltienne (18)` :bdg-info-line:`Alexandre Gramfort (14)` :bdg-info-line:`Stefan Appelhoff (12)` :bdg-info-line:`Johannes Kasper (9)` :bdg-info-line:`Alex Rockhill (9)` :bdg-info-line:`Jaakko Leppakangas (8)` :bdg-info-line:`Jussi Nurminen (3)` :bdg-info-line:`Kambiz Tabavi (2)` :bdg-info-line:`Dimitri Papadopoulos Orfanos (1)` + + + + .. grid-item-card:: mne.commands + :class-card: overflow-auto + :link: https://github.com/mne-tools/mne-python/tree/main/mne/commands + + :bdg-primary-line:`Eric Larson (3.2k)` :bdg-primary-line:`Alexandre Gramfort (840)` :bdg-primary-line:`Martin Luessi (540)` :bdg-primary-line:`Victor Férat (390)` :bdg-info-line:`Denis A. Engemann (170)` :bdg-info-line:`Joan Massich (140)` :bdg-info-line:`Daniel McCloy (140)` :bdg-info-line:`Clemens Brunner (140)` :bdg-info-line:`Mainak Jas (140)` :bdg-info-line:`Christian Brodbeck (140)` :bdg-info-line:`Luke Bloy (110)` :bdg-info-line:`Richard Höchenberger (110)` :bdg-info-line:`Yaroslav Halchenko (88)` :bdg-info-line:`Guillaume Favelier (77)` :bdg-info-line:`Yu-Han Luo (66)` :bdg-info-line:`Stefan Appelhoff (41)` :bdg-info-line:`Mark Wronkiewicz (36)` :bdg-info-line:`Jaakko Leppakangas (23)` :bdg-info-line:`Mathieu Scheltienne (22)` :bdg-info-line:`Praveen Sripad (19)` :bdg-info-line:`Dominik Krzemiński (13)` :bdg-info-line:`Yousra Bekhti (12)` :bdg-info-line:`Félix Raimundo (10)` :bdg-info-line:`Dimitri Papadopoulos Orfanos (5)` :bdg-info-line:`Antoine Gauthier (5)` :bdg-info-line:`Martin Schulz (5)` :bdg-info-line:`Jean-Rémi KING (4)` :bdg-info-line:`Kambiz Tabavi (4)` :bdg-info-line:`Teon L Brooks (4)` :bdg-info-line:`Jon Houck (2)` :bdg-info-line:`Alex Rockhill (1)` :bdg-info-line:`Erica Peterson (1)` + + + + .. grid-item-card:: mne-connectivity (moved) + :class-card: overflow-auto + :link: https://github.com/mne-tools/mne-connectivity + + :bdg-primary-line:`Eric Larson (5.3k)` :bdg-primary-line:`Martin Luessi (520)` :bdg-info-line:`Denis A. Engemann (490)` :bdg-info-line:`Daniel McCloy (120)` :bdg-info-line:`Anna Padee (89)` :bdg-info-line:`Alexandre Gramfort (63)` :bdg-info-line:`Adonay Nunes (63)` :bdg-info-line:`Ana Radanovic (44)` :bdg-info-line:`Adam Li (32)` :bdg-info-line:`Andrew R. Dykstra (15)` :bdg-info-line:`Mikołaj Magnuski (12)` :bdg-info-line:`Stefan Appelhoff (10)` :bdg-info-line:`Catalina M. Galván (9)` :bdg-info-line:`Jaakko Leppakangas (7)` :bdg-info-line:`sviter (4)` :bdg-info-line:`Chris Holdgraf (4)` :bdg-info-line:`Jean-Remi King (3)` + + + + .. grid-item-card:: mne.coreg + :class-card: overflow-auto + :link: https://github.com/mne-tools/mne-python/blame/main/mne/coreg.py + + :bdg-primary-line:`Eric Larson (2.0k)` :bdg-primary-line:`Christian Brodbeck (880)` :bdg-info-line:`Guillaume Favelier (800)` :bdg-info-line:`Alexandre Gramfort (740)` :bdg-info-line:`Teon L Brooks (140)` :bdg-info-line:`Richard Höchenberger (120)` :bdg-info-line:`Mathieu Scheltienne (89)` :bdg-info-line:`Daniel McCloy (65)` :bdg-info-line:`Jean-Rémi KING (57)` :bdg-info-line:`Clemens Brunner (36)` :bdg-info-line:`Dimitri Papadopoulos Orfanos (25)` :bdg-info-line:`Alex Rockhill (18)` :bdg-info-line:`Luke Bloy (16)` :bdg-info-line:`Stefan Appelhoff (10)` :bdg-info-line:`Rob Luke (9)` :bdg-info-line:`luz paz (2)` :bdg-info-line:`Joan Massich (1)` + + + + .. grid-item-card:: mne.cov + :class-card: overflow-auto + :link: https://github.com/mne-tools/mne-python/blame/main/mne/cov.py + + :bdg-primary-line:`Eric Larson (3.7k)` :bdg-primary-line:`Alexandre Gramfort (1.7k)` :bdg-primary-line:`Denis A. Engemann (1.3k)` :bdg-primary-line:`alexandre barachant (210)` :bdg-info-line:`Daniel McCloy (180)` :bdg-info-line:`Martin Luessi (170)` :bdg-info-line:`Marijn van Vliet (110)` :bdg-info-line:`Clemens Brunner (74)` :bdg-info-line:`Alex Rockhill (55)` :bdg-info-line:`Jaakko Leppakangas (49)` :bdg-info-line:`Mathieu Scheltienne (45)` :bdg-info-line:`Rob Luke (39)` :bdg-info-line:`Richard Höchenberger (38)` :bdg-info-line:`Britta Westner (24)` :bdg-info-line:`Nathalie Gayraud (21)` :bdg-info-line:`Mainak Jas (19)` :bdg-info-line:`Kyle Mathewson (17)` :bdg-info-line:`Jonathan Kuziek (17)` :bdg-info-line:`Luke Bloy (16)` :bdg-info-line:`Richard M. Köhler (16)` :bdg-info-line:`Olaf Hauk (15)` :bdg-info-line:`Jona Sassenhagen (13)` :bdg-info-line:`Teon L Brooks (7)` :bdg-info-line:`Romain Trachel (6)` :bdg-info-line:`Christian Brodbeck (6)` :bdg-info-line:`David Sabbagh (6)` :bdg-info-line:`Mark Wronkiewicz (5)` :bdg-info-line:`Yu-Han Luo (5)` :bdg-info-line:`Roman Goj (4)` :bdg-info-line:`Guillaume Favelier (4)` :bdg-info-line:`Moritz Gerster (2)` :bdg-info-line:`sviter (2)` :bdg-info-line:`Praveen Sripad (2)` :bdg-info-line:`Stefan Appelhoff (2)` + + + + .. grid-item-card:: mne.datasets + :class-card: overflow-auto + :link: https://github.com/mne-tools/mne-python/tree/main/mne/datasets + + :bdg-primary-line:`Eric Larson (7.6k)` :bdg-primary-line:`Daniel McCloy (3.8k)` :bdg-primary-line:`Adam Li (3.2k)` :bdg-primary-line:`Stanislas Chambon (690)` :bdg-primary-line:`Joan Massich (670)` :bdg-primary-line:`Denis A. Engemann (490)` :bdg-primary-line:`Clemens Brunner (400)` :bdg-primary-line:`José C. García Alanis (260)` :bdg-info-line:`Hubert Banville (240)` :bdg-info-line:`Mainak Jas (230)` :bdg-info-line:`Jaakko Leppakangas (220)` :bdg-info-line:`Mathieu Scheltienne (210)` :bdg-info-line:`Alexandre Gramfort (170)` :bdg-info-line:`Chris Holdgraf (160)` :bdg-info-line:`Jussi Nurminen (150)` :bdg-info-line:`Richard Höchenberger (140)` :bdg-info-line:`Rob Luke (100)` :bdg-info-line:`Alex Rockhill (100)` :bdg-info-line:`Dominik Welke (92)` :bdg-info-line:`Stefan Appelhoff (77)` :bdg-info-line:`Scott Huberty (58)` :bdg-info-line:`Liberty Hamilton (53)` :bdg-info-line:`alexandre barachant (52)` :bdg-info-line:`George O'Neill (51)` :bdg-info-line:`Evgenii Kalenkovich (48)` :bdg-info-line:`Robert Seymour (47)` :bdg-info-line:`Jevri Hanna (41)` :bdg-info-line:`Judy D Zhu (38)` :bdg-info-line:`Tal Linzen (36)` :bdg-info-line:`Yu-Han Luo (32)` :bdg-info-line:`Martin Luessi (31)` :bdg-info-line:`Erica Peterson (28)` :bdg-info-line:`ChristinaZhao (24)` :bdg-info-line:`Ana Radanovic (24)` :bdg-info-line:`Britta Westner (20)` :bdg-info-line:`Roman Goj (18)` :bdg-info-line:`Fede Raimondo (16)` :bdg-info-line:`Marijn van Vliet (15)` :bdg-info-line:`Arne Pelzer (14)` :bdg-info-line:`Luke Bloy (12)` :bdg-info-line:`Thomas Hartmann (12)` :bdg-info-line:`Kristijan Armeni (12)` :bdg-info-line:`Catalina M. Galván (12)` :bdg-info-line:`Dimitri Papadopoulos Orfanos (11)` :bdg-info-line:`Christian O'Reilly (11)` :bdg-info-line:`Mark Wronkiewicz (8)` :bdg-info-line:`Christian Brodbeck (8)` :bdg-info-line:`Dirk Gütlin (8)` :bdg-info-line:`Jacob Woessner (8)` :bdg-info-line:`Guillaume Favelier (6)` :bdg-info-line:`Guillaume Dumas (4)` :bdg-info-line:`Matt Boggess (4)` :bdg-info-line:`Ramonapariciog Apariciogarcia (4)` :bdg-info-line:`Nicolas Barascud (4)` :bdg-info-line:`Abram Hindle (4)` :bdg-info-line:`Roeland Hancock (4)` :bdg-info-line:`Tod Flak (4)` :bdg-info-line:`Tristan Stenner (4)` :bdg-info-line:`Andres Rodriguez (4)` :bdg-info-line:`Matt Sanderson (4)` :bdg-info-line:`Martin Schulz (4)` :bdg-info-line:`David Julien (4)` :bdg-info-line:`Romain Derollepot (4)` :bdg-info-line:`Alessandro Tonin (4)` :bdg-info-line:`Proloy Das (4)` :bdg-info-line:`Giulio Gabrieli (4)` :bdg-info-line:`Tanay Gahlot (2)` :bdg-info-line:`Alexander Rudiuk (2)` :bdg-info-line:`Mathurin Massias (2)` :bdg-info-line:`Ramiro Gatti (2)` :bdg-info-line:`Zhenya (2)` :bdg-info-line:`Maksym Balatsko (1)` + + + + .. grid-item-card:: mne.decoding + :class-card: overflow-auto + :link: https://github.com/mne-tools/mne-python/tree/main/mne/decoding + + :bdg-primary-line:`Eric Larson (11k)` :bdg-primary-line:`Jean-Rémi KING (5.2k)` :bdg-primary-line:`Denis A. Engemann (2.1k)` :bdg-primary-line:`Alexandre Gramfort (1.4k)` :bdg-primary-line:`Asish Panda (690)` :bdg-info-line:`Clemens Brunner (640)` :bdg-info-line:`Daniel McCloy (640)` :bdg-info-line:`Chris Holdgraf (580)` :bdg-info-line:`Victoria Peterson (520)` :bdg-info-line:`alexandre barachant (460)` :bdg-info-line:`Martin Billinger (370)` :bdg-info-line:`Richard Höchenberger (290)` :bdg-info-line:`Jaakko Leppakangas (210)` :bdg-info-line:`Romain Trachel (170)` :bdg-info-line:`Thomas S. Binns (160)` :bdg-info-line:`Chun-Hui Li (130)` :bdg-info-line:`Nicolas Barascud (120)` :bdg-info-line:`Mikołaj Magnuski (120)` :bdg-info-line:`Martin Luessi (110)` :bdg-info-line:`Marijn van Vliet (110)` :bdg-info-line:`Mathieu Scheltienne (68)` :bdg-info-line:`Laura Gwilliams (65)` :bdg-info-line:`Stefan Appelhoff (56)` :bdg-info-line:`Mainak Jas (47)` :bdg-info-line:`Jona Sassenhagen (44)` :bdg-info-line:`Alex Rockhill (39)` :bdg-info-line:`Clément Moutard (36)` :bdg-info-line:`Dimitri Papadopoulos Orfanos (26)` :bdg-info-line:`akshay0724 (26)` :bdg-info-line:`Daniel C Schad (24)` :bdg-info-line:`Alexander Rudiuk (22)` :bdg-info-line:`Pablo Mainar (20)` :bdg-info-line:`Kristijan Armeni (14)` :bdg-info-line:`Tom Dupré la Tour (8)` :bdg-info-line:`Nikolai Kapralov (8)` :bdg-info-line:`Mark Wronkiewicz (7)` :bdg-info-line:`Guillaume Favelier (5)` :bdg-info-line:`Yaroslav Halchenko (5)` :bdg-info-line:`Keith Doelling (4)` :bdg-info-line:`Ross Maddox (4)` :bdg-info-line:`Quentin Barthélemy (3)` :bdg-info-line:`Julia Guiomar Niso Galán (2)` :bdg-info-line:`Teon L Brooks (2)` :bdg-info-line:`Hongjiang YE (2)` :bdg-info-line:`Rodrigo Hübner (2)` :bdg-info-line:`Joan Massich (2)` :bdg-info-line:`Milan Rybář (2)` :bdg-info-line:`Adonay Nunes (2)` :bdg-info-line:`Tim Gates (2)` + + + + .. grid-item-card:: mne.dipole + :class-card: overflow-auto + :link: https://github.com/mne-tools/mne-python/blame/main/mne/dipole.py + + :bdg-primary-line:`Eric Larson (3.0k)` :bdg-primary-line:`Alexandre Gramfort (360)` :bdg-info-line:`Jaakko Leppakangas (150)` :bdg-info-line:`Alex Rockhill (97)` :bdg-info-line:`Clemens Brunner (72)` :bdg-info-line:`Judy D Zhu (69)` :bdg-info-line:`Daniel McCloy (47)` :bdg-info-line:`Marijn van Vliet (45)` :bdg-info-line:`Mathieu Scheltienne (43)` :bdg-info-line:`Richard Höchenberger (42)` :bdg-info-line:`Christian Brodbeck (40)` :bdg-info-line:`Mark Wronkiewicz (24)` :bdg-info-line:`Valerii (23)` :bdg-info-line:`Dimitri Papadopoulos Orfanos (7)` :bdg-info-line:`Rodrigo Hübner (6)` :bdg-info-line:`Andrew Quinn (3)` + + + + .. grid-item-card:: mne.epochs + :class-card: overflow-auto + :link: https://github.com/mne-tools/mne-python/blame/main/mne/epochs.py + + :bdg-primary-line:`Eric Larson (8.9k)` :bdg-primary-line:`Richard Höchenberger (2.1k)` :bdg-primary-line:`Daniel McCloy (2.1k)` :bdg-primary-line:`Denis A. Engemann (1.2k)` :bdg-primary-line:`Alexandre Gramfort (980)` :bdg-primary-line:`Marijn van Vliet (810)` :bdg-primary-line:`Jaakko Leppakangas (510)` :bdg-primary-line:`Clemens Brunner (500)` :bdg-info-line:`Adam Li (500)` :bdg-info-line:`Keith Doelling (410)` :bdg-info-line:`Mainak Jas (390)` :bdg-info-line:`Stefan Appelhoff (340)` :bdg-info-line:`Chris Holdgraf (340)` :bdg-info-line:`Alex Rockhill (240)` :bdg-info-line:`Mathieu Scheltienne (160)` :bdg-info-line:`Sophie Herbst (160)` :bdg-info-line:`Jona Sassenhagen (140)` :bdg-info-line:`Pablo Mainar (130)` :bdg-info-line:`Christian Brodbeck (130)` :bdg-info-line:`Martin Luessi (120)` :bdg-info-line:`Jacob Woessner (100)` :bdg-info-line:`Daniel Strohmeier (95)` :bdg-info-line:`Teon L Brooks (86)` :bdg-info-line:`Stefan Repplinger (84)` :bdg-info-line:`Martin Schulz (82)` :bdg-info-line:`Asish Panda (79)` :bdg-info-line:`Henrich Kolkhorst (67)` :bdg-info-line:`Victoria Peterson (56)` :bdg-info-line:`Erica Peterson (56)` :bdg-info-line:`Jack Zhang (54)` :bdg-info-line:`Johann Benerradi (49)` :bdg-info-line:`Tal Linzen (48)` :bdg-info-line:`Mark Wronkiewicz (48)` :bdg-info-line:`Mikołaj Magnuski (46)` :bdg-info-line:`Dominik Welke (45)` :bdg-info-line:`Fahimeh Mamashli (42)` :bdg-info-line:`Carina Forster (38)` :bdg-info-line:`Dmitrii Altukhov (35)` :bdg-info-line:`Thomas Hartmann (29)` :bdg-info-line:`Paul Roujansky (27)` :bdg-info-line:`Mohammad Daneshzand (27)` :bdg-info-line:`Jan Sosulski (26)` :bdg-info-line:`Valerii (26)` :bdg-info-line:`Hubert Banville (25)` :bdg-info-line:`Katarina Slama (24)` :bdg-info-line:`Ross Maddox (22)` :bdg-info-line:`Jean-Remi King (22)` :bdg-info-line:`Jevri Hanna (18)` :bdg-info-line:`Yu-Han Luo (18)` :bdg-info-line:`Jean-Rémi KING (17)` :bdg-info-line:`Andrew R. Dykstra (16)` :bdg-info-line:`Lukas Gemein (14)` :bdg-info-line:`Clément Moutard (13)` :bdg-info-line:`Félix Raimundo (13)` :bdg-info-line:`Jakub Kaczmarzyk (13)` :bdg-info-line:`alexandre barachant (13)` :bdg-info-line:`Ana Radanovic (13)` :bdg-info-line:`Britta Westner (13)` :bdg-info-line:`Sergey Antopolskiy (10)` :bdg-info-line:`Silvia Cotroneo (10)` :bdg-info-line:`Cristóbal Moënne-Loccoz (9)` :bdg-info-line:`Dimitri Papadopoulos Orfanos (8)` :bdg-info-line:`Joan Massich (8)` :bdg-info-line:`Jussi Nurminen (6)` :bdg-info-line:`Roman Goj (5)` :bdg-info-line:`Milan Rybář (5)` :bdg-info-line:`Hasrat Ali Arzoo (4)` :bdg-info-line:`Alejandro Weinstein (4)` :bdg-info-line:`Richard M. Köhler (4)` :bdg-info-line:`Nikolai M Chapochnikov (3)` :bdg-info-line:`Gonzalo Reina (3)` :bdg-info-line:`manoj kumar (2)` :bdg-info-line:`Jasper J.F. van den Bosch (2)` :bdg-info-line:`Nicolas Legrand (2)` :bdg-info-line:`Evan Hathaway (2)` :bdg-info-line:`Tim Gates (2)` + + + + .. grid-item-card:: mne.event + :class-card: overflow-auto + :link: https://github.com/mne-tools/mne-python/blame/main/mne/event.py + + :bdg-primary-line:`Eric Larson (1.1k)` :bdg-primary-line:`Jussi Nurminen (470)` :bdg-primary-line:`Christian Brodbeck (300)` :bdg-primary-line:`Alexandre Gramfort (160)` :bdg-info-line:`Richard Höchenberger (100)` :bdg-info-line:`Mathieu Scheltienne (98)` :bdg-info-line:`Daniel McCloy (97)` :bdg-info-line:`Simon Kornblith (94)` :bdg-info-line:`Martin Luessi (92)` :bdg-info-line:`Clemens Brunner (80)` :bdg-info-line:`Denis A. Engemann (49)` :bdg-info-line:`Teon L Brooks (44)` :bdg-info-line:`Marijn van Vliet (26)` :bdg-info-line:`Jona Sassenhagen (26)` :bdg-info-line:`Judy D Zhu (22)` :bdg-info-line:`Dan G. Wakeman (20)` :bdg-info-line:`Louis Thibault (15)` :bdg-info-line:`Clément Moutard (12)` :bdg-info-line:`Mikołaj Magnuski (11)` :bdg-info-line:`Nikolas Chalas (10)` :bdg-info-line:`Mainak Jas (8)` :bdg-info-line:`Thomas Moreau (7)` :bdg-info-line:`Chris Holdgraf (6)` :bdg-info-line:`Alex Rockhill (6)` :bdg-info-line:`Stefan Appelhoff (4)` :bdg-info-line:`Natalie Klein (4)` :bdg-info-line:`Tal Linzen (4)` :bdg-info-line:`Martin Schulz (3)` :bdg-info-line:`Jaakko Leppakangas (3)` :bdg-info-line:`Guillaume Favelier (2)` :bdg-info-line:`Dimitri Papadopoulos Orfanos (2)` :bdg-info-line:`Fu-Te Wong (2)` :bdg-info-line:`Henrich Kolkhorst (1)` + + + + .. grid-item-card:: mne.evoked + :class-card: overflow-auto + :link: https://github.com/mne-tools/mne-python/blame/main/mne/evoked.py + + :bdg-primary-line:`Eric Larson (2.8k)` :bdg-primary-line:`Richard Höchenberger (760)` :bdg-primary-line:`Daniel McCloy (710)` :bdg-primary-line:`Marijn van Vliet (610)` :bdg-primary-line:`Jaakko Leppakangas (220)` :bdg-info-line:`Denis A. Engemann (190)` :bdg-info-line:`Alex Rockhill (180)` :bdg-info-line:`Alexandre Gramfort (170)` :bdg-info-line:`Jona Sassenhagen (140)` :bdg-info-line:`Stefan Appelhoff (130)` :bdg-info-line:`Mathieu Scheltienne (100)` :bdg-info-line:`Jussi Nurminen (93)` :bdg-info-line:`Clemens Brunner (71)` :bdg-info-line:`Dominik Welke (70)` :bdg-info-line:`Andrew R. Dykstra (66)` :bdg-info-line:`Mainak Jas (61)` :bdg-info-line:`Victoria Peterson (56)` :bdg-info-line:`Erica Peterson (56)` :bdg-info-line:`Rob Luke (40)` :bdg-info-line:`Félix Raimundo (39)` :bdg-info-line:`Christopher J. Bailey (35)` :bdg-info-line:`Jacob Woessner (27)` :bdg-info-line:`Jean-Remi King (22)` :bdg-info-line:`Fede Raimondo (16)` :bdg-info-line:`Kyle Mathewson (16)` :bdg-info-line:`Jonathan Kuziek (16)` :bdg-info-line:`Lau Møller Andersen (14)` :bdg-info-line:`Valerii Chirkov (13)` :bdg-info-line:`Jakub Kaczmarzyk (12)` :bdg-info-line:`Ram PARI (12)` :bdg-info-line:`Teon L Brooks (11)` :bdg-info-line:`Richard M. Köhler (10)` :bdg-info-line:`Jan Sosulski (9)` :bdg-info-line:`Christian Brodbeck (9)` :bdg-info-line:`Mikołaj Magnuski (9)` :bdg-info-line:`Mats (8)` :bdg-info-line:`Chris Holdgraf (8)` :bdg-info-line:`Sophie Herbst (7)` :bdg-info-line:`Jean-Rémi KING (6)` :bdg-info-line:`Stefan Repplinger (5)` :bdg-info-line:`Martin Schulz (5)` :bdg-info-line:`Guillaume Favelier (5)` :bdg-info-line:`Hüseyin Orkun Elmas (4)` :bdg-info-line:`Alejandro Weinstein (4)` :bdg-info-line:`Dimitri Papadopoulos Orfanos (3)` :bdg-info-line:`Nikolai M Chapochnikov (3)` :bdg-info-line:`Gonzalo Reina (3)` :bdg-info-line:`Roman Goj (1)` :bdg-info-line:`Adam Li (1)` + + + + .. grid-item-card:: mne.export + :class-card: overflow-auto + :link: https://github.com/mne-tools/mne-python/tree/main/mne/export + + :bdg-primary-line:`Eric Larson (1.1k)` :bdg-primary-line:`Clemens Brunner (940)` :bdg-info-line:`Daniel McCloy (870)` :bdg-info-line:`Adam Li (620)` :bdg-info-line:`Florian Hofer (610)` :bdg-info-line:`Alexandre Gramfort (600)` :bdg-info-line:`Stefan Appelhoff (510)` :bdg-info-line:`Evan Hathaway (300)` :bdg-info-line:`Mathieu Scheltienne (270)` :bdg-info-line:`Richard Höchenberger (99)` :bdg-info-line:`Paul Roujansky (76)` :bdg-info-line:`Qian Chu (52)` :bdg-info-line:`Mark Henney (11)` :bdg-info-line:`Dimitri Papadopoulos Orfanos (8)` :bdg-info-line:`Jack Zhang (8)` :bdg-info-line:`Mikołaj Magnuski (5)` :bdg-info-line:`Reza Nasri (3)` :bdg-info-line:`Giulio Gabrieli (2)` + + + + .. grid-item-card:: mne.filter + :class-card: overflow-auto + :link: https://github.com/mne-tools/mne-python/blame/main/mne/filter.py + + :bdg-primary-line:`Eric Larson (9.7k)` :bdg-primary-line:`Daniel McCloy (410)` :bdg-primary-line:`Martin Luessi (390)` :bdg-primary-line:`Clemens Brunner (190)` :bdg-info-line:`Christian Brodbeck (110)` :bdg-info-line:`Mathieu Scheltienne (86)` :bdg-info-line:`Quentin Barthélemy (80)` :bdg-info-line:`Marijn van Vliet (64)` :bdg-info-line:`Hamza Abdelhedi (56)` :bdg-info-line:`Denis A. Engemann (54)` :bdg-info-line:`Stefan Appelhoff (53)` :bdg-info-line:`Jaakko Leppakangas (33)` :bdg-info-line:`Mainak Jas (23)` :bdg-info-line:`Richard Höchenberger (20)` :bdg-info-line:`Gennadiy (18)` :bdg-info-line:`Kevin Schiesser (16)` :bdg-info-line:`Thomas Donoghue (15)` :bdg-info-line:`Nikolai M Chapochnikov (10)` :bdg-info-line:`Alex Rockhill (9)` :bdg-info-line:`Dimitri Papadopoulos Orfanos (9)` :bdg-info-line:`Alexandre Gramfort (8)` :bdg-info-line:`luz paz (6)` :bdg-info-line:`marmaduke woodman (6)` :bdg-info-line:`Martin (6)` :bdg-info-line:`Ross Maddox (5)` :bdg-info-line:`Asish Panda (5)` :bdg-info-line:`Jona Sassenhagen (5)` :bdg-info-line:`Sam Perry (5)` :bdg-info-line:`Chris Holdgraf (2)` :bdg-info-line:`Teon L Brooks (2)` :bdg-info-line:`Bruno Nicenboim (2)` + + + + .. grid-item-card:: mne.forward + :class-card: overflow-auto + :link: https://github.com/mne-tools/mne-python/tree/main/mne/forward + + :bdg-primary-line:`Eric Larson (11k)` :bdg-primary-line:`Alexandre Gramfort (1.2k)` :bdg-primary-line:`Mark Wronkiewicz (870)` :bdg-primary-line:`Mainak Jas (600)` :bdg-primary-line:`Denis A. Engemann (330)` :bdg-info-line:`Daniel McCloy (330)` :bdg-info-line:`Martin Luessi (280)` :bdg-info-line:`Mathieu Scheltienne (280)` :bdg-info-line:`Clemens Brunner (180)` :bdg-info-line:`Christian Brodbeck (170)` :bdg-info-line:`Alan Leggitt (160)` :bdg-info-line:`Jaakko Leppakangas (160)` :bdg-info-line:`Marijn van Vliet (140)` :bdg-info-line:`Daniel Strohmeier (110)` :bdg-info-line:`Richard Höchenberger (94)` :bdg-info-line:`Sophie Herbst (84)` :bdg-info-line:`Camilo Lamus (61)` :bdg-info-line:`Adam Li (56)` :bdg-info-line:`Valerii Chirkov (56)` :bdg-info-line:`Alex Rockhill (47)` :bdg-info-line:`Jona Sassenhagen (36)` :bdg-info-line:`Luke Bloy (36)` :bdg-info-line:`Andrew Quinn (33)` :bdg-info-line:`Yousra Bekhti (28)` :bdg-info-line:`Hasrat Ali Arzoo (27)` :bdg-info-line:`Stefan Appelhoff (20)` :bdg-info-line:`Andrew R. Dykstra (16)` :bdg-info-line:`Guillaume Favelier (14)` :bdg-info-line:`Dimitri Papadopoulos Orfanos (10)` :bdg-info-line:`Nikolai Kapralov (10)` :bdg-info-line:`Hubert Banville (9)` :bdg-info-line:`Jean-Remi King (9)` :bdg-info-line:`Pablo Mainar (8)` :bdg-info-line:`Moritz Gerster (6)` :bdg-info-line:`Ashley Drew (5)` :bdg-info-line:`Jordan Drew (5)` :bdg-info-line:`Dominik Welke (5)` :bdg-info-line:`George O'Neill (3)` :bdg-info-line:`Brad Buran (3)` :bdg-info-line:`luz paz (2)` :bdg-info-line:`Dan G. Wakeman (2)` :bdg-info-line:`Roman Goj (2)` + + + + .. grid-item-card:: mne.gui + :class-card: overflow-auto + :link: https://github.com/mne-tools/mne-python/tree/main/mne/gui + + :bdg-primary-line:`Eric Larson (17k)` :bdg-primary-line:`Christian Brodbeck (6.9k)` :bdg-primary-line:`Alex Rockhill (5.7k)` :bdg-info-line:`Guillaume Favelier (3.4k)` :bdg-info-line:`Daniel McCloy (3.4k)` :bdg-info-line:`Richard Höchenberger (830)` :bdg-info-line:`Alexandre Gramfort (180)` :bdg-info-line:`Mathieu Scheltienne (160)` :bdg-info-line:`Teon L Brooks (150)` :bdg-info-line:`Luke Bloy (100)` :bdg-info-line:`Jaakko Leppakangas (64)` :bdg-info-line:`Clemens Brunner (47)` :bdg-info-line:`Stefan Appelhoff (30)` :bdg-info-line:`Joan Massich (30)` :bdg-info-line:`Rob Luke (17)` :bdg-info-line:`Dimitri Papadopoulos Orfanos (16)` :bdg-info-line:`Dan G. Wakeman (11)` :bdg-info-line:`Mainak Jas (4)` :bdg-info-line:`Yaroslav Halchenko (4)` :bdg-info-line:`Ezequiel Mikulan (4)` :bdg-info-line:`Christopher J. Bailey (2)` :bdg-info-line:`Fu-Te Wong (2)` + + + + .. grid-item-card:: mne.inverse_sparse + :class-card: overflow-auto + :link: https://github.com/mne-tools/mne-python/tree/main/mne/inverse_sparse + + :bdg-primary-line:`Eric Larson (3.1k)` :bdg-primary-line:`Alexandre Gramfort (2.9k)` :bdg-primary-line:`Mathurin Massias (1.3k)` :bdg-primary-line:`Daniel Strohmeier (800)` :bdg-info-line:`PAB (520)` :bdg-info-line:`Pierre-Antoine Bannier (520)` :bdg-info-line:`Martin Luessi (380)` :bdg-info-line:`Yousra Bekhti (230)` :bdg-info-line:`Christian Brodbeck (150)` :bdg-info-line:`Daniel McCloy (120)` :bdg-info-line:`Quentin Bertrand (110)` :bdg-info-line:`Mathieu Scheltienne (54)` :bdg-info-line:`Clemens Brunner (46)` :bdg-info-line:`Richard Höchenberger (46)` :bdg-info-line:`Marijn van Vliet (37)` :bdg-info-line:`Jaakko Leppakangas (27)` :bdg-info-line:`Hasrat Ali Arzoo (24)` :bdg-info-line:`Stefan Appelhoff (22)` :bdg-info-line:`Andrew R. Dykstra (17)` :bdg-info-line:`Adam Li (16)` :bdg-info-line:`Valerii Chirkov (16)` :bdg-info-line:`Ana Radanovic (14)` :bdg-info-line:`Erik Hornberger (13)` :bdg-info-line:`Dimitri Papadopoulos Orfanos (10)` :bdg-info-line:`Katrin Leinweber (8)` :bdg-info-line:`Denis A. Engemann (6)` :bdg-info-line:`Luke Bloy (6)` :bdg-info-line:`Mainak Jas (4)` :bdg-info-line:`Jean-Rémi KING (2)` :bdg-info-line:`Joris Van den Bossche (2)` :bdg-info-line:`Alex Rockhill (2)` :bdg-info-line:`Christopher J. Bailey (1)` + + + + .. grid-item-card:: mne.io + :class-card: overflow-auto + :link: https://github.com/mne-tools/mne-python/tree/main/mne/io + + :bdg-primary-line:`Eric Larson (61k)` :bdg-primary-line:`Teon L Brooks (19k)` :bdg-primary-line:`Alexandre Gramfort (7.6k)` :bdg-primary-line:`Joan Massich (7.0k)` :bdg-primary-line:`Denis A. Engemann (4.6k)` :bdg-primary-line:`Clemens Brunner (4.5k)` :bdg-primary-line:`Daniel McCloy (4.4k)` :bdg-primary-line:`Scott Huberty (4.3k)` :bdg-primary-line:`Christian Brodbeck (4.1k)` :bdg-primary-line:`Rob Luke (3.9k)` :bdg-primary-line:`Mathieu Scheltienne (3.7k)` :bdg-primary-line:`Marijn van Vliet (2.9k)` :bdg-primary-line:`Stefan Appelhoff (2.7k)` :bdg-primary-line:`Jaakko Leppakangas (2.6k)` :bdg-primary-line:`Richard Höchenberger (2.3k)` :bdg-primary-line:`Luke Bloy (1.9k)` :bdg-primary-line:`Mainak Jas (1.7k)` :bdg-primary-line:`Phillip Alday (1.5k)` :bdg-info-line:`Martin Luessi (1.3k)` :bdg-info-line:`Fede Raimondo (1.3k)` :bdg-info-line:`Dominik Welke (1.2k)` :bdg-info-line:`Thomas Hartmann (1.2k)` :bdg-info-line:`Adam Li (1.1k)` :bdg-info-line:`Alex Rockhill (890)` :bdg-info-line:`Kristijan Armeni (850)` :bdg-info-line:`Nicolas Barascud (840)` :bdg-info-line:`Proloy Das (830)` :bdg-info-line:`Ramonapariciog Apariciogarcia (810)` :bdg-info-line:`George O'Neill (800)` :bdg-info-line:`Dirk Gütlin (790)` :bdg-info-line:`Andrew R. Dykstra (740)` :bdg-info-line:`Robert Seymour (700)` :bdg-info-line:`Jona Sassenhagen (600)` :bdg-info-line:`Mikołaj Magnuski (570)` :bdg-info-line:`Michiru Kaneda (560)` :bdg-info-line:`Tristan Stenner (520)` :bdg-info-line:`Kyle Mathewson (510)` :bdg-info-line:`Jonathan Kuziek (510)` :bdg-info-line:`Moritz Gerster (420)` :bdg-info-line:`Ping-Keng Jao (410)` :bdg-info-line:`Dmitrii Altukhov (400)` :bdg-info-line:`Evan Hathaway (390)` :bdg-info-line:`Paul Roujansky (380)` :bdg-info-line:`Justus Schwabedal (360)` :bdg-info-line:`Roeland Hancock (330)` :bdg-info-line:`Johann Benerradi (300)` :bdg-info-line:`Dimitri Papadopoulos Orfanos (290)` :bdg-info-line:`Chris Holdgraf (280)` :bdg-info-line:`Jacob Woessner (260)` :bdg-info-line:`Jack Zhang (240)` :bdg-info-line:`Martin Billinger (240)` :bdg-info-line:`Jan Sedivy (220)` :bdg-info-line:`David Julien (220)` :bdg-info-line:`Romain Derollepot (220)` :bdg-info-line:`Henrich Kolkhorst (160)` :bdg-info-line:`Mark Wronkiewicz (160)` :bdg-info-line:`Martin Schulz (160)` :bdg-info-line:`Andres Rodriguez (160)` :bdg-info-line:`Alessandro Tonin (150)` :bdg-info-line:`Dan G. Wakeman (140)` :bdg-info-line:`Valerii (140)` :bdg-info-line:`Jean-Rémi KING (140)` :bdg-info-line:`Simon Kern (140)` :bdg-info-line:`Hasrat Ali Arzoo (130)` :bdg-info-line:`Pablo Arias (130)` :bdg-info-line:`Richard M. Köhler (130)` :bdg-info-line:`marmaduke woodman (120)` :bdg-info-line:`Tod Flak (120)` :bdg-info-line:`Christopher J. Bailey (120)` :bdg-info-line:`Steven Bethard (110)` :bdg-info-line:`Keith Doelling (110)` :bdg-info-line:`Cristóbal Moënne-Loccoz (99)` :bdg-info-line:`Ross Maddox (92)` :bdg-info-line:`Larry Eisenman (82)` :bdg-info-line:`Eduard Ort (77)` :bdg-info-line:`Matthias Eberlein (77)` :bdg-info-line:`Hubert Banville (67)` :bdg-info-line:`Oleh Kozynets (65)` :bdg-info-line:`alexandre barachant (60)` :bdg-info-line:`Nabil Alibou (56)` :bdg-info-line:`Judy D Zhu (56)` :bdg-info-line:`Abram Hindle (56)` :bdg-info-line:`Liberty Hamilton (56)` :bdg-info-line:`Deleted user (55)` :bdg-info-line:`Jesper Duemose Nielsen (50)` :bdg-info-line:`Stefan Repplinger (49)` :bdg-info-line:`Matt Sanderson (48)` :bdg-info-line:`Darlene Heliokinde (47)` :bdg-info-line:`Jair Montoya (47)` :bdg-info-line:`Victoria Peterson (43)` :bdg-info-line:`Erica Peterson (43)` :bdg-info-line:`Louis Thibault (32)` :bdg-info-line:`Sara Sommariva (31)` :bdg-info-line:`Sebastiaan Mathot (31)` :bdg-info-line:`Jevri Hanna (27)` :bdg-info-line:`enzo (26)` :bdg-info-line:`ZHANG Zhi (25)` :bdg-info-line:`Tal Linzen (25)` :bdg-info-line:`Pablo Mainar (24)` :bdg-info-line:`Guillaume Favelier (22)` :bdg-info-line:`Rotem Falach (22)` :bdg-info-line:`Sebastian Major (21)` :bdg-info-line:`Jussi Nurminen (21)` :bdg-info-line:`Guillaume Dumas (21)` :bdg-info-line:`Jakub Kaczmarzyk (20)` :bdg-info-line:`Alejandro Weinstein (19)` :bdg-info-line:`Matthias Dold (19)` :bdg-info-line:`Hari Bharadwaj (18)` :bdg-info-line:`Valerii Chirkov (18)` :bdg-info-line:`Lukas Gemein (18)` :bdg-info-line:`Gennadiy (18)` :bdg-info-line:`Nikolai Kapralov (18)` :bdg-info-line:`Xiaokai Xia (18)` :bdg-info-line:`Jean-Baptiste Schiratti (18)` :bdg-info-line:`Martin Perez-Guevara (18)` :bdg-info-line:`Alan Leggitt (17)` :bdg-info-line:`Jean-Remi King (17)` :bdg-info-line:`Evgeny Goldstein (16)` :bdg-info-line:`Andy Gilbert (15)` :bdg-info-line:`Desislava Petkova (15)` :bdg-info-line:`Félix Raimundo (15)` :bdg-info-line:`Lorenz Esch (14)` :bdg-info-line:`Darin Erat Sleiter (14)` :bdg-info-line:`Jen Evans (14)` :bdg-info-line:`Britta Westner (14)` :bdg-info-line:`Jeroen Van Der Donckt (13)` :bdg-info-line:`Simeon Wong (13)` :bdg-info-line:`Alexander Kiefer (13)` :bdg-info-line:`Paul Pasler (12)` :bdg-info-line:`Enrico Varano (12)` :bdg-info-line:`Frederik D. Weber (12)` :bdg-info-line:`Felix Klotzsche (12)` :bdg-info-line:`Theodore Papadopoulo (11)` :bdg-info-line:`Adina Wagner (11)` :bdg-info-line:`Johan van der Meer (10)` :bdg-info-line:`Praveen Sripad (10)` :bdg-info-line:`Johannes Kasper (10)` :bdg-info-line:`Matti Toivonen (10)` :bdg-info-line:`Milan Rybář (8)` :bdg-info-line:`Etienne de Montalivet (8)` :bdg-info-line:`luz paz (8)` :bdg-info-line:`Clément Moutard (8)` :bdg-info-line:`Daniel Tse (7)` :bdg-info-line:`Dominik Krzemiński (6)` :bdg-info-line:`Nikolai M Chapochnikov (5)` :bdg-info-line:`Sumalyo Datta (5)` :bdg-info-line:`Ryan Law (5)` :bdg-info-line:`Sena (4)` :bdg-info-line:`Tim Gates (4)` :bdg-info-line:`Rasmus Aagaard (4)` :bdg-info-line:`Robin Tibor Schirrmeister (4)` :bdg-info-line:`Svea Marie Meyer (4)` :bdg-info-line:`Dominique Makowski (4)` :bdg-info-line:`Niklas Wilming (4)` :bdg-info-line:`Reza Shoorangiz (4)` :bdg-info-line:`Gonzalo Reina (3)` :bdg-info-line:`Basile (2)` :bdg-info-line:`ChristinaZhao (2)` :bdg-info-line:`Frostime (2)` :bdg-info-line:`Seyed (Yahya) Shirazi (2)` :bdg-info-line:`Thomas Radman (2)` :bdg-info-line:`Ivo Pascal de Jong (2)` :bdg-info-line:`Pedro Silva (2)` :bdg-info-line:`Kambiz Tabavi (2)` :bdg-info-line:`Marcin Koculak (2)` :bdg-info-line:`alexandra.corneyllie (2)` :bdg-info-line:`Aniket Pradhan (2)` :bdg-info-line:`Niels Focke (2)` :bdg-info-line:`Michal Žák (2)` :bdg-info-line:`Alexander Rudiuk (1)` + + + + .. grid-item-card:: mne.label + :class-card: overflow-auto + :link: https://github.com/mne-tools/mne-python/blame/main/mne/label.py + + :bdg-primary-line:`Eric Larson (2.4k)` :bdg-primary-line:`Christian Brodbeck (1.7k)` :bdg-primary-line:`Alexandre Gramfort (440)` :bdg-info-line:`Martin Luessi (440)` :bdg-info-line:`Mark Wronkiewicz (160)` :bdg-info-line:`Kostiantyn Maksymenko (160)` :bdg-info-line:`Daniel McCloy (140)` :bdg-info-line:`Denis A. Engemann (100)` :bdg-info-line:`Samuel Deslauriers-Gauthier (90)` :bdg-info-line:`Clemens Brunner (77)` :bdg-info-line:`Mathieu Scheltienne (67)` :bdg-info-line:`Hasrat Ali Arzoo (67)` :bdg-info-line:`Dan G. Wakeman (64)` :bdg-info-line:`Marian Dovgialo (57)` :bdg-info-line:`Alex Rockhill (56)` :bdg-info-line:`Guillaume Favelier (39)` :bdg-info-line:`Olaf Hauk (34)` :bdg-info-line:`Jaakko Leppakangas (21)` :bdg-info-line:`Roan LaPlante (16)` :bdg-info-line:`Tommy Clausner (16)` :bdg-info-line:`Dimitri Papadopoulos Orfanos (10)` :bdg-info-line:`Richard Höchenberger (6)` :bdg-info-line:`Jon Houck (6)` :bdg-info-line:`Marijn van Vliet (6)` :bdg-info-line:`Teon L Brooks (5)` :bdg-info-line:`Rotem Falach (5)` :bdg-info-line:`Andrew R. Dykstra (3)` :bdg-info-line:`Stefan Appelhoff (2)` + + + + .. grid-item-card:: mne.minimum_norm + :class-card: overflow-auto + :link: https://github.com/mne-tools/mne-python/tree/main/mne/minimum_norm + + :bdg-primary-line:`Eric Larson (8.9k)` :bdg-primary-line:`Alexandre Gramfort (2.6k)` :bdg-primary-line:`Olaf Hauk (1.4k)` :bdg-primary-line:`Denis A. Engemann (880)` :bdg-primary-line:`Marijn van Vliet (740)` :bdg-info-line:`Martin Luessi (590)` :bdg-info-line:`Daniel McCloy (520)` :bdg-info-line:`Erica Peterson (360)` :bdg-info-line:`Luke Bloy (270)` :bdg-info-line:`Mathieu Scheltienne (210)` :bdg-info-line:`Clemens Brunner (180)` :bdg-info-line:`Roman Goj (170)` :bdg-info-line:`Alex Rockhill (150)` :bdg-info-line:`Mainak Jas (130)` :bdg-info-line:`Richard Höchenberger (89)` :bdg-info-line:`Christopher J. Bailey (84)` :bdg-info-line:`Christian Brodbeck (77)` :bdg-info-line:`Jaakko Leppakangas (61)` :bdg-info-line:`Yousra Bekhti (60)` :bdg-info-line:`Stefan Appelhoff (47)` :bdg-info-line:`Adam Li (47)` :bdg-info-line:`Valerii Chirkov (47)` :bdg-info-line:`Jevri Hanna (36)` :bdg-info-line:`Guillaume Favelier (33)` :bdg-info-line:`Hasrat Ali Arzoo (31)` :bdg-info-line:`Jean-Rémi KING (31)` :bdg-info-line:`Teon L Brooks (30)` :bdg-info-line:`Steven Bierer (18)` :bdg-info-line:`Andrew R. Dykstra (16)` :bdg-info-line:`Britta Westner (13)` :bdg-info-line:`Dimitri Papadopoulos Orfanos (10)` :bdg-info-line:`Laetitia Grabot (9)` :bdg-info-line:`Ezequiel Mikulan (7)` :bdg-info-line:`Lorenz Esch (6)` :bdg-info-line:`Chris Holdgraf (6)` :bdg-info-line:`Rob Luke (3)` :bdg-info-line:`Dan G. Wakeman (3)` :bdg-info-line:`Dirk Gütlin (3)` :bdg-info-line:`Milan Rybář (3)` :bdg-info-line:`Christoph Dinh (2)` :bdg-info-line:`PAB (2)` :bdg-info-line:`Pierre-Antoine Bannier (2)` :bdg-info-line:`Pablo Mainar (2)` :bdg-info-line:`Brad Buran (2)` + + + + .. grid-item-card:: mne.morph + :class-card: overflow-auto + :link: https://github.com/mne-tools/mne-python/blame/main/mne/morph.py + + :bdg-primary-line:`Eric Larson (2.4k)` :bdg-primary-line:`Tommy Clausner (1.5k)` :bdg-info-line:`Alexandre Gramfort (1.3k)` :bdg-info-line:`Alex Rockhill (120)` :bdg-info-line:`Daniel McCloy (54)` :bdg-info-line:`Clemens Brunner (52)` :bdg-info-line:`Mathieu Scheltienne (47)` :bdg-info-line:`Hasrat Ali Arzoo (36)` :bdg-info-line:`Richard Höchenberger (21)` :bdg-info-line:`Stefan Appelhoff (8)` :bdg-info-line:`Marijn van Vliet (7)` :bdg-info-line:`Dimitri Papadopoulos Orfanos (6)` :bdg-info-line:`Guillaume Favelier (6)` :bdg-info-line:`Jean-Rémi KING (2)` + + + + .. grid-item-card:: mne.preprocessing + :class-card: overflow-auto + :link: https://github.com/mne-tools/mne-python/tree/main/mne/preprocessing + + :bdg-primary-line:`Eric Larson (25k)` :bdg-primary-line:`Denis A. Engemann (7.0k)` :bdg-primary-line:`Richard Höchenberger (4.7k)` :bdg-primary-line:`Mark Wronkiewicz (3.5k)` :bdg-primary-line:`Daniel McCloy (3.2k)` :bdg-primary-line:`Alexandre Gramfort (2.9k)` :bdg-primary-line:`Mathieu Scheltienne (2.6k)` :bdg-primary-line:`Rob Luke (2.0k)` :bdg-primary-line:`Alex Rockhill (1.8k)` :bdg-info-line:`Scott Huberty (1.2k)` :bdg-info-line:`Jean-Rémi KING (940)` :bdg-info-line:`Clemens Brunner (920)` :bdg-info-line:`Marijn van Vliet (850)` :bdg-info-line:`Jona Sassenhagen (820)` :bdg-info-line:`Martin Luessi (800)` :bdg-info-line:`alexandre barachant (780)` :bdg-info-line:`Jevri Hanna (530)` :bdg-info-line:`Stefan Appelhoff (520)` :bdg-info-line:`Jaakko Leppakangas (470)` :bdg-info-line:`Britta Westner (470)` :bdg-info-line:`Adonay Nunes (400)` :bdg-info-line:`Luke Bloy (360)` :bdg-info-line:`Johannes Kasper (360)` :bdg-info-line:`Jair Montoya (340)` :bdg-info-line:`Joan Massich (340)` :bdg-info-line:`George O'Neill (300)` :bdg-info-line:`Asish Panda (290)` :bdg-info-line:`Christian O'Reilly (240)` :bdg-info-line:`Pierre Ablin (220)` :bdg-info-line:`Romain Trachel (170)` :bdg-info-line:`Qian Chu (170)` :bdg-info-line:`Mikołaj Magnuski (170)` :bdg-info-line:`Daniel Strohmeier (160)` :bdg-info-line:`Dominik Welke (160)` :bdg-info-line:`Hasrat Ali Arzoo (150)` :bdg-info-line:`Mainak Jas (140)` :bdg-info-line:`Velu Prabhakar Kumaravel (140)` :bdg-info-line:`Yu-Han Luo (140)` :bdg-info-line:`John Samuelsson (130)` :bdg-info-line:`Alexander Rudiuk (120)` :bdg-info-line:`Teon L Brooks (120)` :bdg-info-line:`Guillaume Favelier (110)` :bdg-info-line:`Henrich Kolkhorst (110)` :bdg-info-line:`Johann Benerradi (110)` :bdg-info-line:`Cora Kim (91)` :bdg-info-line:`Pablo Mainar (57)` :bdg-info-line:`Tommy Clausner (53)` :bdg-info-line:`Valerii (52)` :bdg-info-line:`Motofumi Fushimi (50)` :bdg-info-line:`Dimitri Papadopoulos Orfanos (44)` :bdg-info-line:`Sen-wen DENG (44)` :bdg-info-line:`Robert Seymour (41)` :bdg-info-line:`Paul Pasler (37)` :bdg-info-line:`Richard M. Köhler (37)` :bdg-info-line:`David Julien (35)` :bdg-info-line:`Romain Derollepot (35)` :bdg-info-line:`Sammi Chekroud (33)` :bdg-info-line:`Christian Brodbeck (28)` :bdg-info-line:`Martin Schulz (27)` :bdg-info-line:`Nikolai Kapralov (26)` :bdg-info-line:`Peter J. Molfese (26)` :bdg-info-line:`Erica Peterson (24)` :bdg-info-line:`Matteo Anelli (22)` :bdg-info-line:`Richard Scholz (20)` :bdg-info-line:`Mads Jensen (19)` :bdg-info-line:`Juergen Dammers (16)` :bdg-info-line:`Fede Raimondo (13)` :bdg-info-line:`Sheraz Khan (12)` :bdg-info-line:`Zhenya (9)` :bdg-info-line:`Antoine Gauthier (7)` :bdg-info-line:`Maggie Clarke (7)` :bdg-info-line:`Alejandro Weinstein (6)` :bdg-info-line:`Fahimeh Mamashli (6)` :bdg-info-line:`Matthias Dold (6)` :bdg-info-line:`Jesper Duemose Nielsen (5)` :bdg-info-line:`Praveen Sripad (4)` :bdg-info-line:`Jussi Nurminen (4)` :bdg-info-line:`Carina Forster (4)` :bdg-info-line:`Chris Holdgraf (4)` :bdg-info-line:`Dominique Makowski (3)` :bdg-info-line:`marmaduke woodman (2)` :bdg-info-line:`Ariel Rokem (2)` :bdg-info-line:`TzionaN (2)` :bdg-info-line:`Martin Billinger (1)` + + + + .. grid-item-card:: mne.proj + :class-card: overflow-auto + :link: https://github.com/mne-tools/mne-python/blame/main/mne/proj.py + + :bdg-primary-line:`Eric Larson (670)` :bdg-primary-line:`Mathieu Scheltienne (180)` :bdg-info-line:`Alexandre Gramfort (140)` :bdg-info-line:`Denis A. Engemann (40)` :bdg-info-line:`Richard Höchenberger (32)` :bdg-info-line:`Jaakko Leppakangas (32)` :bdg-info-line:`Clemens Brunner (20)` :bdg-info-line:`Daniel McCloy (18)` :bdg-info-line:`Mainak Jas (16)` :bdg-info-line:`Marijn van Vliet (15)` :bdg-info-line:`Teon L Brooks (14)` :bdg-info-line:`Christian Brodbeck (14)` :bdg-info-line:`Daniel Strohmeier (12)` :bdg-info-line:`Hasrat Ali Arzoo (8)` :bdg-info-line:`Martin Luessi (6)` :bdg-info-line:`Moritz Gerster (3)` :bdg-info-line:`Stefan Appelhoff (2)` + + + + .. grid-item-card:: mne-realtime (moved) + :class-card: overflow-auto + :link: https://github.com/mne-tools/mne-realtime + + :bdg-primary-line:`Eric Larson (4.4k)` :bdg-primary-line:`Mainak Jas (1.3k)` :bdg-info-line:`Teon L Brooks (1.0k)` :bdg-info-line:`Henrich Kolkhorst (650)` :bdg-info-line:`Jaakko Leppakangas (49)` :bdg-info-line:`Martin Luessi (19)` :bdg-info-line:`Alexandre Gramfort (18)` :bdg-info-line:`Jussi Nurminen (14)` :bdg-info-line:`Jona Sassenhagen (7)` :bdg-info-line:`Clemens Brunner (6)` :bdg-info-line:`Daniel McCloy (6)` :bdg-info-line:`Marijn van Vliet (5)` :bdg-info-line:`Luke Bloy (3)` :bdg-info-line:`Denis A. Engemann (3)` :bdg-info-line:`Chris Holdgraf (2)` :bdg-info-line:`Katarina Slama (2)` :bdg-info-line:`Deleted user (2)` + + + + .. grid-item-card:: mne.report + :class-card: overflow-auto + :link: https://github.com/mne-tools/mne-python/tree/main/mne/report + + :bdg-primary-line:`Richard Höchenberger (13k)` :bdg-primary-line:`Eric Larson (12k)` :bdg-primary-line:`Daniel McCloy (7.9k)` :bdg-info-line:`Alexandre Gramfort (7.3k)` :bdg-info-line:`Clemens Brunner (6.4k)` :bdg-info-line:`Valerii Chirkov (6.3k)` :bdg-info-line:`Adam Li (6.3k)` :bdg-info-line:`Mainak Jas (1.1k)` :bdg-info-line:`Marijn van Vliet (450)` :bdg-info-line:`Mathieu Scheltienne (380)` :bdg-info-line:`Teon L Brooks (360)` :bdg-info-line:`Denis A. Engemann (180)` :bdg-info-line:`Valerii (89)` :bdg-info-line:`Martin Schulz (72)` :bdg-info-line:`Guillaume Favelier (72)` :bdg-info-line:`Sophie Herbst (61)` :bdg-info-line:`Jeff Stout (42)` :bdg-info-line:`Dimitri Papadopoulos Orfanos (29)` :bdg-info-line:`Jaakko Leppakangas (23)` :bdg-info-line:`Alex Rockhill (20)` :bdg-info-line:`Stefan Appelhoff (19)` :bdg-info-line:`Nikolai Kapralov (10)` :bdg-info-line:`Dmitrii Altukhov (6)` :bdg-info-line:`Rob Luke (5)` :bdg-info-line:`Joan Massich (4)` :bdg-info-line:`Martin Oberg (2)` :bdg-info-line:`Hasrat Ali Arzoo (2)` :bdg-info-line:`luz paz (2)` + + + + .. grid-item-card:: mne.simulation + :class-card: overflow-auto + :link: https://github.com/mne-tools/mne-python/tree/main/mne/simulation + + :bdg-primary-line:`Eric Larson (7.3k)` :bdg-primary-line:`Alexandre Gramfort (1.8k)` :bdg-primary-line:`Kostiantyn Maksymenko (870)` :bdg-primary-line:`Joan Massich (850)` :bdg-info-line:`Daniel McCloy (240)` :bdg-info-line:`Daniel Strohmeier (230)` :bdg-info-line:`Richard Höchenberger (210)` :bdg-info-line:`Steven Bierer (190)` :bdg-info-line:`Nathalie Gayraud (160)` :bdg-info-line:`Mathieu Scheltienne (140)` :bdg-info-line:`Clemens Brunner (95)` :bdg-info-line:`Christian Brodbeck (85)` :bdg-info-line:`Hasrat Ali Arzoo (51)` :bdg-info-line:`Jeff Stout (45)` :bdg-info-line:`Stefan Appelhoff (29)` :bdg-info-line:`Jaakko Leppakangas (28)` :bdg-info-line:`Chris Holdgraf (26)` :bdg-info-line:`Marijn van Vliet (23)` :bdg-info-line:`Camilo Lamus (17)` :bdg-info-line:`Nikolai Kapralov (16)` :bdg-info-line:`Martin Luessi (16)` :bdg-info-line:`Dimitri Papadopoulos Orfanos (13)` :bdg-info-line:`Ram PARI (11)` :bdg-info-line:`Quentin Bertrand (9)` :bdg-info-line:`Andrew R. Dykstra (9)` :bdg-info-line:`Luke Bloy (8)` :bdg-info-line:`Alex Rockhill (6)` :bdg-info-line:`Mark Wronkiewicz (4)` :bdg-info-line:`Teon L Brooks (2)` :bdg-info-line:`luz paz (2)` :bdg-info-line:`Guillaume Favelier (2)` :bdg-info-line:`Hubert Banville (2)` :bdg-info-line:`Scott Huberty (1)` :bdg-info-line:`Dominik Welke (1)` + + + + .. grid-item-card:: mne.source_estimate + :class-card: overflow-auto + :link: https://github.com/mne-tools/mne-python/blame/main/mne/source_estimate.py + + :bdg-primary-line:`Eric Larson (7.0k)` :bdg-primary-line:`Alexandre Gramfort (1.9k)` :bdg-primary-line:`Martin Luessi (1.6k)` :bdg-primary-line:`Marijn van Vliet (1.2k)` :bdg-primary-line:`Christian Brodbeck (660)` :bdg-info-line:`Tommy Clausner (580)` :bdg-info-line:`Daniel McCloy (360)` :bdg-info-line:`Alan Leggitt (290)` :bdg-info-line:`Denis A. Engemann (280)` :bdg-info-line:`Andrew R. Dykstra (180)` :bdg-info-line:`Alex Rockhill (180)` :bdg-info-line:`Adam Li (130)` :bdg-info-line:`Mathieu Scheltienne (130)` :bdg-info-line:`Guillaume Favelier (95)` :bdg-info-line:`Jaakko Leppakangas (92)` :bdg-info-line:`Hamza Abdelhedi (85)` :bdg-info-line:`Mainak Jas (74)` :bdg-info-line:`Peter J. Molfese (72)` :bdg-info-line:`Joan Massich (72)` :bdg-info-line:`Kaisu Lankinen (71)` :bdg-info-line:`Olaf Hauk (66)` :bdg-info-line:`Richard Höchenberger (61)` :bdg-info-line:`Clemens Brunner (60)` :bdg-info-line:`Annalisa Pascarella (48)` :bdg-info-line:`Hasrat Ali Arzoo (45)` :bdg-info-line:`Mads Jensen (37)` :bdg-info-line:`Mark Wronkiewicz (35)` :bdg-info-line:`Britta Westner (24)` :bdg-info-line:`Nikolai M Chapochnikov (12)` :bdg-info-line:`Dimitri Papadopoulos Orfanos (12)` :bdg-info-line:`Ana Radanovic (12)` :bdg-info-line:`Stefan Appelhoff (11)` :bdg-info-line:`Richard M. Köhler (10)` :bdg-info-line:`Eduard Ort (9)` :bdg-info-line:`Gennadiy (7)` :bdg-info-line:`Jussi Nurminen (6)` :bdg-info-line:`Christian O'Reilly (6)` :bdg-info-line:`Kambiz Tabavi (4)` :bdg-info-line:`Andrew Quinn (3)` :bdg-info-line:`Lau Møller Andersen (3)` :bdg-info-line:`Liberty Hamilton (3)` :bdg-info-line:`Teon L Brooks (2)` + + + + .. grid-item-card:: mne.source_space + :class-card: overflow-auto + :link: https://github.com/mne-tools/mne-python/tree/main/mne/source_space + + :bdg-primary-line:`Eric Larson (7.2k)` :bdg-primary-line:`Alan Leggitt (910)` :bdg-primary-line:`Alexandre Gramfort (660)` :bdg-info-line:`Alex Rockhill (520)` :bdg-info-line:`Daniel McCloy (360)` :bdg-info-line:`Annalisa Pascarella (190)` :bdg-info-line:`Mathieu Scheltienne (120)` :bdg-info-line:`Jaakko Leppakangas (110)` :bdg-info-line:`Marijn van Vliet (110)` :bdg-info-line:`Clemens Brunner (110)` :bdg-info-line:`Hasrat Ali Arzoo (96)` :bdg-info-line:`Christian Brodbeck (91)` :bdg-info-line:`Guillaume Favelier (86)` :bdg-info-line:`Olaf Hauk (65)` :bdg-info-line:`Joan Massich (60)` :bdg-info-line:`Martin Luessi (51)` :bdg-info-line:`Richard Höchenberger (44)` :bdg-info-line:`Joshua Teves (37)` :bdg-info-line:`Dan G. Wakeman (22)` :bdg-info-line:`Mainak Jas (21)` :bdg-info-line:`Denis A. Engemann (16)` :bdg-info-line:`Stefan Appelhoff (14)` :bdg-info-line:`Dimitri Papadopoulos Orfanos (8)` :bdg-info-line:`Luke Bloy (5)` :bdg-info-line:`Mark Wronkiewicz (4)` :bdg-info-line:`Kaisu Lankinen (2)` :bdg-info-line:`Erica Peterson (2)` :bdg-info-line:`Nikolai Kapralov (2)` + + + + .. grid-item-card:: mne.stats + :class-card: overflow-auto + :link: https://github.com/mne-tools/mne-python/tree/main/mne/stats + + :bdg-primary-line:`Eric Larson (5.6k)` :bdg-primary-line:`Alexandre Gramfort (1.1k)` :bdg-primary-line:`Denis A. Engemann (1.0k)` :bdg-primary-line:`Daniel McCloy (780)` :bdg-info-line:`Jona Sassenhagen (570)` :bdg-info-line:`Stefan Appelhoff (280)` :bdg-info-line:`Martin Luessi (240)` :bdg-info-line:`Clemens Brunner (190)` :bdg-info-line:`Richard Höchenberger (180)` :bdg-info-line:`Nicolas Fourcaud-Trocmé (57)` :bdg-info-line:`Romain Trachel (53)` :bdg-info-line:`Alex Rockhill (50)` :bdg-info-line:`Yu-Han Luo (31)` :bdg-info-line:`Mark Wronkiewicz (29)` :bdg-info-line:`Hasrat Ali Arzoo (26)` :bdg-info-line:`Joshua Calder-Travis (21)` :bdg-info-line:`Marijn van Vliet (20)` :bdg-info-line:`Jaakko Leppakangas (19)` :bdg-info-line:`Phillip Alday (19)` :bdg-info-line:`Christian Brodbeck (16)` :bdg-info-line:`Mathieu Scheltienne (15)` :bdg-info-line:`Dimitri Papadopoulos Orfanos (13)` :bdg-info-line:`Manu Sutela (10)` :bdg-info-line:`Pablo Mainar (8)` :bdg-info-line:`Ana Radanovic (8)` :bdg-info-line:`Chris Holdgraf (7)` :bdg-info-line:`Jean-Remi King (7)` :bdg-info-line:`Adam Li (6)` :bdg-info-line:`Cora Kim (6)` :bdg-info-line:`Sebastien Treguer (6)` :bdg-info-line:`Teon L Brooks (4)` :bdg-info-line:`Mainak Jas (3)` :bdg-info-line:`Nicolas Legrand (2)` :bdg-info-line:`Joan Massich (2)` :bdg-info-line:`Yaroslav Halchenko (1)` + + + + .. grid-item-card:: mne.surface + :class-card: overflow-auto + :link: https://github.com/mne-tools/mne-python/blame/main/mne/surface.py + + :bdg-primary-line:`Eric Larson (5.1k)` :bdg-primary-line:`Alex Rockhill (790)` :bdg-primary-line:`Daniel McCloy (280)` :bdg-info-line:`Christian Brodbeck (250)` :bdg-info-line:`Alexandre Gramfort (240)` :bdg-info-line:`Jaakko Leppakangas (200)` :bdg-info-line:`Guillaume Favelier (190)` :bdg-info-line:`Marijn van Vliet (150)` :bdg-info-line:`Rob Luke (75)` :bdg-info-line:`Denis A. Engemann (68)` :bdg-info-line:`Mathieu Scheltienne (54)` :bdg-info-line:`Martin Luessi (50)` :bdg-info-line:`Richard Höchenberger (43)` :bdg-info-line:`Clemens Brunner (27)` :bdg-info-line:`Dan G. Wakeman (23)` :bdg-info-line:`Hasrat Ali Arzoo (21)` :bdg-info-line:`Dimitri Papadopoulos Orfanos (16)` :bdg-info-line:`Stefan Appelhoff (14)` :bdg-info-line:`Yaroslav Halchenko (4)` :bdg-info-line:`Adam Li (4)` :bdg-info-line:`Martin Schulz (2)` :bdg-info-line:`Chris Holdgraf (2)` :bdg-info-line:`Tommy Clausner (2)` :bdg-info-line:`Christian O'Reilly (1)` + + + + .. grid-item-card:: mne.tests + :class-card: overflow-auto + :link: https://github.com/mne-tools/mne-python/tree/main/mne/tests + + :bdg-primary-line:`Eric Larson (33k)` :bdg-primary-line:`Alexandre Gramfort (4.6k)` :bdg-primary-line:`Daniel McCloy (2.3k)` :bdg-primary-line:`Mathieu Scheltienne (1.7k)` :bdg-primary-line:`Christian Brodbeck (1.5k)` :bdg-primary-line:`Denis A. Engemann (1.5k)` :bdg-primary-line:`Richard Höchenberger (1.3k)` :bdg-primary-line:`Marijn van Vliet (1.2k)` :bdg-primary-line:`Clemens Brunner (1.0k)` :bdg-primary-line:`Alex Rockhill (890)` :bdg-primary-line:`Martin Luessi (820)` :bdg-primary-line:`Joan Massich (580)` :bdg-info-line:`Adam Li (530)` :bdg-info-line:`Stefan Appelhoff (460)` :bdg-info-line:`Tommy Clausner (460)` :bdg-info-line:`Jaakko Leppakangas (380)` :bdg-info-line:`Dmitrii Altukhov (370)` :bdg-info-line:`Mainak Jas (330)` :bdg-info-line:`Chris Holdgraf (300)` :bdg-info-line:`Teon L Brooks (250)` :bdg-info-line:`Alan Leggitt (230)` :bdg-info-line:`Rob Luke (220)` :bdg-info-line:`Luke Bloy (200)` :bdg-info-line:`Andrew R. Dykstra (190)` :bdg-info-line:`Jacob Woessner (180)` :bdg-info-line:`Dan G. Wakeman (150)` :bdg-info-line:`Daniel Strohmeier (150)` :bdg-info-line:`Guillaume Favelier (150)` :bdg-info-line:`Olaf Hauk (120)` :bdg-info-line:`Jean-Remi King (120)` :bdg-info-line:`Moritz Gerster (120)` :bdg-info-line:`Jona Sassenhagen (110)` :bdg-info-line:`Mark Wronkiewicz (110)` :bdg-info-line:`Jussi Nurminen (100)` :bdg-info-line:`Katarina Slama (97)` :bdg-info-line:`Yu-Han Luo (97)` :bdg-info-line:`Martin Schulz (96)` :bdg-info-line:`Hamza Abdelhedi (88)` :bdg-info-line:`Johann Benerradi (87)` :bdg-info-line:`Nicolas Barascud (83)` :bdg-info-line:`Simon Kornblith (75)` :bdg-info-line:`Annalisa Pascarella (71)` :bdg-info-line:`Lau Møller Andersen (69)` :bdg-info-line:`Dimitri Papadopoulos Orfanos (65)` :bdg-info-line:`Dominik Welke (63)` :bdg-info-line:`Michiru Kaneda (63)` :bdg-info-line:`Romain Trachel (63)` :bdg-info-line:`Fahimeh Mamashli (61)` :bdg-info-line:`Erica Peterson (59)` :bdg-info-line:`Pablo Mainar (58)` :bdg-info-line:`Victoria Peterson (56)` :bdg-info-line:`Matt Sanderson (55)` :bdg-info-line:`Quentin Barthélemy (53)` :bdg-info-line:`Samuel Deslauriers-Gauthier (53)` :bdg-info-line:`Hasrat Ali Arzoo (52)` :bdg-info-line:`Mikołaj Magnuski (52)` :bdg-info-line:`Christian O'Reilly (52)` :bdg-info-line:`Matt Courtemanche (48)` :bdg-info-line:`Carina Forster (43)` :bdg-info-line:`Adonay Nunes (41)` :bdg-info-line:`Kostiantyn Maksymenko (41)` :bdg-info-line:`Eduard Ort (38)` :bdg-info-line:`Richard M. Köhler (35)` :bdg-info-line:`Stanislas Chambon (33)` :bdg-info-line:`Nikolai Kapralov (32)` :bdg-info-line:`Jack Zhang (31)` :bdg-info-line:`Sophie Herbst (30)` :bdg-info-line:`Zhenya (30)` :bdg-info-line:`Thomas Hartmann (28)` :bdg-info-line:`enzo (28)` :bdg-info-line:`Peter J. Molfese (28)` :bdg-info-line:`Fede Raimondo (28)` :bdg-info-line:`Joris Van den Bossche (27)` :bdg-info-line:`Judy D Zhu (25)` :bdg-info-line:`Paul Roujansky (24)` :bdg-info-line:`Nikolas Chalas (24)` :bdg-info-line:`Clément Moutard (23)` :bdg-info-line:`Félix Raimundo (23)` :bdg-info-line:`Marian Dovgialo (22)` :bdg-info-line:`Cristóbal Moënne-Loccoz (21)` :bdg-info-line:`Jean-Rémi KING (20)` :bdg-info-line:`Jan Sosulski (20)` :bdg-info-line:`Tal Linzen (18)` :bdg-info-line:`Joshua Teves (18)` :bdg-info-line:`Natalie Klein (18)` :bdg-info-line:`Stefan Repplinger (17)` :bdg-info-line:`AnneSo (17)` :bdg-info-line:`Gennadiy (17)` :bdg-info-line:`Roman Goj (17)` :bdg-info-line:`Ross Maddox (16)` :bdg-info-line:`Rahul Nadkarni (16)` :bdg-info-line:`Jair Montoya (16)` :bdg-info-line:`Hubert Banville (15)` :bdg-info-line:`Silvia Cotroneo (12)` :bdg-info-line:`Valerii (12)` :bdg-info-line:`Sam Perry (10)` :bdg-info-line:`Lukas Gemein (9)` :bdg-info-line:`Asish Panda (9)` :bdg-info-line:`Valerii Chirkov (9)` :bdg-info-line:`marmaduke woodman (9)` :bdg-info-line:`alexandre barachant (8)` :bdg-info-line:`David Sabbagh (7)` :bdg-info-line:`Mads Jensen (7)` :bdg-info-line:`Jasper J.F. van den Bosch (6)` :bdg-info-line:`Nathalie Gayraud (6)` :bdg-info-line:`Roan LaPlante (6)` :bdg-info-line:`Thomas Moreau (6)` :bdg-info-line:`Steven Bierer (6)` :bdg-info-line:`Milan Rybář (5)` :bdg-info-line:`Timur Sokhin (5)` :bdg-info-line:`Saket Choudhary (5)` :bdg-info-line:`Rodrigo Hübner (4)` :bdg-info-line:`Jon Houck (4)` :bdg-info-line:`Phillip Alday (4)` :bdg-info-line:`Kyle Mathewson (4)` :bdg-info-line:`Jonathan Kuziek (4)` :bdg-info-line:`Steven Gutstein (3)` :bdg-info-line:`Keith Doelling (2)` :bdg-info-line:`Ben Beasley (2)` :bdg-info-line:`Paul Pasler (2)` + + + + .. grid-item-card:: mne.time_frequency + :class-card: overflow-auto + :link: https://github.com/mne-tools/mne-python/tree/main/mne/time_frequency + + :bdg-primary-line:`Eric Larson (16k)` :bdg-primary-line:`Daniel McCloy (10k)` :bdg-primary-line:`Marijn van Vliet (4.6k)` :bdg-primary-line:`Alexandre Gramfort (2.6k)` :bdg-primary-line:`Denis A. Engemann (1.1k)` :bdg-primary-line:`Jona Sassenhagen (780)` :bdg-primary-line:`Jaakko Leppakangas (720)` :bdg-info-line:`Britta Westner (670)` :bdg-info-line:`Chris Holdgraf (660)` :bdg-info-line:`Martin Luessi (620)` :bdg-info-line:`Nick Foti (600)` :bdg-info-line:`Mathieu Scheltienne (560)` :bdg-info-line:`Alex Rockhill (530)` :bdg-info-line:`Clemens Brunner (480)` :bdg-info-line:`Felix Klotzsche (460)` :bdg-info-line:`Jean-Rémi KING (340)` :bdg-info-line:`Mikołaj Magnuski (300)` :bdg-info-line:`Richard Höchenberger (280)` :bdg-info-line:`Roman Goj (250)` :bdg-info-line:`Adam Li (210)` :bdg-info-line:`Keith Doelling (180)` :bdg-info-line:`Clément Moutard (170)` :bdg-info-line:`Eduard Ort (150)` :bdg-info-line:`Stefan Appelhoff (110)` :bdg-info-line:`Luke Bloy (97)` :bdg-info-line:`Teon L Brooks (89)` :bdg-info-line:`Nikolai M Chapochnikov (88)` :bdg-info-line:`Dirk Gütlin (81)` :bdg-info-line:`Mainak Jas (79)` :bdg-info-line:`Thomas S. Binns (70)` :bdg-info-line:`Carina Forster (68)` :bdg-info-line:`Félix Raimundo (49)` :bdg-info-line:`Daniel Strohmeier (45)` :bdg-info-line:`Hasrat Ali Arzoo (44)` :bdg-info-line:`Santeri Ruuskanen (43)` :bdg-info-line:`Johannes Niediek (39)` :bdg-info-line:`Adonay Nunes (38)` :bdg-info-line:`Chetan Gohil (32)` :bdg-info-line:`Brad Buran (31)` :bdg-info-line:`Erkka Heinila (29)` :bdg-info-line:`Gonzalo Reina (25)` :bdg-info-line:`Mathurin Massias (22)` :bdg-info-line:`Christian Brodbeck (21)` :bdg-info-line:`David Haslacher (21)` :bdg-info-line:`Pablo Mainar (14)` :bdg-info-line:`Tom Stone (11)` :bdg-info-line:`Dimitri Papadopoulos Orfanos (11)` :bdg-info-line:`Nikolai Kapralov (8)` :bdg-info-line:`Stefan Repplinger (8)` :bdg-info-line:`Riessarius Stargardsky (6)` :bdg-info-line:`Yu-Han Luo (6)` :bdg-info-line:`José C. García Alanis (6)` :bdg-info-line:`Rob Luke (5)` :bdg-info-line:`Julia Guiomar Niso Galán (4)` :bdg-info-line:`Martin Schulz (4)` :bdg-info-line:`Tal Linzen (4)` :bdg-info-line:`Sondre Foslien (2)` :bdg-info-line:`Alexander Rudiuk (2)` :bdg-info-line:`Johannes Kasper (2)` :bdg-info-line:`Matthew A. Tucker (2)` :bdg-info-line:`Jean-Remi King (2)` :bdg-info-line:`Zvi Baratz (2)` + + + + .. grid-item-card:: mne.transforms + :class-card: overflow-auto + :link: https://github.com/mne-tools/mne-python/blame/main/mne/transforms.py + + :bdg-primary-line:`Eric Larson (3.1k)` :bdg-primary-line:`Alex Rockhill (1.3k)` :bdg-primary-line:`Christian Brodbeck (1.2k)` :bdg-info-line:`Alexandre Gramfort (160)` :bdg-info-line:`Mathieu Scheltienne (140)` :bdg-info-line:`Rob Luke (100)` :bdg-info-line:`Teon L Brooks (77)` :bdg-info-line:`Dan G. Wakeman (74)` :bdg-info-line:`Daniel McCloy (48)` :bdg-info-line:`Luke Bloy (41)` :bdg-info-line:`Stefan Appelhoff (38)` :bdg-info-line:`Clemens Brunner (37)` :bdg-info-line:`Mainak Jas (35)` :bdg-info-line:`Richard Höchenberger (30)` :bdg-info-line:`Judy D Zhu (27)` :bdg-info-line:`Marijn van Vliet (26)` :bdg-info-line:`Dimitri Papadopoulos Orfanos (24)` :bdg-info-line:`Mark Wronkiewicz (19)` :bdg-info-line:`Apoorva Karekal (17)` :bdg-info-line:`Hasrat Ali Arzoo (16)` :bdg-info-line:`Jaakko Leppakangas (13)` :bdg-info-line:`Martin Perez-Guevara (12)` :bdg-info-line:`Fahimeh Mamashli (9)` :bdg-info-line:`Jeff Stout (6)` :bdg-info-line:`Guillaume Favelier (4)` :bdg-info-line:`Joan Massich (3)` + + + + .. grid-item-card:: mne.utils + :class-card: overflow-auto + :link: https://github.com/mne-tools/mne-python/tree/main/mne/utils + + :bdg-primary-line:`Eric Larson (25k)` :bdg-primary-line:`Daniel McCloy (6.2k)` :bdg-primary-line:`Richard Höchenberger (2.8k)` :bdg-primary-line:`Alexandre Gramfort (2.6k)` :bdg-primary-line:`Clemens Brunner (1.3k)` :bdg-primary-line:`Marijn van Vliet (1.2k)` :bdg-primary-line:`Alex Rockhill (1.2k)` :bdg-primary-line:`Mathieu Scheltienne (820)` :bdg-primary-line:`Denis A. Engemann (680)` :bdg-primary-line:`Britta Westner (610)` :bdg-primary-line:`Mikołaj Magnuski (590)` :bdg-primary-line:`Adam Li (560)` :bdg-info-line:`Stefan Appelhoff (500)` :bdg-info-line:`Guillaume Favelier (480)` :bdg-info-line:`Keith Doelling (410)` :bdg-info-line:`Luke Bloy (290)` :bdg-info-line:`Jona Sassenhagen (280)` :bdg-info-line:`Hari Bharadwaj (280)` :bdg-info-line:`Christian Brodbeck (250)` :bdg-info-line:`Roman Goj (220)` :bdg-info-line:`Valerii Chirkov (210)` :bdg-info-line:`Jaakko Leppakangas (210)` :bdg-info-line:`Lorenz Esch (200)` :bdg-info-line:`Martin Luessi (190)` :bdg-info-line:`Rob Luke (190)` :bdg-info-line:`Brad Buran (170)` :bdg-info-line:`Joan Massich (160)` :bdg-info-line:`Hasrat Ali Arzoo (150)` :bdg-info-line:`Mainak Jas (140)` :bdg-info-line:`Mark Wronkiewicz (130)` :bdg-info-line:`Valerii (120)` :bdg-info-line:`Hafeza Anevar (110)` :bdg-info-line:`Olaf Hauk (100)` :bdg-info-line:`Teon L Brooks (90)` :bdg-info-line:`Dirk Gütlin (85)` :bdg-info-line:`Dimitri Papadopoulos Orfanos (79)` :bdg-info-line:`Jack Zhang (77)` :bdg-info-line:`Martin Schulz (75)` :bdg-info-line:`Jevri Hanna (74)` :bdg-info-line:`Jacob Woessner (61)` :bdg-info-line:`Scott Huberty (57)` :bdg-info-line:`Victoria Peterson (55)` :bdg-info-line:`Erica Peterson (55)` :bdg-info-line:`Santeri Ruuskanen (54)` :bdg-info-line:`Dominik Welke (52)` :bdg-info-line:`Nikolai Kapralov (51)` :bdg-info-line:`Tal Linzen (50)` :bdg-info-line:`Hubert Banville (45)` :bdg-info-line:`Stanislas Chambon (44)` :bdg-info-line:`Jair Montoya (38)` :bdg-info-line:`Chris Holdgraf (37)` :bdg-info-line:`Richard M. Köhler (36)` :bdg-info-line:`Adonay Nunes (35)` :bdg-info-line:`David Julien (30)` :bdg-info-line:`Romain Derollepot (30)` :bdg-info-line:`Yu-Han Luo (29)` :bdg-info-line:`Johann Benerradi (27)` :bdg-info-line:`Pierre Ablin (25)` :bdg-info-line:`Kostiantyn Maksymenko (23)` :bdg-info-line:`Eduard Ort (23)` :bdg-info-line:`Oleh Kozynets (22)` :bdg-info-line:`Florian Hofer (21)` :bdg-info-line:`Jussi Nurminen (21)` :bdg-info-line:`Ivan Zubarev (20)` :bdg-info-line:`Jean-Rémi KING (20)` :bdg-info-line:`Stefan Repplinger (16)` :bdg-info-line:`Kyle Mathewson (16)` :bdg-info-line:`Quentin Barthélemy (15)` :bdg-info-line:`Moritz Gerster (14)` :bdg-info-line:`Hamza Abdelhedi (14)` :bdg-info-line:`Judy D Zhu (14)` :bdg-info-line:`Fede Raimondo (14)` :bdg-info-line:`Matteo Anelli (13)` :bdg-info-line:`Ashley Drew (13)` :bdg-info-line:`Jordan Drew (13)` :bdg-info-line:`Juergen Dammers (13)` :bdg-info-line:`Saket Choudhary (13)` :bdg-info-line:`Arne Pelzer (13)` :bdg-info-line:`Gonzalo Reina (11)` :bdg-info-line:`Florin Pop (11)` :bdg-info-line:`marmaduke woodman (11)` :bdg-info-line:`Simon Kern (10)` :bdg-info-line:`ZHANG Zhi (10)` :bdg-info-line:`Jonathan Kuziek (10)` :bdg-info-line:`Thomas Moreau (10)` :bdg-info-line:`Michiru Kaneda (9)` :bdg-info-line:`Yaroslav Halchenko (9)` :bdg-info-line:`Pablo Mainar (9)` :bdg-info-line:`Nikolai M Chapochnikov (8)` :bdg-info-line:`Carlos de la Torre (8)` :bdg-info-line:`Rotem Falach (7)` :bdg-info-line:`Jan Sedivy (7)` :bdg-info-line:`Tommy Clausner (7)` :bdg-info-line:`George O'Neill (6)` :bdg-info-line:`Gansheng TAN (6)` :bdg-info-line:`Liberty Hamilton (6)` :bdg-info-line:`Nabil Alibou (6)` :bdg-info-line:`Dominik Wetzel (6)` :bdg-info-line:`Jan Ebert (4)` :bdg-info-line:`Mohammad Daneshzand (4)` :bdg-info-line:`Andrew Quinn (3)` :bdg-info-line:`Joshua Teves (3)` :bdg-info-line:`Mats (2)` :bdg-info-line:`luz paz (2)` :bdg-info-line:`Padma Sundaram (2)` :bdg-info-line:`Anton Nikolas Waniek (2)` :bdg-info-line:`Evan Hathaway (2)` :bdg-info-line:`Dmitrii Altukhov (2)` :bdg-info-line:`jwelzel (2)` :bdg-info-line:`Jean-Remi King (2)` :bdg-info-line:`Xabier de Zuazo (1)` :bdg-info-line:`Nathalie Gayraud (1)` :bdg-info-line:`Robert Seymour (1)` :bdg-info-line:`Kristijan Armeni (1)` :bdg-info-line:`José C. García Alanis (1)` :bdg-info-line:`Evgenii Kalenkovich (1)` :bdg-info-line:`alexandre barachant (1)` + + + + .. grid-item-card:: mne.viz + :class-card: overflow-auto + :link: https://github.com/mne-tools/mne-python/tree/main/mne/viz + + :bdg-primary-line:`Eric Larson (64k)` :bdg-primary-line:`Guillaume Favelier (31k)` :bdg-primary-line:`Daniel McCloy (27k)` :bdg-primary-line:`Jaakko Leppakangas (10k)` :bdg-primary-line:`Martin Schulz (7.7k)` :bdg-primary-line:`Alexandre Gramfort (7.6k)` :bdg-primary-line:`Clemens Brunner (7.5k)` :bdg-primary-line:`Denis A. Engemann (5.5k)` :bdg-primary-line:`Alex Rockhill (5.2k)` :bdg-primary-line:`Jona Sassenhagen (4.9k)` :bdg-primary-line:`Marijn van Vliet (4.4k)` :bdg-primary-line:`Mathieu Scheltienne (2.7k)` :bdg-info-line:`Richard Höchenberger (2.4k)` :bdg-info-line:`Mikołaj Magnuski (1.9k)` :bdg-info-line:`Rob Luke (1.8k)` :bdg-info-line:`Martin Luessi (1.6k)` :bdg-info-line:`Mainak Jas (1.4k)` :bdg-info-line:`Jevri Hanna (690)` :bdg-info-line:`Stefan Appelhoff (630)` :bdg-info-line:`Chris Holdgraf (540)` :bdg-info-line:`Christian Brodbeck (450)` :bdg-info-line:`Adam Li (450)` :bdg-info-line:`Scott Huberty (380)` :bdg-info-line:`Stefan Repplinger (350)` :bdg-info-line:`Joan Massich (340)` :bdg-info-line:`Mark Wronkiewicz (280)` :bdg-info-line:`Valerii (270)` :bdg-info-line:`Jean-Rémi KING (270)` :bdg-info-line:`Teon L Brooks (230)` :bdg-info-line:`Jussi Nurminen (220)` :bdg-info-line:`Luke Bloy (210)` :bdg-info-line:`Fede Raimondo (210)` :bdg-info-line:`Santeri Ruuskanen (200)` :bdg-info-line:`Valerii Chirkov (200)` :bdg-info-line:`Sheraz Khan (190)` :bdg-info-line:`Yousra Bekhti (180)` :bdg-info-line:`Christopher J. Bailey (150)` :bdg-info-line:`Britta Westner (150)` :bdg-info-line:`Hüseyin Orkun Elmas (140)` :bdg-info-line:`Martin Perez-Guevara (130)` :bdg-info-line:`Dimitri Papadopoulos Orfanos (110)` :bdg-info-line:`Hasrat Ali Arzoo (110)` :bdg-info-line:`Ram PARI (110)` :bdg-info-line:`Roman Goj (110)` :bdg-info-line:`Alejandro Weinstein (100)` :bdg-info-line:`Antoine Gauthier (97)` :bdg-info-line:`Timon Merk (70)` :bdg-info-line:`Kyle Mathewson (70)` :bdg-info-line:`Clément Moutard (62)` :bdg-info-line:`Michal Žák (60)` :bdg-info-line:`Jan Ebert (59)` :bdg-info-line:`Keith Doelling (53)` :bdg-info-line:`Yu-Han Luo (49)` :bdg-info-line:`Roan LaPlante (44)` :bdg-info-line:`T. Wang (42)` :bdg-info-line:`Richard M. Köhler (41)` :bdg-info-line:`Erkka Heinila (40)` :bdg-info-line:`Tal Linzen (39)` :bdg-info-line:`Christian O'Reilly (36)` :bdg-info-line:`Aaron Earle-Richardson (36)` :bdg-info-line:`Johannes Kasper (36)` :bdg-info-line:`Drew, J. (36)` :bdg-info-line:`Asish Panda (30)` :bdg-info-line:`Maggie Clarke (28)` :bdg-info-line:`Ivo Pascal de Jong (28)` :bdg-info-line:`Matteo Anelli (24)` :bdg-info-line:`PAB (24)` :bdg-info-line:`Pierre-Antoine Bannier (24)` :bdg-info-line:`Dominique Makowski (22)` :bdg-info-line:`Andreas Højlund (21)` :bdg-info-line:`Nathalie Gayraud (20)` :bdg-info-line:`Alan Leggitt (20)` :bdg-info-line:`HY Shin (19)` :bdg-info-line:`Nikolai Kapralov (18)` :bdg-info-line:`Silvia Cotroneo (18)` :bdg-info-line:`Jean-Remi King (17)` :bdg-info-line:`Jon Houck (17)` :bdg-info-line:`Toomas Erik Anijärv (16)` :bdg-info-line:`marmaduke woodman (16)` :bdg-info-line:`Cristóbal Moënne-Loccoz (14)` :bdg-info-line:`Pablo Mainar (14)` :bdg-info-line:`Mohammad Daneshzand (14)` :bdg-info-line:`Felix Klotzsche (13)` :bdg-info-line:`Mats (13)` :bdg-info-line:`NoahMarkowitz (13)` :bdg-info-line:`Marian Dovgialo (12)` :bdg-info-line:`Cora Kim (12)` :bdg-info-line:`Simeon Wong (11)` :bdg-info-line:`Andrew R. Dykstra (11)` :bdg-info-line:`Andrew Quinn (11)` :bdg-info-line:`Gennadiy (11)` :bdg-info-line:`Florin Pop (10)` :bdg-info-line:`Mauricio Cespedes (10)` :bdg-info-line:`Johann Benerradi (10)` :bdg-info-line:`Joshua Calder-Travis (10)` :bdg-info-line:`Eduard Ort (9)` :bdg-info-line:`Geoff Brookshire (8)` :bdg-info-line:`Reza Shoorangiz (6)` :bdg-info-line:`Jacob Woessner (6)` :bdg-info-line:`luz paz (6)` :bdg-info-line:`Sophie Herbst (6)` :bdg-info-line:`Dominik Welke (6)` :bdg-info-line:`Zhenya (6)` :bdg-info-line:`Matteo Visconti di Oleggio Castello (6)` :bdg-info-line:`Simon Kern (5)` :bdg-info-line:`Tommy Clausner (4)` :bdg-info-line:`Jonathan Kuziek (4)` :bdg-info-line:`Julia Guiomar Niso Galán (4)` :bdg-info-line:`Tom Ma (4)` :bdg-info-line:`Sebastián Castaño-Candamil (4)` :bdg-info-line:`Quentin Barthélemy (4)` :bdg-info-line:`Oleh Kozynets (4)` :bdg-info-line:`Michael (2)` :bdg-info-line:`Praveen Sripad (2)` :bdg-info-line:`Pierre Ablin (2)` :bdg-info-line:`Matt Sanderson (1)` :bdg-info-line:`Yaroslav Halchenko (1)` + + + + .. grid-item-card:: doc + :class-card: overflow-auto + :link: https://github.com/mne-tools/mne-python/tree/main/doc + + :bdg-primary-line:`Eric Larson (40k)` :bdg-primary-line:`Daniel McCloy (27k)` :bdg-primary-line:`Joris Van den Bossche (7.6k)` :bdg-primary-line:`Richard Höchenberger (3.5k)` :bdg-primary-line:`Alexandre Gramfort (1.9k)` :bdg-primary-line:`Yousra Bekhti (1.7k)` :bdg-primary-line:`Clemens Brunner (1.4k)` :bdg-primary-line:`Martin Luessi (1.2k)` :bdg-primary-line:`Mainak Jas (1.0k)` :bdg-primary-line:`Stefan Appelhoff (860)` :bdg-primary-line:`Rob Luke (630)` :bdg-primary-line:`Christian Brodbeck (510)` :bdg-primary-line:`Denis A. Engemann (490)` :bdg-primary-line:`Alex Rockhill (410)` :bdg-primary-line:`Joan Massich (390)` :bdg-primary-line:`Mathieu Scheltienne (360)` :bdg-primary-line:`Guillaume Favelier (360)` :bdg-primary-line:`Britta Westner (310)` :bdg-primary-line:`Scott Huberty (260)` :bdg-primary-line:`Jona Sassenhagen (250)` :bdg-primary-line:`Dan G. Wakeman (240)` :bdg-primary-line:`Marijn van Vliet (190)` :bdg-primary-line:`Nabil Alibou (140)` :bdg-primary-line:`Jaakko Leppakangas (91)` :bdg-primary-line:`Martin Schulz (87)` :bdg-info-line:`George O'Neill (81)` :bdg-info-line:`Kostiantyn Maksymenko (80)` :bdg-info-line:`Adam Li (79)` :bdg-info-line:`buildqa (76)` :bdg-info-line:`Mikołaj Magnuski (72)` :bdg-info-line:`Andrew R. Dykstra (71)` :bdg-info-line:`Dominik Welke (63)` :bdg-info-line:`Robert Seymour (56)` :bdg-info-line:`Apoorva Karekal (54)` :bdg-info-line:`Chris Holdgraf (45)` :bdg-info-line:`Jennifer Behnke (45)` :bdg-info-line:`Hakimeh Aslsardroud (45)` :bdg-info-line:`Pavel Navratil (45)` :bdg-info-line:`Teon L Brooks (41)` :bdg-info-line:`Jean-Rémi KING (41)` :bdg-info-line:`Zhenya (39)` :bdg-info-line:`Adonay Nunes (39)` :bdg-info-line:`Velu Prabhakar Kumaravel (35)` :bdg-info-line:`Josh Koen (35)` :bdg-info-line:`Sawradip Saha (34)` :bdg-info-line:`Hasrat Ali Arzoo (34)` :bdg-info-line:`Ana Radanovic (31)` :bdg-info-line:`Judy D Zhu (31)` :bdg-info-line:`Theodore Papadopoulo (30)` :bdg-info-line:`Nataliia Kozhemiako (30)` :bdg-info-line:`José C. García Alanis (29)` :bdg-info-line:`PAB (29)` :bdg-info-line:`Pierre-Antoine Bannier (29)` :bdg-info-line:`Lorenz Esch (29)` :bdg-info-line:`Victoria Peterson (27)` :bdg-info-line:`Jan Ebert (26)` :bdg-info-line:`Alan Leggitt (25)` :bdg-info-line:`Jevri Hanna (24)` :bdg-info-line:`Larry Eisenman (24)` :bdg-info-line:`Evgenii Kalenkovich (21)` :bdg-info-line:`Olaf Hauk (18)` :bdg-info-line:`Yaroslav Halchenko (18)` :bdg-info-line:`Tommy Clausner (17)` :bdg-info-line:`Dimitri Papadopoulos Orfanos (15)` :bdg-info-line:`Ram PARI (15)` :bdg-info-line:`Luke Bloy (15)` :bdg-info-line:`Christopher J. Bailey (14)` :bdg-info-line:`Kaisu Lankinen (14)` :bdg-info-line:`Steven Bierer (14)` :bdg-info-line:`Sebastien Treguer (14)` :bdg-info-line:`Mohamed Sherif (13)` :bdg-info-line:`Moritz Gerster (13)` :bdg-info-line:`Carina Forster (13)` :bdg-info-line:`John Samuelsson (13)` :bdg-info-line:`Giorgio Marinato (13)` :bdg-info-line:`Xabier de Zuazo (11)` :bdg-info-line:`Farzin Negahbani (11)` :bdg-info-line:`Jon Houck (10)` :bdg-info-line:`Phillip Alday (10)` :bdg-info-line:`Emily Stephen (10)` :bdg-info-line:`Martin Billinger (9)` :bdg-info-line:`Ivana Kojcic (9)` :bdg-info-line:`Kyle Mathewson (8)` :bdg-info-line:`Tristan Stenner (7)` :bdg-info-line:`Liberty Hamilton (7)` :bdg-info-line:`Kristijan Armeni (7)` :bdg-info-line:`Matt Sanderson (7)` :bdg-info-line:`Thomas Jochmann (7)` :bdg-info-line:`Jonathan Kuziek (6)` :bdg-info-line:`Jacob Woessner (6)` :bdg-info-line:`Ping-Keng Jao (6)` :bdg-info-line:`Ilian AZZ (6)` :bdg-info-line:`Richard M. Köhler (6)` :bdg-info-line:`Lukas Hecker (6)` :bdg-info-line:`Jack Zhang (5)` :bdg-info-line:`Michiru Kaneda (5)` :bdg-info-line:`Mingjian He (5)` :bdg-info-line:`Thomas S. Binns (5)` :bdg-info-line:`Sophie Herbst (5)` :bdg-info-line:`Evan Hathaway (5)` :bdg-info-line:`David Julien (5)` :bdg-info-line:`Romain Derollepot (5)` :bdg-info-line:`Mark Wronkiewicz (5)` :bdg-info-line:`John Veillette (5)` :bdg-info-line:`Ashley Drew (4)` :bdg-info-line:`Santeri Ruuskanen (4)` :bdg-info-line:`Fede Raimondo (4)` :bdg-info-line:`TzionaN (4)` :bdg-info-line:`Jan Zerfowski (4)` :bdg-info-line:`Adina Wagner (4)` :bdg-info-line:`Matthias Dold (4)` :bdg-info-line:`Simon Kern (4)` :bdg-info-line:`Hüseyin Orkun Elmas (4)` :bdg-info-line:`Carlos de la Torre (4)` :bdg-info-line:`Qian Chu (4)` :bdg-info-line:`Michal Žák (4)` :bdg-info-line:`NoahMarkowitz (4)` :bdg-info-line:`Christian O'Reilly (4)` :bdg-info-line:`Fu-Te Wong (4)` :bdg-info-line:`Svea Marie Meyer (4)` :bdg-info-line:`Tod Flak (4)` :bdg-info-line:`Aniket Pradhan (4)` :bdg-info-line:`Riessarius Stargardsky (4)` :bdg-info-line:`Alexander Rudiuk (4)` :bdg-info-line:`Katrin Leinweber (4)` :bdg-info-line:`Nick Foti (4)` :bdg-info-line:`Dirk Gütlin (3)` :bdg-info-line:`Matt Courtemanche (3)` :bdg-info-line:`Drew, J. (3)` :bdg-info-line:`Proloy Das (3)` :bdg-info-line:`Hamza Abdelhedi (3)` :bdg-info-line:`Martin Oberg (3)` :bdg-info-line:`btkcodedev (3)` :bdg-info-line:`Motofumi Fushimi (3)` :bdg-info-line:`Alexander Kiefer (3)` :bdg-info-line:`Richard Scholz (3)` :bdg-info-line:`Will Turner (3)` :bdg-info-line:`Ivo Pascal de Jong (3)` :bdg-info-line:`Seyed (Yahya) Shirazi (3)` :bdg-info-line:`Nicolas Fourcaud-Trocmé (3)` :bdg-info-line:`Sammi Chekroud (3)` :bdg-info-line:`Mohammad Daneshzand (3)` :bdg-info-line:`Johann Benerradi (3)` :bdg-info-line:`Eduard Ort (3)` :bdg-info-line:`Justus Schwabedal (3)` :bdg-info-line:`Erica Peterson (3)` :bdg-info-line:`Marian Dovgialo (3)` :bdg-info-line:`Joshua Teves (3)` :bdg-info-line:`Roman Goj (3)` :bdg-info-line:`Sara Sommariva (3)` :bdg-info-line:`Félix Raimundo (3)` :bdg-info-line:`Jussi Nurminen (3)` :bdg-info-line:`Thomas Hartmann (3)` :bdg-info-line:`Stanislas Chambon (3)` :bdg-info-line:`Sen-wen DENG (2)` :bdg-info-line:`T. Wang (2)` :bdg-info-line:`Matthias Eberlein (2)` :bdg-info-line:`Alessandro Tonin (2)` :bdg-info-line:`Matti Toivonen (2)` :bdg-info-line:`Lukas Gemein (2)` :bdg-info-line:`Frederik D. Weber (2)` :bdg-info-line:`Reza Nasri (2)` :bdg-info-line:`Ilias Machairas (2)` :bdg-info-line:`Daniel C Schad (2)` :bdg-info-line:`Sena (2)` :bdg-info-line:`Andrew Quinn (2)` :bdg-info-line:`Chetan Gohil (2)` :bdg-info-line:`Mats (2)` :bdg-info-line:`Sebastiaan Mathot (2)` :bdg-info-line:`Quentin Barthélemy (2)` :bdg-info-line:`Dominik Wetzel (2)` :bdg-info-line:`Daniel Hasegan (2)` :bdg-info-line:`Tom Ma (2)` :bdg-info-line:`Mauricio Cespedes (2)` :bdg-info-line:`Toomas Erik Anijärv (2)` :bdg-info-line:`enzo (2)` :bdg-info-line:`Mark Henney (2)` :bdg-info-line:`Arne Pelzer (2)` :bdg-info-line:`Zvi Baratz (2)` :bdg-info-line:`HY Shin (2)` :bdg-info-line:`Tom Stone (2)` :bdg-info-line:`Florin Pop (2)` :bdg-info-line:`Timur Sokhin (2)` :bdg-info-line:`Aaron Earle-Richardson (2)` :bdg-info-line:`Joshua Calder-Travis (2)` :bdg-info-line:`Gennadiy (2)` :bdg-info-line:`Diptyajit Das (2)` :bdg-info-line:`Daniel Tse (2)` :bdg-info-line:`Andy Gilbert (2)` :bdg-info-line:`Paul Roujansky (2)` :bdg-info-line:`Gonzalo Reina (2)` :bdg-info-line:`Maksym Balatsko (2)` :bdg-info-line:`Pablo Mainar (2)` :bdg-info-line:`Rasmus Aagaard (2)` :bdg-info-line:`Florian Hofer (2)` :bdg-info-line:`Nikolai Kapralov (2)` :bdg-info-line:`Victor Férat (2)` :bdg-info-line:`Abram Hindle (2)` :bdg-info-line:`Fahimeh Mamashli (2)` :bdg-info-line:`Darlene Heliokinde (2)` :bdg-info-line:`Chun-Hui Li (2)` :bdg-info-line:`Yu-Han Luo (2)` :bdg-info-line:`Sebastian Major (2)` :bdg-info-line:`Geoff Brookshire (2)` :bdg-info-line:`Ramiro Gatti (2)` :bdg-info-line:`alexandra.corneyllie (2)` :bdg-info-line:`Simeon Wong (2)` :bdg-info-line:`Jan Sedivy (2)` :bdg-info-line:`Rahul Nadkarni (2)` :bdg-info-line:`Lau Møller Andersen (2)` :bdg-info-line:`Jeroen Van Der Donckt (2)` :bdg-info-line:`Hongjiang YE (2)` :bdg-info-line:`Jeff Stout (2)` :bdg-info-line:`ZHANG Zhi (2)` :bdg-info-line:`Andres Rodriguez (2)` :bdg-info-line:`Anna Padee (2)` :bdg-info-line:`Enrico Varano (2)` :bdg-info-line:`Valerii (2)` :bdg-info-line:`Silvia Cotroneo (2)` :bdg-info-line:`Cora Kim (2)` :bdg-info-line:`Rotem Falach (2)` :bdg-info-line:`Matteo Anelli (2)` :bdg-info-line:`Maggie Clarke (2)` :bdg-info-line:`Sumalyo Datta (2)` :bdg-info-line:`Felix Klotzsche (2)` :bdg-info-line:`Jan Sosulski (2)` :bdg-info-line:`Xiaokai Xia (2)` :bdg-info-line:`Darin Erat Sleiter (2)` :bdg-info-line:`Tim Gates (2)` :bdg-info-line:`Evgeny Goldstein (2)` :bdg-info-line:`Reza Shoorangiz (2)` :bdg-info-line:`Dominique Makowski (2)` :bdg-info-line:`Erkka Heinila (2)` :bdg-info-line:`Eric Brayet (2)` :bdg-info-line:`Asish Panda (2)` :bdg-info-line:`Peter J. Molfese (1)` :bdg-info-line:`Annalisa Pascarella (1)` :bdg-info-line:`Sheraz Khan (1)` :bdg-info-line:`Nikolas Chalas (1)` :bdg-info-line:`Samuel Deslauriers-Gauthier (1)` :bdg-info-line:`Nicolas Barascud (1)` :bdg-info-line:`Pierre Ablin (1)` + + + + .. grid-item-card:: examples + :class-card: overflow-auto + :link: https://github.com/mne-tools/mne-python/tree/main/examples + + :bdg-primary-line:`Eric Larson (18k)` :bdg-primary-line:`Denis A. Engemann (5.8k)` :bdg-primary-line:`Daniel McCloy (5.0k)` :bdg-primary-line:`Alexandre Gramfort (4.8k)` :bdg-primary-line:`Alex Rockhill (2.2k)` :bdg-primary-line:`Marijn van Vliet (1.5k)` :bdg-primary-line:`Stefan Appelhoff (1.5k)` :bdg-primary-line:`Jaakko Leppakangas (1.2k)` :bdg-primary-line:`Adam Li (1.1k)` :bdg-primary-line:`Chris Holdgraf (990)` :bdg-primary-line:`Olaf Hauk (930)` :bdg-info-line:`Teon L Brooks (810)` :bdg-info-line:`Britta Westner (790)` :bdg-info-line:`Mainak Jas (730)` :bdg-info-line:`Clemens Brunner (710)` :bdg-info-line:`Guillaume Favelier (670)` :bdg-info-line:`Martin Luessi (630)` :bdg-info-line:`Jean-Rémi KING (570)` :bdg-info-line:`Jona Sassenhagen (540)` :bdg-info-line:`Joan Massich (530)` :bdg-info-line:`José C. García Alanis (530)` :bdg-info-line:`Richard Höchenberger (450)` :bdg-info-line:`Roman Goj (420)` :bdg-info-line:`Annalisa Pascarella (330)` :bdg-info-line:`Mathieu Scheltienne (330)` :bdg-info-line:`alexandre barachant (310)` :bdg-info-line:`Ivana Kojcic (280)` :bdg-info-line:`Luke Bloy (280)` :bdg-info-line:`Kostiantyn Maksymenko (260)` :bdg-info-line:`Tommy Clausner (250)` :bdg-info-line:`Christian Brodbeck (240)` :bdg-info-line:`Mikołaj Magnuski (230)` :bdg-info-line:`Andrew R. Dykstra (200)` :bdg-info-line:`Daniel Strohmeier (180)` :bdg-info-line:`Sophie Herbst (170)` :bdg-info-line:`Adonay Nunes (170)` :bdg-info-line:`Victoria Peterson (150)` :bdg-info-line:`Mathurin Massias (150)` :bdg-info-line:`Jevri Hanna (140)` :bdg-info-line:`Jussi Nurminen (130)` :bdg-info-line:`Scott Huberty (130)` :bdg-info-line:`Nicolas Barascud (130)` :bdg-info-line:`Henrich Kolkhorst (120)` :bdg-info-line:`Romain Trachel (120)` :bdg-info-line:`Dimitri Papadopoulos Orfanos (120)` :bdg-info-line:`Alan Leggitt (120)` :bdg-info-line:`Laura Gwilliams (110)` :bdg-info-line:`Felix Klotzsche (100)` :bdg-info-line:`Kaisu Lankinen (100)` :bdg-info-line:`Rob Luke (98)` :bdg-info-line:`Yousra Bekhti (95)` :bdg-info-line:`John Samuelsson (95)` :bdg-info-line:`Ashley Drew (94)` :bdg-info-line:`Mark Wronkiewicz (94)` :bdg-info-line:`Giorgio Marinato (91)` :bdg-info-line:`Sheraz Khan (74)` :bdg-info-line:`Tal Linzen (73)` :bdg-info-line:`Pierre Ablin (67)` :bdg-info-line:`Dominik Welke (64)` :bdg-info-line:`Asish Panda (64)` :bdg-info-line:`Theodore Papadopoulo (61)` :bdg-info-line:`Erica Peterson (48)` :bdg-info-line:`Keith Doelling (46)` :bdg-info-line:`Pablo Mainar (40)` :bdg-info-line:`Jon Houck (39)` :bdg-info-line:`Brad Buran (36)` :bdg-info-line:`Nick Foti (32)` :bdg-info-line:`Jordan Drew (27)` :bdg-info-line:`Eduard Ort (27)` :bdg-info-line:`Joris Van den Bossche (24)` :bdg-info-line:`Dan G. Wakeman (21)` :bdg-info-line:`Sena (20)` :bdg-info-line:`Nicolas Gensollen (20)` :bdg-info-line:`Catalina M. Galván (18)` :bdg-info-line:`Ana Radanovic (16)` :bdg-info-line:`Carina Forster (15)` :bdg-info-line:`Martin Schulz (14)` :bdg-info-line:`Fu-Te Wong (14)` :bdg-info-line:`Martin Billinger (14)` :bdg-info-line:`Yu-Han Luo (12)` :bdg-info-line:`Cora Kim (11)` :bdg-info-line:`PAB (10)` :bdg-info-line:`Pierre-Antoine Bannier (10)` :bdg-info-line:`Maggie Clarke (10)` :bdg-info-line:`Erik Hornberger (9)` :bdg-info-line:`Fede Raimondo (7)` :bdg-info-line:`Timon Merk (7)` :bdg-info-line:`Matteo Anelli (7)` :bdg-info-line:`Adeline Fecker (6)` :bdg-info-line:`Zvi Baratz (6)` :bdg-info-line:`Katrin Leinweber (6)` :bdg-info-line:`Christopher J. Bailey (6)` :bdg-info-line:`David Sabbagh (6)` :bdg-info-line:`Hamid (5)` :bdg-info-line:`Archit Singhal (4)` :bdg-info-line:`Nataliia Kozhemiako (4)` :bdg-info-line:`Valerii (4)` :bdg-info-line:`Johann Benerradi (4)` :bdg-info-line:`Jan Zerfowski (3)` :bdg-info-line:`Ramiro Gatti (3)` :bdg-info-line:`Ellen Lau (2)` :bdg-info-line:`Praveen Sripad (2)` :bdg-info-line:`Larry Eisenman (2)` :bdg-info-line:`Alexander Rudiuk (1)` + + + + .. grid-item-card:: tutorials + :class-card: overflow-auto + :link: https://github.com/mne-tools/mne-python/tree/main/tutorials + + :bdg-primary-line:`Eric Larson (22k)` :bdg-primary-line:`Daniel McCloy (20k)` :bdg-primary-line:`Alexandre Gramfort (5.2k)` :bdg-primary-line:`Alex Rockhill (3.8k)` :bdg-primary-line:`Richard Höchenberger (3.6k)` :bdg-primary-line:`Clemens Brunner (3.4k)` :bdg-primary-line:`Stefan Appelhoff (3.2k)` :bdg-primary-line:`Marijn van Vliet (1.5k)` :bdg-primary-line:`Jaakko Leppakangas (1.5k)` :bdg-primary-line:`Rob Luke (1.5k)` :bdg-primary-line:`Adam Li (1.3k)` :bdg-info-line:`Dominik Welke (950)` :bdg-info-line:`Britta Westner (770)` :bdg-info-line:`Scott Huberty (770)` :bdg-info-line:`Evgenii Kalenkovich (680)` :bdg-info-line:`Jona Sassenhagen (660)` :bdg-info-line:`Valerii Chirkov (650)` :bdg-info-line:`Tommy Clausner (640)` :bdg-info-line:`Mikołaj Magnuski (550)` :bdg-info-line:`Joan Massich (520)` :bdg-info-line:`Chris Holdgraf (420)` :bdg-info-line:`Mathieu Scheltienne (400)` :bdg-info-line:`Guillaume Favelier (370)` :bdg-info-line:`Stanislas Chambon (310)` :bdg-info-line:`Carina Forster (280)` :bdg-info-line:`Phillip Alday (280)` :bdg-info-line:`George O'Neill (270)` :bdg-info-line:`Liberty Hamilton (250)` :bdg-info-line:`Josh Koen (250)` :bdg-info-line:`Ashley Drew (240)` :bdg-info-line:`Johann Benerradi (230)` :bdg-info-line:`Martin Schulz (220)` :bdg-info-line:`Joris Van den Bossche (210)` :bdg-info-line:`Robert Seymour (190)` :bdg-info-line:`Judy D Zhu (190)` :bdg-info-line:`Mainak Jas (170)` :bdg-info-line:`Nick Foti (170)` :bdg-info-line:`Denis A. Engemann (160)` :bdg-info-line:`Erica Peterson (130)` :bdg-info-line:`Jean-Rémi KING (130)` :bdg-info-line:`Jacob Woessner (110)` :bdg-info-line:`Yu-Han Luo (92)` :bdg-info-line:`Dimitri Papadopoulos Orfanos (88)` :bdg-info-line:`Robert Oostenveld (75)` :bdg-info-line:`Nicole Proulx (67)` :bdg-info-line:`Ram PARI (66)` :bdg-info-line:`Manorama Kadwani (66)` :bdg-info-line:`Ana Radanovic (61)` :bdg-info-line:`Christian Mista (57)` :bdg-info-line:`Giorgio Marinato (53)` :bdg-info-line:`Silvia Cotroneo (44)` :bdg-info-line:`Pierre Ablin (38)` :bdg-info-line:`Kyle Mathewson (35)` :bdg-info-line:`Eduard Ort (33)` :bdg-info-line:`Maureen Shader (32)` :bdg-info-line:`Jonathan Kuziek (29)` :bdg-info-line:`Timon Merk (28)` :bdg-info-line:`Keith Doelling (25)` :bdg-info-line:`Yousra Bekhti (22)` :bdg-info-line:`Christian Brodbeck (22)` :bdg-info-line:`Nabil Alibou (21)` :bdg-info-line:`Hubert Banville (18)` :bdg-info-line:`Pablo Mainar (16)` :bdg-info-line:`Jakub Kaczmarzyk (14)` :bdg-info-line:`Catalina M. Galván (14)` :bdg-info-line:`Sawradip Saha (13)` :bdg-info-line:`Felix Klotzsche (13)` :bdg-info-line:`Marian Dovgialo (12)` :bdg-info-line:`Michiru Kaneda (12)` :bdg-info-line:`Mathurin Massias (12)` :bdg-info-line:`Jon Houck (11)` :bdg-info-line:`Quentin Barthélemy (9)` :bdg-info-line:`Sheraz Khan (8)` :bdg-info-line:`Stefan Repplinger (8)` :bdg-info-line:`Jevri Hanna (8)` :bdg-info-line:`Richard M. Köhler (8)` :bdg-info-line:`Toomas Erik Anijärv (7)` :bdg-info-line:`Maggie Clarke (7)` :bdg-info-line:`Valerii (7)` :bdg-info-line:`Sophie Herbst (6)` :bdg-info-line:`Jussi Nurminen (6)` :bdg-info-line:`Adonay Nunes (6)` :bdg-info-line:`Jan Sedivy (6)` :bdg-info-line:`btkcodedev (5)` :bdg-info-line:`Omer Shubi (4)` :bdg-info-line:`Erkka Heinila (4)` :bdg-info-line:`Ryan Law (3)` :bdg-info-line:`Zhenya (3)` :bdg-info-line:`Tim Gates (2)` :bdg-info-line:`Ping-Keng Jao (2)` :bdg-info-line:`Lorenzo Alfine (2)` :bdg-info-line:`Simon-Shlomo Poil (2)` :bdg-info-line:`Alexander Rudiuk (2)` :bdg-info-line:`Erik Hornberger (2)` :bdg-info-line:`Claire Braboszcz (2)` :bdg-info-line:`Larry Eisenman (2)` :bdg-info-line:`Katrin Leinweber (2)` :bdg-info-line:`Mads Jensen (2)` :bdg-info-line:`Nicolas Legrand (2)` :bdg-info-line:`Ramiro Gatti (2)` :bdg-info-line:`Mohamed Sherif (2)` + + + + .. grid-item-card:: maintenance + :class-card: overflow-auto + :link: https://github.com/mne-tools/mne-python + + :bdg-primary-line:`Eric Larson (15k)` :bdg-primary-line:`Daniel McCloy (2.8k)` :bdg-primary-line:`Guillaume Favelier (2.6k)` :bdg-primary-line:`Clemens Brunner (1.2k)` :bdg-primary-line:`Richard Höchenberger (1.1k)` :bdg-primary-line:`Alexandre Gramfort (760)` :bdg-primary-line:`Joan Massich (310)` :bdg-primary-line:`Martin Schulz (280)` :bdg-info-line:`Alex Rockhill (270)` :bdg-info-line:`Denis A. Engemann (200)` :bdg-info-line:`Mathieu Scheltienne (170)` :bdg-info-line:`Jaakko Leppakangas (160)` :bdg-info-line:`Stefan Appelhoff (110)` :bdg-info-line:`Britta Westner (89)` :bdg-info-line:`Marijn van Vliet (75)` :bdg-info-line:`Scott Huberty (64)` :bdg-info-line:`Martin Luessi (53)` :bdg-info-line:`Dimitri Papadopoulos Orfanos (42)` :bdg-info-line:`Adam Li (39)` :bdg-info-line:`Teon L Brooks (34)` :bdg-info-line:`Tal Linzen (31)` :bdg-info-line:`Thomas Donoghue (28)` :bdg-info-line:`Jona Sassenhagen (28)` :bdg-info-line:`Chris Holdgraf (17)` :bdg-info-line:`Mainak Jas (17)` :bdg-info-line:`Yaroslav Halchenko (16)` :bdg-info-line:`Jennifer Behnke (16)` :bdg-info-line:`Hakimeh Aslsardroud (16)` :bdg-info-line:`Pavel Navratil (16)` :bdg-info-line:`Christian Brodbeck (14)` :bdg-info-line:`Stanislas Chambon (13)` :bdg-info-line:`Rob Luke (12)` :bdg-info-line:`George O'Neill (12)` :bdg-info-line:`Robert Seymour (12)` :bdg-info-line:`Judy D Zhu (12)` :bdg-info-line:`Hubert Banville (10)` :bdg-info-line:`Naveen (9)` :bdg-info-line:`Mikołaj Magnuski (7)` :bdg-info-line:`Mark Wronkiewicz (7)` :bdg-info-line:`Steve Matindi (6)` :bdg-info-line:`José C. García Alanis (6)` :bdg-info-line:`Dominik Welke (6)` :bdg-info-line:`Pierre Ablin (5)` :bdg-info-line:`Martin BaBer (4)` :bdg-info-line:`Florian Hofer (4)` :bdg-info-line:`Ana Radanovic (4)` :bdg-info-line:`luz paz (4)` :bdg-info-line:`Jussi Nurminen (4)` :bdg-info-line:`Luke Bloy (4)` :bdg-info-line:`Michal Žák (4)` :bdg-info-line:`Hasrat Ali Arzoo (4)` :bdg-info-line:`Will Turner (4)` :bdg-info-line:`alexandre barachant (4)` :bdg-info-line:`Evan Hathaway (3)` :bdg-info-line:`Justus Schwabedal (3)` :bdg-info-line:`Kristijan Armeni (3)` :bdg-info-line:`Jevri Hanna (3)` :bdg-info-line:`Oleh Kozynets (3)` :bdg-info-line:`Evgenii Kalenkovich (3)` :bdg-info-line:`Liberty Hamilton (3)` :bdg-info-line:`Richard M. Köhler (3)` :bdg-info-line:`Brad Buran (2)` :bdg-info-line:`Saket Choudhary (2)` :bdg-info-line:`Jair Montoya (2)` :bdg-info-line:`Erica Peterson (2)` :bdg-info-line:`T. Wang (2)` :bdg-info-line:`Joris Van den Bossche (2)` :bdg-info-line:`Tommy Clausner (1)` :bdg-info-line:`Olaf Hauk (1)` :bdg-info-line:`Emanuele Olivetti (1)` :bdg-info-line:`Stefan Repplinger (1)` :bdg-info-line:`Johann Benerradi (1)` :bdg-info-line:`Christian Clauss (1)` :bdg-info-line:`Motofumi Fushimi (1)` :bdg-info-line:`Thomas Radman (1)` + diff --git a/doc/sphinxext/prs/12779.json b/doc/sphinxext/prs/12779.json new file mode 100644 index 00000000000..584d8132188 --- /dev/null +++ b/doc/sphinxext/prs/12779.json @@ -0,0 +1,19 @@ +{ + "merge_commit_sha": "b8b168088cb474f27833f5f9db9d60abe00dca83", + "authors": [ + { + "n": "Eric Larson", + "e": "larson.eric.d@gmail.com" + } + ], + "changes": { + "doc/sphinxext/prs/1.json": { + "a": 15, + "d": 0 + }, + "doc/sphinxext/prs/3732.json": { + "a": 15, + "d": 0 + } + } +} \ No newline at end of file diff --git a/ignore_words.txt b/ignore_words.txt index cc0edd4fcc4..a9f983cbdae 100644 --- a/ignore_words.txt +++ b/ignore_words.txt @@ -39,3 +39,4 @@ aas vor connec sme +tim diff --git a/pyproject.toml b/pyproject.toml index c0fabebc5c0..420987f8fcb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -274,6 +274,8 @@ skips = ["*/test_*.py"] # assert statements are good practice with pytest report_level = "WARNING" ignore_roles = [ "attr", + "bdg-primary-line", + "bdg-info-line", "class", "doc", "eq", @@ -298,6 +300,7 @@ ignore_directives = [ "automodule", "autosummary", "bibliography", + "card", "cssclass", "currentmodule", "dropdown", diff --git a/tools/check_mne_location.py b/tools/check_mne_location.py index 8dccf9df091..f4975810731 100755 --- a/tools/check_mne_location.py +++ b/tools/check_mne_location.py @@ -3,6 +3,7 @@ # Copyright the MNE-Python contributors. from pathlib import Path + import mne want_mne_dir = Path(__file__).parents[1] / "mne" diff --git a/tools/dev/check_steering_committee.py b/tools/dev/check_steering_committee.py index 419e9fd4164..19f4b74a958 100755 --- a/tools/dev/check_steering_committee.py +++ b/tools/dev/check_steering_committee.py @@ -5,10 +5,11 @@ # License: BSD-3-Clause # Copyright the MNE-Python contributors. -from collections import Counter import os import pprint -from datetime import timezone, datetime, timedelta +from collections import Counter +from datetime import datetime, timedelta, timezone + from github import Auth, Github from github.Commit import Commit from tqdm import tqdm diff --git a/tools/dev/ensure_headers.py b/tools/dev/ensure_headers.py index 435376ace37..dd2f8a98042 100644 --- a/tools/dev/ensure_headers.py +++ b/tools/dev/ensure_headers.py @@ -30,6 +30,7 @@ def get_paths_from_tree(root, level=0): + """Get paths from a GitPython tree.""" for entry in root: if entry.type == "tree": yield from get_paths_from_tree(entry, level + 1) diff --git a/tools/dev/gen_css_for_mne.py b/tools/dev/gen_css_for_mne.py index ca7210c8918..54354f9762e 100644 --- a/tools/dev/gen_css_for_mne.py +++ b/tools/dev/gen_css_for_mne.py @@ -16,11 +16,12 @@ # Copyright the MNE-Python contributors. import base64 -import mne from pathlib import Path import rcssmin +import mne + base_dir = Path(mne.__file__).parent / "report" / "js_and_css" / "bootstrap-icons" css_path_in = base_dir / "bootstrap-icons.css" css_path_out = base_dir / "bootstrap-icons.mne.css" diff --git a/tools/dev/generate_pyi_files.py b/tools/dev/generate_pyi_files.py index 97deb34f837..98cdb6c08ce 100644 --- a/tools/dev/generate_pyi_files.py +++ b/tools/dev/generate_pyi_files.py @@ -7,6 +7,7 @@ import ast_comments as ast import black + import mne diff --git a/tools/dev/update_credit_json.py b/tools/dev/update_credit_json.py new file mode 100644 index 00000000000..fc3d0b2787a --- /dev/null +++ b/tools/dev/update_credit_json.py @@ -0,0 +1,88 @@ +"""Collect credit information for PRs. + +The initial run takes a long time (hours!) due to GitHub rate limits, even with +a personal GITHUB_TOKEN. +""" + +import json +import os +import re +from pathlib import Path + +from github import Auth, Github +from tqdm import tqdm + +auth = Auth.Token(os.environ["GITHUB_TOKEN"]) +g = Github(auth=auth, per_page=100) +out_path = Path(__file__).parents[2] / "doc" / "sphinxext" / "prs" +out_path.mkdir(exist_ok=True) +oldest_pr = 6915 # can update this when the oldest open PR changes to speed things up + +# JSON formatting +json_kwargs = dict(indent=2, ensure_ascii=False, sort_keys=False) +# If the above arguments are changed, existing JSON should also be reformatted with +# something like: +# for fname in sorted(glob.glob("doc/sphinxext/prs/*.json")): +# fname = Path(fname).resolve(strict=True) +# fname.write_text(json.dumps(json.loads(fname.read_text("utf-8")), **json_kwargs), "utf-8") # noqa: E501 + +repo = g.get_repo("mne-tools/mne-python") +co_re = re.compile("Co-authored-by: ([^<>]+) <([^()>]+)>") +# We go in descending order of updates and `break` when we encounter a PR we have +# already committed a file for. +pulls_iter = repo.get_pulls(state="closed", sort="created", direction="desc") +iter_ = tqdm(pulls_iter, unit="pr", desc="Traversing") +last = 0 +n_added = 0 +for pull in iter_: + fname_out = out_path / f"{pull.number}.json" + if pull.number < oldest_pr: + iter_.close() + print( + f"After checking {iter_.n + 1} and adding {n_added} PR(s), " + f"found PR number less than oldest existing file {fname_out}, stopping" + ) + break + if fname_out.is_file(): + continue + + # PR diff credit + if not pull.merged: + continue + out = dict() + # One option is to do a git diff between pull.base and pull.head, + # but let's see if we can stay pythonic + out["merge_commit_sha"] = pull.merge_commit_sha + # Prefer the GitHub username information because it should be most up to date + name, email = pull.user.name, pull.user.email + if name is None and email is None: + # no usable GitHub user information, pull it from the first commit + author = pull.get_commits()[0].commit.author + name, email = author.name, author.email + out["authors"] = [dict(n=name, e=email)] + # For PR 54 for example this is empty for some reason! + if out["merge_commit_sha"]: + try: + merge_commit = repo.get_commit(out["merge_commit_sha"]) + except Exception: + pass # this happens on a lot of old PRs for some reason + else: + msg = merge_commit.commit.message.replace("\r", "") + for n, e in co_re.findall(msg): + # sometimes commit messages like for 9754 contain all + # commit messages and include some repeated co-authorship messages + if n not in {a["n"] for a in out["authors"]}: + out["authors"].append(dict(n=n, e=e)) + out["changes"] = dict() + for file in pull.get_files(): + out["changes"][file.filename] = { + k[0]: getattr(file, k) for k in ("additions", "deletions") + } + n_added += 1 + fname_out.write_text(json.dumps(out, **json_kwargs), encoding="utf-8") + + # TODO: Should add: + # pull.get_comments() + # pull.get_review_comments() + +g.close() diff --git a/tools/dev/update_credit_rst.py b/tools/dev/update_credit_rst.py new file mode 100644 index 00000000000..335ca2562e1 --- /dev/null +++ b/tools/dev/update_credit_rst.py @@ -0,0 +1,425 @@ +"""Create code credit RST file. + +Run ./tools/dev/update_credit_json.py first to get the latest PR JSON files. +""" + +import glob +import json +import pathlib +import pprint +import re +from collections import defaultdict +from pathlib import Path + +import numpy as np + +import mne + +repo_root = Path(__file__).parents[2] +doc_root = repo_root / "doc" +data_dir = doc_root / "sphinxext" + +# TODO: Maybe someday deduplicate names.inc, GitHub profile names that we pull, and +# our commit history / .mailmap. All three names can mismatch. + +ignores = [ + int(ignore.split("#", maxsplit=1)[1].strip().split()[0][:-1]) + for ignore in (repo_root / ".git-blame-ignore-revs").read_text("utf-8").splitlines() + if not ignore.strip().startswith("#") and ignore.strip() +] +ignores = {str(ig): [] for ig in ignores} +single_names = "btkcodedev buildqa sviter".split() + + +def _good_name(name): + if name is None: + return False + assert isinstance(name, str), type(name) + if not name.strip(): + return False + if " " not in name and name not in single_names: # at least two parts + return False + if "Deleted" in name: # Avoid "Deleted user", can have in our mailmap + return False + return True + + +# Use mailmap to help translate emails to names +mailmap = dict() +# mapping from email to name +name_map: dict[str, str] = dict() +for line in (repo_root / ".mailmap").read_text("utf-8").splitlines(): + name = re.match("^([^<]+) <([^<>]+)>", line.strip()).group(1) + assert _good_name(name), repr(name) + emails = list(re.findall("<([^<>]+)>", line.strip())) + assert len(emails) > 0 + new = emails[0] + if new in name_map: + assert name_map[new] == name + else: + name_map[new] = name + if len(emails) == 1: + continue + for old in emails[1:]: + if old in mailmap: + assert new == mailmap[old] # can be different names + else: + mailmap[old] = new + if old in name_map: + assert name_map[old] == name + else: + name_map[old] = name + + +unknown_emails: set[str] = set() + +# dict with (name, commit) keys, values are int change counts +# ("commits" is really "PRs" for Python mode) +commits: dict[tuple[str], int] = defaultdict(lambda: 0) + +# dict with filename keys, values are dicts with name keys and +/- ndarrays +stats: dict[str, dict[str, np.ndarray]] = defaultdict( + lambda: defaultdict( + lambda: np.zeros(2, int), + ), +) + +bad_commits = set() + +for fname in sorted(glob.glob(str(data_dir / "prs" / "*.json"))): + commit = Path(fname).stem # PR number is in the filename + data = json.loads(Path(fname).read_text("utf-8")) + del fname + assert data != {} + authors = data["authors"] + for author in authors: + if ( + author["e"] is not None + and author["e"] not in name_map + and _good_name(author["n"]) + ): + name_map[author["e"]] = author["n"] + for file, counts in data["changes"].items(): + if commit in ignores: + ignores[commit].append([file, commit]) + continue + p, m = counts["a"], counts["d"] + used_authors = set() + for author in authors: + if author["e"] is not None: + if author["e"] not in name_map: + unknown_emails.add( + f'{author["e"].ljust(29)} ' + f"https://github.com/mne-tools/mne-python/pull/{commit}/files" + ) + continue + name = name_map[author["e"]] + else: + name = author["n"] + if name is None: + bad_commits.add(commit) + continue + if name in used_authors: + continue + assert name.strip(), repr(name) + used_authors.add(name) + # treat moves and permission changes like a single-line change + if p == m == 0: + p = 1 + commits[(name, commit)] += p + m + stats[file][name] += [p, m] +if bad_commits: + raise RuntimeError( + "Run:\nrm " + " ".join(f"{bad}.json" for bad in sorted(bad_commits, key=int)) + ) + +# Check for duplicate names based on last name (e.g., Teon Brooks and Teon L Brooks). +# Below are surnames where we have more than one distinct contributor: +name_counts = dict( + Das=2, + Drew=2, + Li=2, + Peterson=2, + Wong=2, + Zhang=2, +) +last_map = defaultdict(lambda: set()) +for these_stats in stats.values(): + for name in these_stats: + last = name.split()[-1] + last_map[last].add(name) +bad_names = dict() +for last, names in last_map.items(): + if len(names) > name_counts.get(last, 1): + bad_names[last] = sorted(names) +if bad_names: + pprint.pprint(bad_names) + raise RuntimeError("Unexpected duplicate names found") + +unknown_emails = set( + email + for email in unknown_emails + if "autofix-ci[bot]" not in email + and "pre-commit-ci[bot]" not in email + and "dependabot[bot]" not in email +) +assert len(unknown_emails) == 0, "Unknown emails\n" + "\n".join(sorted(unknown_emails)) + +print("Biggest included commits/PRs:") +commits = dict( + (k, commits[k]) for k in sorted(commits, key=lambda k_: commits[k_], reverse=True) +) +for ni, name in enumerate(commits, 1): + if ni > 10: + break + print(f"{str(name[1]).ljust(5)} @ {commits[name]:5d} by {name[0]}") + +print("\nIgnored commits:") +# Report the ignores +for commit in ignores: # should have found one of each + print(f"ignored {len(ignores[commit]):3d} files for {commit}") + assert len(ignores[commit]) >= 1, (ignores[commit], commit) +globs = dict() + +# This is the mapping from changed filename globs to module names on the website. +# We need to include aliases for old stuff. Anything we want to exclude we put in +# "null" with a higher priority (i.e., in dict first): +link_overrides = dict() # overrides for links +for key in """ + *.qrc *.png *.svg *.ico *.elc *.sfp *.lout *.lay *.csd *.txt + mne/_version.py mne/externals/* */__init__.py* */resources.py paper.bib + mne/html/*.css mne/html/*.js mne/io/bti/tests/data/* */SHA1SUMS *__init__py + AUTHORS.rst CITATION.cff CONTRIBUTING.rst codemeta.json mne/tests/*.* jr-tools + */whats_new.rst */latest.inc */devel.rst */changelog.rst */manual/* doc/*.json + logo/LICENSE doc/credit.rst +""".strip().split(): + globs[key] = "null" +# Now onto the actual module organization +root_path = pathlib.Path(mne.__file__).parent +mod_file_map = dict() +for file in root_path.iterdir(): + rel = file.relative_to(root_path).with_suffix("") + mod = f"mne.{rel}" + if file.is_dir(): + globs[f"mne/{rel}/*.*"] = mod + globs[f"mne/{rel}.*"] = mod + elif file.is_file() and file.suffix == ".py": + key = f"mne/{rel}.py" + if file.stem == "conftest": + globs[key] = "maintenance" + globs["conftest.py"] = "maintenance" + else: + globs[key] = mod + mod_file_map[mod] = key +globs["mne/artifacts/*.py"] = "mne.preprocessing" +for key in """ + pick.py constants.py info.py fiff/*.* _fiff/*.* raw.py testing.py _hdf5.py + compensator.py +""".strip().split(): + globs[f"mne/{key}"] = "mne.io" +for key in ("mne/transforms/*.py", "mne/_freesurfer.py"): + globs[key] = "mne.transforms" +globs["mne/mixed_norm/*.py"] = "mne.inverse_sparse" +globs["mne/__main__.py"] = "mne.commands" +globs["bin/*"] = "mne.commands" +globs["mne/morph_map.py"] = "mne.surface" +globs["mne/baseline.py"] = "mne.epochs" +for key in """ + parallel.py rank.py misc.py data/*.* defaults.py fixes.py icons/*.* icons.* +""".strip().split(): + globs[f"mne/{key}"] = "mne.utils" +for key in ("mne/_ola.py", "mne/cuda.py"): + globs[key] = "mne.filter" +for key in """ + *digitization/*.py layouts/*.py montages/*.py selection.py +""".strip().split(): + globs[f"mne/{key}"] = "mne.channels" +globs["mne/sparse_learning/*.py"] = "mne.inverse_sparse" +globs["mne/csp.py"] = "mne.preprocessing" +globs["mne/bem_surfaces.py"] = "mne.bem" +globs["mne/coreg/*.py"] = "mne.coreg" +globs["mne/inverse.py"] = "mne.minimum_norm" +globs["mne/stc.py"] = "mne.source_estimate" +globs["mne/surfer.py"] = "mne.viz" +globs["mne/tfr.py"] = "mne.time_frequency" +globs["mne/connectivity/*.py"] = "mne-connectivity (moved)" +link_overrides["mne-connectivity (moved)"] = "mne-tools/mne-connectivity" +globs["mne/realtime/*.py"] = "mne-realtime (moved)" +link_overrides["mne-realtime (moved)"] = "mne-tools/mne-realtime" +globs["mne/html_templates/*.*"] = "mne.report" +globs[".circleci/*"] = "maintenance" +link_overrides["maintenance"] = "mne-tools/mne-python" +globs["tools/*"] = "maintenance" +globs["doc/*"] = "doc" +for key in ("*.py", "*.rst"): + for mod in ("examples", "tutorials", "doc"): + globs[f"{mod}/{key}"] = mod +for key in """ + *.yml *.md setup.* MANIFEST.in Makefile README.rst flow_diagram.py *.toml + debian/* logo/*.py *.git* .pre-commit-config.yaml .mailmap .coveragerc make/* +""".strip().split(): + globs[key] = "maintenance" + + +mod_stats = defaultdict(lambda: defaultdict(lambda: np.zeros(2, int))) +other_files = set() +total_lines = np.zeros(2, int) +for fname, counts in stats.items(): + for pattern, mod in globs.items(): + if glob.fnmatch.fnmatch(fname, pattern): + break + else: + other_files.add(fname) + mod = "other" + for e, pm in counts.items(): + if mod == "mne._fiff": + raise RuntimeError + # sanity check a bit + if mod != "null" and (".png" in fname or "/manual/" in fname): + raise RuntimeError(f"Unexpected {mod} {fname}") + mod_stats[mod][e] += pm + mod_stats["mne"][e] += pm + total_lines += pm +mod_stats.pop("null") # stuff we shouldn't give credit for +mod_stats = dict( + (k, mod_stats[k]) + for k in sorted( + mod_stats, + key=lambda x: ( + not x.startswith("mne"), + x == "maintenance", + x.replace("-", "."), + ), + ) +) # sort modules alphabetically +other_files = sorted(other_files) +if len(other_files): + pprint.pprint(other_files) + raise RuntimeError(f"{len(other_files)} misc file(s) found") +print(f"\nTotal line change count: {list(total_lines)}") + +# sphinx-design badges that we use for contributors +BDG_KINDS = ["bdg-primary-line", "bdg-info-line"] +with open(doc_root / "credit.rst", "w", encoding="utf-8") as fid: + fid.write( + f"""\ +.. THIS FILE IS AUTOGENERATED BY {Path(__file__).stem} DO NOT EDIT DIRECTLY + +:orphan: + +.. _contributors: + +============ +Contributors +============ + +There are many different ways to contribute to MNE-Python! So far we only list +code contributions below, but plan to add other metrics in the future. + +.. _code_credit: + +Code credit +=========== + +Below are lists of code contributors to MNE-Python. The numbers in parentheses are the +number of lines changed in our code history. + +- :{BDG_KINDS[0]}:`This Color` is used for the top 10% of contributors. +- :{BDG_KINDS[1]}:`This Color` is used for the remaining 90% of contributors. + +.. raw:: html + + + +Entire codebase +--------------- + +""" + ) + for mi, (mod, counts) in enumerate(mod_stats.items()): + if mi == 0: + assert mod == "mne", mod + elif mi == 1: + fid.write(""" + +By submodule +------------ + +Contributors often have domain-specific expertise, so we've broken down the +contributions by submodule as well below. + +.. grid:: 1 2 3 3 + :gutter: 1 + +""") + # if there are 10 this is 100, if there are 100 this is 100 + these_stats = dict((k, v.sum()) for k, v in counts.items()) + these_stats = dict( + (k, these_stats[k]) + for k in sorted(these_stats, key=lambda x: these_stats[x], reverse=True) + ) + if mod in link_overrides: + link = f"https://github.com/{link_overrides[mod]}" + else: + kind = "blame" if mod in mod_file_map else "tree" + link_mod = mod_file_map.get(mod, mod.replace(".", "/")) + link = f"https://github.com/mne-tools/mne-python/{kind}/main/{link_mod}" + assert "moved" not in link, (mod, link) + # Use badges because they flow nicely, inside a grid to make it more compact + stat_lines = [] + for ki, (k, v) in enumerate(these_stats.items()): + # Round to two digits, e.g. 12340 -> 12000, 12560 -> 13000 + v_round = int(float(f"{v:.2g}")) + assert v_round > 0, f"Got zero lines changed for {k} in {mod}: {v_round}" + # And then write as a max-3-char human-readable abbreviation like + # 123, 1.2k, 123k, 12m, etc. + for prefix in ("", "k", "m", "g"): + if v_round >= 1000: + v_round = v_round / 1000 + else: + if v_round >= 10 or prefix == "": # keep single digit as 1 not 1.0 + v_round = f"{int(round(v_round))}" + else: + v_round = f"{v_round:.1f}" + v_round += prefix + break + else: + raise RuntimeError(f"Too many digits in {v}") + idx = 0 if ki < (len(these_stats) - 1) // 10 + 1 else 1 + if "[bot]" in k or "Lumberbot" in k: + continue + stat_lines.append(f":{BDG_KINDS[idx]}:`{k} ({v_round})`") + stat_lines = " ".join(stat_lines) + if mi == 0: + fid.write( + f""" + +.. card:: {mod} + :class-card: overflow-auto + :link: https://github.com/mne-tools/mne-python/graphs/contributors + + {stat_lines} + +""" + ) + else: + fid.write( + f""" + + .. grid-item-card:: {mod} + :class-card: overflow-auto + :link: {link} + + {stat_lines} + +""" + ) diff --git a/tools/generate_codemeta.py b/tools/generate_codemeta.py index a1c1fac77b4..150807a8f15 100644 --- a/tools/generate_codemeta.py +++ b/tools/generate_codemeta.py @@ -1,11 +1,12 @@ # License: BSD-3-Clause # Copyright the MNE-Python contributors. import subprocess -import tomllib from argparse import ArgumentParser from datetime import date from pathlib import Path +import tomllib + parser = ArgumentParser(description="Generate codemeta.json and CITATION.cff") parser.add_argument("release_version", type=str) release_version = parser.parse_args().release_version