Skip to main content

ataraxis-time

Provides a high-precision thread-safe timer and helper methods to work with date and time data.

PyPI - Version PyPI - Python Version uv Ruff type-checked: mypy PyPI - License PyPI - Status PyPI - Wheel


Detailed Description

This library uses the 'chrono' C++ library to access the fastest available system clock and use it to provide interval timing, delay, timeout, and polling functionality via a Python binding API. While the performance of the timer heavily depends on the particular system configuration and utilization, most modern CPUs should be capable of microsecond precision using this timer. Due to using a C-extension to provide interval and delay timing functionality, the library is thread- and process-safe and releases the GIL when using the appropriate delay command configuration. Additionally, the library offers a set of standalone helper functions for manipulating date and time data, including timestamp generation and parsing, time-unit conversion, rate-interval conversion, and timedelta interoperability. This library is part of the Ataraxis framework for AI-assisted scientific hardware control.


Features

  • Supports Windows, Linux, and macOS.
  • Microsecond precision on modern CPUs (~ 3 GHz+) during delay and interval timing.
  • Releases GIL during (non-blocking) delay timing even when using microsecond and nanosecond precision.
  • Timeout guard class for activity-based and duration-based timeout tracking.
  • Lap recording, human-readable elapsed time formatting, and periodic polling via an infinite generator.
  • Frequency-to-interval and interval-to-frequency conversion helpers.
  • Timestamp generation, conversion, and parsing with configurable precision levels.
  • Interoperability with Python datetime.timedelta objects.
  • Apache 2.0 License.

Table of Contents


Dependencies

For users, all library dependencies are installed automatically by all supported installation methods. For developers, see the Developers section for information on installing additional development dependencies.


Installation

Source

Note, installation from source is highly discouraged for anyone who is not an active project developer.

  1. Download this repository to the local machine using the preferred method, such as git-cloning. Use one of the stable releases that include precompiled binary and source code distribution (sdist) wheels.
  2. If the downloaded distribution is stored as a compressed archive, unpack it using the appropriate decompression tool.
  3. cd to the root directory of the prepared project distribution.
  4. Run pip install . to install the project and its dependencies.

pip

Use the following command to install the library and all of its dependencies via pip: pip install ataraxis-time


Usage

Precision Timer

The timer API is inspired by the elapsedMillis library for Teensy and Arduino microcontrollers.

All timer class functionality is realized through a C-extension class wrapped into the PrecisionTimer class.

Initialization and Configuration

The timer takes the 'precision' to use as the only initialization argument. All instances of the timer class are thread- and process-safe and do not interfere with each other.

from ataraxis_time import PrecisionTimer, TimerPrecisions

# Currently, the timer supports 4 precisions: 'ns' (nanoseconds), 'us' (microseconds), 'ms' (milliseconds), and
# 's' (seconds). All precisions are defined in the TimerPrecisions enumeration.
timer = PrecisionTimer(TimerPrecisions.MICROSECOND)
print(f"Precision: {timer.precision}")

# The precision can be adjusted after initialization if needed. While not recommended, it is possible to provide the
# precision as a string instead of using the TimerPrecisions enumeration.
timer.set_precision("ms")  # Switches timer precision to milliseconds
print(f"Precision: {timer.precision}")

Interval Timing

Interval timing functionality is realized through two methods: reset() and the elapsed property. This functionality is identical to using perf_counter_ns() from the 'time' library. The main difference is that PrecisionTimer uses a slightly different interface (reset / elapsed) and automatically converts the output to the desired precision.

from ataraxis_time import PrecisionTimer
import time as tm

timer = PrecisionTimer("us")

# Interval timing example
timer.reset()  # Resets (re-bases) the timer
tm.sleep(1)  # Simulates work (for 1 second)
print(f"Work time: {timer.elapsed} us")

Delay

The standard 'time' library provides nanosecond-precise delays via a 'busywait' perf_counter_ns() function that does not release the GIL. Alternatively, it can release the GIL via the sleep() function, but it is only accurate up to millisecond precision. The PrecisionTimer class can delay for time-periods within microsecond precision, while releasing or holding the GIL.

import threading
import time
from ataraxis_time import PrecisionTimer

# Instantiates a global counter for the background thread
counter = 0
stop = False


def count_in_background():
    """Background thread that increments the global counter."""
    global counter
    while not stop:
        counter += 1


# Setup
timer = PrecisionTimer("us")

# Starts the background counter thread
thread = threading.Thread(target=count_in_background, daemon=True)
thread.start()
time.sleep(0.1)

# GIL-releasing microsecond delay:
print("block=False (releases GIL):")
counter = 0  # Resets the counter
timer.delay(100, block=False)  # 100us delay
non_blocking_count = counter
print(f"counter = {counter}")

