Skip to main content

hcx

Project description

hcx

hcx defines typed, runtime-usable contracts for hydrological model batches, forecasts, output specifications, models, and model factories.

The contract specification is normative. Public docstrings and this README are explanatory summaries of that specification.

The distribution combines three parts: the normative specification, an inline-typed Python contract marked with py.typed, and a standalone conformance harness. Independent model packages can import the same contract and prove their behavior without an application, training engine, or external dataset.

Authoring a model package

  1. Add hcx as a runtime dependency of the model package.

  2. Implement a torch.nn.Module whose forward(batch: Batch) -> Forecast behavior satisfies ForecastModel, including the normative shape, dtype/device, and metadata identity rules.

  3. Implement a callable matching ModelFactory. It accepts a model-specific dict[str, object] and the keyword-only ordered dynamic_inputs and static_inputs, resolved input_size, static_size, and output_size, and a resolved OutputSpecification[object]. It returns the module. Preserve name order; the sizes are resolved from the first batch.

  4. Declare the factory in the model package's pyproject.toml:

    [project.entry-points.'hcx.models']
    my_model = "my_model_package.factory:create_model"
    
  5. Exercise the complete contract with synthetic data:

    from importlib.metadata import entry_points
    
    from hcx import Point, assert_conforms, make_synthetic_batch
    
    batch = make_synthetic_batch()
    assert batch.scalar_dynamic is not None
    assert batch.scalar_static is not None
    
    factory = entry_points(group="hcx.models", name="my_model")[0].load()
    dynamic_inputs = [
        f"dynamic_{index}" for index in range(batch.scalar_dynamic.shape[-1])
    ]
    static_inputs = [
        f"static_{index}" for index in range(batch.scalar_static.shape[-1])
    ]
    model = factory(
        {},
        dynamic_inputs=dynamic_inputs,
        static_inputs=static_inputs,
        input_size=batch.scalar_dynamic.shape[-1],
        static_size=batch.scalar_static.shape[-1],
        output_size=batch.target.shape[-1],
        output_specification=Point(),
    )
    assert_conforms(model, batch)
    

The factory can also be imported and called directly in this smoke test. hcx packages scalar_lstm as a reference entry point, not as a required base class. Entry-point names are consumer-facing identifiers and should remain stable and unique within an environment.

See the normative factory and entry-point clauses and the changelog for version history.

Releases

Maintainers bump the version with bump-my-version and update the changelog in the same commit. A human then creates and publishes the GitHub Release, which creates the vX.Y.Z tag. The GitHub Actions workflow builds distributions with uv build and publishes them through OIDC trusted publishing. Prereleases and manual workflow dispatches target TestPyPI; published non-prereleases target PyPI. Local publishing and hand-made tags are forbidden.

Project details


Download files

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

Source Distribution

hcx-0.1.3.tar.gz (8.6 kB view details)

Uploaded Source

Built Distribution

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

hcx-0.1.3-py3-none-any.whl (11.8 kB view details)

Uploaded Python 3

File details

Details for the file hcx-0.1.3.tar.gz.

File metadata

  • Download URL: hcx-0.1.3.tar.gz
  • Upload date:
  • Size: 8.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.0

File hashes

Hashes for hcx-0.1.3.tar.gz
Algorithm Hash digest
SHA256 3ef3a55711046f789b467747bf2647c7fc855a68b1e89a0a786bd9cef5087908
MD5 0ca44f844ce6b807b7196c3258ef0dec
BLAKE2b-256 c1c1e8bb99a0639b6f56c3139ce655ac97808e27ddaca69033692f0ef911ec15

See more details on using hashes here.

File details

Details for the file hcx-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: hcx-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 11.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.0

File hashes

Hashes for hcx-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 236d223d5e27b973775c065653cea7a5a05fa385c180f621d22c2c5211035f1d
MD5 3e65ecbbe248ceaac6843ab6354b41ab
BLAKE2b-256 fe7cb464b2eefbce1583628319985d7793942a110c59f929d8d809bb4fbbe3a6

See more details on using hashes here.

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