Skip to main content

Joulescope™ file format

Project description

main

JLS

Welcome to the Joulescope® File Format project. The goal of this project is to provide performant data storage for huge, simultaneous, one-dimensional signals. This repository contains:

  • The JLS file format specification
  • The implementation in C
  • Language bindings for Python

Features

  • Cross-platform
    • Microsoft Windows x64
    • Apple macOS x64
    • Apple macOS ARM
    • Linux x64
    • Linux aarch64 (ARM 64-bit). Supports Raspberry Pi 4.
  • Support for multiple, simultaneous data sources
  • Support for multiple, simultaneous signal waveforms
  • Fixed sample rate signals (FSR)
    • Handles missing samples gracefully (interpolate) 🔜
    • Multiple data types including:
      • Floating point: f32, f64
      • Unsigned integers: u1, u4, u8, u16, u24, u32, u64
      • Signed integers: i4, i8, i16, i24, i32, i64
      • Fixed-point, signed integers (same bit sizes as signed integers)
      • Boolean (digital) 1-bit signals = u1
  • Variable sample rate (VSR) signals 🔜
  • Fast read performance
    • Signal Summaries
      • "Zoomed out" view with mean, min, max, standard deviation
      • Provides fast waveform load without any additional processing steps
    • Automatic load by summary level
    • Fast seek, next, previous access
  • Sample ID to Wall-clock time (UTC) for FSR signals
  • Annotations
    • Global VSR annotations
    • Signal annotations, timestamped to sample_id for FSR and UTC time for VSR
    • Support for text, marker, and user-defined (text, binary, JSON)
  • User data
    • Arbitrary data included in the same file
    • Support for text, binary, and JSON
  • Reliability
    • Integrated integrity checks using CRC32C
    • File data still accessible in the case of improper program termination 🔜
    • Uncorrupted data is still accessible in presence of file corruption 🔜
    • Write once, except for indices and the doubly-linked list pointers
  • Compression options 🔜
    • lossless 🔜
    • lossy 🔜
    • lossy with downsampling below threshold 🔜
    • Support level 0 DATA not written (only INDEX & SUMMARY) 🔜

Items marked with 🔜 are under development and coming soon. Items marked with ⏳ are planned for future release.

As of June 2023, the JLS v2 file structure is well-defined and stable. However, the compression storage formats are not yet defined and corrupted file recovery is not yet implemented.

Why JLS?

The world is already full of file formats, and we would rather not create another one. However, we could not identify a solution that met these requirements. HDF5 meets the large storage requirements, but not the reliability and rapid load requirements. The Saleae binary export file format v2 is also not suitable since it buffers stores single, contiguous blocks. Sigrok v2 is similar. The Sigrok v3 format (under development as of June 2023) is better in that it stores sequences of "packets" containing data blocks, but it still will does not allow for fast seek or summaries.

Timeseries databases, such as InfluxDB, are powerful tools. However, they are not well-designed for fast sample-rate data.

Media containers are another option, especially the ISO base media file format used by MPEG4 and many others:

However, the standard does not include the ability to store the signal summaries and our specific signal types. While we could add these features, these formats are already complicated, greatly reducing the advantage of repurposing them.

Why JLS v2?

This file format is based upon JLS v1 designed for pyjoulescope and used by the Joulescope test instrument. We leveraged the lessons learned from v1 to make v2 better, faster, and more extensible.

The JLS v1 format has been great for the Joulescope ecosystem and has accomplished the objective of long data captures (days) with fast sampling rates (MHz). However, it now has a long list of issues including:

  • Inflexible storage format (always current, voltage, power, current range, GPI0, GPI1).
  • Unable to store from multiple sources.
  • Unable to store other sources and signals.
  • No annotation support: 41, 93.
  • Inflexible user data support.
  • Inconsistent performance across sampling rates, zoom levels, and file sizes: 48, 103.
  • Unable to correlate sample times with UTC: 55.

