Skip to main content

odis-python

PyPI

Python bindings for the odis Formal Concept Analysis library, powered by Rust and PyO3.

Background

Formal Concept Analysis (FCA) works on formal contexts — cross-tables pairing objects with attributes via a binary incidence relation — and derives the complete lattice of formal concepts from them. odis implements the core FCA algorithms in Rust and exposes them through this Python interface. For an introduction to FCA see Uta Priss's FCA page.

Installation

Released package (PyPI)

pip install odis-python

Development build (from source)

Requires a Rust toolchain and maturin.

git clone https://github.com/domduerr/odis-python
cd odis-python
pip install maturin
maturin develop --release

Quick Start

from odis import FormalContext

ctx = FormalContext.from_file("odis/test_data/living_beings_and_water.cxt")
print(f"Objects: {ctx.objects}")
print(f"Attributes: {ctx.attributes}")
concepts = list(ctx.concepts())
print(f"Number of concepts: {len(concepts)}")

FormalContext

FormalContext stores a set of objects, a set of attributes, and a binary incidence relation mapping object–attribute pairs.

Construction

from odis import FormalContext

# Empty context
ctx = FormalContext()

# From a .cxt (Burmeister) file
ctx = FormalContext.from_file("odis/test_data/living_beings_and_water.cxt")

# From a dict mapping each object to its set of attributes
animals = FormalContext.from_dict({
    "cat":  {"has_legs", "has_fur", "can_move"},
    "fish": {"lives_in_water", "can_move"},
    "fern": {"needs_chlorophyll"},
})

The examples below all use ctx as loaded from living_beings_and_water.cxt, whose objects are fish leech, bream, frog, dog, water weeds, reed, bean and corn. Note that fish leech is one object — the animal — not two.

Introspection

n_objects, n_attributes = ctx.shape   # e.g. (8, 9)
n = len(ctx)                          # same as ctx.shape[0] — number of objects
print(ctx.objects)                    # ['fish leech', 'bream', 'frog', ...]
print(ctx.attributes)                 # ['needs water to live', ...]
print("frog" in ctx)                  # True — tests object membership
print(repr(ctx))                      # human-readable summary

Incidence Access

# Read: does object have attribute?
val = ctx["frog", "lives in water"]   # True
val = ctx["frog", "breast feeds"]     # False

# Write
ctx["frog", "lives in water"] = False
ctx["frog", "lives in water"] = True

Mutation

# Add an object with no attributes
ctx.add_object("shark")

# Add an object with some pre-set attributes. Re-using an existing name
# raises ValueError.
ctx.add_object("whale", {"needs water to live", "can move", "breast feeds"})

# Add a new attribute column
ctx.add_attribute("is_endangered")

# Remove
ctx.remove_object("shark")
ctx.remove_object("whale")
ctx.remove_attribute("is_endangered")

# Rename
ctx.rename_object("frog", "toad")
ctx.rename_attribute("needs water to live", "aquatic")

Serialisation

# Save to .cxt file
ctx.to_file("/tmp/my_context.cxt")

# Deep copy — mutations to the copy do not affect the original
copy = ctx.copy()
copy.add_object("clone_only")
assert "clone_only" not in ctx.objects

FCA Repository

Contexts published in the FCA literature can be downloaded from the FCA repository:

# Browse the catalogue
for entry in odis.repository_catalog():
    print(entry.title, entry.objects, "x", entry.attributes, entry.language)

# Load one, either by file name ...
ctx = odis.FormalContext.from_repository("livingbeings_en.cxt")

# ... or straight off a catalogue entry
entry = next(e for e in odis.repository_catalog() if e.filename == "triangles_en.cxt")
ctx = entry.load()

A RepositoryEntry carries filename, title, source, objects, attributes, language, description, note and url. Everything but filename and title is optional in the catalogue and may be None or empty. A failed download raises ConnectionError.

Derivation Operators

# Extent: the set of all objects sharing every given attribute
extent = ctx.extent(["needs water to live", "can move"])

# Intent: the set of all attributes shared by every given object.
# Names that are not in the context are dropped silently, so a typo here
# quietly computes the intent of a smaller set instead of raising.
intent = ctx.intent(["fish leech", "bream"])

# Attribute hull (closure of an attribute set under the Galois connection)
hull = ctx.attribute_hull(["needs water to live"])

# Object hull (closure of an object set)
ohull = ctx.object_hull(["frog"])

# Upper neighbor: the extent of the concept directly above the given concept
# in the lattice (the least concept with a strictly larger extent)
neighbor = ctx.upper_neighbor(["frog"])

# All results are LabelSets — iterate or convert freely
print(list(extent))        # ['bream', 'dog', 'fish leech', 'frog']
print("frog" in extent)    # True or False

