Skip to main content

pycwr

pycwr is a Python toolkit for operational Chinese weather radar workflows. It covers radar base-data reading, geometry, plotting, quality control, hydrometeor classification, single-radar wind retrieval, multi-radar compositing, and export.

Why 1.0.9 matters

1.0.9 continues the first stable release line intended to be usable for production-style usage and GitHub distribution. This patch fixes geographic sections, native-range product plotting, masked-data handling, and radar export edge cases. It also adds compiled wheels for CPython 3.9–3.12 on Linux x86_64, Windows x64, and macOS Intel/Apple silicon. See the 1.0.9 release notes for fixes and validation.

Highlights:

  • compatibility-focused readers for common Chinese weather radar formats
  • clearer PRD data model for sweep inspection and downstream processing
  • aligned and native reflectivity access kept side by side when low-level reflectivity range is longer than Doppler range
  • lighter default dependencies with plotting, QC, web viewer, and interop isolated into the optional full stack
  • stronger geometry and regression coverage
  • built-in single-radar wind retrieval workflows: VAD, VVP, VWP, and gridded horizontal wind volumes
  • improved multi-radar compositing and reference-style CR plotting
  • read_auto and read_PA now correctly recognize and build supported PA files
  • plot_ppi, plot_ppi_map, and the legacy Graph / GraphMap plotting paths now auto-register pycwr colormap names such as CN_ref and CN_vel
  • the PA reader implementation is cleaner internally, with explicit helpers for moment decoding, field padding, and range construction

Installation

Install from PyPI:

python -m pip install pycwr

Install the optional full stack from PyPI:

python -m pip install "pycwr[full]"

Base install:

python -m pip install -r requirements-core.txt
python -m pip install .

Full install:

python -m pip install -r requirements-full.txt
python -m pip install ".[full]"

Notes:

  • pycwr 1.0.9 requires Python >=3.9
  • python -m pip install pycwr is the recommended path for normal users
  • base install is enough for readers, PRD, geometry, interpolation, and NetCDF-style export
  • full install is recommended for plotting, map plotting, QC, Py-ART/xradar interop, and the web viewer
  • upstream arm_pyart and xradar currently require Python >=3.10, so on Python 3.9 the full install still covers plotting, QC, and the web viewer, but not those two optional interop stacks
  • pandas is pinned to <3 in 1.0.9 for release stability
  • source install is still useful when you are developing locally or rebuilding the Cython extension

Rebuild the extension after editing pycwr/core/RadarGridC.pyx:

python setup.py build_ext --inplace

Build release artifacts:

python -m build

5-minute quickstart

Read one radar file and inspect the returned volume:

from pycwr.io import read_auto

radar = read_auto("Z_RADR_I_Z9046_20260317065928_O_DOR_SAD_CAP_FMT.bin.bz2")
print(radar.summary())
print(radar.available_fields())
print(radar.sweep_summary()[0])

Get one field from one sweep:

dBZ0 = radar.get_sweep_field(0, "dBZ")
velocity0 = radar.get_sweep_field(0, "V")

Plot a PPI:

from pycwr.draw import plot_ppi

plot_ppi(radar, field="dBZ", sweep=0, show=True)

Plot a mapped PPI:

from pycwr.draw import plot_ppi_map

plot_ppi_map(radar, field="dBZ", sweep=0, show=True)

Extract a vertical section:

from pycwr.draw import plot_section

plot_section(radar, start=(-50, 0), end=(50, 0), field="dBZ", show=True)

Generate a simple product:

import numpy as np

x = np.arange(-150_000.0, 150_001.0, 1_000.0)
y = np.arange(-150_000.0, 150_001.0, 1_000.0)
radar.add_product_CR_xy(x, y)
print(radar.product)

API map