The JLS v2 file format addressed all of these issues, dramatically improved performance, and added new capabilities, such as signal compression.

How?

At its lowest layer, JLS is an enhanced tag-length-value (TLV) format. TLV files form the foundation of many reliable image and video formats, including MPEG4 and PNG. The enhanced header contains additional fields to speed navigation and improve reliability. The JLS file format calls each TLV a chunk. The enhanced tag-length component the chunk header or simply header. The file also contains a file header, not to be confused with the chunk header. A chunk may have zero payload length, in which case the next header follows immediately. Otherwise, a chunk consists of a header followed by a payload.

The JLS file format defines sources that produce data. The file allows the application to clearly define and label the source. Each source can have any number of associated signals.

Signals are 1-D sequences of values over time consisting of a single, fixed data type. Each signal can have multiple tracks that contain data associated with that signal. The JLS file supports two signal types: fixed sample rate (FSR) and variable sample rate (VSR). FSR signals store their sample data in the FSR track using FSR_DATA and FSR_SUMMARY. FSR time is denoted by samples using timestamp. FSR signals also support:

  • Sample time to UTC time mapping using the UTC track.
  • Annotations with the ANNOTATION track.

VSR signals store their sample data in the VSR track. VSR signals specify time in UTC (wall-clock time). VSR signals also support annotations with the ANNOTATION track. The JLS file format supports VSR signals that only use the ANNOTATION track and not the VSR track. Such signals are commonly used to store UART text data where each line contains a UTC timestamp.

Signals support DATA chunks and SUMMARY chunks. The DATA chunks store the actual sample data. The SUMMARY chunks store the reduced statistics, where each statistic entry represents multiple samples. FSR tracks store the mean, min, max, and standard deviation. Although standard deviation requires the writer to compute the square root, standard deviation keeps the same units and bit depth requirements as the other fields. Variance requires twice the bit size for integer types since it is squared.

Before each SUMMARY chunk, the JLS file will contain the INDEX chunk which contains the starting time and offset for each chunk that contributed to the summary. This SUMMARY chunk enables fast O(log n) navigation of the file. For FSR tracks, the starting time is calculated rather than stored for each entry.

The JLS file format design supports SUMMARY of SUMMARY. It supports the DATA and up to 15 layers of SUMMARIES. timestamp is given as a 64-bit integer, which allows each summary to include only 20 samples and still support the full 64-bit integer timestamp space. In practice, the first level summary increases a single value to 4 values, so summary steps are usually 50 or more.

Many applications, including the Joulescope UI, prioritize read performance, especially visualizing the waveform quickly following open, over write performance. Waiting to scan through a 1 TB file is not a valid option. The reader opens the file and scans for sources and signals. The application can then quickly load the highest summary of summaries for every signal of interest. The application can very quickly display this data, and then start to retrieve more detailed information as requested.

Example file structure

sof
header
USER_DATA(0, NULL)    // Required, point to first real user_data chunk
SOURCE_DEF(0)         // Required, internal, reserved for global annotations
SIGNAL_DEF(0, 0.VSR)  // Required, internal, reserved for global annotations
TRACK_DEF(0.VSR)
TRACK_HEAD(0.VSR)
TRACK_DEF(0.ANNO)
TRACK_HEAD(0.ANNO)
SOURCE_DEF(1)         // input device 1
SIGNAL_DEF(1, 1, FSR) // our signal, like "current" or "voltage"
TRACK_DEF(1.FSR)
TRACK_HEAD(1.FSR)
TRACK_DEF(1.ANNO)
TRACK_HEAD(1.ANNO)
TRACK_DEF(1.UTC)
TRACK_HEAD(1.UTC)
USER_DATA           // just because
TRACK_DATA(1.FSR)
TRACK_DATA(1.FSR)
TRACK_DATA(1.FSR)
TRACK_DATA(1.FSR)
TRACK_INDEX(1.FSR, lvl=0)
TRACK_SUMMARY(1.FSR, lvl=1)
TRACK_DATA(1.FSR)
TRACK_DATA(1.FSR)
TRACK_DATA(1.FSR)
TRACK_DATA(1.FSR)
TRACK_INDEX(1.FSR, lvl=0)
TRACK_SUMMARY(1.FSR, lvl=1)
TRACK_DATA(1.FSR)
TRACK_DATA(1.FSR)
TRACK_DATA(1.FSR)
TRACK_DATA(1.FSR)
TRACK_INDEX(1.FSR, lvl=0)
TRACK_SUMMARY(1.FSR, lvl=1)
TRACK_INDEX(1.FSR, lvl=1)
TRACK_SUMMARY(1.FSR, lvl=2)
USER_DATA           // just because
END
eof