Drawing Shortcut

FormalContext provides convenience methods to draw the concept lattice without instantiating a Drawing object; see Drawing for the full API.

svg_str = ctx.draw_svg("dimdraw", width=800, height=600)
drawing  = ctx.draw("dimdraw")

Concepts

FormalContext.concepts() returns a ConceptCollection (eager, indexable) or a ConceptGenerator (lazy, forward-only). Each element is a Concept with .extent and .intent properties.

# Eager (default) — all concepts materialised at once
concepts = ctx.concepts()
print(f"Found {len(concepts)} concepts")

# Access by index
first = concepts[0]
print(list(first.extent))   # objects in this concept
print(list(first.intent))   # attributes in this concept

# Iteration with unpacking
for extent, intent in concepts:
    print(list(extent), "→", list(intent))

Lazy concepts are covered under Lazy Generators & Mutation Guard.

Implications

The canonical implication basis (Duquenne–Guigues basis) is the smallest set of implications that logically entails all implications valid in the context.

basis = ctx.canonical_basis()
print(f"Basis size: {len(basis)}")

for impl in basis:
    print(list(impl.premise), "→", list(impl.conclusion))

# Access by index
imp = basis[0]
print(list(imp.premise))     # antecedent attributes
print(list(imp.conclusion))  # consequent attributes

# Optimised variant (same result, faster in practice)
basis_opt = ctx.canonical_basis_optimised()

Iterating pseudo-intents one at a time with next_preclosure:

# next_preclosure(basis, current) returns the next closed attribute set in
# lectic order. Terminates naturally when len(result) == number of attributes.
n_attrs = len(ctx.attributes)
current = frozenset()
while len(current) < n_attrs:
    nxt = ctx.next_preclosure(basis, current)
    if len(nxt) == n_attrs:
        break
    print(list(nxt))
    current = nxt

Attribute Exploration

Attribute exploration is an interactive algorithm that discovers the canonical basis by consulting an oracle (a Python callback) about whether proposed implications hold. The oracle may reject an implication by supplying a counterexample.

def my_oracle(premise, conclusion):
    """Called for each proposed implication.

    premise and conclusion are LabelSets (iterable over strings).
    Return True to accept; return (name, attrs) to reject with a counterexample.
    """
    print(f"Does: {list(premise)} → {list(conclusion)}?")
    return True  # accept everything: the result is the canonical basis

basis = ctx.attribute_exploration(my_oracle)
print(f"Discovered {len(basis)} implications")

The callback receives two LabelSet arguments — premise and conclusion:

  • Return any truthy non-tuple value (e.g. True) to accept the implication.
  • Return (name: str, attributes: Iterable[str]) to reject it with a counterexample.

When a counterexample is provided, attribute_exploration adds that object (with the given attributes) to the context and continues.

A counterexample has to be one: the object must have every attribute of the premise and miss at least one of the conclusion. An object that does not refute the implication leaves it valid, so it is proposed again — and an oracle that keeps answering with the same object never terminates. Deriving the counterexample from the premise itself is always safe:

rejected = 0

def counterexample_oracle(premise, conclusion):
    global rejected
    if "can move" in list(premise):
        rejected += 1
        # Has exactly the premise, so it misses the conclusion by construction.
        return (f"counterexample_{rejected}", set(premise))
    return True

ctx_copy = ctx.copy()
basis = ctx_copy.attribute_exploration(counterexample_oracle)
print(f"{rejected} rejected, {len(basis)} implications, {len(ctx_copy.objects)} objects")

Drawing

Poset lets you directly define a partial order. Edges describe the covering relation: (u, v) means node u is directly below node v (u ≺ v), given as 0-based indices into the node list. Cycles are rejected with ValueError.

from odis import Poset

# Diamond lattice
p = Poset(
    ["bottom", "left", "right", "top"],
    [(0, 1), (0, 2), (1, 3), (2, 3)],
)

# Quick SVG
svg = p.draw_svg("dimdraw", width=800, height=600)
with open("order.svg", "w") as f:
    f.write(svg)

# Drawing object for programmatic access
drawing = p.draw("dimdraw")
if drawing is not None:
    for node in drawing.nodes:
        print(f"{node.object_labels[0]}: ({node.x:.1f}, {node.y:.1f})")
    print(drawing.edges)   # list of (u, v) covering-relation pairs

Concept Lattice Drawings

odis can draw the concept lattice as a directed graph. Three layout algorithms are available: "dimdraw" (dimension-based, default), "sugiyama" (hierarchical) and "dimflux" (a DimDraw layout refined into an additive one by a force-directed model, which spreads the nodes away from the edges they are not part of). "dimflux" needs the objects and attributes of a concept, so it is available on a context but not on a bare Poset.

