Quickstart

Collections

PieThorn includes a few collection helpers that wrap low-level Python patterns:

from piethorn.collections.char import CharSequence
from piethorn.collections.mapping import Map
from piethorn.collections.views import SequenceView

text = CharSequence(["ab", " ", "C"])
mapping = Map(["left", "right"], [1, 2])
view = SequenceView([1, 2, 3, 4], reverse=True, cut=slice(1, 4))

assert str(text) == "ab C"
assert mapping["left"] == 1
assert list(view) == [4, 3, 2]

Equation Evaluation

The equation engine parses expressions into reusable token trees and evaluates them with decimal.Decimal semantics:

from decimal import Context
from piethorn.math.equation import Equation

ctx = Context()
eq = Equation("$value$ + $fallback:2$", ctx)

assert eq.calculate({"value": 3}) == 5

Logging And Progress

The logging package combines output helpers with counters:

from piethorn.logging.logger import Logger

logger = Logger(debug_level=1)
logger.info("starting")

counter = logger.count("jobs", step=0.5)
counter.add(2)
counter.tick()

File Utilities

The file wrapper can build paths relative to a root object:

from piethorn.filehandle.filehandling import File

root = File("tmp_project", find_children=False)
child = root.create_child("data/example.txt", "hello")
child.write("second line")

Typing Utilities

Use piethorn.typing.argument when you need a runtime container for typed arguments, and piethorn.typing.analyze when you need structured data from inspect.signature:

from piethorn.typing.analyze import analyze

def sample(a, /, b: int, *args, c=3, **kwargs) -> str:
    return "ok"

info = analyze(sample)
assert info.arguments.positional == ("a",)
assert info.arguments.keyword == ("c",)