Skip to main content

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.18.0.tar.gz (398.3 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.18.0-cp314-cp314-win_arm64.whl (196.4 kB view details)

Uploaded CPython 3.14Windows ARM64

pyjls-0.18.0-cp314-cp314-win_amd64.whl (223.6 kB view details)

Uploaded CPython 3.14Windows x86-64

pyjls-0.18.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.4 MB view details)

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

pyjls-0.18.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.4 MB view details)

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

pyjls-0.18.0-cp314-cp314-macosx_10_15_universal2.whl (474.1 kB view details)

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

pyjls-0.18.0-cp313-cp313-win_arm64.whl (189.2 kB view details)

Uploaded CPython 3.13Windows ARM64

pyjls-0.18.0-cp313-cp313-win_amd64.whl (218.4 kB view details)

Uploaded CPython 3.13Windows x86-64

pyjls-0.18.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.18.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.4 MB view details)

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

pyjls-0.18.0-cp313-cp313-macosx_10_13_universal2.whl (472.7 kB view details)

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

pyjls-0.18.0-cp312-cp312-win_arm64.whl (189.3 kB view details)

Uploaded CPython 3.12Windows ARM64

pyjls-0.18.0-cp312-cp312-win_amd64.whl (217.7 kB view details)

Uploaded CPython 3.12Windows x86-64

pyjls-0.18.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.18.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.4 MB view details)

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

pyjls-0.18.0-cp312-cp312-macosx_10_13_universal2.whl (474.1 kB view details)

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

File details

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

File metadata

  • Download URL: pyjls-0.18.0.tar.gz
  • Upload date:
  • Size: 398.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for pyjls-0.18.0.tar.gz
Algorithm Hash digest
SHA256 a0c363cc4954d673215384d22ec19227c33893f688b799bdb2c4ca73d9353f7b
MD5 55db719114f9612a2812c835ab3b6b26
BLAKE2b-256 7d6102f1ab69050f783d1f28a48e84781d92e0c63fa3fcdc226661c4eec0cb88

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pyjls-0.18.0-cp314-cp314-win_arm64.whl
  • Upload date:
  • Size: 196.4 kB
  • Tags: CPython 3.14, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for pyjls-0.18.0-cp314-cp314-win_arm64.whl
Algorithm Hash digest
SHA256 84675d79ffdc072ec285e04d222aef7206015ada107f721b8e245e9f5dfc0b01
MD5 af92d539d49af6c08df0fed16c61dc7a
BLAKE2b-256 0ab33f0788e5503df6992b44fad3c5aa1a49fa37922de8522634496f2cb873c4

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pyjls-0.18.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 223.6 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for pyjls-0.18.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 7a77073d5c4f6d7b2a72032a0fa0ae2655588685682da26b91862e3f7cf2a89e
MD5 dd6d980b4ce1ab96b6702d67fcc034bf
BLAKE2b-256 c191ee368fb40c6d6dd474cd553ee60cb32cfd0bbbe97d39a58c6d88a046c8c9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyjls-0.18.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2b08dc2c7246a941df28c559e3c7847583e96c705ec329459c06efe9e06e32d8
MD5 a5c86431c45b6f4acc45cf53163cb48b
BLAKE2b-256 9088f1ff92a5647800ff3743b49eef74d15d10375a2d726daaef3fa4cf8e42f0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyjls-0.18.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 75ac6369ca9cc22e2458084b31832df7a8c060d4cb005a724ab288dd535285b6
MD5 cf29a87dc7a1d5294b7654a7b97348d7
BLAKE2b-256 28e4fe69743852e04102bfac2ade401eb7f1ea5d2d1d8143ec45794a2d84c272

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyjls-0.18.0-cp314-cp314-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 bc3e7f0165999deb0c95fdb7f0ef0e88900ceba990a50447719a21fc509be83c
MD5 1eecd1cf27cf32285d0eab29c407e82c
BLAKE2b-256 98b2b3d8b53621f9c9de97d1e01c9e01b2fea743d19e213dd1196565027139eb

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pyjls-0.18.0-cp313-cp313-win_arm64.whl
  • Upload date:
  • Size: 189.2 kB
  • Tags: CPython 3.13, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for pyjls-0.18.0-cp313-cp313-win_arm64.whl