timeout_ms bounds the layout search and defaults to one second. Pass timeout_ms=None to search until the layout is a proven optimum — the cost of that proof climbs steeply with the size of the lattice, so it is opt-in.

# Quick SVG string — no intermediate Drawing object required
svg = ctx.draw_svg("dimdraw", width=800, height=600)
with open("lattice.svg", "w") as f:
    f.write(svg)
# Full Drawing object for programmatic access
drawing = ctx.draw("dimdraw")
if drawing is not None:
    print(f"Nodes: {len(drawing.nodes)}")
    print(f"Edges: {drawing.edges}")              # list of (from_idx, to_idx) tuples
    print(f"Coordinates: {drawing.coordinates}")  # raw layout (x, y) per node

    for node in drawing.nodes:
        print(f"  node {node.index}: ({node.x:.1f}, {node.y:.1f})")
        print(f"    reduced objects:    {node.object_labels}")
        print(f"    reduced attributes: {node.attribute_labels}")

    # Convert to SVG from Drawing object (useful for custom sizes)
    svg2 = drawing.to_svg(ctx, width=1200, height=800)
    with open("large_lattice.svg", "w") as f:
        f.write(svg2)

# Jupyter notebook: display inline (requires IPython)
try:
    from IPython.display import SVG, display
    display(SVG(data=svg))
except ImportError:
    pass  # not running in a notebook

DimFlux

"dimflux" starts from the DimDraw layout and projects it into the space of additive diagrams, where every concept sits at the sum of one vector per object in its extent and per attribute in its intent. A force-directed model then spreads the nodes away from the edges they are not part of, without letting them leave the cells DimDraw put them in.

Two properties follow, and both help a reader: equal steps through the lattice are drawn as equal vectors — so a distributive part of the lattice comes out as a grid of parallelograms — and concept nodes keep their distance from unrelated edges.

ctx = FormalContext.from_file("odis/test_data/living_beings_and_water.cxt")

# The same lattice under each of the three layouts
for algorithm in ("dimdraw", "sugiyama", "dimflux"):
    svg = ctx.draw_svg(algorithm, width=800, height=600)
    with open(f"lattice_{algorithm}.svg", "w") as f:
        f.write(svg)

# The additive structure shows up in the coordinates: two covering edges that
# add the same objects and drop the same attributes come out as the same vector.
from collections import defaultdict

drawing = ctx.draw("dimflux")
xy = drawing.coordinates
families = defaultdict(list)
for lower, upper in drawing.edges:
    step = (round(xy[upper][0] - xy[lower][0], 6),
            round(xy[upper][1] - xy[lower][1], 6))
    families[step].append((lower, upper))

parallel = {step: edges for step, edges in families.items() if len(edges) > 1}
print(f"{len(drawing.edges)} edges drawn as {len(families)} distinct vectors")
print(f"{len(parallel)} of those vectors are shared by more than one edge")

"dimflux" spends its search budget on the DimDraw layout it starts from, so timeout_ms trades quality against time just as it does for "dimdraw":

quick = ctx.draw("dimflux", timeout_ms=100)     # good enough to look at
better = ctx.draw("dimflux", timeout_ms=5000)   # a longer search for the base layout

Because it needs the objects and attributes behind each node, "dimflux" is available on a FormalContext but not on a bare Poset, which carries only the order.

Titanic

The Titanic algorithm enumerates iceberg concepts — concepts whose extent meets a minimum support threshold. Useful for large or sparse contexts where only frequent concepts are of interest.

from odis import FormalContext, Titanic

ctx = FormalContext.from_dict({
    "a": {"x", "y", "z"},
    "b": {"x", "y"},
    "c": {"x", "z"},
    "d": {"y", "z"},
    "e": {"x"},
})

iceberg = Titanic()

# Only enumerate concepts with at least 2 objects in their extent
top_concepts = iceberg.enumerate(ctx, min_support=2)
print(f"Iceberg concepts (support ≥ 2): {len(top_concepts)}")
for c in top_concepts:
    print(f"  extent={list(c.extent)}, intent={list(c.intent)}")

LabelSet

LabelSet is a set-like view of string labels. It is returned by derivation operators (extent, intent, attribute_hull, object_hull, upper_neighbor), implication properties (premise, conclusion), and concept properties (.extent, .intent).

intent = ctx.intent(["fish", "leech"])

# Membership test
print("can move" in intent)   # True

# Iteration — yields strings directly, no index translation needed
for attr in intent:
    print(attr)

# Convert to standard Python containers
as_list = list(intent)
as_set  = set(intent)

Lazy Generators & Mutation Guard

