physics-clock — Temporal Inference from Physics
No RTC. No NTP. No GPS. The physics IS the clock.
Infers elapsed time from physical observations using Bayesian temporal inference across multiple independent physics models. Each model provides an independent clock signal. The joint probability gives precise time.
How It Works
- Observe physical quantities (temperature, sound speed, signal propagation, etc.)
- Each physics model gives P(observation | t)
- Bayesian fusion: P(t | all observations) ∝ Π P(obs_i | t) × P(t)
- Peak of posterior = best time estimate
Physics Clock Models
| Model | Physical Signal | Clock Source |
|---|---|---|
SoundSpeedClock |
UNESCO/Chen-Millero sound speed | Depth-dependent timing |
AbsorptionClock |
Francois-Garrison absorption | Range-dependent timing |
ThermalClock |
Silicon gate delay vs temperature | Newtonian cooling/heating |
PropagationClock |
Signal propagation delay | Distance / speed |
DopplerClock |
Doppler frequency shift | Velocity integration |
SiliconClock |
Gate delay fingerprint (PUF) | Crystal aging drift |
Quick Start
from physics_clock import PhysicsClock, ThermalClock, SoundSpeedClock
clock = PhysicsClock([
ThermalClock(),
SoundSpeedClock(),
])
result = clock.infer_time({
"temperature": 40.0,
"initial_temp": 60.0,
"ambient_temp": 25.0,
"thermal_tau": 120.0,
"measured_speed": 1495.0,
"descent_rate": 0.5,
"surface_temp": 20.0,
"salinity": 35.0,
}, t_min=0, t_max=300)
print(f"Elapsed: {result.timestamp:.1f}s ± {result.uncertainty:.1f}s")
print(f"Precision: {result.precision}")
print(f"Clocks used: {result.n_clocks}")
Use Cases
- Underwater vehicles: infer time from sound speed + absorption + thermocline
- Robot fleets: infer time from silicon timing + thermal + constraint load
- IoT networks: infer time without NTP (physics is the sync protocol)
- Security: verify device honesty through reality parity (can't fake physics)
Security: Reality Parity
The timing of constraint evaluation IS attestation:
from physics_clock import RealityParity
parity = RealityParity()
result = parity.check({
"eval_ns": 15000, # reported eval time
"n_constraints": 100, # constraints evaluated
"temperature": 30.0, # reported die temperature
"voltage_mv": 3300.0, # supply voltage
})
if not result.honest:
print(f"Device flagged: {result.reason}")
print(f"Expected {result.expected_eval_ns:.0f}ns, got {result.actual_eval_ns:.0f}ns")
print(f"Deviation: {result.deviation_sigma:.1f}σ")
eval_time = f(complexity, temperature, voltage)- If reported timing doesn't match reported temperature → device is lying
- No cryptographic keys needed. The physics can't be spoofed.
Composable With
- cocapn-schemas: temporal fingerprint tile format
- fleet-constraint-kernel: evaluation timing as temporal signal
- fleet-proto: Rust version of physics clock types
- temporal-auth: full authentication using physics-clock
Install
pip install physics-clock
License
Apache 2.0
Metadata
Release files for physics-clock 0.1.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 | Provenance | Actions |
|---|---|---|---|---|
| physics_clock-0.1.0.tar.gz | 11.7 kB | Without provenance | Details for physics_clock-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| physics_clock-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for physics_clock-0.1.0-py3-none-any.whl |
Total release size: 21.7 kB
Release files / physics_clock-0.1.0.tar.gz
| Download URL | physics_clock-0.1.0.tar.gz |
|---|---|
| Size | 11.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3df8fd1a81b2f0c600eaa26b08fb75dda7ab8056fc1e70ea8e03ac520664ee66
|
|
BLAKE2b-256 checksum How to use checksums |
5234ee0814f4cb1a90a3b20c5949030a94a7c8d7d23f31d7a71150316b0e451a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.12
|
Release files / physics_clock-0.1.0-py3-none-any.whl
| Download URL | physics_clock-0.1.0-py3-none-any.whl |
|---|---|
| Size | 10.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2681101f8107efccb5ef39d64181c228ed046383874336eb8a62a560892a03c9
|
|
BLAKE2b-256 checksum How to use checksums |
b40f0882d5d59f178585a095920497fc489907e322cbcddf4585ea35964266e3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.12
|
Security for physics-clock 0.1.0
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.