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.16.0.tar.gz (382.2 kB view details)

Uploaded Source

Built Distributions

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

pyjls-0.16.0-cp314-cp314-win_amd64.whl (213.3 kB view details)

Uploaded CPython 3.14Windows x86-64

pyjls-0.16.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.3 MB view details)

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

pyjls-0.16.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.3 MB view details)

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

pyjls-0.16.0-cp314-cp314-macosx_10_15_universal2.whl (460.5 kB view details)

Uploaded CPython 3.14macOS 10.15+ universal2 (ARM64, x86-64)

pyjls-0.16.0-cp313-cp313-win_amd64.whl (208.7 kB view details)

Uploaded CPython 3.13Windows x86-64

pyjls-0.16.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.4 MB view details)

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

pyjls-0.16.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.3 MB view details)

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

pyjls-0.16.0-cp313-cp313-macosx_10_13_universal2.whl (458.2 kB view details)

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

pyjls-0.16.0-cp312-cp312-win_amd64.whl (207.8 kB view details)

Uploaded CPython 3.12Windows x86-64

pyjls-0.16.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.4 MB view details)

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

pyjls-0.16.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.3 MB view details)

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

pyjls-0.16.0-cp312-cp312-macosx_10_13_universal2.whl (459.8 kB view details)

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

pyjls-0.16.0-cp311-cp311-win_amd64.whl (213.5 kB view details)

Uploaded CPython 3.11Windows x86-64

pyjls-0.16.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.4 MB view details)

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

pyjls-0.16.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.4 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

pyjls-0.16.0-cp311-cp311-macosx_10_9_universal2.whl (465.6 kB view details)

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

File details

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

File metadata

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

File hashes

Hashes for pyjls-0.16.0.tar.gz
Algorithm Hash digest
SHA256 523d692aaa0267b3eb046649ee5ee3ab63ac8a0b085db3603b10ec0f197dfdbb
MD5 7c1bfc51cf49966965fd3406526303ad
BLAKE2b-256 889238957b65c72bc8593504b41ac33492be3fcb3ee2e8975621ad3255de1cf4

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.16.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.16.0-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: pyjls-0.16.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 213.3 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pyjls-0.16.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 3249740bd1a3e6c2e90d3465f65e8e3f13b22eaf55bad467e3b815f4fe72a198
MD5 9a962d2c9576af2ecd4e7aa001efd815
BLAKE2b-256 3f18e47a664ea0b2027128eef1a7334bf43bd0dfde3eca72cba26cf015c82190

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.16.0-cp314-cp314-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.16.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyjls-0.16.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 316a080e22a6a2059bc453302c07ca58131a77f5ecc5cbf8a13fdcad2d99f448
MD5 1cc86ce6ac86852f67ac9953a45121e2
BLAKE2b-256 c9f94c7902448f99c89efe19a382e55434dade368678655998905c30cb424eb7

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.16.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_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.16.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pyjls-0.16.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 270bb2bbe6a70ed23d56075f328caba71e02750d35e3a4267b66a3d347bce012
MD5 e5fb133e1db2c8bff1fdb8256d3ba77b
BLAKE2b-256 4509b1d48aa4f1026b63ba8e556e668bdfbda90f7236574d3f5b77bd0099efaa

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.16.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_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.16.0-cp314-cp314-macosx_10_15_universal2.whl.

File metadata

File hashes

Hashes for pyjls-0.16.0-cp314-cp314-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 ba504b4b5e1716881a11bcbf44e5d9ea915766fd9801b3ea88ce10fcedc26697
MD5 bcc27d492fbe5bbe330c271eef7dda5b
BLAKE2b-256 7047439dd8c0ff03f761020bd1197a4d099d49a2de999b0367385e48dbdd1d75

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.16.0-cp314-cp314-macosx_10_15_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.16.0-cp313-cp313-win_amd64.whl.

File metadata

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

File hashes