Module What it is for Recommended starting points
pycwr.io Read and write radar base data read_auto, read_WSR98D, read_SAB, read_CC, read_SC, read_PA
pycwr.core Central volume object, geometry, export helpers PRD, radar.summary(), radar.get_sweep_field()
pycwr.draw Plotting and quick-look figures plot_ppi, plot_ppi_map, plot_rhi, plot_section, plot_vvp, plot_wind_profile
pycwr.qc Dual-pol QC apply_dualpol_qc, run_dualpol_qc
pycwr.retrieve Hydrometeor and wind retrieval classify_hydrometeors, retrieve_vad, retrieve_vvp, retrieve_vwp, retrieve_wind_volume_xy, retrieve_wind_volume_lonlat
pycwr.interp Multi-radar compositing run_radar_network_3d
pycwr.GraphicalInterface Local web viewer create_app, launch

Core object model

All readers return pycwr.core.NRadar.PRD.

The most important parts of PRD are:

  • fields: one xarray.Dataset per sweep
  • scan_info: site and scan metadata
  • extended_fields: native sidecar fields when aligned and native ranges differ
  • product: computed product dataset

Useful inspection helpers:

  • summary(): compact full-volume summary
  • available_fields(sweep=None, range_mode="aligned")
  • sweep_summary()
  • get_sweep_field(sweep, field_name, range_mode="aligned", sort_by_azimuth=False)
  • get_native_sweep_field(sweep, field_name)
  • ordered_az(inplace=False)

Aligned vs native reflectivity

For some low sweeps, reflectivity may exist in two forms:

  • aligned: historical shared grid used by old processing chains
  • native: original reflectivity range before Doppler-driven truncation

Use:

  • range_mode="aligned" for historical compatibility
  • range_mode="native" when full low-level reflectivity coverage matters

Example:

aligned = radar.get_sweep_field(0, "dBZ", range_mode="aligned")
native = radar.get_sweep_field(0, "dBZ", range_mode="native")

Common workflows

Plotting

Recommended public plotting APIs:

from pycwr.draw import (
    plot,
    plot_ppi,
    plot_ppi_map,
    plot_rhi,
    plot_section,
    plot_section_lonlat,
    plot_vvp,
    plot_wind_profile,
)

These functions return an EasyPlotResult with fig, ax, and artist.

Default colormap strategy

pycwr.draw chooses a default colormap from the plotted field when you leave cmap=None.

  • dBZ uses the reflectivity palette such as CN_ref
  • V uses the velocity palette such as CN_vel
  • HCL uses a discrete hydrometeor classification palette
  • unknown fields fall back to viridis

This default strategy is shared by plot_ppi, plot_ppi_map, plot_rhi, plot_section, and the legacy Graph / GraphMap classes.

Recommended usage:

from pycwr.draw import plot_ppi, plot_ppi_map

plot_ppi(radar, field="dBZ", sweep=0, show=True)
plot_ppi_map(radar, field="dBZ", sweep=0, show=True)

Explicit colormap override:

plot_ppi(radar, field="dBZ", sweep=0, cmap="CN_ref", cmap_bins=16, show=True)
plot_ppi_map(radar, field="V", sweep=0, cmap="CN_vel", min_max=(-27.0, 27.0), show=True)

Legacy class-style usage is also supported:

from pycwr.draw.RadarPlot import GraphMap
from cartopy import crs as ccrs

display = GraphMap(radar, ccrs.PlateCarree())
display.plot_ppi_map(ax, 0, "dBZ", cmap="CN_ref")

Notes:

  • CN_ref, CN_vel, and the other pycwr colormap names are registered automatically when plotting starts. You no longer need to "warm up" the plotting module first.
  • If a field is missing in the radar file, plotting raises a field-not-found error. For example, some files may contain dBZ but not V.
  • If you need the raw colormap registry for custom matplotlib work, you can explicitly import pycwr.draw.colormap.

Products

Common PRD product methods:

  • add_product_CR_xy
  • add_product_CAPPI_xy
  • add_product_CAPPI_3d_xy
  • add_product_VIL_xy
  • add_product_ET_xy
  • add_product_CR_lonlat
  • add_product_CAPPI_lonlat
  • add_product_VIL_lonlat
  • add_product_ET_lonlat
  • add_product_VWP

Example:

radar.add_product_CAPPI_xy(x, y, 3000.0)
radar.add_product_VIL_xy(x, y, [1000.0, 2000.0, 3000.0])