# Non-GIL-releasing microsecond delay:
print("block=True (holds GIL):")
counter = 0  # Resets the counter
timer.delay(100, block=True)  # 100us delay
blocking_count = counter
print(f"counter = {counter}")

# Cleanup
stop = True

# With microsecond precisions, blocking runtime often results in the counter not being incremented at all.
if blocking_count == 0:
    blocking_count = 1
print(f"Difference: block=False allows ~{non_blocking_count / blocking_count:.0f}x more counting!")
thread.join()

Lap Timing

The lap() method records the current elapsed time, appends it to an internal list, and resets the timer. All recorded lap times are accessible through the laps property.

from ataraxis_time import PrecisionTimer
import time as tm

timer = PrecisionTimer("ms")

# Records three laps
for i in range(3):
    tm.sleep(0.1)  # Simulates work
    duration = timer.lap()
    print(f"Lap {i + 1}: {duration} ms")

# Retrieves all recorded laps as a tuple
print(f"All laps: {timer.laps}")

Formatted Elapsed Time

The format_elapsed() method returns the current elapsed time as a human-readable string, automatically selecting the most appropriate units.

from ataraxis_time import PrecisionTimer
import time as tm

timer = PrecisionTimer("us")
tm.sleep(2.5)  # Simulates work
print(f"Elapsed: {timer.format_elapsed()}")  # e.g. "2 s 500.117 ms"
print(f"Detailed: {timer.format_elapsed(max_fields=3)}")  # e.g. "2 s 500 ms 117 us"

Polling

The poll() method provides an infinite generator that yields an iteration count after each delay cycle.

from ataraxis_time import PrecisionTimer

timer = PrecisionTimer("ms")

# Polls every 100 ms, runs 10 iterations
for count in timer.poll(100):
    print(f"Iteration {count}")
    if count >= 10:
        break

Timeout

The Timeout class provides a timeout guard built on PrecisionTimer. It supports checking whether a specified duration has elapsed and offers activity-based reset (kick) and full reset with optional duration changes.

from ataraxis_time import Timeout
import time as tm

# Creates a 500 ms timeout
timeout = Timeout(duration=500, precision="ms")

# Checks timeout status
tm.sleep(0.1)
print(f"Expired: {timeout.expired}")  # False
print(f"Remaining: {timeout.remaining} ms")
print(f"Elapsed: {timeout.elapsed} ms")

# Resets the timeout timer without changing the duration (activity-based reset)
timeout.kick()

# Resets the timeout with a new duration
timeout.reset(duration=1000)

Date and Time Helper Functions

Since these functions are not intended for realtime applications, they are implemented entirely in Python.

Convert Time

This helper function performs time-conversions, rounding to 3 decimal places, and works with time-scales from nanoseconds to days.

from ataraxis_time import convert_time, TimeUnits

# The conversion works for Python and NumPy scalars. Use the TimeUnits enumeration to specify input and
# output units. By default, the method returns the converted data as NumPy 64-bit floating scalars.
initial_time = 12
time_in_seconds = convert_time(time=initial_time, from_units=TimeUnits.DAY, to_units=TimeUnits.SECOND)
print(f"12 days is {time_in_seconds} seconds.")

# It is possible to provide the units directly, instead of using the TimeUnits enumeration. Also,
# it is possible to instruct the function to return Python floats.
initial_time = 5
time_in_minutes = convert_time(time=initial_time, from_units="s", to_units="m", as_float=True)
print(f"5 seconds is {time_in_minutes} minutes.")

Rate and Interval Conversion

The rate_to_interval() and interval_to_rate() functions convert between frequencies (Hz) and time intervals.

from ataraxis_time import rate_to_interval, interval_to_rate, TimeUnits

# Converts a 30 Hz frequency to a microsecond interval
interval_us = rate_to_interval(rate=30, to_units=TimeUnits.MICROSECOND)
print(f"30 Hz = {interval_us} us interval")

# Converts a 1000 us interval back to Hz
rate_hz = interval_to_rate(interval=1000, from_units=TimeUnits.MICROSECOND)
print(f"1000 us = {rate_hz} Hz")

Timedelta Interoperability

The to_timedelta() and from_timedelta() functions convert between numeric time values and Python datetime.timedelta objects.

from ataraxis_time import to_timedelta, from_timedelta, TimeUnits

# Converts 500 milliseconds to a timedelta
td = to_timedelta(time=500, from_units=TimeUnits.MILLISECOND)
print(f"500 ms as timedelta: {td}")

# Converts a timedelta back to microseconds
us_value = from_timedelta(timedelta_value=td, to_units=TimeUnits.MICROSECOND)
print(f"Timedelta as microseconds: {us_value}")

Timestamps