Note that TRACK_HEAD(1.FSR) points to the first TRACK_INDEX(1.FSR, lvl=0) and TRACK_INDEX(1.FSR, lvl=1). Each TRACK_DATA(1.FSR) is in a doubly-linked list with its next and previous neighbors. Each TRACK_INDEX(1.FSR, lvl=0) is likewise in a separate doubly-linked list, and the payload of each TRACK_INDEX points to the summarized TRACK_DATA instances. TRACK_INDEX(1.FSR, lvl=1) points to each TRACK_INDEX(1.FSR, lvl=0) instance. As more data is added, the TRACK_INDEX(1.FSR, lvl=1) will also get added to the INDEX chunks at the same level.

Resources

References

License

This project is Copyright © 2017-2023 Jetperch LLC and licensed under the permissive Apache 2.0 License.

Download files

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

Source Distribution

pyjls-0.15.0.tar.gz (373.7 kB view details)

Uploaded Source

Built Distributions

pyjls-0.15.0-cp313-cp313-win_amd64.whl (212.4 kB view details)

Uploaded CPython 3.13Windows x86-64

pyjls-0.15.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

pyjls-0.15.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

pyjls-0.15.0-cp313-cp313-macosx_10_13_universal2.whl (448.1 kB view details)

Uploaded CPython 3.13macOS 10.13+ universal2 (ARM64, x86-64)

pyjls-0.15.0-cp312-cp312-win_amd64.whl (211.7 kB view details)

Uploaded CPython 3.12Windows x86-64

pyjls-0.15.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

pyjls-0.15.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

pyjls-0.15.0-cp312-cp312-macosx_10_13_universal2.whl (450.3 kB view details)

Uploaded CPython 3.12macOS 10.13+ universal2 (ARM64, x86-64)

pyjls-0.15.0-cp311-cp311-win_amd64.whl (217.3 kB view details)

Uploaded CPython 3.11Windows x86-64

pyjls-0.15.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

pyjls-0.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.4 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

pyjls-0.15.0-cp311-cp311-macosx_10_9_universal2.whl (464.8 kB view details)

Uploaded CPython 3.11macOS 10.9+ universal2 (ARM64, x86-64)

pyjls-0.15.0-cp310-cp310-win_amd64.whl (216.7 kB view details)

Uploaded CPython 3.10Windows x86-64

pyjls-0.15.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

pyjls-0.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

pyjls-0.15.0-cp310-cp310-macosx_10_9_universal2.whl (459.4 kB view details)

Uploaded CPython 3.10macOS 10.9+ universal2 (ARM64, x86-64)

File details

Details for the file pyjls-0.15.0.tar.gz.

File metadata

  • Download URL: pyjls-0.15.0.tar.gz
  • Upload date:
  • Size: 373.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for pyjls-0.15.0.tar.gz
Algorithm Hash digest
SHA256 b7746f805ffe71aa7c7dd25269fdc745a61d742e735c2857056298cb14205460
MD5 911995b5596741ab07606a39ebfd60ad
BLAKE2b-256 30866b6b80a01de8b782b3229f3dc9d358a8fe7ef98da50335fb52829c623cab

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.15.0.tar.gz:

Publisher: packaging.yml on jetperch/jls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyjls-0.15.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: pyjls-0.15.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 212.4 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for pyjls-0.15.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 4766539213e71a91a78a4717332f0932cd6e38fdd467a1bb6daf2e8ef7f9807d
MD5 0da4720be84eb3ee79870c0c86b33f24
BLAKE2b-256 bb9876e981450a7e02a49fb62a2a88fdbcfb98ba3316f446d194259603927b63

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.15.0-cp313-cp313-win_amd64.whl:

Publisher: packaging.yml on jetperch/jls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyjls-0.15.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pyjls-0.15.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 fd0b9796d5409f8a04277cf4d58f8904660e30b9958176c0283c8cf402016ebc
MD5 bd6baf47aeb72df4311e1bc45d724b56
BLAKE2b-256 7c9b12f6a8432b88513282bbe07c96926f69207defddbda646f2da4198365955

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.15.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: packaging.yml on jetperch/jls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyjls-0.15.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pyjls-0.15.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 7647e18550475bcc45853ec836a0a4daecbd4a6ff16ed624e58bcfc7dd4ef0a4
MD5 795e955155a0f4094b8b7aeba9b632ed
BLAKE2b-256 81e0a1705f3132539af6b3314140be603758ca20324cbbf37db198e3829e56ed

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.15.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: packaging.yml on jetperch/jls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyjls-0.15.0-cp313-cp313-macosx_10_13_universal2.whl.

File metadata

File hashes

Hashes for pyjls-0.15.0-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 410074bf1017ff9cb19e24234548ef54d838a961c5dfa244c956585bff541fe5
MD5 1671d20ea87b87c2bc12a8035a0706b3
BLAKE2b-256 cb4d2ecfe9a5e79e7e6849306884a13267ddff90ca549e7a52a1a835d9fa4484

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.15.0-cp313-cp313-macosx_10_13_universal2.whl:

Publisher: packaging.yml on jetperch/jls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyjls-0.15.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: pyjls-0.15.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 211.7 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for pyjls-0.15.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 32a001239a564deb3ee8b6f6b9b8aae4a94d9cbfbe17ef08c2794aac1240d6cc
MD5 53f94fc03974826f64c28886317be9f9
BLAKE2b-256 0aadc5f351388e13cee0d3a497de213b0e1e5c43a834f5342343932aaf5fac9e

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.15.0-cp312-cp312-win_amd64.whl:

Publisher: packaging.yml on jetperch/jls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyjls-0.15.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pyjls-0.15.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 24b4df221e0a315e71043be37c8b82d6803ed5c80f20e6c62ad31baf3418f7ec
MD5 093eb378bd4295b385bb220f4935f845
BLAKE2b-256 b59a44c9810818b5fb46b984889fc70ac93d62ffe2a6a5d70a35c613fcaedf01

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.15.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: packaging.yml on jetperch/jls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyjls-0.15.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pyjls-0.15.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 5ef198a8c1eb745edc1c3f5159aef409d7317e14f0bb2f26a5c7b25417e663d2
MD5 2faafb5a0fe46ff4dbfa3c4ddff764e4
BLAKE2b-256 a4c66afb5e8143e84f5b876d448e230f1853aaeb7440370d01d75b4ef6d7bf22

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.15.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: packaging.yml on jetperch/jls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyjls-0.15.0-cp312-cp312-macosx_10_13_universal2.whl.

File metadata

File hashes

Hashes for pyjls-0.15.0-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 a21718811f9c5d27c98bced7e33c82f3abe22ffeab59d02b019567334570c5a4
MD5 5c39abc1fb15df7c682790f57ad73c9a
BLAKE2b-256 3cc360d523f1eb156edb3e887261af8a5782ef5b41d1f01f3ed29028b039221f

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.15.0-cp312-cp312-macosx_10_13_universal2.whl:

