TST: [Tracking] Improving code coverage (Python)
Author: ganesh-k13Created Aug 13, 2026Updated Sep 16, 2026
Labelssustain-2026
Current Status
Python Coverage (current)| Name | Stmts | Miss | Branch | BrPart | Cover |
|----------------------------------------------- | -------: | -------: | -------: | -------: | ------: |
| numpy/\_\_config\_\_.py | 32 | 3 | 6 | 0 | 92% |
| numpy/\_\_init\_\_.py | 191 | 47 | 66 | 17 | 72% |
| numpy/\_array\_api\_info.py | 39 | 0 | 24 | 0 | 100% |
| numpy/\_configtool.py | 20 | 20 | 8 | 0 | 0% |
| numpy/\_core/\_\_init\_\_.py | 88 | 13 | 18 | 3 | 81% |
| numpy/\_core/\_add\_newdocs.py | 235 | 0 | 4 | 0 | 100% |
| numpy/\_core/\_add\_newdocs\_scalars.py | 68 | 5 | 12 | 0 | 91% |
| numpy/\_core/\_asarray.py | 31 | 1 | 16 | 1 | 96% |
| numpy/\_core/\_dtype.py | 174 | 4 | 96 | 2 | 98% |
| numpy/\_core/\_dtype\_ctypes.py | 54 | 1 | 26 | 1 | 98% |
| numpy/\_core/\_exceptions.py | 84 | 0 | 12 | 0 | 100% |
| numpy/\_core/\_internal.py | 461 | 69 | 192 | 23 | 83% |
| numpy/\_core/\_methods.py | 142 | 3 | 72 | 2 | 98% |
| numpy/\_core/\_string\_helpers.py | 15 | 7 | 2 | 0 | 47% |
| numpy/\_core/\_type\_aliases.py | 51 | 2 | 24 | 2 | 95% |
| numpy/\_core/\_ufunc\_config.py | 72 | 5 | 8 | 1 | 92% |
| numpy/\_core/arrayprint.py | 607 | 25 | 280 | 22 | 94% |
| numpy/\_core/cversions.py | 6 | 6 | 2 | 0 | 0% |
| numpy/\_core/defchararray.py | 223 | 5 | 50 | 6 | 96% |
| numpy/\_core/einsumfunc.py | 491 | 20 | 268 | 16 | 95% |
| numpy/\_core/fromnumeric.py | 450 | 4 | 114 | 5 | 98% |
| numpy/\_core/function\_base.py | 133 | 9 | 54 | 5 | 89% |
| numpy/\_core/getlimits.py | 171 | 11 | 42 | 5 | 91% |
| numpy/\_core/memmap.py | 101 | 5 | 38 | 5 | 93% |
| numpy/\_core/multiarray.py | 110 | 0 | 6 | 0 | 100% |
| numpy/\_core/numeric.py | 477 | 29 | 136 | 9 | 92% |
| numpy/\_core/numerictypes.py | 116 | 3 | 42 | 0 | 98% |
| numpy/\_core/overrides.py | 58 | 1 | 18 | 1 | 97% |
| numpy/\_core/printoptions.py | 5 | 0 | 0 | 0 | 100% |
| numpy/\_core/records.py | 359 | 80 | 166 | 33 | 74% |
| numpy/\_core/shape\_base.py | 191 | 3 | 74 | 3 | 98% |
| numpy/\_core/strings.py | 331 | 11 | 70 | 8 | 95% |
| numpy/\_core/umath.py | 5 | 0 | 0 | 0 | 100% |
| numpy/\_distributor\_init.py | 4 | 0 | 0 | 0 | 100% |
| numpy/\_expired\_attrs\_2\_0.py | 1 | 0 | 0 | 0 | 100% |
| numpy/\_globals.py | 34 | 6 | 10 | 1 | 75% |
| numpy/\_pyinstaller/\_\_init\_\_.py | 0 | 0 | 0 | 0 | 100% |
| numpy/\_pyinstaller/hook-numpy.py | 8 | 8 | 2 | 0 | 0% |
| numpy/\_pytesttester.py | 43 | 34 | 16 | 0 | 15% |
| numpy/\_typing/\_\_init\_\_.py | 8 | 0 | 0 | 0 | 100% |
| numpy/\_typing/\_add\_docstring.py | 32 | 0 | 8 | 0 | 100% |
| numpy/\_typing/\_array\_like.py | 34 | 0 | 0 | 0 | 100% |
| numpy/\_typing/\_char\_codes.py | 49 | 0 | 0 | 0 | 100% |
| numpy/\_typing/\_dtype\_like.py | 32 | 0 | 0 | 0 | 100% |
| numpy/\_typing/\_nbit.py | 12 | 0 | 0 | 0 | 100% |
| numpy/\_typing/\_nbit\_base.py | 34 | 1 | 2 | 1 | 94% |
| numpy/\_typing/\_nested\_sequence.py | 20 | 7 | 0 | 0 | 65% |
| numpy/\_typing/\_scalars.py | 12 | 0 | 0 | 0 | 100% |
| numpy/\_typing/\_shape.py | 5 | 0 | 0 | 0 | 100% |
| numpy/\_utils/\_\_init\_\_.py | 34 | 21 | 12 | 1 | 35% |
| numpy/\_utils/\_conversions.py | 9 | 0 | 4 | 0 | 100% |
| numpy/\_utils/\_inspect.py | 67 | 33 | 32 | 4 | 44% |
| numpy/\_utils/\_pep440.py | 198 | 97 | 60 | 10 | 43% |
| numpy/char/\_\_init\_\_.py | 13 | 0 | 4 | 0 | 100% |
| numpy/core/\_\_init\_\_.py | 10 | 0 | 0 | 0 | 100% |
| numpy/core/\_dtype.py | 8 | 8 | 2 | 0 | 0% |
| numpy/core/\_dtype\_ctypes.py | 8 | 8 | 2 | 0 | 0% |
| numpy/core/\_internal.py | 13 | 7 | 2 | 0 | 40% |
| numpy/core/\_multiarray\_umath.py | 28 | 20 | 12 | 0 | 30% |
| numpy/core/\_utils.py | 8 | 0 | 2 | 0 | 100% |
| numpy/core/arrayprint.py | 8 | 0 | 2 | 0 | 100% |
| numpy/core/defchararray.py | 8 | 0 | 2 | 0 | 100% |
| numpy/core/einsumfunc.py | 8 | 0 | 2 | 0 | 100% |
| numpy/core/fromnumeric.py | 8 | 0 | 2 | 0 | 100% |
| numpy/core/function\_base.py | 8 | 0 | 2 | 0 | 100% |
| numpy/core/getlimits.py | 8 | 0 | 2 | 0 | 100% |
| numpy/core/multiarray.py | 13 | 0 | 4 | 0 | 100% |
| numpy/core/numeric.py | 9 | 0 | 2 | 0 | 100% |
| numpy/core/numerictypes.py | 8 | 0 | 2 | 0 | 100% |
| numpy/core/overrides.py | 8 | 0 | 2 | 0 | 100% |
| numpy/core/records.py | 8 | 0 | 2 | 0 | 100% |
| numpy/core/shape\_base.py | 8 | 0 | 2 | 0 | 100% |
| numpy/core/umath.py | 8 | 0 | 2 | 0 | 100% |
| numpy/ctypeslib/\_\_init\_\_.py | 1 | 0 | 0 | 0 | 100% |
| numpy/ctypeslib/\_ctypeslib.py | 232 | 34 | 98 | 13 | 85% |
| numpy/dtypes.py | 12 | 0 | 2 | 0 | 100% |
| numpy/exceptions.py | 35 | 2 | 8 | 2 | 91% |
| numpy/f2py/\_\_init\_\_.py | 19 | 0 | 2 | 0 | 100% |
| numpy/f2py/\_\_main\_\_.py | 2 | 0 | 0 | 0 | 100% |
| numpy/f2py/\_\_version\_\_.py | 1 | 0 | 0 | 0 | 100% |
| numpy/f2py/\_backends/\_\_init\_\_.py | 5 | 1 | 2 | 1 | 71% |
| numpy/f2py/\_backends/\_backend.py | 22 | 1 | 0 | 0 | 95% |
| numpy/f2py/\_backends/\_meson.py | 133 | 11 | 30 | 7 | 87% |
| numpy/f2py/\_isocbind.py | 7 | 0 | 4 | 0 | 100% |
| numpy/f2py/\_isofenv.py | 5 | 0 | 4 | 0 | 100% |
| numpy/f2py/\_src\_pyf.py | 148 | 28 | 52 | 6 | 77% |
| numpy/f2py/auxfuncs.py | 632 | 118 | 328 | 61 | 77% |
| numpy/f2py/capi\_maps.py | 500 | 237 | 306 | 48 | 50% |
| numpy/f2py/cb\_rules.py | 106 | 97 | 74 | 0 | 5% |
| numpy/f2py/cfuncs.py | 241 | 39 | 78 | 11 | 76% |
| numpy/f2py/common\_rules.py | 114 | 80 | 46 | 5 | 27% |
| numpy/f2py/crackfortran.py | 2584 | 974 | 1620 | 241 | 59% |
| numpy/f2py/diagnose.py | 46 | 41 | 6 | 1 | 12% |
| numpy/f2py/f2py2e.py | 430 | 73 | 236 | 36 | 80% |
| numpy/f2py/f90mod\_rules.py | 183 | 36 | 68 | 14 | 78% |
| numpy/f2py/func2subr.py | 270 | 49 | 170 | 31 | 79% |
| numpy/f2py/rules.py | 275 | 28 | 146 | 18 | 89% |
| numpy/f2py/symbolic.py | 1006 | 433 | 564 | 105 | 53% |
| numpy/f2py/use\_rules.py | 41 | 35 | 22 | 0 | 10% |
| numpy/fft/\_\_init\_\_.py | 8 | 0 | 0 | 0 | 100% |
| numpy/fft/\_helper.py | 46 | 2 | 12 | 2 | 93% |
| numpy/fft/\_pocketfft.py | 154 | 4 | 52 | 2 | 97% |
| numpy/lib/\_\_init\_\_.py | 19 | 3 | 6 | 3 | 76% |
| numpy/lib/\_array\_utils\_impl.py | 20 | 0 | 6 | 0 | 100% |
| numpy/lib/\_arraypad\_impl.py | 257 | 2 | 112 | 2 | 99% |
| numpy/lib/\_arraysetops\_impl.py | 288 | 3 | 100 | 1 | 99% |
| numpy/lib/\_arrayterator\_impl.py | 73 | 8 | 28 | 6 | 86% |
| numpy/lib/\_datasource.py | 177 | 25 | 54 | 7 | 82% |
| numpy/lib/\_format\_impl.py | 308 | 48 | 110 | 10 | 84% |
| numpy/lib/\_function\_base\_impl.py | 1322 | 44 | 550 | 34 | 96% |
| numpy/lib/\_histograms\_impl.py | 277 | 6 | 106 | 5 | 97% |
| numpy/lib/\_index\_tricks\_impl.py | 260 | 21 | 100 | 7 | 91% |
| numpy/lib/\_iotools.py | 350 | 31 | 152 | 14 | 89% |
| numpy/lib/\_nanfunctions\_impl.py | 346 | 14 | 160 | 15 | 94% |
| numpy/lib/\_npyio\_impl.py | 772 | 50 | 406 | 31 | 92% |
| numpy/lib/\_polynomial\_impl.py | 434 | 59 | 174 | 39 | 83% |
| numpy/lib/\_scimath\_impl.py | 79 | 38 | 8 | 0 | 47% |
| numpy/lib/\_shape\_base\_impl.py | 233 | 9 | 70 | 7 | 95% |
| numpy/lib/\_stride\_tricks\_impl.py | 102 | 0 | 38 | 1 | 99% |
| numpy/lib/\_twodim\_base\_impl.py | 196 | 11 | 52 | 6 | 92% |
| numpy/lib/\_type\_check\_impl.py | 129 | 1 | 30 | 1 | 99% |
| numpy/lib/\_ufunclike\_impl.py | 28 | 0 | 0 | 0 | 100% |
| numpy/lib/\_user\_array\_impl.py | 169 | 101 | 14 | 1 | 38% |
| numpy/lib/\_utils\_impl.py | 230 | 134 | 100 | 13 | 41% |
| numpy/lib/\_version.py | 76 | 8 | 38 | 5 | 89% |
| numpy/lib/array\_utils.py | 1 | 0 | 0 | 0 | 100% |
| numpy/lib/format.py | 1 | 0 | 0 | 0 | 100% |
| numpy/lib/introspect.py | 20 | 18 | 12 | 0 | 6% |
| numpy/lib/mixins.py | 60 | 0 | 4 | 0 | 100% |
| numpy/lib/npyio.py | 1 | 0 | 0 | 0 | 100% |
| numpy/lib/recfunctions.py | 597 | 41 | 290 | 29 | 92% |
| numpy/lib/scimath.py | 1 | 0 | 0 | 0 | 100% |
| numpy/lib/stride\_tricks.py | 1 | 0 | 0 | 0 | 100% |
| numpy/lib/user\_array.py | 1 | 0 | 0 | 0 | 100% |
| numpy/linalg/\_\_init\_\_.py | 6 | 0 | 0 | 0 | 100% |
| numpy/linalg/\_linalg.py | 713 | 22 | 234 | 11 | 97% |
| numpy/ma/\_\_init\_\_.py | 9 | 0 | 0 | 0 | 100% |
| numpy/ma/core.py | 2488 | 192 | 980 | 101 | 91% |
| numpy/ma/extras.py | 554 | 78 | 216 | 32 | 84% |
| numpy/ma/mrecords.py | 331 | 89 | 108 | 19 | 69% |
| numpy/ma/testutils.py | 125 | 28 | 54 | 12 | 73% |
| numpy/matlib.py | 45 | 4 | 8 | 4 | 85% |
| numpy/matrixlib/\_\_init\_\_.py | 6 | 0 | 0 | 0 | 100% |
| numpy/matrixlib/defmatrix.py | 238 | 13 | 92 | 13 | 92% |
| numpy/polynomial/\_\_init\_\_.py | 18 | 0 | 4 | 0 | 100% |
| numpy/polynomial/\_polybase.py | 435 | 61 | 120 | 19 | 86% |
| numpy/polynomial/chebyshev.py | 357 | 23 | 112 | 9 | 93% |
| numpy/polynomial/hermite.py | 269 | 6 | 86 | 6 | 97% |
| numpy/polynomial/hermite\_e.py | 264 | 6 | 86 | 6 | 97% |
| numpy/polynomial/laguerre.py | 254 | 5 | 80 | 5 | 97% |
| numpy/polynomial/legendre.py | 261 | 1 | 84 | 1 | 99% |
| numpy/polynomial/polynomial.py | 237 | 2 | 86 | 2 | 99% |
| numpy/polynomial/polyutils.py | 248 | 2 | 120 | 4 | 98% |
| numpy/random/\_\_init\_\_.py | 15 | 1 | 0 | 0 | 93% |
| numpy/random/\_examples/cffi/extending.py | 20 | 0 | 2 | 0 | 100% |
| numpy/random/\_examples/cffi/parse.py | 33 | 0 | 18 | 0 | 100% |
| numpy/random/\_pickle.py | 23 | 1 | 8 | 1 | 94% |
| numpy/rec/\_\_init\_\_.py | 2 | 0 | 0 | 0 | 100% |
| numpy/strings/\_\_init\_\_.py | 2 | 0 | 0 | 0 | 100% |
| numpy/testing/\_\_init\_\_.py | 9 | 0 | 0 | 0 | 100% |
| numpy/testing/\_private/\_\_init\_\_.py | 0 | 0 | 0 | 0 | 100% |
| numpy/testing/\_private/extbuild.py | 85 | 7 | 16 | 7 | 86% |
| numpy/testing/\_private/hypothesis\_helpers.py | 31 | 23 | 0 | 0 | 26% |
| numpy/testing/\_private/utils.py | 1010 | 234 | 372 | 50 | 76% |
| numpy/testing/overrides.py | 13 | 4 | 0 | 0 | 69% |
| numpy/testing/print\_coercion\_tables.py | 146 | 134 | 54 | 1 | 6% |
| numpy/typing/\_\_init\_\_.py | 22 | 4 | 6 | 3 | 75% |
| numpy/version.py | 6 | 0 | 0 | 0 | 100% |
| **TOTAL** | **28786** | **4580** | **11740** | **1334** | **81%** |Potential improvements
Note: Code coverage might not be apt for all cases, just an observation
- [Medium]
numpy/lib/_scimath_impl.py-np.emath, 47%, 38 stmts missed - [Hard]
numpy/ma- public functions with zero real test calls Verified by grep acrossnumpy/ma/tests/*:
| Function | Location | Note |
|---|---|---|
common_fill_value |
core.py |
0%, in __all__ |
masked_object |
core.py |
0% - test_core.py:5692 says # TODO: Test masked_object |
left_shift / right_shift |
core.py |
0%, in __all__ |
compress_rows / compress_cols |
extras.py |
0%, in __all__ |
vander |
extras.py |
0%, in __all__ |
get_fill_value / MaskedArray.unshare_mask / ptp |
core.py |
0% |
- [Easy]
numpy/lib/_utils_impl.py- 41%, 134 stmts missed - [Easy]
numpy/lib/introspect.py-opt_func_info - [Hard] f2py (TBD, needs deep dive)
- [Hard]
numpy/__init__.py72% (47 missed)
PR Format
Please run the coverage command and add info regarding coverage in the PR raised.
Desclaimer
I used AI to iterate over the code coverage report to arrive at above gaps.
Source: numpy/numpy