Quality control

from pycwr.qc import apply_dualpol_qc

qc_radar = apply_dualpol_qc(radar, inplace=False, clear_air_mode="mask")

Common corrected fields include Zc, ZDRc, PhiDPc, KDPc, and mask fields such as QC_MASK and CLEAR_AIR_MASK when enabled.

Hydrometeor classification

hcl_radar = radar.classify_hydrometeors(
    inplace=False,
    band="C",
    profile_height=[0.0, 2000.0, 4000.0, 8000.0],
    profile_temperature=[24.0, 12.0, 2.0, -16.0],
    confidence_field="HCL_CONF",
)

You can also classify directly from arrays with pycwr.retrieve.classify_hydrometeors(...).

Wind retrieval

pycwr ships four single-radar wind workflows:

  • retrieve_vad: ring-wise harmonic fit on one or more sweeps
  • retrieve_vvp: local least-squares horizontal wind retrieval on one sweep
  • retrieve_vwp: vertical wind profile built from multiple VAD layers
  • retrieve_wind_volume_xy / retrieve_wind_volume_lonlat: fixed-height gridded horizontal wind volume built from multiple VVP sweeps

Quick example:

vad = radar.retrieve_vad(sweeps=[0, 1, 2], max_range_km=40.0, gate_step=4)
vvp = radar.retrieve_vvp(0, max_range_km=20.0, az_num=91, bin_num=5)
vwp = radar.retrieve_vwp(sweeps=[0, 1, 2], max_range_km=40.0, height_step=500.0)
wind = radar.retrieve_wind_volume_xy(
    XRange=np.arange(-20_000.0, 20_001.0, 10_000.0),
    YRange=np.arange(-20_000.0, 20_001.0, 10_000.0),
    level_heights=np.array([500.0, 1000.0, 1500.0]),
    sweeps=[0, 1, 2],
    max_range_km=30.0,
)

The stored profile product path is:

radar.add_product_VWP(sweeps=[0, 1, 2], max_range_km=40.0, height_step=500.0)

Store the gridded horizontal wind volume in radar.product:

radar.add_product_WIND_VOLUME_xy(
    XRange=np.arange(-20_000.0, 20_001.0, 10_000.0),
    YRange=np.arange(-20_000.0, 20_001.0, 10_000.0),
    level_heights=np.array([500.0, 1000.0, 1500.0]),
    sweeps=[0, 1, 2],
)

3-D wind volume: what it is

retrieve_wind_volume_xy and retrieve_wind_volume_lonlat return a single-radar fixed-height horizontal wind volume.

Treat it as:

  • gridded u/v wind on multiple height levels
  • one wind profile for each horizontal grid point
  • a robust diagnostic product built from Doppler radial velocity

Do not treat it as:

  • a full dynamic u/v/w retrieval
  • a dual-Doppler or multi-radar variational wind analysis
  • a substitute for vertical motion retrieval in convective dynamics studies

3-D wind volume: retrieval chain

The operational logic is:

  1. For each requested sweep, pycwr selects the velocity field, preferring corrected velocity when available.
  2. A local VVP is solved on each sweep with a moving azimuth-range window.
  3. Each sweep is summarized and, when sweeps=None or sweeps="auto", the strongest sweeps are selected automatically.
  4. The valid sweep-level VVP samples are interpolated horizontally onto the target grid with inverse-distance weighting.
  5. Fixed-height wind values are reconstructed from the selected sweeps with local vertical aggregation or short-gap linear interpolation.
  6. Diagnostics such as fit residual, support counts, and heuristic quality score are stored with the result.

This makes the product more stable on real radar volumes with missing velocity, weak echo regions, or sweep-to-sweep range differences.

Use:

  • radar.retrieve_wind_volume_xy(...) for Cartesian x/y/z
  • radar.retrieve_wind_volume_lonlat(...) for regular lon/lat grids
  • radar.add_product_WIND_VOLUME_xy(...) or radar.add_product_WIND_VOLUME_lonlat(...) to store the result in radar.product

