Skip to main content

Use Pydantic to build complex types from simple parameters.

Project description

Use Pydantic to build complex types from parameter specifications.


Installation

  • uv add git+https://github.com/flywhl/cyantic

Features

  • Build complex objects using intermediate Pydantic models.
  • Reference other values using @value:x.y.z
  • Import objects using @import:x.y.z
  • Define custom @reftag handlers (see tests)

Usage

from cyantic import Blueprint, blueprint, CyanticModel
from torch import Tensor
import torch
import yaml

# 1. Create and register some useful parameterisations
#       (or soon install from PyPi, i.e. `rye add cyantic-torch`)

@blueprint(Tensor)
class NormalTensor(Blueprint[Tensor]):

    mean: float
    std: float
    size: tuple[int, ...]

    def build(self) -> Tensor:
        return torch.normal(self.mean, self.std, size=self.size)

@blueprint(Tensor)
class UniformTensor(Blueprint[Tensor]):
    low: float
    high: float
    size: tuple[int, ...]

    def build(self) -> Tensor:
      return torch.empty(self.size).uniform_(self.low, self.high)


# 2. Write pydantic models using `CyanticModel` base class

class MyModel(CyanticModel):
    normal_tensor: Tensor
    uniform_tensor: Tensor


# 3. Validate from YAML files that specify the parameterisation

some_yaml = """common:
    size: [3, 5]
normal_tensor:
    mean: 0.0
    std: 0.1
    size: @value:common.size
uniform_tensor:
    low: -1.0
    std: 1.0
    size: @value:common.size
"""

# 4. Receive objects built from the parameterisations.

my_model = MyModel.model_validate(yaml.safe_load(some_yaml))
assert isinstance(my_model.normal_tensor, Tensor)
assert isinstance(my_model.uniform_tensor, Tensor)

Development

  • git clone https://github.com/flywhl/cyantic.git
  • cd cyantic
  • uv sync

Flywheel

Science needs humble software tools. Flywheel is an open source collective building simple tools to preserve scientific momentum, inspired by devtools and devops culture.

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

cyantic-0.1.2.tar.gz (31.3 kB view details)

Uploaded Source

Built Distribution

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

cyantic-0.1.2-py3-none-any.whl (10.4 kB view details)

Uploaded Python 3

File details

Details for the file cyantic-0.1.2.tar.gz.

File metadata

  • Download URL: cyantic-0.1.2.tar.gz
  • Upload date:
  • Size: 31.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.5.15

File hashes

Hashes for cyantic-0.1.2.tar.gz
Algorithm Hash digest
SHA256 8db064537225bd3ccd1e30957249aa1d2edf5c2295f0ccbb0210559e2d3c8f0c
MD5 524ad574950bc8f69dd12e7bcc296e92
BLAKE2b-256 5385f67b530f3f80a8d604d23a3ab81538a8fafa7daefc0b8777e1f47fbf17fa

See more details on using hashes here.

File details

Details for the file cyantic-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: cyantic-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 10.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.5.15

File hashes

Hashes for cyantic-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 5d5f52755a0aa514e290dfd3cd6a23de4aed7a85423f85293c665a47749054f8
MD5 788ae50f19b65ec833031b9cf749feac
BLAKE2b-256 fba0192ecb63aa6f70cdf54396cb646a62edac8af5134804b381d062f135e8d3

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