Passing lazy=True to concepts() or canonical_basis() returns a generator that produces one concept/implication at a time without materialising the full collection. Lazy generators hold a shared reference to the context's internal state, so any mutation while a lazy generator is alive raises RuntimeError.

ctx = FormalContext.from_file("odis/test_data/living_beings_and_water.cxt")

# Create a lazy generator
gen = ctx.concepts(lazy=True)

# Iterating is safe
first = next(gen)
print(list(first.extent))

# Mutating while the generator is alive raises RuntimeError
try:
    ctx.add_attribute("new_attr")       # raises RuntimeError
except RuntimeError as e:
    print(f"Caught: {e}")

# Release the generator first, then mutate freely
del gen
ctx.add_attribute("new_attr")          # OK

The same guard applies to canonical_basis(lazy=True) and Titanic().enumerate(ctx, ..., lazy=True).

Error Reference

Exception When raised Example trigger
FileNotFoundError .cxt file path does not exist FormalContext.from_file("missing.cxt")
OSError Other I/O error reading a file Unreadable file permissions
ValueError Malformed .cxt file Invalid Burmeister format
KeyError Unknown object or attribute name ctx["ghost", "flies"]
ValueError Duplicate object or attribute name ctx.add_object("frog") when already present
RuntimeError Mutation while a lazy generator is alive ctx.add_attribute("x") during active generator
ValueError Unknown drawing algorithm ctx.draw("unknown_algo")
ValueError Non-positive SVG dimensions ctx.draw_svg("dimdraw", -1, 600)

Metadata

Release files for odis-python 2026.9.1

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

Source distribution (sdist)

Source distribution for odis-python 2026.9.1
File Size Uploaded Provenance Actions
odis_python-2026.9.1.tar.gz 66.9 kB Without provenance Details for odis_python-2026.9.1.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for odis-python 2026.9.1
File Actions
odis_python-2026.9.1-cp314-cp314t-win_arm64.whl CPython 3.14 CPython 3.14 free-threading Windows ARM64 Details for odis_python-2026.9.1-cp314-cp314t-win_arm64.whl
odis_python-2026.9.1-cp314-cp314t-win_amd64.whl CPython 3.14 CPython 3.14 free-threading Windows x86-64 Details for odis_python-2026.9.1-cp314-cp314t-win_amd64.whl
odis_python-2026.9.1-cp314-cp314t-win32.whl CPython 3.14 CPython 3.14 free-threading Windows x86-32 Details for odis_python-2026.9.1-cp314-cp314t-win32.whl
odis_python-2026.9.1-cp314-cp314t-musllinux_1_2_x86_64.whl CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ x86-64 Details for odis_python-2026.9.1-cp314-cp314t-musllinux_1_2_x86_64.whl
odis_python-2026.9.1-cp314-cp314t-musllinux_1_2_i686.whl CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ x86-32 Details for odis_python-2026.9.1-cp314-cp314t-musllinux_1_2_i686.whl
odis_python-2026.9.1-cp314-cp314t-musllinux_1_2_armv7l.whl CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ ARMv7l Details for odis_python-2026.9.1-cp314-cp314t-musllinux_1_2_armv7l.whl
odis_python-2026.9.1-cp314-cp314t-musllinux_1_2_aarch64.whl CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ ARM64 Details for odis_python-2026.9.1-cp314-cp314t-musllinux_1_2_aarch64.whl
odis_python-2026.9.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64 Details for odis_python-2026.9.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
odis_python-2026.9.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ IBM System/390x Details for odis_python-2026.9.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl
odis_python-2026.9.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ PowerPC 64-le Details for odis_python-2026.9.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
odis_python-2026.9.1-cp314-cp314t-manylinux_2_17_i686.manylinux2014_i686.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-32 Details for odis_python-2026.9.1-cp314-cp314t-manylinux_2_17_i686.manylinux2014_i686.whl
odis_python-2026.9.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARMv7l Details for odis_python-2026.9.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
odis_python-2026.9.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARM64 Details for odis_python-2026.9.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
odis_python-2026.9.1-cp314-cp314t-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64 Details for odis_python-2026.9.1-cp314-cp314t-macosx_11_0_arm64.whl
odis_python-2026.9.1-cp314-cp314t-macosx_10_12_x86_64.whl CPython 3.14 CPython 3.14 free-threading macOS 10.12+ x86-64 Details for odis_python-2026.9.1-cp314-cp314t-macosx_10_12_x86_64.whl
odis_python-2026.9.1-cp39-abi3-win_arm64.whl CPython 3.9 abi3 Windows ARM64 Details for odis_python-2026.9.1-cp39-abi3-win_arm64.whl
odis_python-2026.9.1-cp39-abi3-win_amd64.whl CPython 3.9 abi3 Windows x86-64 Details for odis_python-2026.9.1-cp39-abi3-win_amd64.whl
odis_python-2026.9.1-cp39-abi3-win32.whl CPython 3.9 abi3 Windows x86-32 Details for odis_python-2026.9.1-cp39-abi3-win32.whl
odis_python-2026.9.1-cp39-abi3-musllinux_1_2_x86_64.whl CPython 3.9 abi3 Linux musl 1.2+ x86-64 Details for odis_python-2026.9.1-cp39-abi3-musllinux_1_2_x86_64.whl
odis_python-2026.9.1-cp39-abi3-musllinux_1_2_i686.whl CPython 3.9 abi3 Linux musl 1.2+ x86-32 Details for odis_python-2026.9.1-cp39-abi3-musllinux_1_2_i686.whl
odis_python-2026.9.1-cp39-abi3-musllinux_1_2_armv7l.whl CPython 3.9 abi3 Linux musl 1.2+ ARMv7l Details for odis_python-2026.9.1-cp39-abi3-musllinux_1_2_armv7l.whl
odis_python-2026.9.1-cp39-abi3-musllinux_1_2_aarch64.whl CPython 3.9 abi3 Linux musl 1.2+ ARM64 Details for odis_python-2026.9.1-cp39-abi3-musllinux_1_2_aarch64.whl
odis_python-2026.9.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.9 abi3 Linux glibc 2.17+ x86-64 Details for odis_python-2026.9.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
odis_python-2026.9.1-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl CPython 3.9 abi3 Linux glibc 2.17+ IBM System/390x Details for odis_python-2026.9.1-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl
odis_python-2026.9.1-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl CPython 3.9 abi3 Linux glibc 2.17+ PowerPC 64-le Details for odis_python-2026.9.1-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
odis_python-2026.9.1-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl CPython 3.9 abi3 Linux glibc 2.17+ x86-32 Details for odis_python-2026.9.1-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl
odis_python-2026.9.1-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl CPython 3.9 abi3 Linux glibc 2.17+ ARMv7l Details for odis_python-2026.9.1-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
odis_python-2026.9.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.9 abi3 Linux glibc 2.17+ ARM64 Details for odis_python-2026.9.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
odis_python-2026.9.1-cp39-abi3-macosx_11_0_arm64.whl CPython 3.9 abi3 macOS 11.0+ ARM64 Details for odis_python-2026.9.1-cp39-abi3-macosx_11_0_arm64.whl
odis_python-2026.9.1-cp39-abi3-macosx_10_12_x86_64.whl CPython 3.9 abi3 macOS 10.12+ x86-64 Details for odis_python-2026.9.1-cp39-abi3-macosx_10_12_x86_64.whl

