Skip to main content

oscilo

Zero-invasive variable-change tracker for Python. Register a variable once and oscilo records every change it undergoes — without touching your code.

PyPI version Python License: MIT

English | 한국어

oscilo observes program execution in the background and captures how a variable evolves over time — reassignments, in-place mutations, and deletions — then writes the full history to a JSON Lines file when the program exits. The value comparison that runs on every line is delegated to a small C extension to keep the runtime overhead low.

Contents

Motivation

Inspecting variable state during debugging usually means scattering print calls through the code:

def solve(data):
    result = []
    for x in data:
        result.append(x * 2)
        print("result:", result)   # temporary, easy to forget to remove
    return result

This clutters the source, is easy to leave behind, and does not scale to hot loops. Interactive debuggers avoid the clutter but interrupt execution, which is impractical when a loop runs thousands of times.

oscilo takes a different approach: register a variable by name once, and its history is collected automatically.

import oscilo

def solve(data):
    result = []
    oscilo.register("result")   # every change to `result` from here on is recorded
    for x in data:
        result.append(x * 2)
    return result

Installation

pip install oscilo

oscilo ships a C extension. A prebuilt wheel is used when available; otherwise the extension is compiled locally, which requires a C compiler.

Building from source
pip install -e .                        # editable install (recommended for development)
pip install .                           # standard install
python setup.py build_ext --inplace     # build the C extension only

Requirements

  • Python 3.11+
  • A C compiler (GCC / Clang / MSVC) when building from source

Quick start

The public API is a single function, oscilo.register(), which takes the variable name as a string.

import oscilo

def run():
    target = [100, 200]
    oscilo.register("target")   # recorded as an "init" event

    target.append(300)          # updated (in-place mutation)
    target = "reassigned"       # updated (reassignment)
    del target                  # deleted

run()
# On exit, the history is written to oscilo.jsonl

Calling oscilo.register() multiple times adds each variable to the same monitor, and all histories are merged into a single output file:

import oscilo

def run():
    score = 10
    items = ["potion", "shield"]

    oscilo.register("score")
    oscilo.register("items")

    score += 55
    items.append("sword")

run()

Notes:

  • register() returns None; registration is its only effect.
  • Importing oscilo has no side effects — tracing starts only when register() is called.
  • If no change is ever recorded, no file is written.
  • If a tracked value cannot be deep-copied, oscilo records <uncopyable> and tracks reassignment only. In-place mutations of the same object cannot be detected because no comparison snapshot is available.

Output format

History is written as JSON Lines (oscilo.jsonl by default). Each line represents a single change:

{"name": "target", "var_id": 1, "data": [100, 200], "event": "init", "domain": "LOCAL", "line": 4, "func": "run", "call_id": 1, "parent_call_id": null, "call_depth": 1}
{"name": "target", "var_id": 1, "data": [100, 200, 300], "event": "updated", "domain": "LOCAL", "line": 6, "func": "run", "call_id": 1, "parent_call_id": null, "call_depth": 1}
{"name": "target", "var_id": 1, "data": "reassigned", "event": "updated", "domain": "LOCAL", "line": 7, "func": "run", "call_id": 1, "parent_call_id": null, "call_depth": 1}
{"name": "target", "var_id": 1, "data": null, "event": "deleted", "domain": "LOCAL", "line": 8, "func": "run", "call_id": 1, "parent_call_id": null, "call_depth": 1}
Field Description
name The tracked variable name
var_id Identity of the tracked binding; records sharing a var_id refer to the same variable (matches call_id for locals; stays stable across frames for globals and closure variables)
data The value at the time of the change (null for deleted)
event init, updated, or deleted
domain Variable scope: LOCAL or GLOBAL (a closure/enclosing variable is reported as LOCAL from its owning frame's point of view and is identified by var_id)
line Source line where the change was detected
func Function in which the change occurred (<module> at module level)
call_id Unique id of the function call (frame) where the change occurred
parent_call_id call_id of the calling frame (null for a root call)
call_depth Call depth relative to the registration frame (root = 1)

The call_id / parent_call_id / call_depth fields let a consumer reconstruct the call tree — i.e. which call each change happened in, and how the calls nest.

The line-delimited format streams and parses efficiently for large histories.

How it works

oscilo watches execution in Python and delegates value comparison to a C extension.

  1. The first register() call lazily creates a single monitor and installs a trace hook via sys.settrace.

  2. On each executed line, the C engine (oscilo_engine) determines whether a tracked variable changed, using a short-circuiting sequence:

    Variable no longer in scope?      → deleted
    Reference identity changed?       → updated   (reassignment)
    Immutable type (int/str/...)?     → unchanged (skip comparison)
    Container size changed?           → updated
    Otherwise, compare values         → updated / unchanged
    
  3. When the process exits, an atexit hook flushes the in-memory history to disk in a single write. Records are buffered rather than written per change to avoid I/O overhead.

Unchanged values produce no record, and immutable values are skipped entirely when their reference is unchanged — both are central to keeping the per-line cost low.

Project layout

src/oscilo/
├── __init__.py          # public API (register) and single-instance management
├── _core.py             # monitor implementation and atexit save logic
├── CallContext.py       # lazy call-context tracking (call_id / parent_call_id / call_depth)
├── FileWriter.py        # JSONL output
├── HistoryBuffer.py     # in-memory history buffer
├── ScopeResolver.py     # LEGB scope resolution (local/enclosing/global/builtin)
├── TraceDispatcher.py   # sys.settrace event handling
├── VariableTracker.py   # per-variable change detection and value snapshots
└── oscilo_engine.c      # C extension for value comparison

Testing

python tests/test.py

Tests are discovered from tests/ (test_*.py). Component tests run in-process, while the end-to-end scenarios (registration and process lifecycle) spawn a separate interpreter process, since atexit-driven saving and sys.settrace behavior can only be verified across a full process lifetime.

Contributing

Contributions are welcome — bug reports, feature ideas, and pull requests alike.

  • Open an issue using the bug report or feature request template.
  • Follow the checklist in .github/pull_request_template.md when submitting a PR.
  • Include tests with new features or fixes where practical.

License

MIT © 2026 sdkurjnk

Metadata

Release files for oscilo 1.0.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for oscilo 1.0.5
File Size Uploaded Provenance
oscilo-1.0.5.tar.gz 473.4 kB With provenance Details

Built distributions (wheels)

Table of built distributions (wheels) for oscilo 1.0.5
File
oscilo-1.0.5-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
oscilo-1.0.5-cp313-cp313-win32.whl CPython 3.13 CPython 3.13 Windows x86-32 Details
oscilo-1.0.5-cp313-cp313-musllinux_1_2_x86_64.whl CPython 3.13 CPython 3.13 Linux musl 1.2+ x86-64 Details
oscilo-1.0.5-cp313-cp313-musllinux_1_2_i686.whl CPython 3.13 CPython 3.13 Linux musl 1.2+ x86-32 Details
oscilo-1.0.5-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ x86-64, Linux glibc 2.5+ x86-64 Details
oscilo-1.0.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ x86-32, Linux glibc 2.5+ x86-32 Details
oscilo-1.0.5-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
oscilo-1.0.5-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
oscilo-1.0.5-cp312-cp312-win32.whl CPython 3.12 CPython 3.12 Windows x86-32 Details
oscilo-1.0.5-cp312-cp312-musllinux_1_2_x86_64.whl CPython 3.12 CPython 3.12 Linux musl 1.2+ x86-64 Details
oscilo-1.0.5-cp312-cp312-musllinux_1_2_i686.whl CPython 3.12 CPython 3.12 Linux musl 1.2+ x86-32 Details
oscilo-1.0.5-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.5+ x86-64, Linux glibc 2.17+ x86-64 Details
oscilo-1.0.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl CPython 3.12 CPython 3.12 Linux glibc 2.5+ x86-32, Linux glibc 2.17+ x86-32 Details
oscilo-1.0.5-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
oscilo-1.0.5-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
oscilo-1.0.5-cp311-cp311-win32.whl CPython 3.11 CPython 3.11 Windows x86-32 Details
oscilo-1.0.5-cp311-cp311-musllinux_1_2_x86_64.whl CPython 3.11 CPython 3.11 Linux musl 1.2+ x86-64 Details
oscilo-1.0.5-cp311-cp311-musllinux_1_2_i686.whl CPython 3.11 CPython 3.11 Linux musl 1.2+ x86-32 Details
oscilo-1.0.5-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ x86-64, Linux glibc 2.5+ x86-64 Details
oscilo-1.0.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ x86-32, Linux glibc 2.5+ x86-32 Details
oscilo-1.0.5-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details

Total release size: 1.1 MB

Release files / oscilo-1.0.5.tar.gz

Download URL oscilo-1.0.5.tar.gz
Size 473.4 kB
Tags Source
SHA-256 checksum
How to use checksums
d9e93702b37991ba9a627be8bad2d7c9d7b03b05c7b19418237f2193c2de3839
BLAKE2b-256 checksum
How to use checksums
7a22d0e7458932fcf31d1b3e2fa73f5b86540d82f328b361e8b3ef0ebcfb092a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 13, 2026.

Transparency log

Release files / oscilo-1.0.5-cp313-cp313-win_amd64.whl

Download URL oscilo-1.0.5-cp313-cp313-win_amd64.whl
Size 25.6 kB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
b1e66fbeb3454c94c526334dd4a365b6212903d88006e9ed75db31218636d895
BLAKE2b-256 checksum
How to use checksums
1b60272b00f6ec940b99c212f3bdd1d54dc0572e9290eb3a36442612f4313d10
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 13, 2026.

Transparency log

Release files / oscilo-1.0.5-cp313-cp313-win32.whl

Download URL oscilo-1.0.5-cp313-cp313-win32.whl
Size 25.4 kB
Tags CPython 3.13 Windows x86-32
SHA-256 checksum
How to use checksums
5f9e3e3a7b0e3fb69e71656193ffd26f40dc001d8f22fdde00f9e348992a5917
BLAKE2b-256 checksum
How to use checksums
4740411284fca8473fd4c825f4eab4e75d9aa03011447ce337e978f02d8cbc0c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 13, 2026.

Transparency log

Release files / oscilo-1.0.5-cp313-cp313-musllinux_1_2_x86_64.whl

Download URL oscilo-1.0.5-cp313-cp313-musllinux_1_2_x86_64.whl
Size 32.4 kB
Tags CPython 3.13 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
360923c8cf2ce66477f86dff6ec24129c5798fcb1c0cf2e6fabba95c215f9592
BLAKE2b-256 checksum
How to use checksums
0c90246174f26247c392e0759061f516a5c02763aab3e4fa0d9c85e4e32c78d6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 13, 2026.

Transparency log

Release files / oscilo-1.0.5-cp313-cp313-musllinux_1_2_i686.whl

Download URL oscilo-1.0.5-cp313-cp313-musllinux_1_2_i686.whl
Size 32.4 kB
Tags CPython 3.13 Linux musl 1.2+ x86-32
SHA-256 checksum
How to use checksums
b593f152adc38d347d0f4d059a885b9b3e6b8007956e2705f46dbb7dc4dc235c
BLAKE2b-256 checksum
How to use checksums
c17bb1f9ba6a76fc954fb02402ee17b3a9133b4034f2f6045219b9408836b16f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 13, 2026.

Transparency log

Release files / oscilo-1.0.5-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL oscilo-1.0.5-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 32.6 kB
Tags CPython 3.13 Linux glibc 2.17+ x86-64 Linux glibc 2.5+ x86-64
SHA-256 checksum
How to use checksums
e7c44f73bedfa592623b8d130c5d133e1b4ae37795c1d12453a9299ad0e96f1d
BLAKE2b-256 checksum
How to use checksums
d21fa83e6d9bc03e80cb6af12168a8ed28a44ced4a9d81d1f2a06dfd5224429d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 13, 2026.

Transparency log

Release files / oscilo-1.0.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl

Download URL oscilo-1.0.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Size 32.2 kB
Tags CPython 3.13 Linux glibc 2.17+ x86-32 Linux glibc 2.5+ x86-32
SHA-256 checksum
How to use checksums
39917fd94d43237d6579743e5a18aa7729efedced241064e1c579fe0b20781f6
BLAKE2b-256 checksum
How to use checksums
bc92e6fb17fc50246a8edb50c77b086b732775fc470b0ab5022d7f93cf9281eb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 13, 2026.

Transparency log

Release files / oscilo-1.0.5-cp313-cp313-macosx_11_0_arm64.whl

Download URL oscilo-1.0.5-cp313-cp313-macosx_11_0_arm64.whl
Size 23.5 kB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
d735cfd1a6a68e7c94b9f5f8f8c318d31735f3142843a6ebee782efe16eeb3dc
BLAKE2b-256 checksum
How to use checksums
7f68cb00798191096c9d3880ae688f33b9ca7b2273cc0784ddb657ebf52f347b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 13, 2026.

Transparency log

Release files / oscilo-1.0.5-cp312-cp312-win_amd64.whl

Download URL oscilo-1.0.5-cp312-cp312-win_amd64.whl
Size 25.6 kB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
bfec4d500fdda25c8429f4a50dc318852be7b7b3be262bdbd07027ecf0a941d8
BLAKE2b-256 checksum
How to use checksums
d340568768896a09ef3ec425715bc09945ef590450c87e8915b994479995f372
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 13, 2026.

Transparency log

Release files / oscilo-1.0.5-cp312-cp312-win32.whl

Download URL oscilo-1.0.5-cp312-cp312-win32.whl
Size 25.4 kB
Tags CPython 3.12 Windows x86-32
SHA-256 checksum
How to use checksums
45a8da3449a8bad359b54130c5b72e6cc20f044d877f0554396210bd2b55aea0
BLAKE2b-256 checksum
How to use checksums
2b63f4a993fb94d1e032a45cbffa9ed5cd71a1de8b2154474a290564c3f5f205
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 13, 2026.

Transparency log

Release files / oscilo-1.0.5-cp312-cp312-musllinux_1_2_x86_64.whl

Download URL oscilo-1.0.5-cp312-cp312-musllinux_1_2_x86_64.whl
Size 32.6 kB
Tags CPython 3.12 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
ba64eefadc1397106cdc3a8b743ee18375b37978de0826578af0e10b3763684a
BLAKE2b-256 checksum
How to use checksums
e0605d77245e10b9cfb0146ae736054d028d1be6f250456d8ab6ca47674f6418
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 13, 2026.

Transparency log

Release files / oscilo-1.0.5-cp312-cp312-musllinux_1_2_i686.whl

Download URL oscilo-1.0.5-cp312-cp312-musllinux_1_2_i686.whl
Size 32.6 kB
Tags CPython 3.12 Linux musl 1.2+ x86-32
SHA-256 checksum
How to use checksums
3c5c00e5ec7fba0ddd16354b94bf0452ef01528cb88020c1825c7e1f99582fdf
BLAKE2b-256 checksum
How to use checksums
7c319d367fa7e2cd7cdcc62ecb6fc75ad6de828cd67fc643b52f86e830e8a45b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 13, 2026.

Transparency log

Release files / oscilo-1.0.5-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL oscilo-1.0.5-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 32.8 kB
Tags CPython 3.12 Linux glibc 2.17+ x86-64 Linux glibc 2.5+ x86-64
SHA-256 checksum
How to use checksums
5da4cf80673e4325d000434604cd018af2e7e3db5d534d04ed2f42ee07be28b1
BLAKE2b-256 checksum
How to use checksums
b5840192ae36e320de139372aa65526efee2b1a04f3126f2efb97b260999df57
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 13, 2026.

Transparency log

Release files / oscilo-1.0.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl

Download URL oscilo-1.0.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Size 32.4 kB
Tags CPython 3.12 Linux glibc 2.17+ x86-32 Linux glibc 2.5+ x86-32
SHA-256 checksum
How to use checksums
faac4b567e4f79a9734d5e5c2337237eabd88a161e75b49559de30a58c01deff
BLAKE2b-256 checksum
How to use checksums
824856f356c7e5e0b37bd461712d80a4d47a05eaf4d73c6ff9e12b5c303138da
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 13, 2026.

Transparency log

Release files / oscilo-1.0.5-cp312-cp312-macosx_11_0_arm64.whl

Download URL oscilo-1.0.5-cp312-cp312-macosx_11_0_arm64.whl
Size 23.5 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
7d7b8d5a375f7cf53830e941d0bc421fce80ec5e14b0d85660a43e28cfd5e72c
BLAKE2b-256 checksum
How to use checksums
770adb30e0fef5a7cc25b38db3cc698a6479ec8558d8914ce55e4f9c741df0d9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 13, 2026.

Transparency log

Release files / oscilo-1.0.5-cp311-cp311-win_amd64.whl

Download URL oscilo-1.0.5-cp311-cp311-win_amd64.whl
Size 25.6 kB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
fe67b72ccffcdcf839b7ef77079fec21004d83eecbc0ee858ee607fb2782f1d0
BLAKE2b-256 checksum
How to use checksums
9b72b59e3606b35075ddd46cd617c451b15a4c8b356ea0d7b47e0efd16e158fd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 13, 2026.

Transparency log

Release files / oscilo-1.0.5-cp311-cp311-win32.whl

Download URL oscilo-1.0.5-cp311-cp311-win32.whl
Size 25.4 kB
Tags CPython 3.11 Windows x86-32
SHA-256 checksum
How to use checksums
3a7a46460315061c61a80d601b27ef4794ba9d2309acdf806ca85570a796b9ae
BLAKE2b-256 checksum
How to use checksums
f65a173f7748313321ac99db6da12c2fe1bb32cc25dd608f19d74762dec34167
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 13, 2026.

Transparency log

Release files / oscilo-1.0.5-cp311-cp311-musllinux_1_2_x86_64.whl

Download URL oscilo-1.0.5-cp311-cp311-musllinux_1_2_x86_64.whl
Size 32.2 kB
Tags CPython 3.11 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
8894d4e586ce9411f3e966bb7ccd04942677a6f7965f65ccffd24edf21969e55
BLAKE2b-256 checksum
How to use checksums
302728974e4895e4f03d91d270347e265d90172ac11708096ffbb0d7e33ddd45
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 13, 2026.

Transparency log

Release files / oscilo-1.0.5-cp311-cp311-musllinux_1_2_i686.whl

Download URL oscilo-1.0.5-cp311-cp311-musllinux_1_2_i686.whl
Size 32.3 kB
Tags CPython 3.11 Linux musl 1.2+ x86-32
SHA-256 checksum
How to use checksums
9e5f616b1dbc13fba6f3d79d6624d0eb897a9fced042560b0db82d0c1eaddbfa
BLAKE2b-256 checksum
How to use checksums
d9f5e5db337959768b51791f19ea535a6016ce913d6340dec98ddedc3b1f8ba3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 13, 2026.

Transparency log

Release files / oscilo-1.0.5-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL oscilo-1.0.5-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 32.4 kB
Tags CPython 3.11 Linux glibc 2.17+ x86-64 Linux glibc 2.5+ x86-64
SHA-256 checksum
How to use checksums
b4f9c5a19411c85ea94baba372f4c2c0fbae0fb5ae908ec530f3852ace94ff57
BLAKE2b-256 checksum
How to use checksums
601ffed0a32012cf9f8a080fd55fa7a0a939d72426e65d3ec5e96a3186db1d63
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 13, 2026.

Transparency log

Release files / oscilo-1.0.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl

Download URL oscilo-1.0.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Size 32.1 kB
Tags CPython 3.11 Linux glibc 2.17+ x86-32 Linux glibc 2.5+ x86-32
SHA-256 checksum
How to use checksums
f410c0988ff72e626ec79f7eac7de004f8105ec19681e885408436825104474c
BLAKE2b-256 checksum
How to use checksums
435585e0fc8c7d43c270462b7b9a8c0fd3bf2185138a4a3bb1dd44057ab85abe
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 13, 2026.

Transparency log

Release files / oscilo-1.0.5-cp311-cp311-macosx_11_0_arm64.whl

Download URL oscilo-1.0.5-cp311-cp311-macosx_11_0_arm64.whl
Size 23.4 kB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
e054d44ccdd753c1e368dc606d0bd11d739c10a40a100eb4cbc262174dd2cede
BLAKE2b-256 checksum
How to use checksums
0de60d4b9f8d097c148ce1bfd37e00a2abefbde91f0a388d0bab435ecbc749f6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 13, 2026.

Transparency log

Security for oscilo 1.0.5

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 22 files in this release have been uploaded with provenance metadata.

Select from 22 files

Attestation for oscilo-1.0.5.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 13, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page