Recommended defaults for production-style usage:

  • use sweeps=None to enable auto sweep selection
  • use sweeps="all" only when you explicitly want every available sweep
  • set a realistic max_range_km instead of using the whole radar volume
  • increase workers on multi-core machines when the target grid is not tiny

Example with explicit operational settings:

wind = radar.retrieve_wind_volume_xy(
    XRange=np.arange(-60_000.0, 60_001.0, 5_000.0),
    YRange=np.arange(-60_000.0, 60_001.0, 5_000.0),
    level_heights=np.arange(500.0, 3_500.0, 500.0),
    sweeps=None,
    max_range_km=60.0,
    az_num=31,
    bin_num=5,
    azimuth_step=12,
    range_step=6,
    horizontal_radius_m=8_000.0,
    max_horizontal_radius_m=14_000.0,
    horizontal_min_neighbors=3,
    vertical_tolerance_m=400.0,
    max_vertical_gap_m=1_200.0,
    workers=4,
)

3-D wind volume: key arguments

  • XRange, YRange, level_heights: target output grid in meters
  • XLon, YLat: target output grid in degrees for lon/lat mode
  • sweeps: None or "auto" enables auto selection; "all" keeps all sweeps; a list such as [0, 1, 2] forces explicit sweeps
  • max_range_km: strongest first-order control for retrieval stability
  • az_num, bin_num: local VVP window size
  • azimuth_step, range_step: output thinning of the local sweep VVP
  • horizontal_radius_m: horizontal radius used when mapping sweep VVP samples to the target grid
  • max_horizontal_radius_m: optional expanded search radius when local support is sparse
  • vertical_tolerance_m: local height matching tolerance
  • max_vertical_gap_m: maximum allowed vertical interpolation gap
  • workers: process-based parallelism for sweep-level and grid-level work

Practical tuning rules:

  • use a wider az_num when velocity is sparse or noisy
  • keep bin_num modest; too small is noisy and too large oversmooths
  • do not push max_range_km farther than the range where velocity remains reasonably continuous
  • on sparse cases, it is better to slightly increase search radius than to force too many poor sweeps

3-D wind volume: output fields and metadata

The returned dataset includes:

  • u, v: eastward and northward wind components
  • wind_speed, wind_direction
  • fit_rmse: local retrieval residual
  • valid_count: effective sample count
  • source_sweep_count: number of sweeps contributing to the voxel
  • neighbor_count: horizontal support count
  • effective_vertical_support: number of vertically supporting sweep samples
  • sweep_spread_m: vertical spread of supporting sweeps
  • quality_score: heuristic score from 0 to 100
  • quality_flag: 0/1/2/3 for invalid, low-confidence, usable, and high-confidence voxels

Important attrs include:

  • selection_mode
  • requested_sweeps
  • selected_sweeps
  • rejected_sweeps
  • rejected_sweep_reasons
  • workers_used
  • parallel_mode

These attrs are often more informative than the plot itself when diagnosing why a real case contains gaps.

3-D wind volume: quality interpretation

If a real case has large missing areas, that does not automatically mean the algorithm failed.

Common causes are:

  • no precipitation or very weak echo, so there is no valid Doppler velocity
  • poor azimuth coverage in the local window
  • sweep geometry that does not support the requested height well
  • too aggressive a range limit or too small a horizontal search radius

When checking a case, inspect:

  • quality_score and quality_flag
  • fit_rmse
  • valid_count
  • source_sweep_count
  • selected_sweeps and rejected_sweep_reasons

3-D wind volume: performance and parallelism

The workers argument uses process-based parallelism, not Python threads.

In practice:

  • small grids may see little benefit
  • moderate and large grids usually benefit from workers=2 or workers=4
  • very large worker counts may stop scaling once process overhead dominates

For reproducible validation, compare a serial run and a parallel run on the same case and confirm that u, v, and quality_flag match.

Export and interop

Common export helpers:

  • radar.to_wsr98d(...)
  • radar.to_nexrad_level2_msg31(...)
  • radar.to_nexrad_level2_msg1(...)
  • radar.to_pyart_radar(...)
  • radar.to_xradar(...)
  • radar.to_cfgridded_netcdf(...)

