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.17.0.tar.gz (382.4 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.17.0-cp314-cp314-win_arm64.whl (188.2 kB view details)

Uploaded CPython 3.14Windows ARM64

pyjls-0.17.0-cp314-cp314-win_amd64.whl (213.2 kB view details)

Uploaded CPython 3.14Windows x86-64

pyjls-0.17.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.17.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.17.0-cp314-cp314-macosx_10_15_universal2.whl (460.3 kB view details)

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

pyjls-0.17.0-cp313-cp313-win_arm64.whl (181.5 kB view details)

Uploaded CPython 3.13Windows ARM64

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

Uploaded CPython 3.13Windows x86-64

pyjls-0.17.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.17.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.17.0-cp313-cp313-macosx_10_13_universal2.whl (458.1 kB view details)

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

pyjls-0.17.0-cp312-cp312-win_arm64.whl (181.5 kB view details)

Uploaded CPython 3.12Windows ARM64

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

Uploaded CPython 3.12Windows x86-64

pyjls-0.17.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.17.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.17.0-cp312-cp312-macosx_10_13_universal2.whl (459.7 kB view details)

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

pyjls-0.17.0-cp311-cp311-win_arm64.whl (187.8 kB view details)

Uploaded CPython 3.11Windows ARM64

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

Uploaded CPython 3.11Windows x86-64

pyjls-0.17.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.17.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.17.0-cp311-cp311-macosx_10_9_universal2.whl (465.3 kB view details)

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

File details

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

File metadata

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

File hashes

Hashes for pyjls-0.17.0.tar.gz
Algorithm Hash digest
SHA256 6d1bc608b6a8988d3df9e9fcc18dbc0ca5acb05e1d21bb7f0ff7bbd366ebabe5
MD5 cb3538f6d97b8bd81773726d89a351cc
BLAKE2b-256 d23962d2eb87d8c012effc0668e7dcdf2f299f279ff7d464d0641addd74b9cb3

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.17.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.17.0-cp314-cp314-win_arm64.whl.

File metadata

  • Download URL: pyjls-0.17.0-cp314-cp314-win_arm64.whl
  • Upload date:
  • Size: 188.2 kB
  • Tags: CPython 3.14, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pyjls-0.17.0-cp314-cp314-win_arm64.whl
Algorithm Hash digest
SHA256 24beab91a93fa0313d44e3c10ecfdc59191a6aa6e00e80cfe90c86f1af631058
MD5 00fbf46cfe3d50372d36204c834b51f7
BLAKE2b-256 6a551080cc963ac5c8a684712f16753965b005e9677d2a166a901fc33a8014a9

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pyjls-0.17.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 213.2 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.17.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 c7ce12bcdcb630cac7b07ebfb7da98c655c319c1c15e07d2ea5b2326596aaca1
MD5 a448e910fc49dd87441b21d2c7f70e22
BLAKE2b-256 5560a2b67018f80bbb449838e8d89e50e0739f75e7c8984e62d8f3168f253ea2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyjls-0.17.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f4cffd551fb2350ae65a12f378b2c1406d7f98987c311ac005d9a42921c892b7
MD5 19714c8f862ce8493dd24b521c8019c3
BLAKE2b-256 d506673923c807599367b7e71c05983c4c613f3aadbfc47dc1f78ee1ba91eff9

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.17.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.17.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pyjls-0.17.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7dbca205085c9becb5bf2d5a41035aab5add7070d89543414dbee1ff527807c8
MD5 4c8c5e8f4f0f0a5811275f70db8ce9b9
BLAKE2b-256 e6f633ff0d47a93efb2d83289b38f0959319aeb54a72214ccf43780b73be1453

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.17.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.17.0-cp314-cp314-macosx_10_15_universal2.whl.

File metadata

File hashes

Hashes for pyjls-0.17.0-cp314-cp314-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 383beb24284ef092c54fc01f815c3f06f92d08447d6bfab68bd4322970e5a805
MD5 d0b4f7e921458717915efde6442cc79f
BLAKE2b-256 e7cfd8cdc04ca3b9f80027249f4e2e80a97675155b1cb13305e1e546594ad03d

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.17.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.17.0-cp313-cp313-win_arm64.whl.

File metadata

  • Download URL: pyjls-0.17.0-cp313-cp313-win_arm64.whl
  • Upload date:
  • Size: 181.5 kB
  • Tags: CPython 3.13, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pyjls-0.17.0-cp313-cp313-win_arm64.whl
Algorithm Hash digest
SHA256 724f8c45fb671dfe7465b7a36793ba54f754239e53720ffd859c93bc4649ed2f
MD5 dc1d1354151507ad01763e9e1df36d97
BLAKE2b-256 b97d149c8ceeebb9d6215ae396e9e52ee5606ba58eaa7fce619d49a5603b39d8

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.17.0-cp313-cp313-win_arm64.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.17.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: pyjls-0.17.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.17.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 4c8f8ba9f04883abba413df872f0919a021cd4a9a396cff62daf27031861626a
MD5 2d81f7ed8c2fbe606d43b7708c3d9feb
BLAKE2b-256 8e9f46f69f84509a7accf5032281437ee0be8d418459078ba63fa28074c51668

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyjls-0.17.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e2aca51eede207a7a268bb573f7d88c38bde2e97f14d51c49a22259a937a8037
MD5 7bfcd3c298ffe4f9dc8b2618674a309b
BLAKE2b-256 8b57e71904ede1e9fa445fa2cf8764cc5c8998c27ca025d9e5b6e61cf6729aad

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.17.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.17.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pyjls-0.17.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 130d411f776dfb112181030228865cf71e5be130817b255cf9ce29f86ce08193
MD5 a3314e8ee95adf4b1e7758ebd6040928
BLAKE2b-256 8a63ef4eacf61ef03006c873d299e751829a433d4739740b458e34a939c1be0f

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.17.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.17.0-cp313-cp313-macosx_10_13_universal2.whl.

File metadata

File hashes

Hashes for pyjls-0.17.0-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 6ec0138b4cd1d3f446927df256c0d62e33527a67de76cafda11c40da83106667
MD5 8562913fac9a52742d057fc7fea0581b
BLAKE2b-256 7162b74d1007c018db9234975b4c435b874f8c77d2baa928205de3e24e27dd54

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.17.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.17.0-cp312-cp312-win_arm64.whl.

File metadata

  • Download URL: pyjls-0.17.0-cp312-cp312-win_arm64.whl
  • Upload date:
  • Size: 181.5 kB
  • Tags: CPython 3.12, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pyjls-0.17.0-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 84e2c8c3cd8149d97d43e03143835110e86451187f6e6d50e7eb4e34cc81e66e
MD5 9dd16c56e82142f4522e5c1872fc6e76
BLAKE2b-256 e577de048db856e259fa3fb37d71f348b83249109e5d4e62a2537415a3f8de35

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pyjls-0.17.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.17.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 af88e21e7dcdf044372180e92370c1cd345fcbf5bd909722c889e8dcc14d6cc8
MD5 bf0c7849bb47979d5143dd3dcf2fb5ee
BLAKE2b-256 fcb47a86c0023d34ae17fe447b5083033ff304493183c0eb11f95748ae24307e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyjls-0.17.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d6233a3dfa9573f342a32ebcdb347a433049f77e9d1dad5ce9e2c1b145904520
MD5 c50f3c77036965cf9f6f7d1549fef898
BLAKE2b-256 233871840cb841f646cc75b66a4f554ae63b798c7ac221aa2a8fdef160911868

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.17.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.17.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pyjls-0.17.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 51e0909fba6e1f1cd90352dbdac96846d3852d6ba960063ff2dcf277e321e6e4
MD5 5ce34eb04bd1054a601b1baface0ad75
BLAKE2b-256 f369cd862a73582e6c79b018881a05de189b25d31086bb091a9e6a4830c085fa

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.17.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.17.0-cp312-cp312-macosx_10_13_universal2.whl.

File metadata

File hashes

Hashes for pyjls-0.17.0-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 9884e00e54b23aed4b9dc418219e38a18dc4bbc5d566da2d9581b225e8278286
MD5 a1bad7245f7c209c6c3a0428b006f647
BLAKE2b-256 5494721d8c619a165b46910ef183dbbda3aa117c55c72c37da90141ab3eac9ee

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.17.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.17.0-cp311-cp311-win_arm64.whl.

File metadata

  • Download URL: pyjls-0.17.0-cp311-cp311-win_arm64.whl
  • Upload date:
  • Size: 187.8 kB
  • Tags: CPython 3.11, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pyjls-0.17.0-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 817e86d390fafc0373b48d6989bb2924a06003f6975592970df7f0ed6afd214c
MD5 ab92805a00ccd3b12cde86bc513863f2
BLAKE2b-256 2dc1e11159bb2e546e30e216b289b4e0a56920ae3e6d05f1a4d8ea4f07dc3815

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pyjls-0.17.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.17.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 4ce305e13d1f518c91a64089a0380ada943b4a0295f6f9ac8f179541573579ff
MD5 9f16108e811cf1b60ffcc39e61e60789
BLAKE2b-256 d8bf7c7bb343f22e9f93fb52d869d42d6c787a89b9ee250510f901786be0d14e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyjls-0.17.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b57d34e66080702dcda86d6e3382fd9729e0e243b0567d6617b3b492e23249e0
MD5 db48e834f81f48a77176f1c7341a4e70
BLAKE2b-256 5d98ba5646bbade061e21e103c22e5007ad55c988455a2baa4c8962d6e2b4887

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.17.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.17.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pyjls-0.17.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d4f61d71bcdc1ad685f61bc33e375022c6dc5834756c6f4bae2dc579161e11b2
MD5 586c3f3ca0127aa0c8a2eaf370249bb1
BLAKE2b-256 c77e3a962b40ad11e4eab02c90922ec8a4a9b2545c5134340c6c9168252c6635

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjls-0.17.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.17.0-cp311-cp311-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for pyjls-0.17.0-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 3dfd28605685d3ce5e6d9b5091db280a515444f75b7cea0227a5eb4fc734979a
MD5 a0d87a69c07a39b44cbcc8e0070e0ce0
BLAKE2b-256 2b0d1a4e7063bc4f455ca170da86adc50240bdc4ae60b909280ce2770cd19636

See more details on using hashes here.

Provenance

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