Total release size: 70.0 MB

Release files / odis_python-2026.9.1.tar.gz

Download URL odis_python-2026.9.1.tar.gz
Size 66.9 kB
Tags Source
SHA-256 checksum
How to use checksums
c46c2da4e783bb62c6905300e96de2078dc0fce947894fa8421ea6f9f68afb82
BLAKE2b-256 checksum
How to use checksums
d9df77e2b286ea6de4e43d28bf5983f45ff8fc2903a433b3b5528e396c31a5f0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / odis_python-2026.9.1-cp314-cp314t-win_arm64.whl

Download URL odis_python-2026.9.1-cp314-cp314t-win_arm64.whl
Size 2.1 MB
Tags CPython 3.14 CPython 3.14 free-threading Windows ARM64
SHA-256 checksum
How to use checksums
ca300128675a96c072ca11f0e0cb71a208850c518dc8342bf2397f6d325d76a7
BLAKE2b-256 checksum
How to use checksums
7e39d97f5d9c08fa1d20927336f79b25b9afd0217222cf97de3c9b4e26b26d26
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / odis_python-2026.9.1-cp314-cp314t-win_amd64.whl

Download URL odis_python-2026.9.1-cp314-cp314t-win_amd64.whl
Size 2.1 MB
Tags CPython 3.14 CPython 3.14 free-threading Windows x86-64
SHA-256 checksum
How to use checksums
e2e541a9de74383e4e19e4cb349ad02205d295b8403ede0973e3359989e9c57a
BLAKE2b-256 checksum
How to use checksums
7c06d26f123b24c0778689768262d4c33e81c015687e29f7c19719ea3551fd04
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / odis_python-2026.9.1-cp314-cp314t-win32.whl