Use these when you need to move pycwr data into Py-ART, xradar, or other NetCDF-style workflows.

Multi-radar compositing

from pycwr.interp import run_radar_network_3d

This entry point builds 3D network products on a regular lon/lat grid and can write NetCDF directly. It is the recommended high-level interface for network CR and CAPPI workflows.

Web viewer

from pycwr.GraphicalInterface import create_app, launch

Or use the script:

python scripts/LaunchGUI.py

The viewer is local-only by design and requires a token for API access.

Release notes for users

For 1.0.9, the most important user-visible behavior rules are:

  • radar reading returns one stable PRD object across supported formats
  • low-level reflectivity can now be queried explicitly in aligned or native mode
  • QC and hydrometeor classification can write corrected fields back into PRD
  • single-radar wind retrieval is now part of the public API, including gridded horizontal wind volumes
  • multi-radar compositing has a documented high-level workflow
  • packaging is split into base and full dependency sets for lower installation friction
  • PA samples matching the supported format markers are routed through read_PA instead of being misidentified as WSR98D
  • default plotting now resolves pycwr colormap names consistently across both the easy plotting API and legacy class-style plotting

Metadata

Release files for pycwr 1.0.9

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pycwr 1.0.9
File Size Uploaded
pycwr-1.0.9.tar.gz 1.1 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for pycwr 1.0.9
File
pycwr-1.0.9-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
pycwr-1.0.9-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details
pycwr-1.0.9-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
pycwr-1.0.9-cp312-cp312-macosx_10_13_x86_64.whl CPython 3.12 CPython 3.12 macOS 10.13+ x86-64 Details
pycwr-1.0.9-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
pycwr-1.0.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ x86-64, Linux glibc 2.17+ x86-64 Details
pycwr-1.0.9-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details
pycwr-1.0.9-cp311-cp311-macosx_10_9_x86_64.whl CPython 3.11 CPython 3.11 macOS 10.9+ x86-64 Details
pycwr-1.0.9-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
pycwr-1.0.9-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ x86-64, Linux glibc 2.17+ x86-64 Details
pycwr-1.0.9-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details
pycwr-1.0.9-cp310-cp310-macosx_10_9_x86_64.whl CPython 3.10 CPython 3.10 macOS 10.9+ x86-64 Details
pycwr-1.0.9-cp39-cp39-win_amd64.whl CPython 3.9 CPython 3.9 Windows x86-64 Details
pycwr-1.0.9-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.9 CPython 3.9 Linux glibc 2.28+ x86-64, Linux glibc 2.17+ x86-64 Details
pycwr-1.0.9-cp39-cp39-macosx_11_0_arm64.whl CPython 3.9 CPython 3.9 macOS 11.0+ ARM64 Details
pycwr-1.0.9-cp39-cp39-macosx_10_9_x86_64.whl CPython 3.9 CPython 3.9 macOS 10.9+ x86-64 Details

Total release size: 22.7 MB

Release files / pycwr-1.0.9.tar.gz

Download URL pycwr-1.0.9.tar.gz
Size 1.1 MB
Tags Source
SHA-256 checksum
How to use checksums
af7a424c9bd9f50244ce92ac969b05d51599d20aa6afc8ab76942d78dc795b92
BLAKE2b-256 checksum
How to use checksums
431a4d5fd733b3cd2cf35e93ef99641cce5ba5f7bd4c4bb55b4dbc9a18d7717b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 17, 2026.

Transparency log

Release files / pycwr-1.0.9-cp312-cp312-win_amd64.whl

Download URL pycwr-1.0.9-cp312-cp312-win_amd64.whl
Size 1.2 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
d8996b2258c27581661c8d6055c1a4b82726d142c56f0c0f96c211e66c7dfd0e
BLAKE2b-256 checksum
How to use checksums
9c95baae88724deb2a70aea3cf44fd61fdb8e4314025f332e2cd72e30a86f22e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 17, 2026.

Transparency log