Timestamp methods generate and work with microsecond-precise UTC timestamps. The generated timestamp can be returned as and freely converted between three supported formats: string, bytes array, and an integer number of microseconds elapsed since the UTC epoch onset. The precision parameter controls how much detail is included in the output.

from ataraxis_time import get_timestamp, convert_timestamp, TimestampFormats, TimestampPrecisions

# Gets the current date and time as a timestamp. The timestamp is precise up to microseconds by default.
# Use TimestampFormats to specify the desired format.
dt = get_timestamp(time_separator="-", output_format=TimestampFormats.STRING)
print(f"Current timestamp: {dt}.")

# Uses the precision parameter to control the detail level of the output.
dt_day = get_timestamp(output_format=TimestampFormats.STRING, precision=TimestampPrecisions.DAY)
print(f"Day-precision timestamp: {dt_day}.")

# The function also supports giving the timestamp as a serialized array of bytes. This is helpful when it is used as
# part of a serialized communication protocol.
bytes_dt = get_timestamp(output_format=TimestampFormats.BYTES)
print(f"Byte-serialized current timestamp value: {bytes_dt}.")

# Use the convert_timestamp() function to convert the timestamp to a different format. It supports cross-converting
# all timestamp formats stored in the TimestampFormats enumeration.
integer_dt = convert_timestamp(timestamp=bytes_dt, output_format=TimestampFormats.INTEGER)
string_dt = convert_timestamp(timestamp=integer_dt, output_format=TimestampFormats.STRING)
print(
    f"The timestamp can be read as a string: {string_dt}. It can also be read as the number of microseconds elapsed "
    f"since UTC epoch onset: {integer_dt}."
)

Parse Timestamp

The parse_timestamp() function parses arbitrary datetime strings using strptime-compatible format strings and returns them as timestamps in any supported format.

from ataraxis_time import parse_timestamp, TimestampFormats

# Parses a datetime string into a microsecond integer timestamp
us_timestamp = parse_timestamp(
    date_string="2024-03-15 14:30:00",
    format_string="%Y-%m-%d %H:%M:%S",
    output_format=TimestampFormats.INTEGER,
)
print(f"Parsed timestamp: {us_timestamp}")

# Parses into a string timestamp with day precision
day_timestamp = parse_timestamp(
    date_string="March 15, 2024",
    format_string="%B %d, %Y",
    output_format=TimestampFormats.STRING,
    precision="day",
)
print(f"Day-precision parsed timestamp: {day_timestamp}")

CLI Commands

This library provides the axt-benchmark CLI that exposes the following commands:

Command Description
axt-benchmark Benchmarks interval timing and delay accuracy on the local system

Use axt-benchmark --help for detailed usage information.


API Documentation

See the API documentation for the detailed description of the methods and classes exposed by components of this library. The documentation also covers the C++ source code and the axt-benchmark CLI command.


Developers

This section provides installation, dependency, and build-system instructions for the developers that want to modify the source code of this library.

Installing the Project

Note, this installation method requires mamba version 2.3.2 or above. Currently, all automation pipelines require that mamba is installed through the miniforge3 installer.

  1. Download this repository to the local machine using the preferred method, such as git-cloning.
  2. If the downloaded distribution is stored as a compressed archive, unpack it using the appropriate decompression tool.
  3. cd to the root directory of the prepared project distribution.
  4. Install the core development dependencies into the base mamba environment via the mamba install tox uv tox-uv command.
  5. Use the tox -e create command to create the project-specific development environment followed by tox -e install command to install the project into that environment as a library.

Additional Dependencies

In addition to installing the project and all user dependencies, install the following dependencies:

  1. Python distributions, one for each version supported by the developed project. Currently, this library supports the three latest stable versions. It is recommended to use a tool like pyenv to install and manage the required versions.
  2. Doxygen, to generate C++ code documentation.
  3. A C++ build toolchain and, for cross-architecture wheels, Docker, to build binary wheels via cibuildwheel. Testing cross-compiled wheels has per-platform prerequisites. On macOS, Rosetta 2 is required to test x86_64 wheels on Apple Silicon, installed with softwareupdate --install-rosetta --agree-to-license. On Linux, non-native architectures build and test inside Docker under QEMU emulation, registered once per machine with docker run --privileged --rm tonistiigi/binfmt --install all. On Windows, ARM64 wheels need the ARM64 MSVC runtime, installed through the Visual Studio Installer. Run python tools/check_build_env.py to verify these prerequisites before building.

Development Automation

This project uses tox for development automation. The following tox environments are available:

Environment Description
lint Runs ruff formatting, ruff linting, and mypy type checking
stubs Generates py.typed marker and .pyi stub files
{py312,...}-test Runs the test suite via pytest for each supported Python
coverage Aggregates test coverage and applies the 100% coverage gate
docs Builds the API documentation via Sphinx
build Builds sdist and wheel distributions
upload Uploads distributions to PyPI via twine
deploy Uploads the built documentation to the Netlify site
install Builds and installs the project into its mamba environment
uninstall Uninstalls the project from its mamba environment
create Creates the project's mamba development environment
remove Removes the project's mamba development environment
provision Recreates the mamba environment from scratch
export Exports the mamba environment as a .yml file
import Creates or updates the mamba environment from a .yml file

