Quickstart#
Prefer the curated starters module for micro-opts.
Smoke#
from picop.hot import bytes_len, dict_get, list_len, str_len
assert bytes_len(b"ok") == 2
assert str_len("hi") == 2
assert dict_get({"a": 1}, "a") == 1
assert list_len([1, 2]) == 2
Also supported: from picop.cydict import dict_get / from picop import dict_get, and Cython cimport. Soft letter/bare aliases were removed in 0.3 — use preferred names. Prefer a release-tag pin. Avoid from picop import *.
Import rename (2.0): prefer import picop. The cypy import package is a deprecated soft alias (emits DeprecationWarning) and will be removed in 3.0.
Hot starters#
from picop.hot import (
dict_get, dict_len, dict_set, dict_contains, dict_pop, dict_setdefault,
list_len, list_get, list_get_checked, list_append,
set_contains, set_add,
tuple_len, tuple_get, tuple_pack2,
bytes_len, bytes_contains, bytes_eq,
str_len, str_eq, str_contains,
ansi_wrap, ansi_fg8, ansi_strip,
)
d = {"a": 1}
assert dict_get(d, "a") == 1 and dict_len(d) == 1
xs: list[object] = [1, 2]
assert list_len(xs) == 2 and list_get_checked(xs, 0) == 1
assert list_append(xs, 3) == 0 # 0 = success — not a boolean
Cython cimport#
Both from picop cimport … (package barrel) and from picop.cybytes cimport … (submodule) work after install:
from picop.cydict cimport dict_get, dict_len
from picop.cylist cimport list_len, list_get_checked
from picop.cybytes cimport bytes_len, bytes_contains, bytes_eq
cdef object hit(dict d, list xs, bytes b):
return (
dict_get(d, "k"),
list_len(xs),
list_get_checked(xs, 0),
bytes_len(b),
bytes_contains(b, b"a"),
bytes_eq(b, b"a"),
)
Out-of-tree regression: repository examples/cimport_ext/ / bash scripts/smoke_barrel_cimport.sh.
Cimport-only / cdef symbols are not listed in the Python API reference — use them from Cython after install. Public Python / cpdef surface is what autodoc covers.
UUID values#
from picop.uuid import UUID, uuid4, uuid4_bytes
value = uuid4()
raw = uuid4_bytes()
assert UUID(raw).version == 4
from picop.uuid cimport UUID, uuid4, uuid4_bytes
The C-backed UUID is final, accepts 32–36 character hexadecimal text or exactly 16 bytes, and remains a stdlib-compatible uuid.UUID value.
Examples#
Runnable scripts after install (repository examples/):
python examples/pyhot.py
python examples/pybytes.py
python examples/pydict.py
Footgun#
C-string helpers take bytes, not str. Prefer *_cstr (e.g. map_getitem_cstr) — see examples/py_cstr_bytes.py. Broader trusted-caller notes: Safety.