Release files / pycwr-1.0.9-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL pycwr-1.0.9-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 1.8 MB
Tags CPython 3.12 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
4f70447fe4daf3d3f301edcfdc6077dfc07b8fa41672f51f55a7bb749a9ae059
BLAKE2b-256 checksum
How to use checksums
751e98b444bea6b834d1c29130e447325f48fdf9454924da491bf729db1abda3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 17, 2026.

Transparency log

Release files / pycwr-1.0.9-cp312-cp312-macosx_11_0_arm64.whl

Download URL pycwr-1.0.9-cp312-cp312-macosx_11_0_arm64.whl
Size 1.2 MB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
c946fdd12ecff0ffe898f908d2c272c4032b38d89ff9619cc3d9db43d4a9f23a
BLAKE2b-256 checksum
How to use checksums
0af1c6490c5e13d0ac0b0636e4cb355c73f3d2ac1a2705c2d58354575ee33d2a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 17, 2026.

Transparency log

Release files / pycwr-1.0.9-cp312-cp312-macosx_10_13_x86_64.whl

Download URL pycwr-1.0.9-cp312-cp312-macosx_10_13_x86_64.whl
Size 1.2 MB
Tags CPython 3.12 macOS 10.13+ x86-64
SHA-256 checksum
How to use checksums
d89a8a11d5d87c2fb36822979ccce32746278bf45040974fbf9e65846be4dc30
BLAKE2b-256 checksum
How to use checksums
de121481d43056f08d3ff252ebe0287792fbd1138477ef5948a3a86547b636d3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 17, 2026.

Transparency log

Release files / pycwr-1.0.9-cp311-cp311-win_amd64.whl

Download URL pycwr-1.0.9-cp311-cp311-win_amd64.whl
Size 1.2 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
adf48563b2519b9d85f0483ed859174c86de88da61af230f3c24a797db8469f9
BLAKE2b-256 checksum
How to use checksums
878a7d2bc087b74c5831f0524220e3a9375be31c0246508bf55ec75190318fc2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 17, 2026.

Transparency log

Release files / pycwr-1.0.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL pycwr-1.0.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 1.9 MB
Tags CPython 3.11 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
3acf6c764c2ce7fd8adeab5143d7e5d582a917d12245ad19a4f4294495c843af
BLAKE2b-256 checksum
How to use checksums
b1d3fedc6a7efbf76b02d20c4f6c924d4a5e0261fd96e958c67ce95d3082f01f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 17, 2026.

Transparency log

Release files / pycwr-1.0.9-cp311-cp311-macosx_11_0_arm64.whl

Download URL pycwr-1.0.9-cp311-cp311-macosx_11_0_arm64.whl
Size 1.2 MB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
db1760fd1d3ce29480a702f19e3160eeb391fa183942e477f95f7404b857e674
BLAKE2b-256 checksum
How to use checksums
f712c3e4192012db6808a6cb1927bbd8e71c597e1fadcaf72af5bc8ab07b44b3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 17, 2026.

Transparency log

Release files / pycwr-1.0.9-cp311-cp311-macosx_10_9_x86_64.whl

Download URL pycwr-1.0.9-cp311-cp311-macosx_10_9_x86_64.whl
Size 1.2 MB
Tags CPython 3.11 macOS 10.9+ x86-64
SHA-256 checksum
How to use checksums
768e2e1c40473732af5d0c204dd86d8289ff6b01e05dd9b6bffe165b6002591d
BLAKE2b-256 checksum
How to use checksums
6a3613f674cb128ab9a0e16e4aba5f76c88a62372604efab542fa75e53303c7f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 17, 2026.

Transparency log

Release files / pycwr-1.0.9-cp310-cp310-win_amd64.whl

Download URL pycwr-1.0.9-cp310-cp310-win_amd64.whl
Size 1.2 MB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
48f809e56d863b77e9b24ce439c5bc1a127c07bc9b26580018347a75a34f48d9
BLAKE2b-256 checksum
How to use checksums
7368258bb6f3a863c9c84b1c7fb4bb9a22b36aad5c45a5212837ebc5538139ae
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 17, 2026.

