Ownership is measured by how many commits each author made to each file in the current tree. It highlights bus-factor risk (files only one person has ever touched) and where knowledge is concentrated. The bus factor is the smallest number of people who are, between them, primary owner of more than half of the files.
Files only one author has ever changed. The more a file has changed, the more knowledge is at risk if that person leaves.
| File | Sole owner | Commits |
|---|---|---|
| doc/source/tutorial/stats/discrete_yulesimon.rst | Lucas Roberts | 12 |
| scipy/integrate/_rules/__init__.py | Olly Britton | 7 |
| benchmarks/benchmarks/linprog_benchmark_files/summary.txt | Matt Haberland | 6 |
| scipy/spatial/ckdtree/src/distance_base.h | Yu Feng | 6 |
| scipy/sparse/linalg/_eigen/arpack/arnaud/include/arnaud/arnaud.h | Ilhan Polat | 5 |
| scipy/optimize/_highspy/meson.build | Rohit Goswami | 5 |
| scipy/sparse/tests/test_minmax1d.py | Dan Schult | 5 |
| scipy/io/tests/data/example_3_maskedvals.nc | Bill Sacks | 5 |
| scipy/stats/_circstats.py | Matt Haberland | 4 |
| scipy/stats/tests/test_circstats.py | Matt Haberland | 4 |
| File | Sole owner | Commits |
|---|---|---|
| doc/source/tutorial/stats/discrete_yulesimon.rst | Lucas Roberts | 12 |
| scipy/integrate/_rules/__init__.py | Olly Britton | 7 |
| benchmarks/benchmarks/linprog_benchmark_files/summary.txt | Matt Haberland | 6 |
| scipy/spatial/ckdtree/src/distance_base.h | Yu Feng | 6 |
| scipy/sparse/linalg/_eigen/arpack/arnaud/include/arnaud/arnaud.h | Ilhan Polat | 5 |
| scipy/optimize/_highspy/meson.build | Rohit Goswami | 5 |
| scipy/sparse/tests/test_minmax1d.py | Dan Schult | 5 |
| scipy/io/tests/data/example_3_maskedvals.nc | Bill Sacks | 5 |
| scipy/stats/_circstats.py | Matt Haberland | 4 |
| scipy/stats/tests/test_circstats.py | Matt Haberland | 4 |
| doc/source/array_api_capabilities_table.py | Albert Steppi | 4 |
| doc/source/tutorial/stats/plots/qmc_plot_mc_qmc.py | Pamphile Roy | 4 |
| scipy/sparse/linalg/_eigen/__init__.py | Smit Lunagariya | 4 |
| scipy/ndimage/src/ni_splines.h | Jaime Fernandez del Rio | 4 |
| scipy/differentiate/__init__.py | Matt Haberland | 3 |
| benchmarks/process_global_benchmarks.py | Andrew Nelson | 3 |
| scipy/linalg/src/blas/blas_docs.cpp | Ilhan Polat | 3 |
| scipy/linalg/src/lapack/lapack_other.cpp | Ilhan Polat | 3 |
| scipy/sparse/linalg/_eigen/arpack/arnaud/src/arnaud_n_double.h | Ilhan Polat | 3 |
| scipy/sparse/linalg/_eigen/arpack/arnaud/src/arnaud_n_double_complex.h | Ilhan Polat | 3 |
| scipy/sparse/linalg/_eigen/arpack/arnaud/src/arnaud_n_single.h | Ilhan Polat | 3 |
| scipy/sparse/linalg/_eigen/arpack/arnaud/src/arnaud_n_single_complex.h | Ilhan Polat | 3 |
| scipy/sparse/linalg/_eigen/arpack/arnaud/src/arnaud_s_double.h | Ilhan Polat | 3 |
| scipy/sparse/linalg/_eigen/arpack/arnaud/src/arnaud_s_single.h | Ilhan Polat | 3 |
| scipy/_lib/tests/test_scipy_version.py | Ralf Gommers | 3 |
| doc/source/try_examples.json | Albert Steppi | 3 |
| doc/source/tutorial/examples/plot_boundary_modes.py | Gregory R. Lee | 3 |
| benchmarks/benchmarks/ndimage_interpolation.py | Gregory R. Lee | 3 |
| scipy/datasets/_registry.py | Anirudh Dagar | 3 |
| scipy/stats/tests/test_generation/reference_distribution_infrastructure_tests.py | Matt Haberland | 2 |
| doc/source/tutorial/examples/signal_Filtering_firwin2_example.py | Dietrich Brunn | 2 |
| doc/source/tutorial/examples/signal_Filtering_firwin_example.py | Dietrich Brunn | 2 |
| doc/source/_static/tutorial_stft_sliding_win_start.svg | Dietrich Brunn | 2 |
| doc/source/_static/tutorial_stft_sliding_win_stop.svg | Dietrich Brunn | 2 |
| doc/source/building/system_level.rst | Lucas Colley | 2 |
| .github/actionlint.yml | Lucas Colley | 2 |
| scipy/_external/meson.build | Lucas Colley | 2 |
| tools/vendoring/vendor_pyprima.sh | Lucas Colley | 2 |
| doc/source/dev/conduct/ai_policy.rst | Jake Bowhay | 2 |
| scipy/linalg/src/wrapper/wrapper_helpers.hpp | Ilhan Polat | 2 |
| scipy/linalg/src/blas/blas_calls.hpp | Ilhan Polat | 2 |
| scipy/linalg/src/blas/blas_helpers.hpp | Ilhan Polat | 2 |
| scipy/linalg/src/blas/blas_l1.cpp | Ilhan Polat | 2 |
| scipy/linalg/src/blas/blas_l2.cpp | Ilhan Polat | 2 |
| scipy/linalg/src/blas/blas_l3.cpp | Ilhan Polat | 2 |
| scipy/sparse/linalg/_eigen/arpack/arnaud/Makefile | Ilhan Polat | 2 |
| scipy/integrate/src/dop.c | Ilhan Polat | 2 |
| scipy/sparse/linalg/_eigen/arpack/arnaud/README | Ilhan Polat | 2 |
| scipy/special/tests/test_gen_harmonic.py | Warren Weckesser | 2 |
| scipy/special/tests/test_powm1.py | Warren Weckesser | 2 |
| doc/source/dev/api-dev/nan_policy.rst | Warren Weckesser | 2 |
| doc/source/tutorial/stats/continuous_weibull_max.rst | Warren Weckesser | 2 |
| doc/source/tutorial/stats/continuous_weibull_min.rst | Warren Weckesser | 2 |
| doc/source/tutorial/stats/continuous_triang.rst | Warren Weckesser | 2 |
| doc/source/tutorial/stats/discrete_randint.rst | Warren Weckesser | 2 |
| scipy/sparse/linalg/_eigen/arpack/arnaud_blas_config.h | Ralf Gommers | 2 |
| scipy/sparse/linalg/_dsolve/SuperLU/SRC/creadMM.c | Ralf Gommers | 2 |
| scipy/sparse/linalg/_dsolve/SuperLU/SRC/dreadMM.c | Ralf Gommers | 2 |
| scipy/sparse/linalg/_dsolve/SuperLU/SRC/sreadMM.c | Ralf Gommers | 2 |
| scipy/sparse/linalg/_dsolve/SuperLU/SRC/zreadMM.c | Ralf Gommers | 2 |
| doc/source/dev/contributor/_code_examples/ggev_repro_gh_11577.f90 | Ralf Gommers | 2 |
| scipy/special/_mathieu.py | Albert Steppi | 2 |
| scipy/special/dd_real_wrappers.h | Albert Steppi | 2 |
| doc/source/tutorial/conftest.py | Evgeni Burovski | 2 |
| subprojects/duccfft/ducc0/fft/fft.h | mreineck | 2 |
| subprojects/duccfft/ducc0/fft/fftnd_impl.h | mreineck | 2 |
| subprojects/duccfft/ducc0/infra/misc_utils.h | mreineck | 2 |
| subprojects/duccfft/ducc0/math/pswf_rokhlin.h | mreineck | 2 |
| subprojects/duccfft/ducc0/math/unity_roots.h | mreineck | 2 |
| .github/label-title-on-close.yml | Nick ODell | 2 |
| .github/ISSUE_TEMPLATE/config.yml | Pamphile Roy | 2 |
| doc/source/reference/cluster.rst | Pamphile Roy | 2 |
| doc/source/reference/linalg.rst | Pamphile Roy | 2 |
| doc/source/reference/spatial.rst | Pamphile Roy | 2 |
| doc/source/tutorial/stats/plots/qmc_plot_sobol_halton.py | Pamphile Roy | 2 |
| doc/source/tutorial/stats/plots/qmc_plot_discrepancy.py | Pamphile Roy | 2 |
| scipy/integrate/_rules/meson.build | Olly Britton | 2 |
| scipy/_lib/ccallback.pxd | Pauli Virtanen | 2 |
| benchmarks/benchmarks/__init__.py | Pauli Virtanen | 2 |
| scipy/sparse/linalg/_isolve/__init__.py | Smit Lunagariya | 2 |
| scipy/stats/_unuran/unuran.pxd | Tirth Patel | 2 |
| doc/source/tutorial/stats/plots/hinv_plot.py | Tirth Patel | 2 |
| scipy/io/_fast_matrix_market/fast_matrix_market/include/fast_matrix_market/fast_matrix_market.hpp | Adam Lugowski | 2 |
| scipy/io/_fast_matrix_market/fast_matrix_market/include/fast_matrix_market/field_conv.hpp | Adam Lugowski | 2 |
| scipy/io/_fast_matrix_market/fast_matrix_market/include/fast_matrix_market/read_body.hpp | Adam Lugowski | 2 |
| scipy/_lib/tests/test_boost_build.cpp | Nicholas McKibben | 2 |
| scipy/_lib/_uarray/LICENSE | Peter Bell | 2 |
| doc/source/tutorial/stats/continuous_studentized_range.rst | Dominic C | 2 |
| .github/ISSUE_TEMPLATE/Feature_request.yml | Harsh Mishra | 2 |
| scipy/special/tests/test_pcf.py | Josh Wilson | 2 |
| scipy/optimize/_trlib/ctrlib.pxd | Felix Lenders | 2 |
| scipy/io/arff/tests/data/test7.arff | Sebastian Pölsterl | 2 |
| scipy/ndimage/tests/data/label_results.txt | Thouis (Ray) Jones | 2 |
| scipy/ndimage/tests/data/label_strels.txt | Thouis (Ray) Jones | 2 |
| scipy/io/arff/tests/data/test6.arff | George Lewis | 2 |
| scipy/stats/tests/test_distribution_test.py | Matt Haberland | 1 |
| doc/source/tutorial/stats/missing_data.md | Matt Haberland | 1 |
| scipy/stats/tests/test_mstats_deprecation.py | Matt Haberland | 1 |
| scipy/stats/tests/test_generation/__init__.py | Matt Haberland | 1 |
| doc/source/tutorial/stats/rv_infrastructure_1.png | Matt Haberland | 1 |
Primary owner = the author with the most commits to a file. Solely owned = files only that author has touched.
| Author | Files owned | Solely owned | Files touched |
|---|---|---|---|
| Ralf Gommers | 304 | 31 | 885 |
| Matt Haberland | 288 | 60 | 598 |
| Pauli Virtanen | 227 | 94 | 583 |
| Lucas Colley | 172 | 122 | 713 |
| Smit Lunagariya | 156 | 21 | 504 |
| Pamphile Roy | 153 | 111 | 485 |
| Warren Weckesser | 145 | 17 | 483 |
| Ilhan Polat | 102 | 39 | 252 |
| Evgeni Burovski | 95 | 17 | 473 |
| Stefan van der Walt | 72 | 1 | 365 |
| Seth Troisi | 57 | 10 | 457 |
| Andrew Nelson | 54 | 3 | 229 |
| Martin Schuck | 50 | 42 | 64 |
| Albert Steppi | 44 | 31 | 212 |
| Adam Lugowski | 42 | 38 | 61 |
| ਗਗਨਦੀਪ ਸਿੰਘ (Gagandeep Singh) | 41 | 5 | 266 |
| Tyler Reddy | 41 | 15 | 246 |
| Dan Schult | 39 | 2 | 184 |
| Matthew Brett | 38 | 32 | 170 |
| mreineck | 37 | 28 | 56 |
| Jake Bowhay | 31 | 2 | 440 |
| Melissa Weber Mendonça | 29 | 5 | 91 |
| Josh Wilson | 28 | 5 | 90 |
| Nikolay Mayorov | 25 | 0 | 70 |
| Thomas Robitaille | 22 | 21 | 25 |
Files touched by the most people — shared code where changes are most likely to need coordination.
| File | Contributors | Primary owner | Owner share |
|---|---|---|---|
| scipy/stats/tests/test_stats.py | 143 | Matt Haberland | 29.9% |
| scipy/stats/_continuous_distns.py | 131 | Warren Weckesser | 17.6% |
| scipy/stats/tests/test_distributions.py | 126 | Warren Weckesser | 15.1% |
| scipy/sparse/tests/test_base.py | 104 | Pauli Virtanen | 14.4% |
| scipy/stats/_stats_py.py | 93 | Matt Haberland | 55.3% |
| scipy/optimize/tests/test_optimize.py | 89 | Andrew Nelson | 19.5% |
| scipy/signal/tests/test_signaltools.py | 86 | Evgeni Burovski | 9.5% |
| scipy/stats/__init__.py | 86 | Matt Haberland | 26.7% |
| scipy/stats/_multivariate.py | 81 | Matt Haberland | 12.5% |
| scipy/stats/tests/test_morestats.py | 79 | Matt Haberland | 24.2% |
| scipy/stats/_distn_infrastructure.py | 76 | Matt Haberland | 23.3% |
| scipy/special/tests/test_basic.py | 63 | Pauli Virtanen | 20.2% |
| .gitignore | 62 | Ralf Gommers | 10.8% |
| scipy/linalg/tests/test_decomp.py | 60 | Evgeni Burovski | 12.2% |
| scipy/stats/tests/test_multivariate.py | 59 | Matt Haberland | 22.7% |
| scipy/interpolate/tests/test_interpolate.py | 58 | Pauli Virtanen | 21.6% |
| scipy/signal/_signaltools.py | 58 | Evgeni Burovski | 17.7% |
| scipy/stats/tests/test_mstats_basic.py | 57 | Ralf Gommers | 13.1% |
| scipy/linalg/tests/test_lapack.py | 56 | Kai Striega | 17.4% |
| scipy/stats/_morestats.py | 55 | Matt Haberland | 48.6% |
How SciPy compares with other Python open source projects →
How SciPy ranks among Python open source projects by AI-assisted commits →
Generate this report for your own repository with gitstats-action · All Gallery reports
Publishes the report to GitHub Pages on every push to main: turn on Pages for the gh-pages branch.
# .github/workflows/gitstats.yml
name: GitStats Report
on:
push:
branches: [main]
permissions:
contents: write
jobs:
gitstats:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
with:
fetch-depth: 0
- uses: shenxianpeng/gitstats-action@v1
with:
deploy-to-pages: true