Skip to main content

Use Pydantic to build complex types from simple parameters.

Project description

The cyanotype process, which gave birth to the blueprint, uses iron salts and UV light to transform ordinary paper into deep Prussian blue prints.

Features

Cyantic lets you build complex types from simple blueprints, using Pydantic.

  • 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)

Installation

  • uv add cyantic

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
  • just test

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.5.tar.gz (42.6 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.5-py3-none-any.whl (10.5 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for cyantic-0.1.5.tar.gz
Algorithm Hash digest
SHA256 535dbe3e2c5b49e44d38c47024f6d008246d3133b0fedb6c33cd14ed881a7802
MD5 38653a0730cd104eae0b432c93a330d1
BLAKE2b-256 048b765af6924b8e6fb094dec7df049910fd148358506aa00fb2a8fc96e461d5

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for cyantic-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 c97f0676123651694d5fd712ea5f7d35048e74c3fd053c4e0d407e669d8ad898
MD5 24503a5b73151f48cd76638b8a145f3b
BLAKE2b-256 a6cef843d5546e2fc661b48129bf1c5a963dff2c2f01e7279dca6a49d4b1624f

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