Transparency log

Release files / pycwr-1.0.9-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL pycwr-1.0.9-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 1.8 MB
Tags CPython 3.10 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
3290d2720834ca3149fe7501a1d95381007f4479c7608069aaaaf9c83966beec
BLAKE2b-256 checksum
How to use checksums
afa37c9bf95496d381dfe90ee209dbf037e1dfb52f074f0df6565d4621917b79
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 17, 2026.

Transparency log

Release files / pycwr-1.0.9-cp310-cp310-macosx_11_0_arm64.whl

Download URL pycwr-1.0.9-cp310-cp310-macosx_11_0_arm64.whl
Size 1.2 MB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
83e3066a75599d93c6731bb21f32887b1c6ab91e93b4637dab359291eb647957
BLAKE2b-256 checksum
How to use checksums
be553f75295a4202781d091daed24c20778ac0a73f3e633d66930e96a7b16099
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 17, 2026.

Transparency log

Release files / pycwr-1.0.9-cp310-cp310-macosx_10_9_x86_64.whl

Download URL pycwr-1.0.9-cp310-cp310-macosx_10_9_x86_64.whl
Size 1.2 MB
Tags CPython 3.10 macOS 10.9+ x86-64
SHA-256 checksum
How to use checksums
75970bd24daa8c15d7612028472b5971e80d78bd88da79685851365a8aae852d
BLAKE2b-256 checksum
How to use checksums
be99f395b8907b01284d19988730171c34c8471d998f2f64014f72c2066401ef
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 17, 2026.

Transparency log

Release files / pycwr-1.0.9-cp39-cp39-win_amd64.whl

Download URL pycwr-1.0.9-cp39-cp39-win_amd64.whl
Size 1.2 MB
Tags CPython 3.9 Windows x86-64
SHA-256 checksum
How to use checksums
ac524377128b729ded30c8fd51a2007b5c42cad71d6c0de05af00d1cbdcf8c35
BLAKE2b-256 checksum
How to use checksums
756b5c2c1e0f754bc59afc7c50d7f13a77ffdb81f877fa7889bcf1d1ec96bd64
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 17, 2026.

Transparency log

Release files / pycwr-1.0.9-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL pycwr-1.0.9-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 1.8 MB
Tags CPython 3.9 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
7a8dada42b400fe104197fc6d9e0bf87c2354f60e99b0af13ad5291858d53d9c
BLAKE2b-256 checksum
How to use checksums
3829a596959b5d0556a5ab3a9befca3e600669b9aab59e4e0c74cd3d7264a0e5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 17, 2026.

Transparency log

Release files / pycwr-1.0.9-cp39-cp39-macosx_11_0_arm64.whl

Download URL pycwr-1.0.9-cp39-cp39-macosx_11_0_arm64.whl
Size 1.2 MB
Tags CPython 3.9 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
098a6a7d5e097ac65a81b2dc8d2e0fe191d97c97b731e6d66cd9dd0527df4f5c
BLAKE2b-256 checksum
How to use checksums
004b20e98802f058092d4a8b1a6ed7af5d98db237a52d671df5cfaed3fe6df8b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 17, 2026.

Transparency log

Release files / pycwr-1.0.9-cp39-cp39-macosx_10_9_x86_64.whl

Download URL pycwr-1.0.9-cp39-cp39-macosx_10_9_x86_64.whl
Size 1.2 MB
Tags CPython 3.9 macOS 10.9+ x86-64
SHA-256 checksum
How to use checksums
2dc30606cb84bb61945294d522bb998038f477cbf349e572efa26e44a6ce3e0a
BLAKE2b-256 checksum
How to use checksums
19b0c748facd0dd42988184370c1d772ada95dedb25c7eb3c91a823f98019b1c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 17, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.0.9 This release

17 release files

1.0.8

1 release file

1.0.7

1 release file

1.0.6

1 release file

1.0.5

1 release file

1.0.4

1 release file

1.0.3

1 release file

1.0.0

1 release file

0.4.0

18 release files

0.3.5

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page