omi_physics
A renderer-agnostic, real-time rigid-body physics engine for Python, built natively on the OMI glTF physics data model. State lives in flat NumPy arrays, the whole step pipeline is vectorized, and optional compiled Cython accelerators drop in transparently for the hot paths (the contact solver and box/sphere collision).
- NumPy is the only hard dependency. No graphics library is required to simulate.
- PyOpenGL is optional — used solely by the experimental GPU compute backend
(
omi_physics.glcompute). - Deterministic on the CPU backend: the same inputs produce the same trajectory, run to run.
- Fast: sweep-and-prune broadphase, SAT/GJK narrowphase, an island-parallel sequential-impulse solver, sleeping, and a background-threaded simulation loop that overlaps with a consumer's render/IO thread.
⚠️ This code is largely LLM-written. It has a test suite and the CPU backend is deterministic, but it comes with no guarantees of correctness, accuracy, or fitness for any purpose (see
LICENSE, MIT). Review it before relying on it for anything that matters.
Install
pip install omi_physics # core engine (NumPy only)
pip install "omi_physics[gl]" # + PyOpenGL for the GPU compute backend
Prebuilt wheels ship the compiled accelerators, so no C compiler is needed. A source install without a compiler still works — the engine falls back to the identical pure-NumPy code paths.
Quick start
import numpy as np
from omi_physics import PhysicsWorld, model
world = PhysicsWorld(gravity=model.Gravity(gravity=9.81, direction=(0, -1, 0)))
# A static ground box and a dynamic box that falls onto it.
ground = world.add_shape(model.Shape.box((20, 1, 20)))
box = world.add_shape(model.Shape.box((1, 1, 1)))
wood = world.add_material(model.Material())
world.add_body(model.Motion(type=model.STATIC),
collider=model.Collider(shape=ground, physicsMaterial=wood),
position=(0, 0, 0))
falling = world.add_body(model.Motion(type=model.DYNAMIC, mass=1.0),
collider=model.Collider(shape=box, physicsMaterial=wood),
position=(0, 5, 0))
for _ in range(120): # 2 seconds at 60 Hz
world.step(1 / 60)
print(world.position[falling]) # resting on the ground
The exact
add_body/add_shapesignatures are the source of truth inworld.py; see the tests for worked examples.
Off-thread simulation
ThreadedSimulation steps the world on a daemon thread and publishes an
immutable pose snapshot each tick. A renderer reads the latest snapshot every
frame without ever blocking on the solver:
from omi_physics.threaded import ThreadedSimulation
sim = ThreadedSimulation(world, sim_hz=120)
sim.start()
# ... each render frame:
snapshot, version = sim.latest() # (position, axis_angle, awake, dynamic)
# ... on shutdown:
sim.stop()
How it works
One world.step(dt) runs this fixed-timestep pipeline over the world's
structure-of-arrays state:
flowchart LR
A[integrate forces<br/>gravity · damping · drag] --> B[refit AABBs]
B --> C[broadphase<br/>sweep & prune]
C --> D[narrowphase<br/>SAT · GJK/EPA]
D --> E[solver<br/>sequential impulse]
E --> F[joints]
F --> G[integrate positions]
G --> H[sleeping]
The data model is OMI glTF physics (model.Shape, Motion, Collider,
Material, Joint, ...), so scenes round-trip to and from glTF documents
(omi_physics.omi_gltf).
How hard something was hit
world.impact_on(body) answers what struck a body in the step just run and how
fast the two were closing along the contact when they met, in metres per second
— the number damage, a crash, an impact sound or a jolt of force feedback is
decided from.
for _ in range(steps):
world.step(1 / 120)
struck = world.impact_on(player, above=1.0, skip_static=True)
if struck is not None:
other, closing = struck
crunch(closing)
Ask once a step, not once a frame. A frame is several steps, contacts are rebuilt in each of them, and the speed on a contact is taken before the solve — because resolving a contact is precisely cancelling the velocity that measures it. Sampled a step late, a square-on impact reads as nothing while a glancing one reads almost undiminished, which is the wrong way round for anything that has to tell a crash from a scrape.
above is the speed below which a contact is not a blow. A body held against
something is closing on it slightly on every step: over one step gravity gives
it g·dt for the solver to take away again, so a box resting on the floor at
120 Hz reads about 0.08 m/s for as long as it sits there. skip_static leaves
out what a body landed on, for a caller that wants to know what it hit.
A body the game moves itself has to be told its velocity as well as its pose
(place_body, then a write to linear_velocity). Without one it is a wall:
the solver resolves against the difference between two bodies' velocities, so a
moving platform written down as still throws off whatever lands on it and reads
as having been hit at the full speed of anything that merely caught it up.
Being told when things touch
impact_on answers about one step. A game that advances the world once a frame
with advance(real_dt) runs several steps per frame, and a bounce that begins
and ends inside a frame is gone by the time the frame asks. The world can
instead record contact events on every step: one per touching pair, not one
per manifold point, with a phase of 'begin', 'persist' or 'end'.
from omi_physics.contactevents import Verdict
def on_contact(event): # called inside step(), after the solve
if event.phase == 'begin' and event.approach > 1.0:
thud(event.point, event.approach)
world.add_contact_listener(on_contact) # switches contact_reporting to 'all'
# or record them and read them once a frame, on whichever thread draws
world.contact_reporting = 'flagged'
world.report_contacts(crate) # only pairs involving flagged bodies
world.advance(frame_time)
for event in world.contact_log.drain():
...
A ContactEvent carries the pair as a and b (a.index < b.index), a
point and a normal from a to b, approach (the closing speed
impact_on compares, in m/s), impulse (the sum of the normal impulses, in
N·s, which is what a breaking strength compares against), friction_impulse,
slip (sliding speed, m/s), depth, the number of points, and the step
and time it happened at. An 'end' carries a reason: 'separated', or
'removed' when one body was taken out with remove_body.
contact_reportingis'off'(the default, and no cost),'flagged'or'all'. Reporting every pair of a resting pile of 300 boxes adds about 2% to its step.world.reports_pair(a, b)is whether the setting records the pair of body indicesaandb.report_persistadds a'persist'event for every touching pair on every step, and a'stay'for every trigger overlap. Off, a pair is still tracked and only its'begin'and'end'are reported.- Two bodies that fall asleep against each other stay touching: a crate that
settles on the floor gets a
'begin'and no'end'until something moves it off. - Trigger overlaps go into the same log as
TriggerEvent(phase, trigger, other, step, time, point), in step order with the contacts;pointis whereotherwas when the overlap was tested. A trigger'scollisionFiltersays which bodies it reacts to. - Bodies are named by
BodyRef(index, generation).world.ref(i)makes one,world.alive(ref)says whether that body is still in the world, andworld.handle_of(ref)returns thehandleit was added with. A removed body's slot is reused, and a reference to the old body never matches the new one. - The log is bounded (
ContactLog(maxlen=65536)) and counts what it discarded indropped. A world whose events go only to its listeners setsworld.log_events = False, and the log stays empty. UnderThreadedSimulation,latest_and_events()returns the newest snapshot with every event up to it, andflush_events(), called underwith_world(), publishes the events a removal logged without waiting for the next tick.with_world()is re-entrant. - A listener runs inside the step. One that raises does not stop it: the other
listeners are still called, the step (or
remove_body) finishes, and the first exception is raised fromstep()once it has. ContactEvent.pointandnormalare arrays each event owns.
A walking character has a body in the world when it is built with
CharacterController(world, ..., body=True). The body is a sensor
(add_body(..., sensor=True), world.is_sensor(i)): a kinematic capsule that
follows the character, enters trigger volumes, and has its touches with moving
bodies reported as contact events with solved=False. Nothing is solved
against a sensor, so it pushes no crate and no crate pushes it, and rays pass
through it. The controller still collides the character with the static world
itself, and while the world records contacts it reports what the capsule
begins and stops touching there (within 2 cm), with the speed it arrived at,
through world.report_contact_events.
set_contact_filter(fn) decides about a pair before it is solved, on the
step it would begin. fn receives a PairPreview (the pair, approach, the
reduced mass and the impulse the blow carries) and returns
Verdict.SOLVE, Verdict.IGNORE_STEP or Verdict.IGNORE_PAIR. A pane of
glass that breaks under the blow answers IGNORE_PAIR, and the ball carries on
through with its momentum; the pair's events arrive with solved=False.
Under 'flagged' reporting, a pair whose bodies are both unflagged is no
longer tracked, and its verdict is dropped with it: flagged again, the filter
is asked about it afresh.
What a line meets
omi_physics.raycast answers what a ray, a line of sight or a bundle of rays
meets among the world's colliders. Sensors are passed through.
from omi_physics import model
from omi_physics.raycast import bodies_along, line_of_sight, raycast, raycast_many
hit = raycast(world, origin, direction, max_distance=100.0, skip=(shooter,))
if hit is not None:
spark(hit.point, hit.normal) # the normal faces back along the ray
team_shot = model.CollisionFilter(collisionSystems=('shot',),
notCollideWithSystems=('red',))
hit = raycast(world, origin, direction, filter=team_shot)
raycastreturns the nearestRayHit(body,distance,point,normal, and on a trimesh thetriangleindex), or None. The direction need not be normalised.bodies_alongreturns every hit, nearest first;line_of_sight(world, a, b)says whether nothing lies between two points.raycast_many(world, origins, directions)casts a bundle together and returns what each ray would have answered on its own. The rays of a bundle are tested against the triangles near the box the whole bundle sweeps, in one pass ofrays × triangles, so its temporary arrays grow with both: a bundle spread across a level over a dense mesh is better cast as several.skipnames bodies the ray passes through.filteris amodel.CollisionFilterfor the ray itself: it meets only bodies whose collider's filter it collides with, in the same terms as two colliders.raycast_manyandbodies_alongtake both asraycastdoes.
Shapes in pieces, cylinders and cones
A body's collider is one shape, and Shape.compound makes one shape of
several, each placed in the body's frame. The body's origin is where its mass
is, so a part placed away from the origin is a shape hung off-centre; a
compound's mass is shared among its parts by volume.
from omi_physics import model
hammer = model.Shape.compound([
model.ShapePart(model.Shape.box((0.1, 0.1, 0.8)), position=(0.0, 0.0, 0.25)),
model.ShapePart(model.Shape.box((0.3, 0.12, 0.12)), position=(0.0, 0.0, -0.2)),
])
cone = model.Shape(type='cylinder', height=1.0, radiusBottom=0.5, radiusTop=0.0)
A cylinder has flat ends and narrows from radiusBottom to radiusTop;
zero at either end is a cone. A ray meets each part, side and end exactly. A
triangle mesh is for what does not move: two meshes make no contacts with
each other, so a moving body is given a convex shape.
Hinges, sliders and wheels
omi_physics.joints holds two bodies together in the ways a machine does.
Each joint is given its anchor and axes in world coordinates as the bodies
stand when it is added; either body may be -1, the world. Angles are in
radians, measured from where the joint was added.
from omi_physics.joints import HingeJoint, SliderJoint, TwoAxisHingeJoint
door = world.add_joint_constraint(HingeJoint(
frame, leaf, anchor=(0.0, 1.0, 0.5), axis=(0, 1, 0), lower=0.0, upper=1.6,
stop_bounce=0.2))
piston = world.add_joint_constraint(SliderJoint(
block, rod, axis=(1, 0, 0), lower=0.0, upper=0.3, motor_speed=0.5, motor_force=200.0))
wheel = world.add_joint_constraint(TwoAxisHingeJoint(
chassis, tyre, anchor=(0.8, 0.3, 1.2), axis1=(0, 1, 0), axis2=(1, 0, 0),
lower1=-0.5, upper1=0.5, motor2_speed=20.0, motor2_torque=300.0,
suspension_stiffness=30000.0, suspension_damping=2000.0))
door.angle(world), piston.separation(world), wheel.angle2_rate(world)
BallJointshares a point;HingeJointturns about one axis;SliderJointslides along one and turns about none, and itsforcepushes the bodies apart each step;UniversalJointkeeps one axis on each body at the angle they started at, so a spin is carried across;TwoAxisHingeJointis a steered, sprung wheel;MotorJointturns two bodies against each other by torques about up to three axes.- Stops (
lower,upper) throw the joint back atstop_bouncetimes its speed and take outstop_erpof an overshoot each step; equal stops lock the axis. A motor reaches its speed with at most its force or torque. - Each joint's
erp(default 0.2) is the fraction of its drift taken out a step andcfmthe give of its locked rows. Jointed bodies do not collide with each other unlesscollide_connectedis set. - The rows of every joint are solved together, warm started from the last
step, compiled where the accelerator is built.
remove_joint_constrainttakes a joint away.
Which pairs collide, and how
set_pair_rule(rule) asks rule(a, b) about each pair the world would
solve, each step: False lets them pass through each other, None leaves their
materials in charge, and a model.ContactParameters says how they meet.
belt = model.ContactParameters(friction=1.0, friction_direction=(1, 0, 0),
surface_speed=(0.8, 0.0))
world.set_pair_rule(lambda a, b: belt if conveyor in (a, b) else None)
ContactParameters carries restitution and the closing speed below which
nothing bounces, two friction coefficients and the direction of the first, a
surface speed that carries the second body across the first, slip and
softness (constraint-force mixing, metres per newton-second) and the fraction
of an overlap corrected each step. world.contact_solver exposes the
solver's iterations, slop, correction, softness and max_correction.
Pushing, spinning and resting
set_force(i, force) and set_torque(i, torque) push a body every step
until changed. set_exact_rotation(i) integrates a fast spin through its
whole angle rather than to first order. set_sleep(i, linear, angular, after) gives one body its own sleep thresholds, an infinite after keeping
it awake; sleep_linear_speed, sleep_angular_speed and sleep_time are
the world's.
Doors, lifts and platforms
A kinematic body moves at the velocity it is given and is pushed by nothing.
KinematicMover sends one to a place: set its target, call update(dt)
once a frame before advancing the world, and the body travels there at
speed metres per second and is placed exactly on the target when it
arrives. What stands on it is carried, because its motion is a velocity.
KinematicAnimator follows a pose function of time instead, for a lift that
never stops or an arm that sweeps.
from omi_physics.kinematic import KinematicMover
door = KinematicMover(world, door_index, speed=1.5)
door.target = (7.0, 3.4, -1.0) # open
...
door.update(frame_time)
world.advance(frame_time)
Driving a car
RaycastVehicle is the model every driving game uses: a rigid body with no
wheels in it, each wheel a ray cast down from where its suspension is mounted,
a spring pushing the body up off whatever the ray finds, and a patch of friction
at that point driving, braking and steering. WheelSpec says where a wheel is
and what it is for; VehicleTuning says what the pedals and the wheel are worth.
The four wheels are cast together. They all look at very nearly the same
piece of the world, so raycast_many decides which bodies are worth testing
once and asks a landscape's mesh once for the triangles near all four rather
than once per wheel; on a streamed world that is most of a physics step.
Every wheel is worked out against the same body. Four wheels push on one chassis in the same step, and they touch the ground at the same instant. Working each one out against a body the wheel before it has already moved makes the four asymmetric, and the car wanders to whichever side is worked out first — a road's width in a few seconds of straight-line acceleration, and to the other side if the wheels are listed in another order. So a step reads one stance of the body, asks every wheel about that, and applies what they all asked for together.
The air is carried by the wheels holding the car up. Drag is a force on the body, handed to the contacts so that a tyre with nothing to push against cannot hold the car back with it — and shared out by how much of the car each wheel is carrying, not in equal parts. A wheel the weight has come off under acceleration has almost no friction to spend, and an equal share of the drag spends all of it; what it gives up to find that is the sideways hold, since driving and gripping come out of one budget.
The steering lock falls with the square of the speed. A lock is chosen for a
car park — full lock at walking pace is a three-point turn — and the same lock at
forty metres a second asks for ten g and ends with the car pointing at the trees.
Halving it for every doubling of speed is not enough, because cornering is
v**2 / radius and a radius that only widens in step with the speed is a demand
that still doubles with it. Against steer_falloff_speed squared, what full lock
asks of the tyres settles at a corner they can hold instead of running away with
the speedometer, and the same touch of a key means a gentler turn the faster the
car goes (VehicleTuning.steer_lock).
A tyre does not build its side force instantly. The tread has to be laid
down and deflected, which takes a fraction of a wheel's turn — the relaxation
length, about a third of a metre on a road tyre — so a step takes out most of
the sideways scrub and not all of it (SCRUB_RELAXATION). The numerics want the
same thing: four wheels correcting one body in one step, each taking all of what
it can see, take more yaw and more roll out of the car than there was and put
some back the other way. What that looks like is a car shaking its head at the
rate of the physics loop, worst on a crowned road — which is every road, since
they are all built to drain.
A car left alone stays where it is. With nothing asked of it and barely
moving, VehicleTuning.holding newtons hold it: a parked car is in gear or on
its handbrake, and one that coasts off down a slope makes stopping anywhere but
the flat a mistake. Divided by the car's weight, that number is the steepest
grade it holds on; zero is a vehicle out of gear.
Each wheel also looks a little above itself, VehicleTuning.ground_recovery
metres of it. A wheel that only looks down cannot see ground that has come up
under the car — a lift, a moving platform, a landscape paging in at a finer
level of detail than the one the car was driving on — and a car that cannot see
the ground has no grip, no drive and nothing holding it up: it coasts, buried,
until something else notices. A wheel that finds the ground up there is pushed
back out on to it at recovery_speed, which climbs the car out rather than
firing it into the air.
See docs/ for a deep dive:
docs/ARCHITECTURE.md— components, layering, and how they fit together.docs/PIPELINE.md— the step pipeline stage by stage, with the data that flows between stages.docs/DATA-MODEL.md— the OMI data model and the structure-of-arrays world state.docs/ACCELERATORS.md— the Cython accelerators and the pure-Python fallback contract.
Working on omi_physics
git clone https://github.com/mcfletch/omi_physics
cd omi_physics
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]" # editable install, builds the accelerators
pytest -m "not serial" # the suite
pytest -m serial # the timing checks, with the machine to itself
A handful of tests measure against the clock rather than against a value — how
many characters fit in a frame, what a grid query costs — and the margin they
assert closes on a machine busy with the rest of the suite. Those carry the
serial marker, and the second pass is short. tox runs the two for you.
Handy commands:
# Rebuild the accelerators in place after editing a .pyx
python setup.py build_ext --inplace
# Force the pure-Python fallback (delete the compiled modules)
rm -f src/omi_physics/*.so
# Lint and type-check. Both read pyproject.toml for everything -- which files,
# which rules, which Python -- so there are no flags to remember and a local
# run is the same run CI makes.
ruff check
mypy
# The whole matrix -- lint, types, and both accelerator paths on every
# interpreter present
tox
tox -e lint and tox -e typecheck are the same two commands, and CI runs them
on the 3.12 row, so a merge is gated on them. ruff format is configured but is
not one of the gates: the array expressions here are laid out so the arithmetic
keeps its shape -- a cross product is three rows because it is three rows -- and
the formatter sets them as filled paragraphs of code. Line width is held by
ruff check instead.
The suite has two halves. Most of it checks the engine against scenes written
down by hand: a ball dropped three metres, a stack of five boxes, a wheel on a
slope. The tests/test_properties_*.py files check the same code against inputs
nobody wrote down — a collider with no radius, a "triangle" whose three vertices
are one point, a dozen bodies already inside one another, a hundred-kilogramme
crate resting on a hundred-gramme one — and assert only what has to hold of
every answer: that the world stays made of numbers, that a contact normal is a
direction, that separating by the depth a contact reports separates it. They are
written with hypothesis, which generates
the cases, shrinks a failure to the smallest one that still fails, and remembers
it — so a defect found once is a regression test from then on.
Hypothesis is a CPython-only test dependency: it publishes no wheel for the PyPy in the matrix. The property files skip where it is absent, and everything else runs there as before.
The accelerators are a pure speedup: every .pyx has an identical NumPy/
Python implementation the engine uses when the compiled module is absent. Tests
must pass in both configurations (with and without the .so files present).
Layout
src/omi_physics/ the engine (importable as omi_physics)
model.py OMI glTF physics data model
world.py PhysicsWorld — structure-of-arrays state + step()
backend.py NumpyBackend / GPU backend selection
glcompute.py optional GL 4.3 compute integration backend (needs PyOpenGL)
broadphase.py sweep-and-prune + dynamic AABB tree
collide.py SAT box-box, sphere tests (vectorized)
gjk.py GJK/EPA for convex shapes
narrowphase.py contact generation, routes to accelerators
solver.py island-parallel sequential-impulse contact solver
joints.py ball, hinge, slider, universal, two-axis hinge, motor joints
jointrows.py joints as rows of velocity constraints, solved together
massprops.py volume, centroid and inertia of every shape
character.py kinematic character controller
kinematic.py kinematic bodies driven along a pose, or to a target
vehicle.py raycast vehicle: suspension, drive, steering
cookery.py / hull.py shape cooking (convex hulls, trimeshes)
omi_gltf.py read/write OMI physics from glTF documents
threaded.py ThreadedSimulation — background-thread stepping
_solver_native.pyx Cython contact and joint-row solver accelerator
_collide_native.pyx Cython collision accelerator
tests/ pytest suite (pure NumPy; GPU-parity tests skip w/o GL)
test_properties_*.py property tests over generated input (hypothesis)
docs/ deep-dive documentation (Markdown + Mermaid)
License
MIT — see LICENSE. In some jurisdictions LLM generated
code cannot have any copyright assignment. The intent of the license
is that anyone anywhere can use the code for whatever purpose they
deem fit, provided that they assume any liability for that usage.
Metadata
Release files for omi-physics 0.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| omi_physics-0.4.0.tar.gz | 671.8 kB | Details |
Built distributions (wheels)
Total release size: 32.4 MB
Release files / omi_physics-0.4.0.tar.gz
| Download URL | omi_physics-0.4.0.tar.gz |
|---|---|
| Size | 671.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7101fc771799a3a495d61bb37888e02e12f08d226810df57bb18f1f8a27c1fc1
|
|
BLAKE2b-256 checksum How to use checksums |
f0b2968c719326af1e14e1f27616401938d496e088ecbaf4a771567fa59d5d88
|
| 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 Oct 16, 2026.
Transparency logRelease files / omi_physics-0.4.0-cp314-cp314-win_amd64.whl
| Download URL | omi_physics-0.4.0-cp314-cp314-win_amd64.whl |
|---|---|
| Size | 726.9 kB |
| Tags | CPython 3.14 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
827af0fbdba5e137801910b60a164374b7b5bae0aa81bd25c2ab610785a0f35d
|
|
BLAKE2b-256 checksum How to use checksums |
90ffb5b4faf69f1e2dbcbe98d6b3199aca88517b7fd9b5281787ab554918d8ed
|
| 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 Oct 16, 2026.
Transparency logRelease files / omi_physics-0.4.0-cp314-cp314-win32.whl
| Download URL | omi_physics-0.4.0-cp314-cp314-win32.whl |
|---|---|
| Size | 697.0 kB |
| Tags | CPython 3.14 Windows x86-32 |
|
SHA-256 checksum How to use checksums |
cc3b22e6ec24c016b75faabc321535287a4de35fba97099f5e2babb59ccc957c
|
|
BLAKE2b-256 checksum How to use checksums |
09db5ed7cd94ad2b6148a6a21c323285c0951a8b5ef0d19755df3100bfb17a7e
|
| 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 Oct 16, 2026.
Transparency logRelease files / omi_physics-0.4.0-cp314-cp314-musllinux_1_2_x86_64.whl
| Download URL | omi_physics-0.4.0-cp314-cp314-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 1.7 MB |
| Tags | CPython 3.14 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
40194e2bb8ffe3402695416ea6cc8811e3b31e90f4a0bc860a050932179585d6
|
|
BLAKE2b-256 checksum How to use checksums |
17dc477db0f900d6cc4ec7b62b89d1ca88e493d62dc26f7b67c793ae950325e7
|
| 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 Oct 16, 2026.
Transparency logRelease files / omi_physics-0.4.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | omi_physics-0.4.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.7 MB |
| Tags | CPython 3.14 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
1d46acabdd2441b6622cdc6e750866e5c34529cb78289eed197b75a92678a649
|
|
BLAKE2b-256 checksum How to use checksums |
fbf6ad522b0aa3abf70145c596477f5af091892f8729af6e3ebbb433a3672c08
|
| 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 Oct 16, 2026.
Transparency logRelease files / omi_physics-0.4.0-cp314-cp314-macosx_11_0_arm64.whl
| Download URL | omi_physics-0.4.0-cp314-cp314-macosx_11_0_arm64.whl |
|---|---|
| Size | 744.4 kB |
| Tags | CPython 3.14 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
b95ae4ac9b06eabc89053b2fd072e9272da6622b45c5392f8ada18e35dde2cdc
|
|
BLAKE2b-256 checksum How to use checksums |
c080edc74ec3ad8a82f3d39919a1970725f71e8397d907efb901582d00d48a48
|
| 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 Oct 16, 2026.
Transparency logRelease files / omi_physics-0.4.0-cp314-cp314-macosx_10_15_x86_64.whl
| Download URL | omi_physics-0.4.0-cp314-cp314-macosx_10_15_x86_64.whl |
|---|---|
| Size | 743.4 kB |
| Tags | CPython 3.14 macOS 10.15+ x86-64 |
|
SHA-256 checksum How to use checksums |
3b217a559121f4b864c670224ee2c6b8d779714c9a66b0b73af74f6aa2181ad7
|
|
BLAKE2b-256 checksum How to use checksums |
e72909864710e8d7750f4c30ff8a0f332c4f39028df03c7a7222be6129a6367c
|
| 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 Oct 16, 2026.
Transparency logRelease files / omi_physics-0.4.0-cp313-cp313-win_amd64.whl
| Download URL | omi_physics-0.4.0-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 724.2 kB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
483db0376e678bd58d1b4c05ea54d98fe0bc8efc64dcd65dbf9340b28bbb816d
|
|
BLAKE2b-256 checksum How to use checksums |
0f9e2e01b27c0497f7d9e3b4410f8882ed11009e7948c4ed32b136f75e5d0f9d
|
| 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 Oct 16, 2026.
Transparency logRelease files / omi_physics-0.4.0-cp313-cp313-win32.whl
| Download URL | omi_physics-0.4.0-cp313-cp313-win32.whl |
|---|---|
| Size | 695.4 kB |
| Tags | CPython 3.13 Windows x86-32 |
|
SHA-256 checksum How to use checksums |
912837d29c45828f5df45f875aa072df9aabd0697d06951e916c10cbfdc7dc1f
|
|
BLAKE2b-256 checksum How to use checksums |
5747f905b8f21c03e204b6201b980c2fed29e703060cf05a53e75367eda7b528
|
| 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 Oct 16, 2026.
Transparency logRelease files / omi_physics-0.4.0-cp313-cp313-musllinux_1_2_x86_64.whl
| Download URL | omi_physics-0.4.0-cp313-cp313-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 1.7 MB |
| Tags | CPython 3.13 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
8ea9edbb5776e595fa5bcf97030e0e3a40bf63766266fdf689fe865d8d6fc21b
|
|
BLAKE2b-256 checksum How to use checksums |
d2c2aad269ee17b3ab46f7acdaeb8c8fded71afd3636c0a5f097df789bb81a92
|
| 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 Oct 16, 2026.
Transparency logRelease files / omi_physics-0.4.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | omi_physics-0.4.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.7 MB |
| Tags | CPython 3.13 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
9c28345b21f29e267ba23b221d65f06202637937f34d5c8e30bac75f7eed24e4
|
|
BLAKE2b-256 checksum How to use checksums |
34cf7580ddfa4d26d9bda00d9eb609abba0c8702732a36518edfc436104c8246
|
| 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 Oct 16, 2026.
Transparency logRelease files / omi_physics-0.4.0-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | omi_physics-0.4.0-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 743.1 kB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
6117c88d9a3aeae7e70191952b4c01c652e6e85d17f72a6557d5ef782a4e242c
|
|
BLAKE2b-256 checksum How to use checksums |
71ae5c3c3224a91e0383009a9fa1f285d4dc8cb5027ce05a3b4677beb3ba47d4
|
| 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 Oct 16, 2026.
Transparency logRelease files / omi_physics-0.4.0-cp313-cp313-macosx_10_13_x86_64.whl
| Download URL | omi_physics-0.4.0-cp313-cp313-macosx_10_13_x86_64.whl |
|---|---|
| Size | 743.0 kB |
| Tags | CPython 3.13 macOS 10.13+ x86-64 |
|
SHA-256 checksum How to use checksums |
de86800f9e54095307ac8f11eaead947f45164ef520966edbbc8c35db25d2766
|
|
BLAKE2b-256 checksum How to use checksums |
014f3bafdff0945640dd8c537c7da1b6a1167c5c6a58b87ef44be7d7f3cf0e73
|
| 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 Oct 16, 2026.
Transparency logRelease files / omi_physics-0.4.0-cp312-cp312-win_amd64.whl
| Download URL | omi_physics-0.4.0-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 725.0 kB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
d5bb0ddc278abdc5181f6fd90ba95d202bdb17bbed4f6f2a2793c2ff1d0fad70
|
|
BLAKE2b-256 checksum How to use checksums |
a67a28b7a3d7e5916df738e8fec6b55007988bbde7048613a7f7f316db52c358
|
| 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 Oct 16, 2026.
Transparency logRelease files / omi_physics-0.4.0-cp312-cp312-win32.whl
| Download URL | omi_physics-0.4.0-cp312-cp312-win32.whl |
|---|---|
| Size | 695.6 kB |
| Tags | CPython 3.12 Windows x86-32 |
|
SHA-256 checksum How to use checksums |
bea84d033ea4c0d4d26530a8ff17a4a45719e6115c0947b3e4a3753e028f3dbb
|
|
BLAKE2b-256 checksum How to use checksums |
bff06866ec27349b8f8c47dedc5451960a83418d82b38e89420ca0db39193821
|
| 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 Oct 16, 2026.
Transparency logRelease files / omi_physics-0.4.0-cp312-cp312-musllinux_1_2_x86_64.whl
| Download URL | omi_physics-0.4.0-cp312-cp312-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 1.7 MB |
| Tags | CPython 3.12 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
980ab68696fdadff824eaea66c2326c84fe767177e27490a92699d82096d3597
|
|
BLAKE2b-256 checksum How to use checksums |
1e9ff290eae393979c2bebba31d8bc6abcc29eb4fc47d844aa54f321217740f8
|
| 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 Oct 16, 2026.
Transparency logRelease files / omi_physics-0.4.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | omi_physics-0.4.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.7 MB |
| Tags | CPython 3.12 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
9c7def6d51a38c94f4325cbfe0459b3858167845148bb9dd5eb0f88b31ae2331
|
|
BLAKE2b-256 checksum How to use checksums |
b1eb7da7fe7dfa9ac6992421e16b954f4c934f9254e854fcd6a844c288cb0616
|
| 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 Oct 16, 2026.
Transparency logRelease files / omi_physics-0.4.0-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | omi_physics-0.4.0-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 743.8 kB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
1299eb72ae7a88d0105ab2130c49c329e6cee58d112ccfca127aadc3d87b86ef
|
|
BLAKE2b-256 checksum How to use checksums |
d6813de341f309d9b4990450ec6bcb43fd5f7ba5b69aefc6aa2da91efdf04c9a
|
| 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 Oct 16, 2026.
Transparency logRelease files / omi_physics-0.4.0-cp312-cp312-macosx_10_13_x86_64.whl
| Download URL | omi_physics-0.4.0-cp312-cp312-macosx_10_13_x86_64.whl |
|---|---|
| Size | 743.1 kB |
| Tags | CPython 3.12 macOS 10.13+ x86-64 |
|
SHA-256 checksum How to use checksums |
e0bb34e974ea4288043aa0b1d490f5577cdae0b8d41e69b408932f87705fdb41
|
|
BLAKE2b-256 checksum How to use checksums |
7b71d829a24aa5140c86ff970fd8ff1acd8c20cc1c345a4fddcf3f18fdcff20d
|
| 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 Oct 16, 2026.
Transparency logRelease files / omi_physics-0.4.0-cp311-cp311-win_amd64.whl
| Download URL | omi_physics-0.4.0-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 723.2 kB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
343a592926e068c8d3bc1eba2f3f76b11291242b358ae7588fff3b6f90a5fcac
|
|
BLAKE2b-256 checksum How to use checksums |
8070b28fcd545849ae5dbfa1fa583c9818fbd9dbe66993559970adf8f8611bb1
|
| 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 Oct 16, 2026.
Transparency logRelease files / omi_physics-0.4.0-cp311-cp311-win32.whl
| Download URL | omi_physics-0.4.0-cp311-cp311-win32.whl |
|---|---|
| Size | 693.7 kB |
| Tags | CPython 3.11 Windows x86-32 |
|
SHA-256 checksum How to use checksums |
ded0498a60f927a170dc50eef5dc2ac22dd94c682734ce8470ea205c222d35e3
|
|
BLAKE2b-256 checksum How to use checksums |
938daa2de651b0b895a79474f8de3760bff63c7e25bb24383b48a33bef174a6a
|
| 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 Oct 16, 2026.
Transparency logRelease files / omi_physics-0.4.0-cp311-cp311-musllinux_1_2_x86_64.whl
| Download URL | omi_physics-0.4.0-cp311-cp311-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 1.7 MB |
| Tags | CPython 3.11 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
2a1f2bddee9ab603e310d4d847efdc9f499523e06401150574ad638705efd8c7
|
|
BLAKE2b-256 checksum How to use checksums |
a9f2724e6c24d59bcb1595eaeea535c8f14067dbbc309565eaea43a1e7e8a4e7
|
| 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 Oct 16, 2026.
Transparency logRelease files / omi_physics-0.4.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | omi_physics-0.4.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.7 MB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
7ffa00ce2c0fd3d18909e63bff6275ce8a6bc2ae8249d2ad2aab9d3fa64f90cd
|
|
BLAKE2b-256 checksum How to use checksums |
547157c86d7a7534ab151a3819c55a3223a6785511e9644ffed43c998f1b5ce1
|
| 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 Oct 16, 2026.
Transparency logRelease files / omi_physics-0.4.0-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | omi_physics-0.4.0-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 743.0 kB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
e0538cc780fc5703dfb4414cf2267e3b5d03120f447df77251a4e9e387aef475
|
|
BLAKE2b-256 checksum How to use checksums |
be8ffa272192cf1a776f70a5ac358627f6ab08cefe285a9ad12360594f554ca8
|
| 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 Oct 16, 2026.
Transparency logRelease files / omi_physics-0.4.0-cp311-cp311-macosx_10_9_x86_64.whl
| Download URL | omi_physics-0.4.0-cp311-cp311-macosx_10_9_x86_64.whl |
|---|---|
| Size | 741.3 kB |
| Tags | CPython 3.11 macOS 10.9+ x86-64 |
|
SHA-256 checksum How to use checksums |
ff58e27f105cb7a1957af4b6167460a2acd95ea30130bfa88743bcc272ce6807
|
|
BLAKE2b-256 checksum How to use checksums |
0bcd12af730aa67765743a5a583bf811caeec70b7b8de13cfb2bdcaa43416703
|
| 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 Oct 16, 2026.
Transparency logRelease files / omi_physics-0.4.0-cp310-cp310-win_amd64.whl
| Download URL | omi_physics-0.4.0-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 723.8 kB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
836724b4377311fcc91b291d86bc4a468517b1f1498e91f69a5ed6c7009678ce
|
|
BLAKE2b-256 checksum How to use checksums |
5eefbd6114b859ba89c8a5e489ca4a2666e3387d8cfa324b05641c32b713b290
|
| 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 Oct 16, 2026.
Transparency logRelease files / omi_physics-0.4.0-cp310-cp310-win32.whl
| Download URL | omi_physics-0.4.0-cp310-cp310-win32.whl |
|---|---|
| Size | 694.7 kB |
| Tags | CPython 3.10 Windows x86-32 |
|
SHA-256 checksum How to use checksums |
d7b6b697601b242cf2bdc4e7bcbcfc5121b32a7ec1d788aa0ce51709f3c4ecbc
|
|
BLAKE2b-256 checksum How to use checksums |
2433a4400ab872bfe59239a639e4635dcb511834dbb860b2d9394101ee47f438
|
| 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 Oct 16, 2026.
Transparency logRelease files / omi_physics-0.4.0-cp310-cp310-musllinux_1_2_x86_64.whl
| Download URL | omi_physics-0.4.0-cp310-cp310-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 1.7 MB |
| Tags | CPython 3.10 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
62806ec8ad4b8613b890cf01fb375313937b54dfb571c07dbead43fb60e15cd3
|
|
BLAKE2b-256 checksum How to use checksums |
cd2e0365fcee705e135066dde946f9748a2175921951930168607b83d37be317
|
| 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 Oct 16, 2026.
Transparency logRelease files / omi_physics-0.4.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | omi_physics-0.4.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.7 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
71bd86bc64e3177c585cf8d4604bfeb2a19b30289450aa092740bb76ffd7a4cb
|
|
BLAKE2b-256 checksum How to use checksums |
dfb968711f8cdd9783ba9020c20cd0b6bd43e1fb389c61baf349656415fe7b6a
|
| 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 Oct 16, 2026.
Transparency logRelease files / omi_physics-0.4.0-cp310-cp310-macosx_11_0_arm64.whl
| Download URL | omi_physics-0.4.0-cp310-cp310-macosx_11_0_arm64.whl |
|---|---|
| Size | 744.1 kB |
| Tags | CPython 3.10 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
1f2aa05051d395980bf4e329b1a5c562df9c8a2d99e750acee2839233a47d77c
|
|
BLAKE2b-256 checksum How to use checksums |
c543c69f1b3b2ec2756545c3ae43545c61240fc9e06daccfc276d33e894af32d
|
| 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 Oct 16, 2026.
Transparency logRelease files / omi_physics-0.4.0-cp310-cp310-macosx_10_9_x86_64.whl
| Download URL | omi_physics-0.4.0-cp310-cp310-macosx_10_9_x86_64.whl |
|---|---|
| Size | 742.5 kB |
| Tags | CPython 3.10 macOS 10.9+ x86-64 |
|
SHA-256 checksum How to use checksums |
5272d6519e0a75c6046c558fd6e1901dd10602e0e8914a20e180c55c23467783
|
|
BLAKE2b-256 checksum How to use checksums |
192ad237ecb9abfad3161b7baa374ee186fa12239500b6943819e7e8bf19ceb6
|
| 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 Oct 16, 2026.
Transparency log