Download URL odis_python-2026.9.1-cp314-cp314t-win32.whl
Size 1.8 MB
Tags CPython 3.14 CPython 3.14 free-threading Windows x86-32
SHA-256 checksum
How to use checksums
600db26db7bb2b4d841b7b4534f54b00deb6c123c4edc15f88101ddef2f866ea
BLAKE2b-256 checksum
How to use checksums
8d9e9a03a98360d21e298e19f3e2ac3a6746d9ff2fd4f482e8c49470a0cf83ec
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / odis_python-2026.9.1-cp314-cp314t-musllinux_1_2_x86_64.whl

Download URL odis_python-2026.9.1-cp314-cp314t-musllinux_1_2_x86_64.whl
Size 2.8 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
2596e4d281b9b368a96f81bc46a8ac62d185a42ad0b7d59bbb3e00d37fdb852f
BLAKE2b-256 checksum
How to use checksums
d1e83baecd6de1370872a97db651e8a24ca69343461cabf7f7d293ccf65cceda
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / odis_python-2026.9.1-cp314-cp314t-musllinux_1_2_i686.whl

Download URL odis_python-2026.9.1-cp314-cp314t-musllinux_1_2_i686.whl
Size 2.4 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ x86-32
SHA-256 checksum
How to use checksums
86bccf3deccca3df543f2e265a7742c39e18f543e3470ef75d163ecec4342c4d
BLAKE2b-256 checksum
How to use checksums
cfb26b17656569881beccfb8779a5b4cea2746b17db84f25a21939677e831577
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / odis_python-2026.9.1-cp314-cp314t-musllinux_1_2_armv7l.whl

Download URL odis_python-2026.9.1-cp314-cp314t-musllinux_1_2_armv7l.whl
Size 2.3 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ ARMv7l
SHA-256 checksum
How to use checksums
9a5621b853f67a597acdb913ab24d19e528e64f343d7f8d48da7242fee3bafc3
BLAKE2b-256 checksum
How to use checksums
b7fc81af7c5e59580711fedd887cdf6d8ecd0e2d45a524bcaed6a5713deec26c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / odis_python-2026.9.1-cp314-cp314t-musllinux_1_2_aarch64.whl

Download URL odis_python-2026.9.1-cp314-cp314t-musllinux_1_2_aarch64.whl
Size 2.6 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
ac82f26f0a65bd596f7c1f6ad898d8666f691f0f41a824a29ee1858dafc9c4b6
BLAKE2b-256 checksum
How to use checksums
bf3c7c6a601131b1e287c39170030b7bff54543bca539f6888d7bfa81013b4c5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / odis_python-2026.9.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL odis_python-2026.9.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 2.6 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
73870413450262f9cbeb2ca57b01c201f48c7113c1a7e6ecce41904b72df7bee
BLAKE2b-256 checksum
How to use checksums
e708d6c1de3a64acc6a1bf860ff6abfa269f37712ff3f8df4f355da204a441da
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / odis_python-2026.9.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl

Download URL odis_python-2026.9.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl
Size 2.3 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ IBM System/390x
SHA-256 checksum
How to use checksums
f789b38623436cd477473082bb8812f33107bcf5a67b871895bbfb568b7b5eba
BLAKE2b-256 checksum
How to use checksums
0fd39280fef804b613456cb252c8de5db99eb03531443f3b5fe49c28027c92e4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / odis_python-2026.9.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl

Download URL odis_python-2026.9.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Size 2.4 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ PowerPC 64-le
SHA-256 checksum
How to use checksums
fc4c2079d77d5ae92a0dd00d7bd012f9c8bdbb3238664eb8e58ddbf1eaf60f4e
BLAKE2b-256 checksum
How to use checksums
8c3dbf84cc263230b107a735ff866dc98e1570f7657bfdf9c0dc9e8098e2a924
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / odis_python-2026.9.1-cp314-cp314t-manylinux_2_17_i686.manylinux2014_i686.whl

Download URL odis_python-2026.9.1-cp314-cp314t-manylinux_2_17_i686.manylinux2014_i686.whl
Size 2.2 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-32
SHA-256 checksum
How to use checksums
a9bd272ff7506a35618a06453bbfdf1ab0617273f7ba19bd558cfeb9195ae320
BLAKE2b-256 checksum
How to use checksums
0c403b6e2369dd4a73c49fc78782476147377218858b8aac9102d61f82c8058d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / odis_python-2026.9.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl

Download URL odis_python-2026.9.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Size 2.1 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARMv7l
SHA-256 checksum
How to use checksums
195ede2c3f1c5f3f828a867356d3341620ec4cfea4739533ff0c9851a97dcf10
BLAKE2b-256 checksum
How to use checksums
ab54e7cdb49435b2757e821565745f3682186e63b252dd3304b5ef67b147e412
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / odis_python-2026.9.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL odis_python-2026.9.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 2.4 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
e6e75826447a66b31a33c32bad1273fd798c687405adf7b7b5b39821b47fa4f8
BLAKE2b-256 checksum
How to use checksums
a4e6ea4962e7f9065b885d77a40d0b87854ab26fe2f4231b36fde95ba7c3fb20
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / odis_python-2026.9.1-cp314-cp314t-macosx_11_0_arm64.whl