Run any environment using tox -e ENVIRONMENT. For example, tox -e lint.

Note, all pull requests for this project have to successfully complete the tox task before being merged. To expedite the task's runtime, use the tox --parallel command to run some tasks in parallel.

AI-Assisted Development

Claude Code skills and other AI development assets for this project are distributed through the ataraxis marketplace as part of the automation plugin. Install the plugin from the marketplace to make all associated skills and development tools available to compatible AI coding agents.

Automation Troubleshooting

Many packages used in tox automation pipelines (uv, mypy, ruff) and tox itself may experience runtime failures. In most cases, this is related to their caching behavior. If an unintelligible error is encountered with any of the automation components, deleting the corresponding cache directories (.tox, .ruff_cache, .mypy_cache, etc.) manually or via a CLI command typically resolves the issue.


Versioning

This project uses semantic versioning. See the tags on this repository for the available project releases.


Authors


License

This project is licensed under the Apache 2.0 License: see the LICENSE file for details.


Acknowledgments

  • All Sun lab members for providing the inspiration and comments during the development of this library.
  • elapsedMillis project for providing the inspiration for the API and the functionality of the timer class.
  • nanobind project for providing a fast and convenient way of binding C++ code to Python projects.
  • The creators of all other dependencies and projects listed in the pyproject.toml file.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ataraxis_time-7.0.0.tar.gz (72.5 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

ataraxis_time-7.0.0-cp314-cp314-win_arm64.whl (445.9 kB view details)

Uploaded CPython 3.14Windows ARM64

ataraxis_time-7.0.0-cp314-cp314-win_amd64.whl (289.2 kB view details)

Uploaded CPython 3.14Windows x86-64

ataraxis_time-7.0.0-cp314-cp314-win32.whl (268.3 kB view details)

Uploaded CPython 3.14Windows x86

ataraxis_time-7.0.0-cp314-cp314-musllinux_1_2_x86_64.whl (544.2 kB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

ataraxis_time-7.0.0-cp314-cp314-musllinux_1_2_i686.whl (590.9 kB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ i686

ataraxis_time-7.0.0-cp314-cp314-musllinux_1_2_aarch64.whl (523.2 kB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ ARM64

ataraxis_time-7.0.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (86.1 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

ataraxis_time-7.0.0-cp314-cp314-manylinux_2_26_i686.manylinux_2_28_i686.whl (87.3 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.26+ i686manylinux: glibc 2.28+ i686

ataraxis_time-7.0.0-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (82.9 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

ataraxis_time-7.0.0-cp314-cp314-macosx_15_0_x86_64.whl (76.8 kB view details)

Uploaded CPython 3.14macOS 15.0+ x86-64

ataraxis_time-7.0.0-cp314-cp314-macosx_15_0_arm64.whl (69.4 kB view details)

Uploaded CPython 3.14macOS 15.0+ ARM64

ataraxis_time-7.0.0-cp313-cp313-win_arm64.whl (431.7 kB view details)

Uploaded CPython 3.13Windows ARM64

ataraxis_time-7.0.0-cp313-cp313-win_amd64.whl (281.0 kB view details)

Uploaded CPython 3.13Windows x86-64

ataraxis_time-7.0.0-cp313-cp313-win32.whl (261.7 kB view details)

Uploaded CPython 3.13Windows x86

ataraxis_time-7.0.0-cp313-cp313-musllinux_1_2_x86_64.whl (544.2 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

ataraxis_time-7.0.0-cp313-cp313-musllinux_1_2_i686.whl (590.6 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ i686

ataraxis_time-7.0.0-cp313-cp313-musllinux_1_2_aarch64.whl (522.8 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ ARM64

ataraxis_time-7.0.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (86.1 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

ataraxis_time-7.0.0-cp313-cp313-manylinux_2_26_i686.manylinux_2_28_i686.whl (87.1 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.26+ i686manylinux: glibc 2.28+ i686

ataraxis_time-7.0.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (82.7 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

ataraxis_time-7.0.0-cp313-cp313-macosx_15_0_x86_64.whl (76.8 kB view details)

Uploaded CPython 3.13macOS 15.0+ x86-64

ataraxis_time-7.0.0-cp313-cp313-macosx_15_0_arm64.whl (69.3 kB view details)

Uploaded CPython 3.13macOS 15.0+ ARM64

ataraxis_time-7.0.0-cp312-cp312-win_arm64.whl (431.8 kB view details)

Uploaded CPython 3.12Windows ARM64

ataraxis_time-7.0.0-cp312-cp312-win_amd64.whl (281.1 kB view details)

Uploaded CPython 3.12Windows x86-64

ataraxis_time-7.0.0-cp312-cp312-win32.whl (261.7 kB view details)

Uploaded CPython 3.12Windows x86

ataraxis_time-7.0.0-cp312-cp312-musllinux_1_2_x86_64.whl (544.4 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

ataraxis_time-7.0.0-cp312-cp312-musllinux_1_2_i686.whl (590.6 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ i686

ataraxis_time-7.0.0-cp312-cp312-musllinux_1_2_aarch64.whl (522.7 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ ARM64

ataraxis_time-7.0.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (86.2 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

ataraxis_time-7.0.0-cp312-cp312-manylinux_2_26_i686.manylinux_2_28_i686.whl (87.2 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.26+ i686manylinux: glibc 2.28+ i686

ataraxis_time-7.0.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (82.8 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

ataraxis_time-7.0.0-cp312-cp312-macosx_15_0_x86_64.whl (76.9 kB view details)

Uploaded CPython 3.12macOS 15.0+ x86-64

ataraxis_time-7.0.0-cp312-cp312-macosx_15_0_arm64.whl (69.4 kB view details)

Uploaded CPython 3.12macOS 15.0+ ARM64

File details

Details for the file ataraxis_time-7.0.0.tar.gz.

File metadata

  • Download URL: ataraxis_time-7.0.0.tar.gz
  • Upload date:
  • Size: 72.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.6

File hashes

Hashes for ataraxis_time-7.0.0.tar.gz
Algorithm Hash digest
SHA256 3792db0c7fbe8262079b3da26aaa79deadd3ab8fcecf1aa1768acbd3a8251646
MD5 f39b79287277662b0c4476231f897307
BLAKE2b-256 30cc483721b9420b8b7c7bdb85a26d644af620d482c86985bb47a4cce9f2c1dc

See more details on using hashes here.

File details

Details for the file ataraxis_time-7.0.0-cp314-cp314-win_arm64.whl.

File metadata

File hashes

Hashes for ataraxis_time-7.0.0-cp314-cp314-win_arm64.whl
Algorithm Hash digest
SHA256 2824188799a48847f9d3834685570be548ef6745c345eec0cf997547a991aefa
MD5 17b62a4dd0114324275586581f02426c
BLAKE2b-256 d01459a846bef9a0923e2ed5fc6ac0959bfb03ef8dde362068b5b2e0eb70916f

See more details on using hashes here.

File details

Details for the file ataraxis_time-7.0.0-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for ataraxis_time-7.0.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 c779ef204e87b87e72724ba1c9550be4e61b112238e5aa5cb50a03ec6628b3f9
MD5 eb758a9369f304b13bb3363d312a160f
BLAKE2b-256 9baf5df510e4a3c2a93f2a3c5e9195b4a0e30de7cd0696098e5100076e7ea47e

See more details on using hashes here.

File details

Details for the file ataraxis_time-7.0.0-cp314-cp314-win32.whl.

File metadata

  • Download URL: ataraxis_time-7.0.0-cp314-cp314-win32.whl
  • Upload date:
  • Size: 268.3 kB
  • Tags: CPython 3.14, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.6

File hashes

Hashes for ataraxis_time-7.0.0-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 75c0d20e1d7d5fbcdf88891495401356297b599a10a1701de3cd525d6999ce33
MD5 ba456246a40147156e071e409802464e
BLAKE2b-256 92b8ec7f9716252d0f7c2e097c56bb7307d42acf10f6c623e185962211b58908

See more details on using hashes here.

File details

Details for the file ataraxis_time-7.0.0-cp314-cp314-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for ataraxis_time-7.0.0-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 63c4b71a5e3735c803e79187c7c1ee9e1dd82d3fc6a6d289dc8afa57ab75a229
MD5 49ec5592cdcbbf49208161733f3f18f1
BLAKE2b-256 794f376ca95cb8ad96447e22e08c49ebbbe6ecdd8b333a59184c8860d662d321

See more details on using hashes here.

File details

Details for the file ataraxis_time-7.0.0-cp314-cp314-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for ataraxis_time-7.0.0-cp314-cp314-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 c843dd28f537d78e6d867c0b004a8cfd1a2634ff0f3cfc5717ad88c2ed88aff3
MD5 78b14de1e2685f96a4653977934b23f0
BLAKE2b-256 fba857e62d5dac40a4e652731a579ae8294a838aee29d3166f34dbcafb78cc3c

See more details on using hashes here.

File details

Details for the file ataraxis_time-7.0.0-cp314-cp314-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for ataraxis_time-7.0.0-cp314-cp314-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 4b3aa84705d39e3b9ce993b7406a964b456f93aea3f8ecd689ed855f68b98ac8
MD5 2d535455a1ef3822f469e1ff125162c7
BLAKE2b-256 e53e95c95a67755a36139f63e9710e88f2dd1c7007ee9a6779276da68df285fa

See more details on using hashes here.

File details

Details for the file ataraxis_time-7.0.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for ataraxis_time-7.0.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3f05eaa649b64a52ca709f8d45325e6540a0279018a43493949c79afb226e86e
MD5 7ba840d3bce45c4cc5aa7630bae4a407
BLAKE2b-256 6f13bbace4509d46e08559c32f986f4ceeac8639b204452c26bcb19011e695e2

See more details on using hashes here.

File details

Details for the file ataraxis_time-7.0.0-cp314-cp314-manylinux_2_26_i686.manylinux_2_28_i686.whl.

File metadata

File hashes

Hashes for ataraxis_time-7.0.0-cp314-cp314-manylinux_2_26_i686.manylinux_2_28_i686.whl
Algorithm Hash digest
SHA256 133e27d345fffecdb641b9444fd8d563cc2bfb230e1f7cdf8e8f3932a116cefd
MD5 9eed8a82dd27a5da2e603329133254c1
BLAKE2b-256 f50a95bd4ca8dc976c01052a96fcf833bf22f798284688c397d673d8d6986ac3

See more details on using hashes here.

File details

Details for the file ataraxis_time-7.0.0-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for ataraxis_time-7.0.0-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 2a18f9159b5140a31ba36290e6b72affb2e2ce349fbe1c353b882d2aef0e842b
MD5 69a901f2c3bf9977ea780ca64c232061
BLAKE2b-256 e8dfb7026abc1d72eae8c1c271e97fe25780c904c2c0ed2ee5224f016b960aab

See more details on using hashes here.

File details

Details for the file ataraxis_time-7.0.0-cp314-cp314-macosx_15_0_x86_64.whl.

File metadata

File hashes

Hashes for ataraxis_time-7.0.0-cp314-cp314-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 246722a2122ee7cb7c68e31754f27a1e0c6c9a0e6f2a253d4a5499093e2b3ddd
MD5 296f54251d4f27e96f1a2db870f3a339
BLAKE2b-256 16ea0efcf4733496ed7e958dbbe16c6e85179f20d08ddccbdc1cd8aff37c3739

See more details on using hashes here.

File details

Details for the file ataraxis_time-7.0.0-cp314-cp314-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for ataraxis_time-7.0.0-cp314-cp314-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 257c040aabde69439ad7f33e8706bfc8206c1bf1b4b298288ca47d6066478ada
MD5 4971baaf83fed3b49c14cacea86eaef1
BLAKE2b-256 2aa71b068a72b29432254861045e26f387f03a61fbeaf0c4808a3caf1d90d2ea

See more details on using hashes here.

File details

Details for the file ataraxis_time-7.0.0-cp313-cp313-win_arm64.whl.

File metadata

File hashes

Hashes for ataraxis_time-7.0.0-cp313-cp313-win_arm64.whl
Algorithm Hash digest
SHA256 670365b49e65e820bcbc999dad7527489092c8b11c81756150442e4f5c60c874
MD5 fd9202dc237108d6f68c67f5f7a6f54a
BLAKE2b-256 9c322609acc78feeedbfdf869ec05e40c552eb54013e9bd470c5c84b9f84a33f

See more details on using hashes here.

File details

Details for the file ataraxis_time-7.0.0-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for ataraxis_time-7.0.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 bf72ac71cb3af48b8913de712aeba9765f56e8b0a607c6c2f4aa432b770585b9
MD5 afdd66221ef91f857ba1add3fbddf016
BLAKE2b-256 3314d7947b4ed6f9534066f8bd9aa95e428ce477200b278fef67916ed1390605

See more details on using hashes here.

File details

Details for the file ataraxis_time-7.0.0-cp313-cp313-win32.whl.

File metadata

  • Download URL: ataraxis_time-7.0.0-cp313-cp313-win32.whl
  • Upload date:
  • Size: 261.7 kB
  • Tags: CPython 3.13, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.6

File hashes

Hashes for ataraxis_time-7.0.0-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 96fa324e5c780bf5f32c110c35097ab675c6535ad5bad9328546138cfa7bc771
MD5 dadf33da0bd55a5b9fb7e5c713ecdecf
BLAKE2b-256 6f8dc01034961ec89e1103c21228dca13c43b76da118665c6483280527300de3

See more details on using hashes here.

File details

Details for the file ataraxis_time-7.0.0-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for ataraxis_time-7.0.0-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e38b1c167a812daf0ce789aea2bb87a564f52b9ad3f2f37827b0b73b798f2eb7
MD5 dfb96aa8a98556a9af6f613efe93f5d0
BLAKE2b-256 00e598b1d38f5b998538d0c9ecf9ca48bf8ba8e956a6363c41cf2adf2a873121

See more details on using hashes here.

File details

Details for the file ataraxis_time-7.0.0-cp313-cp313-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for ataraxis_time-7.0.0-cp313-cp313-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 ff8a849f5fc8fb6cb081c35588e3c47b1d6dc1bf6340d77f72d98d7763ccb11d
MD5 1cfc31490602c7ec88fe39a4f901d005
BLAKE2b-256 55a130ed951f1b2d501b822a909ce48c5871edf3b9a9278198c26daf29d5a989

See more details on using hashes here.

File details

Details for the file ataraxis_time-7.0.0-cp313-cp313-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for ataraxis_time-7.0.0-cp313-cp313-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 cb2a7a15bc0caca554fd5a8ce3df96f3b6919b0dddd88b7a6c991391ce112b83
MD5 155d08d3bdb840a1b66881a3b2e6fb69
BLAKE2b-256 c4cfbd7932aa6c071f0ddd8022b0cee1307f84f6a15d5d1bec37bfa636bb63a0

See more details on using hashes here.

File details

Details for the file ataraxis_time-7.0.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for ataraxis_time-7.0.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f5fa26b18fed41bae35b64b747b499ac833961dece7497222cd13e3163db2aa3
MD5 76265d3465d01ccd4325cea54a629b24
BLAKE2b-256 b63cb143aeb974a7c434b23e127bea01ec9f463f88b409bf28419757d8533f2e

See more details on using hashes here.

File details

Details for the file ataraxis_time-7.0.0-cp313-cp313-manylinux_2_26_i686.manylinux_2_28_i686.whl.

File metadata

File hashes

Hashes for ataraxis_time-7.0.0-cp313-cp313-manylinux_2_26_i686.manylinux_2_28_i686.whl
Algorithm Hash digest
SHA256 7270eef82e63adbde93095bff1d89cdfa9046e0adbd1f44ea21a2ebc78db8480
MD5 7f0cf3e9b610433e20ffc79f24a6fac5
BLAKE2b-256 2dd17557bdf1c7cb7bec84a86562f5d68ddef68e87083d056122359cce34ead1

See more details on using hashes here.

File details

Details for the file ataraxis_time-7.0.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for ataraxis_time-7.0.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 113480aeb9685901c9dc40c293b164ff51bc44ad52eb0868372720e8d02a7769
MD5 1c8a7d0c6f119ad901e00393d0a60aa2
BLAKE2b-256 3692a7cc36a22e723befa457afb7ee0e039d08d3da78d2ec33ab0bdf5243943a

See more details on using hashes here.

File details

Details for the file ataraxis_time-7.0.0-cp313-cp313-macosx_15_0_x86_64.whl.

File metadata

File hashes

Hashes for ataraxis_time-7.0.0-cp313-cp313-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 529c6ec35872a49c1377fccea0f711d2d9ff35d769f05f349004727a29de9237
MD5 2c09b79e77316ca709c3b9746f6dcacc
BLAKE2b-256 e1eb1aac6946d28e6c40e1db58b5b2e987971870b2471e5eba50fb358197284e

See more details on using hashes here.

File details

Details for the file ataraxis_time-7.0.0-cp313-cp313-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for ataraxis_time-7.0.0-cp313-cp313-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 0fa21bbacd8a3e970d9f5cf6199c805b870810bc87926c9bff42057fc4f653a1
MD5 c7f2ecef87f3e10574a8046d553f803f
BLAKE2b-256 3324708036cf150d03d563a831ba6b3ee344cb845910e79aa48b350841a5a717

See more details on using hashes here.

File details

Details for the file ataraxis_time-7.0.0-cp312-cp312-win_arm64.whl.

File metadata

File hashes

Hashes for ataraxis_time-7.0.0-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 6c82af256e2fc0d44ba19ce9343921d806d3a12ef0aa231cc21ee2b23790f7c2
MD5 bf85ebda7a0abf2f2e0bf477e52fc734
BLAKE2b-256 00f566293eeece2d8f99de9828bbf4df173e30b4ca5149324164e3b39ed92585

See more details on using hashes here.

File details

Details for the file ataraxis_time-7.0.0-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for ataraxis_time-7.0.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 a756224176879b0d35a56f311428e128e37cd0a8ac18769bd34632d7ec18eada
MD5 73f5f0231b15c6bdd9e092ef604f1eb1
BLAKE2b-256 d9a59850cc727293dec45e1f1f20e08d77f77efa8e5cca73b89108c3caa38c79

See more details on using hashes here.

File details

Details for the file ataraxis_time-7.0.0-cp312-cp312-win32.whl.

File metadata

  • Download URL: ataraxis_time-7.0.0-cp312-cp312-win32.whl
  • Upload date:
  • Size: 261.7 kB
  • Tags: CPython 3.12, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.6

File hashes

Hashes for ataraxis_time-7.0.0-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 360f948c8e3210f1a2615da8b5051b7449da33266c90bc707232824a84370916
MD5 6c3f5589b1dd6d073a74178c66fba8a5
BLAKE2b-256 2c97d80596244143ef2f14c2c8ca30442b08d2882f98a4ea076b9464d073199b

See more details on using hashes here.

File details

Details for the file ataraxis_time-7.0.0-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for ataraxis_time-7.0.0-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d4d5d971f49dd506eb1d0133580f7d2d65544dc0919c73110c805d871e5f6c33
MD5 c40c85dbf92b3964c7d942ef32dfd968
BLAKE2b-256 046813ed95ec2d1d47a662c6c286057a9a224fc15ba0f2eadd81500790af12e6

See more details on using hashes here.

File details

Details for the file ataraxis_time-7.0.0-cp312-cp312-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for ataraxis_time-7.0.0-cp312-cp312-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 25871127ad08aa675def2c1dbdbf9ac9dab461e89975d6664fa1ce25d3057be7
MD5 aa57a6fda52a0212fbadddef7396baec
BLAKE2b-256 dc0ab1d3ebbb7defdfe7bcf030b878a2e728555a4d9ce9b0beac0c8e86d290b9

See more details on using hashes here.

File details

Details for the file ataraxis_time-7.0.0-cp312-cp312-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for ataraxis_time-7.0.0-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 b6ba772a8193f08f7d7055e44ec08c8086ec547426122e0c007cf943fb21cc8e
MD5 59face264e0da2d5acf27073c2dc2606
BLAKE2b-256 ae886d218a26732b4a36760acf21717165b2276c663405eb0714e1c6a3466e24

See more details on using hashes here.

File details

Details for the file ataraxis_time-7.0.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for ataraxis_time-7.0.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 95fd0b1a905d1f25cd622dfafffedfe1182e896d1a5c70f156e54f0498ba395d
MD5 ce004566966a856b9d9d8cdb68da4340
BLAKE2b-256 afe448476b92dfa39b59265395554ae562d21ed9ff6ad2b0bab9c84f10c1906a

See more details on using hashes here.

File details

Details for the file ataraxis_time-7.0.0-cp312-cp312-manylinux_2_26_i686.manylinux_2_28_i686.whl.

File metadata

File hashes

Hashes for ataraxis_time-7.0.0-cp312-cp312-manylinux_2_26_i686.manylinux_2_28_i686.whl
Algorithm Hash digest
SHA256 e17d37815888d54f445a2d4c49d45d82ac7cbd354318cd252c4ed3198e017451
MD5 522cc86e189cf06c2cc2ef5b030165c8
BLAKE2b-256 9b1d1db7da9536960b5b6398e51fb7da396acead9b9152d33b347fc961da57c9

See more details on using hashes here.

File details

Details for the file ataraxis_time-7.0.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for ataraxis_time-7.0.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e738a51fa914a78c6111162b22a4f63f258508454f4c12523401925ff5e8e6c1
MD5 e2d4d685206e22111d383a6191041741
BLAKE2b-256 0bc6d602b096c39ce9c562fda91bc34f93440c138b31a34e6f9b97f331615b29

See more details on using hashes here.

File details

Details for the file ataraxis_time-7.0.0-cp312-cp312-macosx_15_0_x86_64.whl.

File metadata

File hashes

Hashes for ataraxis_time-7.0.0-cp312-cp312-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 061a162e525020fc7b88262866ff52b39e9f88fdcfad7e69909b3730c9a5910c
MD5 8b35a2d93e78a20362c3945404f7b6f5
BLAKE2b-256 69f6499bdfa707761fd6a823e3b911c84011b7f2635c05d1c6efb816ec662259

See more details on using hashes here.

File details

Details for the file ataraxis_time-7.0.0-cp312-cp312-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for ataraxis_time-7.0.0-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 b9990cae0ff492b0d506fe9c28bc77b8cefe1728013abf3436a8fdfe52774848
MD5 de9e0f468b9b5a174b9bdfef82c5bdaf
BLAKE2b-256 62707f8968ce338881cc0f9a556a102a7307924ac401e60cb9512d3629c6ec39

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

7.0.0 This release

34 files

6.0.2

34 files

6.0.1

34 files

6.0.0

34 files

5.0.0

34 files

4.0.0

35 files

3.0.0

31 files

2.0.1

40 files

2.0.0

19 files

1.1.0

40 files

1.0.4

40 files

1.0.3

40 files

1.0.2

52 files

1.0.1

52 files

1.0.0

52 files

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