Algorithm Hash digest
SHA256 f87f2737cb7815a3f90a8c667144695f46e466e68379a40392014b39ece17202
MD5 d9c8aac8069e6eadfb8c8bcbc9ef1818
BLAKE2b-256 aa80af57d525586ef4ab8e7d3e8ffe32c2edf6856701abb16f27d9ac75436307

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pyjls-0.18.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 218.4 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for pyjls-0.18.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 c9c3b9a4e100ae67069bc7c9836dca35a4f018808ed2dc02fd77213a1f2005da
MD5 717d4aaa0d6a2ba7aedd3198a1081ab4
BLAKE2b-256 ceeb5bc322f806b559f4a8ee9ba9148c8ec672f575e290204278b519f7ddba50

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyjls-0.18.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 bc84f06280aa41541c1a3f920c844f7e7a2df6030204c4ed3a8a8948b3fd88e5
MD5 3b313d094d3897039eb98023b74be699
BLAKE2b-256 dd8eb680b1f981bf30b9d3d75a651371d55748b7f0ad41c08cbfcbf0e816bcf8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyjls-0.18.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 94e8312d058d5429a5107fbc54c1c5466254ba09069773adafcb7222483c50cc
MD5 05541a0fcf5be4a029313b0688dc1a77
BLAKE2b-256 00694434621a6a579533e089aecb7b3729a861da9e4b335a82f11bab8d257d90

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyjls-0.18.0-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 9c0058191905a98074baa5007ead2ead8f500827cfaf97dce428e1c7ef50b10f
MD5 80c2a75832672c193e725edd195db5e0
BLAKE2b-256 349118b7424e3369320f4f4cf24e4659b4674d01779dd0aae83c0497d8ed837a

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pyjls-0.18.0-cp312-cp312-win_arm64.whl
  • Upload date:
  • Size: 189.3 kB
  • Tags: CPython 3.12, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for pyjls-0.18.0-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 013e059051545ae781c4890c88f93808332a7606b340aebd22b9566e5b4ea36e
MD5 f71fc27464e38fce126fe7996c87f92f
BLAKE2b-256 1edba2a3aa619bbb829c38c0350f91483ccfd34f35df2a20ec4203f49b0cdf76

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pyjls-0.18.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 217.7 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for pyjls-0.18.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 070a2d5da3e30eb47fb61a9366f2460ac3a72a93b43251bf0c5a6c7667f9dfb3
MD5 812bf9ed32deed778352d8bc6e4209b8
BLAKE2b-256 bb771ea47f9c54faac009965a3a7b0664035fcf9d5d195db745672eae49002fa

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyjls-0.18.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c9f6bc2fed948c645dea313842f9c0e67d8eeb389afc6f002ec2d296d8a4d615
MD5 ae01025bab20fe9579a19e725d613794
BLAKE2b-256 a62a78bf09ac5a8131b12f954f62132043ef0bdd5c891ccbeb9a6090f78fb114

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyjls-0.18.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 730b8b073a2e472ec68648609c9df8088c5e2e158b50d421fd3e5936a917dfd2
MD5 a94bfc65477f6f719bdc41f613efcdf7
BLAKE2b-256 560cc42a349bc4c947ea05436a810ab359face35d72d91b48a9ff5ebb82a5ac9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyjls-0.18.0-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 19dbde32839de519b819faf038fea2951dee54e3479bc094b594edd8a2c5c5e7
MD5 84bf6e6fc3814026acab973c1d9b0d39
BLAKE2b-256 5a9007ef4df2841ee9b79205071df5faafc236716b7b0c74d527ba76aa1927df

See more details on using hashes here.

Provenance

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

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