Metadata-Version: 2.4
Name: corio
Version: 2.2.5
Summary: Collection of high-level tools to simplify everyday development tasks, with a focus on AI/ML
Author-email: Frontmatter AI <innovative.fowler@mask.pro.fmtr.dev>
License-Expression: Apache-2.0
Project-URL: Homepage, https://github.com/fmtr/corio
Description-Content-Type: text/markdown
License-File: LICENSE
Provides-Extra: dev
Requires-Dist: logfire; extra == "dev"
Requires-Dist: semver; extra == "dev"
Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "dev"
Requires-Dist: pydantic-settings; extra == "dev"
Requires-Dist: pydantic; extra == "dev"
Requires-Dist: pydantic-extra-types; extra == "dev"
Requires-Dist: pycountry; extra == "dev"
Requires-Dist: yamlscript; extra == "dev"
Requires-Dist: pyyaml; extra == "dev"
Requires-Dist: beanie; extra == "dev"
Requires-Dist: setuptools; extra == "dev"
Requires-Dist: mkdocs; extra == "dev"
Requires-Dist: mkdocs-material; extra == "dev"
Requires-Dist: mkdocstrings[python]; extra == "dev"
Requires-Dist: mike; extra == "dev"
Requires-Dist: mkdocs-include-dir-to-nav; extra == "dev"
Requires-Dist: build; extra == "dev"
Requires-Dist: twine; extra == "dev"
Requires-Dist: packaging; extra == "dev"
Requires-Dist: pygit2; extra == "dev"
Requires-Dist: python-on-whales; extra == "dev"
Requires-Dist: deepmerge; extra == "dev"
Requires-Dist: httpx; extra == "dev"
Requires-Dist: httpx_retries; extra == "dev"
Requires-Dist: logfire[httpx]; extra == "dev"
Requires-Dist: fastapi; extra == "dev"
Requires-Dist: uvicorn[standard]; extra == "dev"
Requires-Dist: logfire[fastapi]; extra == "dev"
Requires-Dist: tomlkit; extra == "dev"
Requires-Dist: pyrage; extra == "dev"
Requires-Dist: dotenv; extra == "dev"
Requires-Dist: pytest; extra == "dev"
Requires-Dist: pytest-cov; extra == "dev"
Provides-Extra: test
Requires-Dist: pytest; extra == "test"
Requires-Dist: pytest-cov; extra == "test"
Provides-Extra: yaml
Requires-Dist: yamlscript; extra == "yaml"
Requires-Dist: pyyaml; extra == "yaml"
Provides-Extra: logging
Requires-Dist: logfire; extra == "logging"
Provides-Extra: parallel
Requires-Dist: dask[bag]; extra == "parallel"
Requires-Dist: distributed; extra == "parallel"
Requires-Dist: bokeh; extra == "parallel"
Provides-Extra: tokenization
Requires-Dist: tokenizers; extra == "tokenization"
Provides-Extra: augmentation
Requires-Dist: faker; extra == "augmentation"
Requires-Dist: sre_yield; extra == "augmentation"
Provides-Extra: process
Requires-Dist: logfire; extra == "process"
Provides-Extra: profiling
Requires-Dist: contexttimer; extra == "profiling"
Provides-Extra: docker-client
Requires-Dist: python-on-whales; extra == "docker-client"
Provides-Extra: unicode
Requires-Dist: Unidecode; extra == "unicode"
Provides-Extra: version
Provides-Extra: version-dev
Requires-Dist: semver; extra == "version-dev"
Provides-Extra: spaces
Requires-Dist: tinynetrc; extra == "spaces"
Provides-Extra: netrc
Requires-Dist: tinynetrc; extra == "netrc"
Provides-Extra: hfh
Requires-Dist: huggingface_hub; extra == "hfh"
Provides-Extra: merging
Requires-Dist: deepmerge; extra == "merging"
Provides-Extra: api
Requires-Dist: fastapi; extra == "api"
Requires-Dist: uvicorn[standard]; extra == "api"
Requires-Dist: logfire; extra == "api"
Requires-Dist: pydantic; extra == "api"
Requires-Dist: pydantic-extra-types; extra == "api"
Requires-Dist: pycountry; extra == "api"
Requires-Dist: logfire[fastapi]; extra == "api"
Provides-Extra: dm
Requires-Dist: pydantic; extra == "dm"
Requires-Dist: pydantic-extra-types; extra == "dm"
Requires-Dist: pycountry; extra == "dm"
Provides-Extra: ai
Requires-Dist: peft; extra == "ai"
Requires-Dist: transformers[sentencepiece]; extra == "ai"
Requires-Dist: torchvision; extra == "ai"
Requires-Dist: torchaudio; extra == "ai"
Requires-Dist: pydantic; extra == "ai"
Requires-Dist: pydantic-extra-types; extra == "ai"
Requires-Dist: pycountry; extra == "ai"
Provides-Extra: ai-compute
Requires-Dist: cuda-bindings==13.2.0; extra == "ai-compute"
Requires-Dist: cuda-pathfinder==1.5.4; extra == "ai-compute"
Requires-Dist: cuda-toolkit==13.0.2; extra == "ai-compute"
Requires-Dist: nvidia-cublas==13.1.0.3; extra == "ai-compute"
Requires-Dist: nvidia-cuda-cupti==13.0.85; extra == "ai-compute"
Requires-Dist: nvidia-cuda-nvrtc==13.0.88; extra == "ai-compute"
Requires-Dist: nvidia-cuda-runtime==13.0.96; extra == "ai-compute"
Requires-Dist: nvidia-cudnn-cu13==9.19.0.56; extra == "ai-compute"
Requires-Dist: nvidia-cufft==12.0.0.61; extra == "ai-compute"
Requires-Dist: nvidia-cufile==1.15.1.6; extra == "ai-compute"
Requires-Dist: nvidia-curand==10.4.0.35; extra == "ai-compute"
Requires-Dist: nvidia-cusolver==12.0.4.66; extra == "ai-compute"
Requires-Dist: nvidia-cusparse==12.6.3.3; extra == "ai-compute"
Requires-Dist: nvidia-cusparselt-cu13==0.8.0; extra == "ai-compute"
Requires-Dist: nvidia-nccl-cu13==2.28.9; extra == "ai-compute"
Requires-Dist: nvidia-nvjitlink==13.0.88; extra == "ai-compute"
Requires-Dist: nvidia-nvshmem-cu13==3.4.5; extra == "ai-compute"
Requires-Dist: nvidia-nvtx==13.0.85; extra == "ai-compute"
Requires-Dist: torch==2.11.0; extra == "ai-compute"
Requires-Dist: triton==3.6.0; extra == "ai-compute"
Provides-Extra: openai-api
Requires-Dist: openai; extra == "openai-api"
Provides-Extra: ai-client
Requires-Dist: logfire; extra == "ai-client"
Requires-Dist: pydantic; extra == "ai-client"
Requires-Dist: pydantic-extra-types; extra == "ai-client"
Requires-Dist: pycountry; extra == "ai-client"
Requires-Dist: openai; extra == "ai-client"
Requires-Dist: pydantic-ai-slim[logfire,openai]; extra == "ai-client"
Requires-Dist: ollama; extra == "ai-client"
Provides-Extra: json-fix
Requires-Dist: json_repair; extra == "json-fix"
Provides-Extra: semantic
Requires-Dist: sentence_transformers; extra == "semantic"
Requires-Dist: pandas; extra == "semantic"
Requires-Dist: tabulate; extra == "semantic"
Requires-Dist: openpyxl; extra == "semantic"
Requires-Dist: odfpy; extra == "semantic"
Requires-Dist: deepdiff; extra == "semantic"
Provides-Extra: metric
Requires-Dist: pandas; extra == "metric"
Requires-Dist: tabulate; extra == "metric"
Requires-Dist: openpyxl; extra == "metric"
Requires-Dist: odfpy; extra == "metric"
Requires-Dist: deepdiff; extra == "metric"
Provides-Extra: tabular
Requires-Dist: pandas; extra == "tabular"
Requires-Dist: tabulate; extra == "tabular"
Requires-Dist: openpyxl; extra == "tabular"
Requires-Dist: odfpy; extra == "tabular"
Requires-Dist: deepdiff; extra == "tabular"
Provides-Extra: html
Requires-Dist: html2text; extra == "html"
Provides-Extra: interface
Requires-Dist: flet[all]<0.80.0; extra == "interface"
Requires-Dist: flet-video; extra == "interface"
Requires-Dist: flet-webview; extra == "interface"
Provides-Extra: google-api
Requires-Dist: google-auth; extra == "google-api"
Requires-Dist: google-auth-oauthlib; extra == "google-api"
Requires-Dist: google-auth-httplib2; extra == "google-api"
Requires-Dist: google-api-python-client; extra == "google-api"
Provides-Extra: caching
Requires-Dist: diskcache; extra == "caching"
Requires-Dist: cachetools; extra == "caching"
Provides-Extra: pdf
Requires-Dist: pymupdf; extra == "pdf"
Requires-Dist: pydantic; extra == "pdf"
Requires-Dist: pydantic-extra-types; extra == "pdf"
Requires-Dist: pycountry; extra == "pdf"
Requires-Dist: pymupdf4llm; extra == "pdf"
Provides-Extra: debug
Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "debug"
Provides-Extra: sets
Requires-Dist: pydantic-settings; extra == "sets"
Requires-Dist: pydantic; extra == "sets"
Requires-Dist: pydantic-extra-types; extra == "sets"
Requires-Dist: pycountry; extra == "sets"
Requires-Dist: yamlscript; extra == "sets"
Requires-Dist: pyyaml; extra == "sets"
Provides-Extra: path-app
Requires-Dist: appdirs; extra == "path-app"
Provides-Extra: path-type
Requires-Dist: filetype; extra == "path-type"
Provides-Extra: dns
Requires-Dist: dnspython[doh]; extra == "dns"
Requires-Dist: httpx; extra == "dns"
Requires-Dist: httpx_retries; extra == "dns"
Requires-Dist: logfire; extra == "dns"
Requires-Dist: logfire[httpx]; extra == "dns"
Requires-Dist: diskcache; extra == "dns"
Requires-Dist: cachetools; extra == "dns"
Provides-Extra: patterns
Requires-Dist: regex; extra == "patterns"
Provides-Extra: http
Requires-Dist: httpx; extra == "http"
Requires-Dist: httpx_retries; extra == "http"
Requires-Dist: logfire; extra == "http"
Requires-Dist: logfire[httpx]; extra == "http"
Provides-Extra: setup
Requires-Dist: setuptools; extra == "setup"
Provides-Extra: webhook
Requires-Dist: httpx; extra == "webhook"
Requires-Dist: httpx_retries; extra == "webhook"
Requires-Dist: logfire; extra == "webhook"
Requires-Dist: logfire[httpx]; extra == "webhook"
Provides-Extra: browsers
Requires-Dist: playwright; extra == "browsers"
Provides-Extra: db
Provides-Extra: db-document
Requires-Dist: beanie; extra == "db-document"
Provides-Extra: mqtt
Requires-Dist: aiomqtt; extra == "mqtt"
Provides-Extra: av
Requires-Dist: av; extra == "av"
Provides-Extra: env
Provides-Extra: env-io
Requires-Dist: dotenv; extra == "env-io"
Provides-Extra: toml
Provides-Extra: toml-write
Requires-Dist: tomlkit; extra == "toml-write"
Provides-Extra: ha
Requires-Dist: dotenv; extra == "ha"
Provides-Extra: ha-api
Requires-Dist: dotenv; extra == "ha-api"
Requires-Dist: homeassistant_api; extra == "ha-api"
Requires-Dist: aiohasupervisor; extra == "ha-api"
Provides-Extra: doc
Requires-Dist: mkdocs; extra == "doc"
Requires-Dist: mkdocs-material; extra == "doc"
Requires-Dist: mkdocstrings[python]; extra == "doc"
Requires-Dist: mike; extra == "doc"
Requires-Dist: mkdocs-include-dir-to-nav; extra == "doc"
Provides-Extra: youtube
Requires-Dist: pytubefix; extra == "youtube"
Provides-Extra: infra
Requires-Dist: semver; extra == "infra"
Requires-Dist: logfire; extra == "infra"
Requires-Dist: setuptools; extra == "infra"
Requires-Dist: mkdocs; extra == "infra"
Requires-Dist: mkdocs-material; extra == "infra"
Requires-Dist: mkdocstrings[python]; extra == "infra"
Requires-Dist: mike; extra == "infra"
Requires-Dist: mkdocs-include-dir-to-nav; extra == "infra"
Requires-Dist: pydantic-settings; extra == "infra"
Requires-Dist: pydantic; extra == "infra"
Requires-Dist: pydantic-extra-types; extra == "infra"
Requires-Dist: pycountry; extra == "infra"
Requires-Dist: yamlscript; extra == "infra"
Requires-Dist: pyyaml; extra == "infra"
Requires-Dist: build; extra == "infra"
Requires-Dist: twine; extra == "infra"
Requires-Dist: packaging; extra == "infra"
Requires-Dist: pygit2; extra == "infra"
Requires-Dist: python-on-whales; extra == "infra"
Requires-Dist: deepmerge; extra == "infra"
Requires-Dist: httpx; extra == "infra"
Requires-Dist: httpx_retries; extra == "infra"
Requires-Dist: logfire[httpx]; extra == "infra"
Requires-Dist: fastapi; extra == "infra"
Requires-Dist: uvicorn[standard]; extra == "infra"
Requires-Dist: logfire[fastapi]; extra == "infra"
Requires-Dist: tomlkit; extra == "infra"
Requires-Dist: pyrage; extra == "infra"
Requires-Dist: dotenv; extra == "infra"
Requires-Dist: pytest; extra == "infra"
Requires-Dist: pytest-cov; extra == "infra"
Provides-Extra: vcs
Requires-Dist: pygit2; extra == "vcs"
Provides-Extra: tasmota
Requires-Dist: decode-config; extra == "tasmota"
Requires-Dist: esptool; extra == "tasmota"
Provides-Extra: encrypt
Requires-Dist: pyrage; extra == "encrypt"
Provides-Extra: secrets
Requires-Dist: pyrage; extra == "secrets"
Requires-Dist: dotenv; extra == "secrets"
Requires-Dist: yamlscript; extra == "secrets"
Requires-Dist: pyyaml; extra == "secrets"
Requires-Dist: logfire; extra == "secrets"
Requires-Dist: pydantic-settings; extra == "secrets"
Requires-Dist: pydantic; extra == "secrets"
Requires-Dist: pydantic-extra-types; extra == "secrets"
Requires-Dist: pycountry; extra == "secrets"
Requires-Dist: pygit2; extra == "secrets"
Provides-Extra: cli
Requires-Dist: pydantic-settings; extra == "cli"
Requires-Dist: pydantic; extra == "cli"
Requires-Dist: pydantic-extra-types; extra == "cli"
Requires-Dist: pycountry; extra == "cli"
Requires-Dist: yamlscript; extra == "cli"
Requires-Dist: pyyaml; extra == "cli"
Requires-Dist: logfire; extra == "cli"
Provides-Extra: all
Requires-Dist: logfire; extra == "all"
Requires-Dist: semver; extra == "all"
Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
Requires-Dist: pydantic-settings; extra == "all"
Requires-Dist: pydantic; extra == "all"
Requires-Dist: pydantic-extra-types; extra == "all"
Requires-Dist: pycountry; extra == "all"
Requires-Dist: yamlscript; extra == "all"
Requires-Dist: pyyaml; extra == "all"
Requires-Dist: beanie; extra == "all"
Requires-Dist: setuptools; extra == "all"
Requires-Dist: mkdocs; extra == "all"
Requires-Dist: mkdocs-material; extra == "all"
Requires-Dist: mkdocstrings[python]; extra == "all"
Requires-Dist: mike; extra == "all"
Requires-Dist: mkdocs-include-dir-to-nav; extra == "all"
Requires-Dist: build; extra == "all"
Requires-Dist: twine; extra == "all"
Requires-Dist: packaging; extra == "all"
Requires-Dist: pygit2; extra == "all"
Requires-Dist: python-on-whales; extra == "all"
Requires-Dist: deepmerge; extra == "all"
Requires-Dist: httpx; extra == "all"
Requires-Dist: httpx_retries; extra == "all"
Requires-Dist: logfire[httpx]; extra == "all"
Requires-Dist: fastapi; extra == "all"
Requires-Dist: uvicorn[standard]; extra == "all"
Requires-Dist: logfire[fastapi]; extra == "all"
Requires-Dist: tomlkit; extra == "all"
Requires-Dist: pyrage; extra == "all"
Requires-Dist: dotenv; extra == "all"
Requires-Dist: pytest; extra == "all"
Requires-Dist: pytest-cov; extra == "all"
Requires-Dist: dask[bag]; extra == "all"
Requires-Dist: distributed; extra == "all"
Requires-Dist: bokeh; extra == "all"
Requires-Dist: tokenizers; extra == "all"
Requires-Dist: faker; extra == "all"
Requires-Dist: sre_yield; extra == "all"
Requires-Dist: contexttimer; extra == "all"
Requires-Dist: Unidecode; extra == "all"
Requires-Dist: tinynetrc; extra == "all"
Requires-Dist: huggingface_hub; extra == "all"
Requires-Dist: peft; extra == "all"
Requires-Dist: transformers[sentencepiece]; extra == "all"
Requires-Dist: torchvision; extra == "all"
Requires-Dist: torchaudio; extra == "all"
Requires-Dist: cuda-bindings==13.2.0; extra == "all"
Requires-Dist: cuda-pathfinder==1.5.4; extra == "all"
Requires-Dist: cuda-toolkit==13.0.2; extra == "all"
Requires-Dist: nvidia-cublas==13.1.0.3; extra == "all"
Requires-Dist: nvidia-cuda-cupti==13.0.85; extra == "all"
Requires-Dist: nvidia-cuda-nvrtc==13.0.88; extra == "all"
Requires-Dist: nvidia-cuda-runtime==13.0.96; extra == "all"
Requires-Dist: nvidia-cudnn-cu13==9.19.0.56; extra == "all"
Requires-Dist: nvidia-cufft==12.0.0.61; extra == "all"
Requires-Dist: nvidia-cufile==1.15.1.6; extra == "all"
Requires-Dist: nvidia-curand==10.4.0.35; extra == "all"
Requires-Dist: nvidia-cusolver==12.0.4.66; extra == "all"
Requires-Dist: nvidia-cusparse==12.6.3.3; extra == "all"
Requires-Dist: nvidia-cusparselt-cu13==0.8.0; extra == "all"
Requires-Dist: nvidia-nccl-cu13==2.28.9; extra == "all"
Requires-Dist: nvidia-nvjitlink==13.0.88; extra == "all"
Requires-Dist: nvidia-nvshmem-cu13==3.4.5; extra == "all"
Requires-Dist: nvidia-nvtx==13.0.85; extra == "all"
Requires-Dist: torch==2.11.0; extra == "all"
Requires-Dist: triton==3.6.0; extra == "all"
Requires-Dist: openai; extra == "all"
Requires-Dist: pydantic-ai-slim[logfire,openai]; extra == "all"
Requires-Dist: ollama; extra == "all"
Requires-Dist: json_repair; extra == "all"
Requires-Dist: sentence_transformers; extra == "all"
Requires-Dist: pandas; extra == "all"
Requires-Dist: tabulate; extra == "all"
Requires-Dist: openpyxl; extra == "all"
Requires-Dist: odfpy; extra == "all"
Requires-Dist: deepdiff; extra == "all"
Requires-Dist: html2text; extra == "all"
Requires-Dist: flet[all]<0.80.0; extra == "all"
Requires-Dist: flet-video; extra == "all"
Requires-Dist: flet-webview; extra == "all"
Requires-Dist: google-auth; extra == "all"
Requires-Dist: google-auth-oauthlib; extra == "all"
Requires-Dist: google-auth-httplib2; extra == "all"
Requires-Dist: google-api-python-client; extra == "all"
Requires-Dist: diskcache; extra == "all"
Requires-Dist: cachetools; extra == "all"
Requires-Dist: pymupdf; extra == "all"
Requires-Dist: pymupdf4llm; extra == "all"
Requires-Dist: appdirs; extra == "all"
Requires-Dist: filetype; extra == "all"
Requires-Dist: dnspython[doh]; extra == "all"
Requires-Dist: regex; extra == "all"
Requires-Dist: playwright; extra == "all"
Requires-Dist: aiomqtt; extra == "all"
Requires-Dist: av; extra == "all"
Requires-Dist: homeassistant_api; extra == "all"
Requires-Dist: aiohasupervisor; extra == "all"
Requires-Dist: pytubefix; extra == "all"
Requires-Dist: decode-config; extra == "all"
Requires-Dist: esptool; extra == "all"
Dynamic: license-file

# Core IO (`corio`)

A collection of high-level tools that simplify everyday development work, with a focus on practical Python and AI/ML workflows.

`corio` is designed as a single utility package with opt-in extras, so projects can install only what they use.

## Install

```bash
pip install corio
```

## Quick Example

```python
import corio
from corio import Path

value = corio.env.get_int("MY_VALUE", default=None)
Path("data.json").write_json({"value": value})
```

## Documentation

- Published docs: https://fmtr.github.io/corio
- Local docs source: [docs](docs)

## License

This project is licensed under Apache 2.0. See [LICENSE](LICENSE).