Hashes for pyjls-0.16.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 57da769dc6701e3f2a00efabd1139151a8b108a3f6646571066be4025e9d7c6e
MD5 b7b46e83990eec41e69a464e2d7b8f7f
BLAKE2b-256 57c727fd6ceb8b7c4dcb976aef4ad48ee2af94f9c8cf8fd601a25667f348b7bb

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.16.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.16.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyjls-0.16.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 20cc00128996b79a0804994f6aa7f933f9d37e850a57f2ddb15004c7e25e9fcd
MD5 8c4e99e9d1aad2c93953bc4ae0aecd8e
BLAKE2b-256 269f382b2532c90115e34b12449f6c1d444c8c71f08eebbc347198197ae14342

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.16.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_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.16.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pyjls-0.16.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 09613dc09fbba1b9881807b7a34f7465c06c4df164643ef15810e4d36a977481
MD5 30e2d768012c6aa6be643e8e3b1f68dc
BLAKE2b-256 4db2c24d479ad502bcb2e62b6972d7753ffc41c3d0779825e34a25a4f7a54567

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.16.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_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.16.0-cp313-cp313-macosx_10_13_universal2.whl.

File metadata

File hashes

Hashes for pyjls-0.16.0-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 b8316693de18691bd22d25263053f28d20798ef9cc6386b09a2e47f7a20d59e1
MD5 1c0ea6a9cdf011155bb15aad77c819da
BLAKE2b-256 8a791470924b76cce97968e985669a648eb83ee1de6d31cefcb9665c286090eb

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.16.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.16.0-cp312-cp312-win_amd64.whl.

File metadata

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

File hashes

Hashes for pyjls-0.16.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 267e43817a24962f42b1f12370bbd6ad9614a7402f085fedb95ecc99b4e327fc
MD5 cbacb3d8e435d7fa652ed4c77d3c9f89
BLAKE2b-256 59543a8a524b8003d9c3a42700833a6421099885f0b6b73300ad22d4b711813f

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.16.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.16.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyjls-0.16.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 bfffc6c680d2b0336f0fc89b415360084a8677cfebdb82f294636a0b8bf515db
MD5 a29179a3de68b08af51239e51594be86
BLAKE2b-256 60308406d6f01b32c25af08b9f5983467bba736fd9fb186ff1fde62e0625b80f

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.16.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_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.16.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pyjls-0.16.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 3dcaab9f1d4ed09d9c3911adaee55dd7a90ad04613191dd51cf863881466f948
MD5 174710e9e43c19bd107b4bb4d0561aaa
BLAKE2b-256 02bb1546f13a3ec57c082026927852bb3ac35a7669506b434572e12629bc0b29

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.16.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_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.16.0-cp312-cp312-macosx_10_13_universal2.whl.

File metadata

File hashes

Hashes for pyjls-0.16.0-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 e0ff55221b70432d1041889bcbbac107b7e0438bb5fe1b02b197fb4b029f558c
MD5 e53dbc697103e945f7ed18006dc09519
BLAKE2b-256 c3bbad2c39b4704d44f287f0d10fb20a78bb3f08116b4aa8067ed7bb5145dcdc

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.16.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.16.0-cp311-cp311-win_amd64.whl.

File metadata

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

File hashes

Hashes for pyjls-0.16.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 2ca7eca567ddeb3f8423b35c018190eb42ad297c2df1a44d2277bf6ce2056992
MD5 471c435df27f9c0181f0538630856425
BLAKE2b-256 25bc0e991ee387eca2eca382ba98400141149ab3a3af31bdd9080afef4b22ffb

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.16.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.16.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyjls-0.16.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a1bc631e4c8da5544878ce06781956d1fee99f5e159bf4c713911bcd767c8593
MD5 58242f7b18064c8c2af8ac7e8a4625f5
BLAKE2b-256 f6e9bea40980f7a3129131970572ed770cadf87ae7dc044558725362ba85f794

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.16.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_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.16.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pyjls-0.16.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 ae9a48d542bec0b393631c47af4b560c769ee2b8959444649d6b39e39c57c67f
MD5 d356ebb2080217df0997018154be60cf
BLAKE2b-256 ed20a47e1f2df15b71f7c3a4791449ed7c5b27343fd88594e9a768a66fd10572

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.16.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_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.16.0-cp311-cp311-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for pyjls-0.16.0-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 1d9fdb2925ba42adb6b84fcee1aa6481c4e9d4665f28b14cda3d4ae895c28d11
MD5 bb4f4d379b031ba5df70d2c5dbf65025
BLAKE2b-256 f776c290ce04c57ed2dba7ffd04ee21757d8320485c4fcc5347ece370a1fbffd

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.16.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.

Supported by

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