Publisher: packaging.yml on jetperch/jls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyjls-0.15.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: pyjls-0.15.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 217.3 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for pyjls-0.15.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 0e3d40092c4a6dfaffe97dc0814720a6e012b3221cd4ab8850fdab8f3d601700
MD5 ab539c08455cdc1081499df196f30531
BLAKE2b-256 5c8c75ab91e3091ed4c1f93c2a4def42f722f1fcdc89f7afac7cab0937648e8c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.15.0-cp311-cp311-win_amd64.whl:

Publisher: packaging.yml on jetperch/jls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyjls-0.15.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pyjls-0.15.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 130cf10377d814f9e82a6c8d42deff008fda787bf9f376cea55c57e6ff9ebb52
MD5 66c4f89cc3125acd17da946270145325
BLAKE2b-256 ff819951744f1fb3c73816afacf81077ac66210be8efe22c783c1bc50be4953a

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.15.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: packaging.yml on jetperch/jls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyjls-0.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pyjls-0.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 5e810c8b0d3521bb1ec933241c9d3064148c1b6effde25e9d442a97ff9783664
MD5 975933b7b2ed26de7c7c9bfe2ceca309
BLAKE2b-256 e1bdd5378e6cc2a86176656c487f5da6c3f39f5881907e581e41a586411d8760

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: packaging.yml on jetperch/jls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyjls-0.15.0-cp311-cp311-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for pyjls-0.15.0-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 eb36133a686e8a737ed2f4f50cb592c2fe21e40cc2e1246b85aa743e5e7cbe12
MD5 9e21e4bd7450cb2b80f997b9bc51024e
BLAKE2b-256 161dd20b0d1826f5919b4219b6edc61427478ba5f614089faaffb557aae09192

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.15.0-cp311-cp311-macosx_10_9_universal2.whl:

Publisher: packaging.yml on jetperch/jls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyjls-0.15.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: pyjls-0.15.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 216.7 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for pyjls-0.15.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 dc4cbdf6f23fb4479f55eec4c464726d24aca303ac8a2c9caff681ae9ed4e4c0
MD5 b2bac39499ea7ae17d39a72c420a7026
BLAKE2b-256 e1bf0d70c62a4eb3c5d5e546d2020bc5a4ec648e83f4303e1d05a9391590a4ec

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.15.0-cp310-cp310-win_amd64.whl:

Publisher: packaging.yml on jetperch/jls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyjls-0.15.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pyjls-0.15.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 aeb0944e5b9527aaafcdce28ac070618f95c02fa4be47dd255b99d6872139fa5
MD5 93c8043078f258ad967cff11c04b50a3
BLAKE2b-256 13e5f2573408500ec5b071faaf8085d76663ced5f51bde7faefdacdbfe6fe8da

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.15.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: packaging.yml on jetperch/jls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyjls-0.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pyjls-0.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 2cbc88f5ffedcc7cd2f09ed90bf0948fde93bc40f4577508fdc27b2e1b5fc2c2
MD5 3b42fcafa8c7259259b55da268cb3da6
BLAKE2b-256 ee4bfce28ae3ef48c111f5988f4f3ee2f72abe85dbd739710d8b13c855e43c01

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: packaging.yml on jetperch/jls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyjls-0.15.0-cp310-cp310-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for pyjls-0.15.0-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 f6586ae218d1099cc265d31d3345ce7748da41059b032be85b88fdae54d70678
MD5 63541a5d5dd9f372c1f207308e1d1864
BLAKE2b-256 1bc74d02e880ac0be79d7f700b6f5fdd36a1bda0620366e3766ed2442e525438

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.15.0-cp310-cp310-macosx_10_9_universal2.whl:

Publisher: packaging.yml on jetperch/jls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page