Near Zero-Overhead Python Code Coverage

Overview

license pypi pyversions tests

Slipcover: Near Zero-Overhead Python Code Coverage

by Juan Altmayer Pizzorno and Emery Berger at UMass Amherst's PLASMA lab.

About Slipcover

Slipcover is a fast code coverage tool. It tracks a Python program as it runs and reports on the parts that executed and those that didn't. That can help guide your testing (showing code that isn't being tested), debugging, fuzzing or to find "dead" code.

Past code coverage tools can make programs significantly slower; it is not uncommon for them to take twice as long to execute. Slipcover aims to provide the same information with near-zero overhead, often almost as fast as running the original Python program.

How it works

Previous coverage tools like Coverage.py rely on Python's tracing facilities, which add significant overhead. Instead, Slipcover uses just-in-time instrumentation and de-instrumentation. When Slipcover gathers coverage information, it modifies the program's Python byte codes, inserting instructions that let it keep track the lines executed by the program. As the program executes, Slipcover gradually removes instrumentation that is no longer needed, allowing those parts to run at full speed. Care is taken throughout Slipcover to keep things as efficient as possible.

Performance

The image on the right shows the execution time of a few benchmarks. It compares how long they take to run while tracking coverage using Coverage.py and tracking coverage using Slipcover, relative to their normal running times.

The first two benchmarks are the test suites for scikit-learn and Flask; "sudoku" runs Peter Norvig's Sudoku solver while the others were derived from the Python Benchmark Suite.

More "Python-intensive" programs such as sudoku and those from the benchmark suite (with a larger proportion of execution time spent in Python, rather than in native code) generate more tracing events, causing more overhead in Coverage.py. While each program's structure can affect Slipcover's ability to de-instrument, its running time stays relatively close to the original, mostly at 5% or less overhead.

Accuracy

We verified Slipcover's accuracy against Coverage.py and against a simple script of our own that collects coverage using Python tracing. We found Slipcover's results to be accurate, in fact, in certain cases more accurate.

Getting started

Slipcover is available from PyPI. You can install it like any other Python module with

pip3 install slipcover

You could then run your Python script with:

python3 -m slipcover myscript.py

Using it with a test harness

Slipcover can also execute a Python module, as in:

python3 -m slipcover -m pytest -x -v

which starts pytest, passing it any options (-x -v in this example) after the module name. No plug-in is required for pytest.

Usage example

$ python3 -m slipcover -m pytest --disable-warnings
============================================================================= test session starts ==============================================================================
platform darwin -- Python 3.9.9, pytest-6.2.5, py-1.11.0, pluggy-1.0.0
rootdir: /Users/juan/project/wally/d2k-5
collected 439 items                                                                                                                                                            

tests/box_test.py .........................                                                                                                                              [  5%]
tests/image_test.py ...............                                                                                                                                      [  9%]
tests/network_equivalence_test.py .........................................s............................................................................................ [ 39%]
...................................................                                                                                                                      [ 51%]
tests/network_test.py .................................................................................................................................................. [ 84%]
....................................................................                                                                                                     [100%]

================================================================= 438 passed, 1 skipped, 53 warnings in 55.31s =================================================================

File                #lines    #missed    Cover%  Lines missing
----------------  --------  ---------  --------  ---------------------------------------------------------------------------------------------------
d2k/__init__.py          3          0       100
d2k/network.py         359          1       100  236
d2k/box.py             105         27        74  73, 142, 144-146, 148-149, 151, 154, 156-159, 161, 163-166, 168, 170-171, 173-174, 176-177, 180-181
d2k/image.py            38          4        89  70-73
tests/darknet.py       132         11        92  146, 179-181, 183-187, 189, 191
$

As can be seen in the coverage report, d2k lacks some coverage, especially in its box.py and image.py components.

Platforms

Our GitHub workflows run the automated test suite on Linux, MacOS and Windows, but really it should work anywhere where CPython does.