Download URL odis_python-2026.9.1-cp314-cp314t-macosx_11_0_arm64.whl
Size 2.4 MB
Tags CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
7c546b8dfbd537ed2dd55b9aa1ac0a716278efbaa4497724e36e8cfb246b0d78
BLAKE2b-256 checksum
How to use checksums
cbc9990334442a308b431555c1650b053d8430996fb8cdecc82dff5dd8ed3957
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / odis_python-2026.9.1-cp314-cp314t-macosx_10_12_x86_64.whl

Download URL odis_python-2026.9.1-cp314-cp314t-macosx_10_12_x86_64.whl
Size 2.5 MB
Tags CPython 3.14 CPython 3.14 free-threading macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
71e67720edfce93a5e4317018c646afa7a04073aa57318eec34c3a1f39abfe8b
BLAKE2b-256 checksum
How to use checksums
bf861c640845d075a384d7444771099bc8b55b0fd363414be1d978f2e1cc8eff
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / odis_python-2026.9.1-cp39-abi3-win_arm64.whl

Download URL odis_python-2026.9.1-cp39-abi3-win_arm64.whl
Size 2.2 MB
Tags CPython 3.9 Windows ARM64 abi3
SHA-256 checksum
How to use checksums
cb48832f64378093ec1a5782b80f14754099f3221ce95e4bda5581d89d391120
BLAKE2b-256 checksum
How to use checksums
c9c534a23fd17591efb6122a2eaaf839ddd230ffdeb17b641687eb7343af705f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / odis_python-2026.9.1-cp39-abi3-win_amd64.whl

Download URL odis_python-2026.9.1-cp39-abi3-win_amd64.whl
Size 2.2 MB
Tags CPython 3.9 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
9bbe06621838d50dd1859ed4d91be052474a89fac87a83569589320435fde0c8
BLAKE2b-256 checksum
How to use checksums
6891482c1ccbc956806dbfe078fe08ad9884b7a099aa2aa6a029abfc891e5a1b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / odis_python-2026.9.1-cp39-abi3-win32.whl

Download URL odis_python-2026.9.1-cp39-abi3-win32.whl
Size 1.8 MB
Tags CPython 3.9 Windows x86-32 abi3
SHA-256 checksum
How to use checksums
319eb7283a29d552b9c00e7267066936c06145b9bb320af4bab58bb78390b8bb
BLAKE2b-256 checksum
How to use checksums
a04eff5a121e2f09eeb5669076515eeab681b5b5f44cf54439c263b8a33d264e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / odis_python-2026.9.1-cp39-abi3-musllinux_1_2_x86_64.whl

Download URL odis_python-2026.9.1-cp39-abi3-musllinux_1_2_x86_64.whl
Size 2.8 MB
Tags CPython 3.9 Linux musl 1.2+ x86-64 abi3
SHA-256 checksum
How to use checksums
7ff05697f577e245f4ebbe39a132d72a7a641f969fb459f87560a7cb27bb188c
BLAKE2b-256 checksum
How to use checksums
5146f2a8ada82b63473ba68ce4de1b431b8e4835851e85d81282be95b2db3fad
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / odis_python-2026.9.1-cp39-abi3-musllinux_1_2_i686.whl

Download URL odis_python-2026.9.1-cp39-abi3-musllinux_1_2_i686.whl
Size 2.4 MB
Tags CPython 3.9 Linux musl 1.2+ x86-32 abi3
SHA-256 checksum
How to use checksums
de72029b1997a46abda0590e596ed890ff2a8d01d9d2f46fa823316e1d14a38b
BLAKE2b-256 checksum
How to use checksums
49bb534dae64e8b3df6603847c920ddff89293fc220bedf0b12463324d477413
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / odis_python-2026.9.1-cp39-abi3-musllinux_1_2_armv7l.whl

Download URL odis_python-2026.9.1-cp39-abi3-musllinux_1_2_armv7l.whl
Size 2.3 MB
Tags CPython 3.9 Linux musl 1.2+ ARMv7l abi3
SHA-256 checksum
How to use checksums
e62901c919b7bcf99238531b5efcfd0a13db951e96ee43e8e94c92b6a0e831dd
BLAKE2b-256 checksum
How to use checksums
7e5b894f235f4f7af76b2ce941f21f903eaa755e26665e9d86e952a929591355
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / odis_python-2026.9.1-cp39-abi3-musllinux_1_2_aarch64.whl