Contributing

Slipcover is alpha software, and under active development. Please feel free to create a new issue with any suggestions or issues you may encounter.

Acknowledgements

This material is based upon work supported by the National Science Foundation under Grant No. 1955610. Any opinions, findings, and conclusions or recommendations expressed in this material are those of the author(s) and do not necessarily reflect the views of the National Science Foundation.

Comments
  • running pytest with slipcover doesn't load plugins (was

    running pytest with slipcover doesn't load plugins (was "doesn't load pytest.ini")

    Running slipcover with pytest as described in the readme doesn't work for me; I think this is because it isn't picking up my pytest.ini file.

    Running python -m pytest works as expected; running python -m slipcover -m pytest errors — I think based on the error I'm getting it's because of the missing configuration from my pytest.ini. (I'm trying it out with a django project, which requires DJANGO_SETTINGS_MODULE to be defined when not running tests through django.)

    When I ran on a project without a pytest.ini file it worked fine.

    bug 
    opened by rlskoeser 12
  • Include pyptr.h in sdist, allow conda build config via CXX env vars.

    Include pyptr.h in sdist, allow conda build config via CXX env vars.

    Minor fixes required for builds under conda.

    • Add pyptr.h to manifest, currently missing from sdist.
    • Fix typo in setup.py extension definitions, extension wasn't being detected as c++.
    opened by asford 9
  • The slipcover.tracker module seems to be unimportable when using the Windows py38 binary wheel on Windows 10

    The slipcover.tracker module seems to be unimportable when using the Windows py38 binary wheel on Windows 10

    I created a new virtualenv using Python 3.8 on Windows 10 and installed slipcover into it, using the wheel from PyPI.

    On running python -m slipcover

    Traceback (most recent call last):
      File "C:\Users\vagrant\AppData\Local\Programs\Python\Python38\lib\runpy.py", line 192, in _run_module_as_main
        return _run_code(code, main_globals, None,
      File "C:\Users\vagrant\AppData\Local\Programs\Python\Python38\lib\runpy.py", line 85, in _run_code
        exec(code, run_globals)
      File "C:\Users\vagrant\py38\lib\site-packages\slipcover\__main__.py", line 4, in <module>
        from slipcover import slipcover as sc
      File "C:\Users\vagrant\py38\lib\site-packages\slipcover\slipcover.py", line 8, in <module>
        from . import tracker
    ImportError: DLL load failed while importing tracker: The specified module could not be found.
    

    The tracker module exists in the filesystem:

    (py38) PS C:\Users\vagrant> dir .\py38\lib\site-packages\slipcover\
    
    
        Directory: C:\Users\vagrant\py38\lib\site-packages\slipcover
    
    
    Mode                 LastWriteTime         Length Name
    ----                 -------------         ------ ----
    d-----         4/27/2022  11:17 PM                __pycache__
    -a----         4/27/2022  11:17 PM          27122 slipcover.py
    -a----         4/27/2022  11:17 PM          14848 tracker.pyd
    -a----         4/27/2022  11:17 PM              0 __init__.py
    -a----         4/27/2022  11:17 PM           7287 __main__.py
    
    bug 
    opened by exarkun 9
  • Error installing slipcover with Python 3.11

    Error installing slipcover with Python 3.11

    Hi,

    Trying to install slipcover with pip 22.3.1 and Python 3.11.0 gives an error with the following output:

    $ pip3.11 install slipcover
    Collecting slipcover
      Using cached slipcover-0.2.0.tar.gz (28 kB)
      Preparing metadata (setup.py) ... done
    Requirement already satisfied: tabulate in /usr/local/lib/python3.11/site-packages (from slipcover) (0.9.0)
    Building wheels for collected packages: slipcover
      Building wheel for slipcover (setup.py) ... error
      error: subprocess-exited-with-error
      
      × python setup.py bdist_wheel did not run successfully.
      │ exit code: 1
      ╰─> [20 lines of output]
          running bdist_wheel
          running build
          running build_py
          creating build
          creating build/lib.macosx-11-x86_64-cpython-311
          creating build/lib.macosx-11-x86_64-cpython-311/slipcover
          copying slipcover/slipcover.py -> build/lib.macosx-11-x86_64-cpython-311/slipcover
          copying slipcover/__init__.py -> build/lib.macosx-11-x86_64-cpython-311/slipcover
          copying slipcover/branch.py -> build/lib.macosx-11-x86_64-cpython-311/slipcover
          copying slipcover/bytecode.py -> build/lib.macosx-11-x86_64-cpython-311/slipcover
          copying slipcover/__main__.py -> build/lib.macosx-11-x86_64-cpython-311/slipcover
          running build_ext
          building 'slipcover.tracker' extension
          creating build/temp.macosx-11-x86_64-cpython-311
          clang -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX11.sdk -I/usr/local/opt/[email protected]/Frameworks/Python.framework/Versions/3.11/include/python3.11 -c tracker.cxx -o build/temp.macosx-11-x86_64-cpython-311/tracker.o -std=c++17 -arch x86_64 -arch arm64 -arch arm64e
          **tracker.cxx:4:10: fatal error: 'pyptr.h' file not found
          #include "pyptr.h"
                   ^~~~~~~~~
          1 error generated.
          error: command '/usr/bin/clang' failed with exit code 1**
          [end of output]
      
      note: This error originates from a subprocess, and is likely not a problem with pip.
      ERROR: Failed building wheel for slipcover
      Running setup.py clean for slipcover
    Failed to build slipcover
    Installing collected packages: slipcover
      Running setup.py install for slipcover ... error
      error: subprocess-exited-with-error
      
      × Running setup.py install for slipcover did not run successfully.
      │ exit code: 1
      ╰─> [22 lines of output]
          running install
          /usr/local/lib/python3.11/site-packages/setuptools/command/install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.
            warnings.warn(
          running build
          running build_py
          creating build
          creating build/lib.macosx-11-x86_64-cpython-311
          creating build/lib.macosx-11-x86_64-cpython-311/slipcover
          copying slipcover/slipcover.py -> build/lib.macosx-11-x86_64-cpython-311/slipcover
          copying slipcover/__init__.py -> build/lib.macosx-11-x86_64-cpython-311/slipcover
          copying slipcover/branch.py -> build/lib.macosx-11-x86_64-cpython-311/slipcover
          copying slipcover/bytecode.py -> build/lib.macosx-11-x86_64-cpython-311/slipcover
          copying slipcover/__main__.py -> build/lib.macosx-11-x86_64-cpython-311/slipcover
          running build_ext
          building 'slipcover.tracker' extension
          creating build/temp.macosx-11-x86_64-cpython-311
          clang -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX11.sdk -I/usr/local/opt/[email protected]/Frameworks/Python.framework/Versions/3.11/include/python3.11 -c tracker.cxx -o build/temp.macosx-11-x86_64-cpython-311/tracker.o -std=c++17 -arch x86_64 -arch arm64 -arch arm64e
          **tracker.cxx:4:10: fatal error: 'pyptr.h' file not found
          #include "pyptr.h"
                   ^~~~~~~~~
          1 error generated.
          error: command '/usr/bin/clang' failed with exit code 1**
          [end of output]
      
      note: This error originates from a subprocess, and is likely not a problem with pip.
    error: legacy-install-failure
    
    × Encountered error while trying to install package.
    ╰─> slipcover
    
    note: This is an issue with the package mentioned above, not pip.
    hint: See above for output from the failure.
    

    Looks to be an issue with the slipcover.tracker extension? I'm on macOS Big Sur 11.7.1 if that makes any difference. Let me know if I can provide any further information.

    bug 
    opened by dscrofts 5
  • importing subprocess hits AttributeError

    importing subprocess hits AttributeError

    Using an example test file under Python3.8.10 that only imports subprocess, I see:

    Traceback (most recent call last):
    File "/Users/wandschn/builds/22-2/build/internal/lib/python3.8/runpy.py", line 194, in _run_module_as_main
        return _run_code(code, main_globals, None,
    File "/Users/wandschn/builds/22-2/build/internal/lib/python3.8/runpy.py", line 87, in _run_code
        exec(code, run_globals)
    File "/Users/wandschn/builds/22-2/build/22-2.VE/lib/python3.8/site-packages/slipcover/__main__.py", line 199, in <module>
        exec(code, script_globals)
    File "/Users/wandschn/builds/22-2/build/mmshare-v5.8/tmp.py", line 1, in <module>
        import subprocess
    File "/Users/wandschn/builds/22-2/build/internal/lib/python3.8/subprocess.py", line 64, in <module>
        import msvcrt
    File "<frozen importlib._bootstrap>", line 991, in _find_and_load
    File "<frozen importlib._bootstrap>", line 971, in _find_and_load_unlocked
    File "<frozen importlib._bootstrap>", line 914, in _find_spec
    File "/Users/wandschn/builds/22-2/build/22-2.VE/lib/python3.8/site-packages/slipcover/__main__.py", line 40, in find_spec
        found = f.find_spec(fullname, path, target)
    AttributeError: '_SixMetaPathImporter' object has no attribute 'find_spec'
    

    I'm running on mac, the Python version is 3.8.10. The slipcover version is slipcover==0.1.3.

    bug 
    opened by d-b-w 5
  • ModuleNotFoundError: No module named '_pytest'

    ModuleNotFoundError: No module named '_pytest'

    slipcover seems to have an undeclared dependency on pytest now.

    python -m slipcover run --json --out slipcover.json -m twisted.trial sometestsuite
    

    fails:

    Traceback (most recent call last):
      File "C:\hostedtoolcache\windows\Python\3.9.12\x64\lib\runpy.py", line 197, in _run_module_as_main
        return _run_code(code, main_globals, None,
      File "C:\hostedtoolcache\windows\Python\3.9.12\x64\lib\runpy.py", line 87, in _run_code
        exec(code, run_globals)
      File "C:\hostedtoolcache\windows\Python\3.9.12\x64\lib\site-packages\slipcover\__main__.py", line 153, in <module>
        wrap_pytest()
      File "C:\hostedtoolcache\windows\Python\3.9.12\x64\lib\site-packages\slipcover\__main__.py", line 112, in wrap_pytest
        import _pytest.assertion.rewrite
    ModuleNotFoundError: No module named '_pytest'
    Error: Process completed with exit code 1.
    
    bug 
    opened by exarkun 4
  • pypy support?

    pypy support?

    hi @jaltmayerpizzorno!

    Great project, this is a fun approach! I was wondering whether you would be interested in adding PyPy support? I briefly looked, and there seems not a lot missing: The C extension seems to just work, the only problem is some detail around the way PyPy does builtin functions. If there is interest, I would be happy to open up a pull request to deal with the latter! (if not, feel free to just close the issue)

    opened by cfbolz 3
  • macOS

    macOS "universal" wheel does not contain the Apple Silicon binary

    When I try to install and run slipcover on a M1 Pro Mac, this is what I get:

    $ python3 -m venv venv
    $ venv/bin/pip install slipcover
    Collecting slipcover
      Using cached slipcover-0.1.4-cp310-cp310-macosx_10_15_universal2.whl (22 kB)
    Collecting tabulate
      Using cached tabulate-0.8.9-py3-none-any.whl (25 kB)
    Installing collected packages: tabulate, slipcover
    Successfully installed slipcover-0.1.4 tabulate-0.8.9
    
    $ venv/bin/python -m slipcover
    Traceback (most recent call last):
      File "/Users/pd/.pyenv/versions/3.10.3/lib/python3.10/runpy.py", line 196, in _run_module_as_main
        return _run_code(code, main_globals, None,
      File "/Users/pd/.pyenv/versions/3.10.3/lib/python3.10/runpy.py", line 86, in _run_code
        exec(code, run_globals)
      File "/Users/pd/tmp/venv/lib/python3.10/site-packages/slipcover/__main__.py", line 4, in <module>
        from slipcover import slipcover as sc
      File "/Users/pd/tmp/venv/lib/python3.10/site-packages/slipcover/slipcover.py", line 8, in <module>
        from . import tracker
    ImportError: dlopen(/Users/pd/tmp/venv/lib/python3.10/site-packages/slipcover/tracker.cpython-310-darwin.so, 0x0002): tried: '/Users/pd/tmp/venv/lib/python3.10/site-packages/slipcover/tracker.cpython-310-darwin.so' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e'))
    

    Apparently the slipcover-0.1.4-cp310-cp310-macosx_10_15_universal2.whl wheel is mislabeled and contains only x86 code.

    opened by pietrodn 3
  • `--fail-under` flag as in `coverage`

    `--fail-under` flag as in `coverage`

    Good day, and thank you for this very interesting project!

    I'm going to file a few issues regarding feature parity with coverage, but feel free to do with them as you wish including nothing. :-)

    Or, if you are open to pull requests, I could probably knock at least a few of them out.


    The one big reason that I cannot yet adopt slipcover in my current project is that it is missing --fail-under or some facility like that which fails when the test coverage drops below a certain level.

    I might well have missed this feature in your program of course.

    Here's the documentation: https://coverage.readthedocs.io/en/6.4.4/cmd.html#reporting

    Doesn't seem horrifyingly hard...

    enhancement 
    opened by rec 2
  • Performance numbers for 3.11

    Performance numbers for 3.11

    Not a bug, just a friendly request for more data :slightly_smiling_face:

    On https://pypi.org/project/slipcover/ you show a slowdown due to slipcover in the range 3% to 7%. Does 3.11 show a similar slowdown? And does this mean that tests run with slipcover on 3.11 outperform test without coverage on 3.10?

    opened by markshannon 2
  • Add tox test config.

    Add tox test config.

    Add a basic tox configuration to execute tests against multiple python versions in a local development environment.

    Tox is used to initialize an isolated python environment for tests, including any required external dependencies.

    This config uses tox-conda to support multiple python interpreter versions.


    Possible options:

    • [ ] Add tox notes to README.md contributor instructions.

    • [ ] Convert actions workflows to use tox for different python versions.

    • Add basic tox config for different python versions

    • Remove py311 from tox env list, currently broken

    opened by asford 1
  • Codecov compat?

    Codecov compat?

    I checked the docs, tracker, and https://docs.codecov.com/docs/supported-report-formats docs, and still couldn’t tell if any of the supported output formats (is it currently just json?) are compatible with codecov.io, so thought I’d try asking here. Thanks!

    enhancement 
    opened by jab 1
  • Document features

    Document features

    This tool looks great! I hope to see it continue to improve and reach feature parity with Coverage.py.

    It would be really useful to have each of the features you support explicitly documented, with instructions on how to use them. Currently I feel like I have to dig through the issues and source code to understand what's possible/supported.

    documentation 
    opened by LilyFoote 1
  • Support `coverage`'s `exclude_lines` setting

    Support `coverage`'s `exclude_lines` setting

    I wasn't accurate in a previous issue: this feature is also gating for my project.


    In real-world programs, there are significant quantities of code within otherwise tested files which are deliberately not unit tested due to diminishing returns and finite resources.

    coverage uses the exclude_lines configuration file setting to match lines and scopes not to be included in coverage, usually with a specific comment - docs.

    This is informative when reading code, and it also gives a more useful measure of actual coverage.

    This sounds harder than my previous issues, because of the fact it applies to scopes as well as single lines.


    coverage has a ton of other features, several of which we do use, but IMHO these two are the most important.

    Thanks again for a very promising library!

    enhancement 
    opened by rec 1
  • Read a .rc file!

    Read a .rc file!

    From reading your documentation, you could pretty well read a .coveragerc file as-is, as you've kept the same names (good idea!), though of course many .coveragerc features you don't support.

    enhancement 
    opened by rec 1
  • Functions that are expected to be empty are not empty

    Functions that are expected to be empty are not empty

    I use a library, automat that has some runtime assumptions about whether certain functions have function bodies or not.

    When I run my tests with pytest and coverage, it works as expected:

    $ python -m coverage run -m pytest
    ================================== test session starts ==================================
    platform linux -- Python 3.10.4, pytest-7.1.2, pluggy-1.0.0
    rootdir: /home/di/example
    collected 1 item
    
    test_something.py .                                                               [100%]
    
    =================================== 1 passed in 0.02s ===================================
    

    When I run it with slipcover, it causes these assumptions to fail:

     python -m slipcover -m pytest
    ================================== test session starts ==================================
    platform linux -- Python 3.10.4, pytest-7.1.2, pluggy-1.0.0
    rootdir: /home/di/example
    collected 0 items / 1 error
    
    ======================================== ERRORS =========================================
    __________________________ ERROR collecting test_something.py ___________________________
    test_something.py:1: in <module>
        from foo import Something
    <frozen importlib._bootstrap>:1027: in _find_and_load
        ???
    <frozen importlib._bootstrap>:1006: in _find_and_load_unlocked
        ???
    <frozen importlib._bootstrap>:688: in _load_unlocked
        ???
    ../.pyenv/versions/3.10.4/lib/python3.10/site-packages/slipcover/__main__.py:43: in exec_module
        exec(code, module.__dict__)
    foo.py:4: in <module>
        class Something:
    foo.py:12: in Something
        def some_input(self):
    ../.pyenv/versions/3.10.4/lib/python3.10/site-packages/automat/_methodical.py:376: in decorator
        return MethodicalInput(automaton=self._automaton,
    <attrs generated init automat._methodical.MethodicalInput>:11: in __init__
        __attr_validator_method(self, __attr_method, self.method)
    ../.pyenv/versions/3.10.4/lib/python3.10/site-packages/automat/_methodical.py:166: in assertNoCode
        raise ValueError("function body must be empty")
    E   ValueError: function body must be empty
    ================================ short test summary info ================================
    ERROR test_something.py - ValueError: function body must be empty
    !!!!!!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!!!!!!
    =================================== 1 error in 0.17s ====================================
    
    File                 #lines    #l.miss    Cover%  Missing
    -----------------  --------  ---------  --------  ---------
    foo.py                    8          1        88  15
    test_something.py         3          2        33  3-4
    

    A minimally reproducing example is below

    requirements.txt:

    automat
    coverage
    pytest
    slipcover
    

    foo.py:

    import automat
    
    
    class Something:
        _machine = automat.MethodicalMachine()
    
        @_machine.state(initial=True)
        def some_state(self):
            """Nothing"""
    
        @_machine.input()
        def some_input(self):
            """Nothing"""
    
        some_state.upon(some_input, enter=some_state, outputs=[])
    

    test_something.py:

    from foo import Something
    
    def test_something():
        Something().some_input()
    
    opened by di 1
Releases(v0.2.2)
  • v0.2.2(Dec 14, 2022)

    This release:

    • adds --skip-covered to skip fully (100%) covered files when printing coverage, suggested by @LilyFoote;
    • adds --fail-under T to have Slicover fail with a return code of 2 if the overall coverage is less than T, suggested by @rec;
    • fixes a division by 0 when printing out coverage for empty files on Python 3.11; thank you, @diceroll123!
    Source code(tar.gz)
    Source code(zip)
  • v0.2.1(Nov 21, 2022)

    This release:

    • fixes failing tests with Python 3.11;
    • adds wheels for Python 3.11;
    • adds an experimental option, --immediate, which essentially implements on-stack replacement by ignoring Python's rule that code objects should be immutable. Using it further reduces overhead, as Slipcover need not generate new code objects or update references to it. Use at your own risk... this is really only intended for research purposes;
    • fixes an include file, ironically, not being included into the source distribution;
    Source code(tar.gz)
    Source code(zip)
  • v0.2.0(Aug 24, 2022)

    This release:

    • fixes a bug causing Slipcover to move functions' docstrings when doing branch coverage, so that they could no longer be found;
    • advances version to 0.2.0 given the support for branch coverage;
    Source code(tar.gz)
    Source code(zip)
  • v0.1.9(Aug 15, 2022)

    This release:

    • adds branch coverage measuring support to slipcover; simply run it with --branch to get it.
    • adds a "meta" item identify the source of the coverage information, as well as per-file and global summaries to the JSON output (issue #2).
    Source code(tar.gz)
    Source code(zip)
  • v0.1.8(Jun 7, 2022)

    This release:

    • fixes a packaging issue omitting Python 3.11 from classifiers;
    • acknowledges pypy support, contributed by @cfbolz, and actually added in v0.1.7;
    Source code(tar.gz)
    Source code(zip)
  • v0.1.7(Jun 7, 2022)

    This release:

    • adds support for Python 3.11 (technically 3.11.0b3);
    • changes missing lines text formatting to include any non-code lines between missing ones, simplifying output and aligning it with Coverage.py;
    Source code(tar.gz)
    Source code(zip)
  • v0.1.6(May 13, 2022)

    Changes in this release:

    • fixed file filter not being used for modules loaded through pytest, including uninteresting coverage results;
    • simplified statistics gathering, also greatly improving its performance;
    Source code(tar.gz)
    Source code(zip)
  • v0.1.5(May 5, 2022)

  • v0.1.4(May 4, 2022)

    Changes in release:

    • fixed pytest plugins not being loaded, due to a conflict between how Slipcover was manipulating sys.meta_path and importlib.metadata's package detection. Note that some plugins may not yet work (notably, pytest-xdist) -- see #9.
    • added handler for MetaPathFinders that don't implement find_spec;
    Source code(tar.gz)
    Source code(zip)
  • v0.1.3(Apr 29, 2022)

    Changes in this release:

    • Fixed tracker module not always loading with Python 3.8 on Windows, due to Microsoft Studio dependencies;
    • Fixed description links on pypi;
    • Improved Python library path detection (still needs work, though);
    • Fixed missing wheels for Python 3.9 and 3.10;
    Source code(tar.gz)
    Source code(zip)
  • v0.1.2(Apr 27, 2022)

  • v0.1.1(Apr 27, 2022)

    Changes:

    • Slipcover now interposes on pytest, so that you can get coverage results on those files as well;
    • Fixed function finder not finding static and class methods (affected performance, not correctness);
    Source code(tar.gz)
    Source code(zip)
  • v0.1(Apr 21, 2022)

Owner
PLASMA @ UMass
PLASMA @ UMass
Swagger Documentation Generator for Django REST Framework: deprecated

Django REST Swagger: deprecated (2019-06-04) This project is no longer being maintained. Please consider drf-yasg as an alternative/successor. I haven

Marc Gibbons 2.6k Jan 03, 2023
Some of the best ways and practices of doing code in Python!

Pythonicness ❤ This repository contains some of the best ways and practices of doing code in Python! Features Properly formatted codes (PEP 8) for bet

Samyak Jain 2 Jan 15, 2022
Types that make coding in Python quick and safe.

Type[T] Types that make coding in Python quick and safe. Type[T] works best with Python 3.6 or later. Prior to 3.6, object types must use comment type

Contains 17 Aug 01, 2022
Some code that takes a pipe-separated input and converts that into a table!

tablemaker A program that takes an input: a | b | c # With comments as well. e | f | g h | i |jk And converts it to a table: ┌───┬───┬────┐ │ a │ b │

CodingSoda 2 Aug 30, 2022
sphinx builder that outputs markdown files.

sphinx-markdown-builder sphinx builder that outputs markdown files Please ★ this repo if you found it useful ★ ★ ★ If you want frontmatter support ple

Clay Risser 144 Jan 06, 2023
Credit EDA Case Study Using Python

This case study aims to identify patterns which indicate if a client has difficulty paying their installments which may be used for taking actions such as denying the loan, reducing the amount of loa

Purvi Padliya 1 Jan 14, 2022
Exercism exercises in Python.

Exercism exercises in Python.

Exercism 1.3k Jan 04, 2023
A simple malware that tries to explain the logic of computer viruses with Python.

Simple-Virus-With-Python A simple malware that tries to explain the logic of computer viruses with Python. What Is The Virus ? Computer viruses are ma

Xrypt0 6 Nov 18, 2022
This tutorial will guide you through the process of self-hosting Polygon

Hosting guide This tutorial will guide you through the process of self-hosting Polygon Before starting Make sure you have the following tools installe

Polygon 2 Jan 31, 2022
Demonstration that AWS IAM policy evaluation docs are incorrect

The flowchart from the AWS IAM policy evaluation documentation page, as of 2021-09-12, and dating back to at least 2018-12-27, is the following: The f

Ben Kehoe 15 Oct 21, 2022
A comprehensive and FREE Online Python Development tutorial going step-by-step into the world of Python.

FREE Reverse Engineering Self-Study Course HERE Fundamental Python The book and code repo for the FREE Fundamental Python book by Kevin Thomas. FREE B

Kevin Thomas 7 Mar 19, 2022
In this Github repository I will share my freqtrade files with you. I want to help people with this repository who don't know Freqtrade so much yet.

My Freqtrade stuff In this Github repository I will share my freqtrade files with you. I want to help people with this repository who don't know Freqt

Simon Kebekus 104 Dec 31, 2022
Repository for tutorials, examples and starter scripts for using the MTU HPC cluster

MTU-HPC-Starter Repository for tutorials, examples and starter scripts for using the MTU HPC cluster Connecting to the MTU HPC cluster Within the coll

1 Jan 31, 2022
Python-samples - This project is to help someone need some practices when learning python language

Python-samples - This project is to help someone need some practices when learning python language

Gui Chen 0 Feb 14, 2022
ACPOA plugin creation helper

ACPOA Plugin What is ACPOA ACPOA is the acronym for "Application Core for Plugin Oriented Applications". It's a tool to create flexible and extendable

Leikt Sol'Reihin 1 Oct 20, 2021
A Python library for setting up projects using tabular data.

A Python library for setting up projects using tabular data. It can create project folders, standardize delimiters, and convert files to CSV from either individual files or a directory.

0 Dec 13, 2022
Code and pre-trained models for "ReasonBert: Pre-trained to Reason with Distant Supervision", EMNLP'2021

ReasonBERT Code and pre-trained models for ReasonBert: Pre-trained to Reason with Distant Supervision, EMNLP'2021 Pretrained Models The pretrained mod

SunLab-OSU 29 Dec 19, 2022
Build AGNOS, the operating system for your comma three

agnos-builder This is the tool to build AGNOS, our Ubuntu based OS. AGNOS runs on the comma three devkit. NOTE: the edk2_tici and agnos-firmare submod

comma.ai 21 Dec 24, 2022
💡 Catatan Materi Bahasa Pemrogramman Python

Repository catatan kuliah Andika Tulus Pangestu selama belajar Dasar Pemrograman dengan Python.

0 Oct 10, 2021