Download URL odis_python-2026.9.1-cp39-abi3-musllinux_1_2_aarch64.whl
Size 2.6 MB
Tags CPython 3.9 Linux musl 1.2+ ARM64 abi3
SHA-256 checksum
How to use checksums
7ffaf8999a7f00a7c7c9a9483a9ef79251c039bb5aca97b4374343530066e416
BLAKE2b-256 checksum
How to use checksums
05f2f3d878995925ccd582b5a3322e398bc650551b3af99be7e0eecc04b9f4e8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / odis_python-2026.9.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL odis_python-2026.9.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 2.6 MB
Tags CPython 3.9 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
bfa36ce2cb5b539faf160e9f13f44163cd4f87d619a4b62a3f3b71fd48a91f43
BLAKE2b-256 checksum
How to use checksums
28b25f1144823761398bd5ab7143bf74e892f5a1b7347fa2a0274c9afa1cc5cb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / odis_python-2026.9.1-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl

Download URL odis_python-2026.9.1-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl
Size 2.3 MB
Tags CPython 3.9 Linux glibc 2.17+ IBM System/390x abi3
SHA-256 checksum
How to use checksums
1085e8fcb61ae6a17a2f3257c1cbf255e1adbe754d549ca7747c1a579a26d280
BLAKE2b-256 checksum
How to use checksums
3eb773096742b3d457a14decd88cc677d1d3a6081a6b3924e247833dfb324cb5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / odis_python-2026.9.1-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl

Download URL odis_python-2026.9.1-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Size 2.4 MB
Tags CPython 3.9 Linux glibc 2.17+ PowerPC 64-le abi3
SHA-256 checksum
How to use checksums
9ff3e3f1c97a4c4c78cef9ae48adfce251f5e6f40904635c156d5838ef121420
BLAKE2b-256 checksum
How to use checksums
3d68082106d50d808195cef8eceda77e93793fe5182467126eaf6d677c3873aa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / odis_python-2026.9.1-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl

Download URL odis_python-2026.9.1-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl
Size 2.2 MB
Tags CPython 3.9 Linux glibc 2.17+ x86-32 abi3
SHA-256 checksum
How to use checksums
c7d0a886475e391b1b3262fc61fd9f9a167cdfccbcbbbb1ef545376c23134f4e
BLAKE2b-256 checksum
How to use checksums
8a0d59dfd9b973c63c97cabe92bacd03ad3791d9e68114fa9055fd05c3c41fe7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / odis_python-2026.9.1-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl

Download URL odis_python-2026.9.1-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Size 2.1 MB
Tags CPython 3.9 Linux glibc 2.17+ ARMv7l abi3
SHA-256 checksum
How to use checksums
b73802c6b157fba566a6b31a4ad50eca2aaa70e72bcf334f06ef41456fe0c168
BLAKE2b-256 checksum
How to use checksums
0a16c257f1c44c06048f6dd0464831cd7dd3fabd022c55261a4fc4aa5f1a4bf9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / odis_python-2026.9.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL odis_python-2026.9.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 2.4 MB
Tags CPython 3.9 Linux glibc 2.17+ ARM64 abi3
SHA-256 checksum
How to use checksums
150f3f24a36686854df20ed0ca9823ef5ef650a7c3b8f8664dc5b1920bf131ab
BLAKE2b-256 checksum
How to use checksums
df6205dd5c92e64ce768ac73faea943d6d54b840f2927ec987d978a6fb98a8d8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / odis_python-2026.9.1-cp39-abi3-macosx_11_0_arm64.whl

Download URL odis_python-2026.9.1-cp39-abi3-macosx_11_0_arm64.whl
Size 2.4 MB
Tags CPython 3.9 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
c5071eb5847918a6085eb51410f1ea1beb2db5c0f772c5875993c5d15c3e542f
BLAKE2b-256 checksum
How to use checksums
01d30f2bde8f0e43ee97b646c608338b47eee95abc38aea247064d5ab57d1ac4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / odis_python-2026.9.1-cp39-abi3-macosx_10_12_x86_64.whl

Download URL odis_python-2026.9.1-cp39-abi3-macosx_10_12_x86_64.whl
Size 2.5 MB
Tags CPython 3.9 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
d0ef58272ce9b94fd15174c5b9d83f0ee38dd4df2cf70df26d7a7f3e39716ffd
BLAKE2b-256 checksum
How to use checksums
49539d5416179acd82f8b7beaac46b56c6bc982bcbb662b3fefc200ef11067e5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for odis-python 2026.9.1

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.

No provenance found

None of the files in this release were uploaded with provenance metadata.

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.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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