Metadata-Version: 2.4
Name: pirn-core
Version: 0.4.0
Summary: A pipeline framework where everything is a knot.
Author: snoodleboot, LLC
License: Apache-2.0
Keywords: async,dag,graph,lineage,pipeline,workflow
Classifier: Development Status :: 3 - Alpha
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Software Development :: Libraries
Requires-Python: >=3.11
Requires-Dist: cloudpickle>=3.0
Requires-Dist: numpy>=2.4.4
Requires-Dist: pydantic>=2.0
Requires-Dist: pyyaml>=6.0
Requires-Dist: sweet-tea>=0.2.46
Provides-Extra: airbyte
Requires-Dist: httpx>=0.26; extra == 'airbyte'
Provides-Extra: alation
Requires-Dist: httpx>=0.26; extra == 'alation'
Provides-Extra: all
Requires-Dist: aio-pika>=9.0; extra == 'all'
Requires-Dist: aioboto3>=12.0; extra == 'all'
Requires-Dist: aiokafka>=0.13.0; extra == 'all'
Requires-Dist: aiomysql>=0.2; extra == 'all'
Requires-Dist: aioodbc>=0.5; extra == 'all'
Requires-Dist: aiosqlite>=0.19; extra == 'all'
Requires-Dist: asdf>=5.3.0; extra == 'all'
Requires-Dist: astropy>=7.2.0; extra == 'all'
Requires-Dist: asyncpg>=0.31; extra == 'all'
Requires-Dist: atlassian-python-api>=3.0; extra == 'all'
Requires-Dist: azure-servicebus>=7.0; extra == 'all'
Requires-Dist: azure-storage-blob>=12.0; extra == 'all'
Requires-Dist: celery>=5.3; extra == 'all'
Requires-Dist: cfgrib>=0.9.15.1; extra == 'all'
Requires-Dist: clickhouse-connect>=0.7; extra == 'all'
Requires-Dist: dask[distributed]>=2024.1; extra == 'all'
Requires-Dist: databricks-sql-connector>=3.0; extra == 'all'
Requires-Dist: datadog-api-client>=2.0; extra == 'all'
Requires-Dist: dlisio>=1.0.4; extra == 'all'
Requires-Dist: duckdb>=0.10; extra == 'all'
Requires-Dist: fiona>=1.10.1; extra == 'all'
Requires-Dist: gcloud-aio-storage>=9.0; extra == 'all'
Requires-Dist: google-cloud-bigquery>=3.0; extra == 'all'
Requires-Dist: google-cloud-pubsub>=2.0; extra == 'all'
Requires-Dist: hl7>=0.4.5; extra == 'all'
Requires-Dist: httpx>=0.26; extra == 'all'
Requires-Dist: hubspot-api-client>=8.0; extra == 'all'
Requires-Dist: opentelemetry-api>=1.20; extra == 'all'
Requires-Dist: opentelemetry-sdk>=1.20; extra == 'all'
Requires-Dist: pandas>=2.0; extra == 'all'
Requires-Dist: pillow-heif>=1.3.0; extra == 'all'
Requires-Dist: prometheus-client>=0.19; extra == 'all'
Requires-Dist: psims>=1.3; extra == 'all'
Requires-Dist: pyarrow>=14.0; extra == 'all'
Requires-Dist: pybids>=0.17; extra == 'all'
Requires-Dist: pydub>=0.25.1; extra == 'all'
Requires-Dist: pygithub>=2.0; extra == 'all'
Requires-Dist: pyreadstat>=1.3.4; extra == 'all'
Requires-Dist: pyteomics>=4.7; extra == 'all'
Requires-Dist: ray>=2.9; extra == 'all'
Requires-Dist: shopifyapi>=12.0; extra == 'all'
Requires-Dist: simple-salesforce>=1.12; extra == 'all'
Requires-Dist: snowflake-connector-python>=3.0; extra == 'all'
Requires-Dist: starlette>=0.36; extra == 'all'
Requires-Dist: stripe>=7.0; extra == 'all'
Requires-Dist: tifffile>=2026.3.3; extra == 'all'
Requires-Dist: uproot>=5.7.4; extra == 'all'
Requires-Dist: valkey-glide>=2.3; extra == 'all'
Provides-Extra: all-db
Requires-Dist: aiomysql>=0.2; extra == 'all-db'
Requires-Dist: aioodbc>=0.5; extra == 'all-db'
Requires-Dist: aiosqlite>=0.19; extra == 'all-db'
Requires-Dist: asyncpg>=0.29; extra == 'all-db'
Requires-Dist: clickhouse-connect>=0.7; extra == 'all-db'
Requires-Dist: databricks-sql-connector>=3.0; extra == 'all-db'
Requires-Dist: duckdb>=0.10; extra == 'all-db'
Requires-Dist: google-cloud-bigquery>=3.0; extra == 'all-db'
Requires-Dist: snowflake-connector-python>=3.0; extra == 'all-db'
Provides-Extra: all-domains
Requires-Dist: pirn-agents<0.5.0,>=0.4.0; extra == 'all-domains'
Requires-Dist: pirn-data<0.5.0,>=0.4.0; extra == 'all-domains'
Requires-Dist: pirn-health<0.5.0,>=0.4.0; extra == 'all-domains'
Requires-Dist: pirn-ml<0.5.0,>=0.4.0; extra == 'all-domains'
Requires-Dist: pirn-oilgas<0.5.0,>=0.4.0; extra == 'all-domains'
Requires-Dist: pirn-signal<0.5.0,>=0.4.0; extra == 'all-domains'
Provides-Extra: all-observability
Requires-Dist: datadog-api-client>=2.0; extra == 'all-observability'
Requires-Dist: opentelemetry-api>=1.20; extra == 'all-observability'
Requires-Dist: opentelemetry-sdk>=1.20; extra == 'all-observability'
Requires-Dist: prometheus-client>=0.19; extra == 'all-observability'
Provides-Extra: all-saas
Requires-Dist: atlassian-python-api>=3.0; extra == 'all-saas'
Requires-Dist: hubspot-api-client>=8.0; extra == 'all-saas'
Requires-Dist: pygithub>=2.0; extra == 'all-saas'
Requires-Dist: shopifyapi>=12.0; extra == 'all-saas'
Requires-Dist: simple-salesforce>=1.12; extra == 'all-saas'
Requires-Dist: stripe>=7.0; extra == 'all-saas'
Provides-Extra: all-storage
Requires-Dist: aioboto3>=12.0; extra == 'all-storage'
Requires-Dist: azure-storage-blob>=12.0; extra == 'all-storage'
Requires-Dist: gcloud-aio-storage>=9.0; extra == 'all-storage'
Provides-Extra: all-stream
Requires-Dist: aio-pika>=9.0; extra == 'all-stream'
Requires-Dist: aiokafka>=0.13.0; extra == 'all-stream'
Requires-Dist: azure-servicebus>=7.0; extra == 'all-stream'
Requires-Dist: google-cloud-pubsub>=2.0; extra == 'all-stream'
Requires-Dist: valkey-glide>=2.0; extra == 'all-stream'
Provides-Extra: amplitude
Requires-Dist: amplitude-analytics>=1.1; extra == 'amplitude'
Provides-Extra: arrow
Requires-Dist: pyarrow>=14.0; extra == 'arrow'
Provides-Extra: asdf
Requires-Dist: asdf>=5.3.0; extra == 'asdf'
Provides-Extra: audio
Requires-Dist: pydub>=0.25.1; extra == 'audio'
Provides-Extra: avro
Requires-Dist: fastavro>=1.9; extra == 'avro'
Provides-Extra: azure
Requires-Dist: azure-storage-blob>=12.0; extra == 'azure'
Provides-Extra: azure-servicebus
Requires-Dist: azure-servicebus>=7.0; extra == 'azure-servicebus'
Provides-Extra: bids
Requires-Dist: pybids>=0.17; extra == 'bids'
Provides-Extra: bigquery
Requires-Dist: google-cloud-bigquery>=3.0; extra == 'bigquery'
Provides-Extra: celery
Requires-Dist: celery>=5.3; extra == 'celery'
Requires-Dist: redis>=5.0; extra == 'celery'
Provides-Extra: clickhouse
Requires-Dist: clickhouse-connect>=0.7; extra == 'clickhouse'
Provides-Extra: dask
Requires-Dist: dask[distributed]>=2024.1; extra == 'dask'
Provides-Extra: databricks
Requires-Dist: databricks-sql-connector>=3.0; extra == 'databricks'
Provides-Extra: datadog
Requires-Dist: datadog-api-client>=2.0; extra == 'datadog'
Provides-Extra: datahub
Requires-Dist: httpx>=0.26; extra == 'datahub'
Provides-Extra: dlis
Requires-Dist: dlisio>=1.0.4; extra == 'dlis'
Provides-Extra: docs
Requires-Dist: mkdocs-section-index>=0.3; extra == 'docs'
Requires-Dist: mkdocs>=1.6; extra == 'docs'
Requires-Dist: mkdocstrings[python]>=0.25; extra == 'docs'
Requires-Dist: playwright>=1.44; extra == 'docs'
Requires-Dist: pymdown-extensions>=10.0; extra == 'docs'
Provides-Extra: docx
Requires-Dist: python-docx>=1.1; extra == 'docx'
Provides-Extra: duckdb
Requires-Dist: duckdb>=0.10; extra == 'duckdb'
Provides-Extra: epub
Requires-Dist: ebooklib>=0.18; extra == 'epub'
Provides-Extra: feather
Requires-Dist: pyarrow>=14.0; extra == 'feather'
Provides-Extra: fits
Requires-Dist: astropy>=7.2.0; extra == 'fits'
Provides-Extra: fivetran
Requires-Dist: httpx>=0.26; extra == 'fivetran'
Provides-Extra: gcs
Requires-Dist: gcloud-aio-storage>=9.0; extra == 'gcs'
Provides-Extra: geojson
Requires-Dist: geojson>=3.1; extra == 'geojson'
Provides-Extra: geopackage
Requires-Dist: fiona>=1.10.1; extra == 'geopackage'
Provides-Extra: geotiff
Requires-Dist: rasterio>=1.3; extra == 'geotiff'
Provides-Extra: gguf
Requires-Dist: gguf>=0.10; extra == 'gguf'
Provides-Extra: github
Requires-Dist: pygithub>=2.0; extra == 'github'
Provides-Extra: google-analytics
Requires-Dist: google-analytics-data>=0.18; extra == 'google-analytics'
Provides-Extra: grafana
Requires-Dist: httpx>=0.26; extra == 'grafana'
Provides-Extra: grib
Requires-Dist: cfgrib>=0.9.15.1; extra == 'grib'
Provides-Extra: hdf5
Requires-Dist: h5py>=3.10; extra == 'hdf5'
Provides-Extra: heic
Requires-Dist: pillow-heif>=1.3.0; extra == 'heic'
Provides-Extra: hl7
Requires-Dist: hl7>=0.4.5; extra == 'hl7'
Provides-Extra: html
Requires-Dist: beautifulsoup4>=4.12; extra == 'html'
Requires-Dist: lxml>=5.0; extra == 'html'
Provides-Extra: http
Requires-Dist: httpx>=0.26; extra == 'http'
Requires-Dist: starlette>=0.36; extra == 'http'
Provides-Extra: hubspot
Requires-Dist: hubspot-api-client>=8.0; extra == 'hubspot'
Provides-Extra: image
Requires-Dist: pillow>=10.0; extra == 'image'
Provides-Extra: jira
Requires-Dist: atlassian-python-api>=3.0; extra == 'jira'
Provides-Extra: joblib
Requires-Dist: joblib>=1.4; extra == 'joblib'
Provides-Extra: kafka
Requires-Dist: aiokafka>=0.13.0; extra == 'kafka'
Provides-Extra: kinesis
Requires-Dist: aioboto3>=12.0; extra == 'kinesis'
Provides-Extra: kml
Requires-Dist: lxml>=5.0; extra == 'kml'
Requires-Dist: simplekml>=1.3; extra == 'kml'
Provides-Extra: lz4
Requires-Dist: lz4>=4.3; extra == 'lz4'
Provides-Extra: markdown
Requires-Dist: markdown-it-py>=3.0; extra == 'markdown'
Requires-Dist: markdown>=3.5; extra == 'markdown'
Provides-Extra: matlab
Requires-Dist: scipy>=1.12; extra == 'matlab'
Provides-Extra: mixpanel
Requires-Dist: mixpanel>=4.10; extra == 'mixpanel'
Provides-Extra: mssql
Requires-Dist: aioodbc>=0.5; extra == 'mssql'
Provides-Extra: mysql
Requires-Dist: aiomysql>=0.2; extra == 'mysql'
Provides-Extra: netcdf
Requires-Dist: netcdf4>=1.6; extra == 'netcdf'
Provides-Extra: ods
Requires-Dist: odfpy>=1.4; extra == 'ods'
Provides-Extra: onnx
Requires-Dist: onnx>=1.16; extra == 'onnx'
Provides-Extra: open-metadata
Requires-Dist: httpx>=0.26; extra == 'open-metadata'
Provides-Extra: oracle
Requires-Dist: oracledb>=2.0; extra == 'oracle'
Provides-Extra: orc
Requires-Dist: pyarrow>=14.0; extra == 'orc'
Provides-Extra: otel
Requires-Dist: opentelemetry-api>=1.20; extra == 'otel'
Requires-Dist: opentelemetry-sdk>=1.20; extra == 'otel'
Provides-Extra: parquet
Requires-Dist: pyarrow>=14.0; extra == 'parquet'
Provides-Extra: pdf
Requires-Dist: pypdf>=4.0; extra == 'pdf'
Requires-Dist: reportlab>=4.0; extra == 'pdf'
Provides-Extra: postgres
Requires-Dist: asyncpg>=0.31; extra == 'postgres'
Provides-Extra: pptx
Requires-Dist: python-pptx>=0.6; extra == 'pptx'
Provides-Extra: prometheus
Requires-Dist: prometheus-client>=0.19; extra == 'prometheus'
Provides-Extra: pubsub
Requires-Dist: google-cloud-pubsub>=2.0; extra == 'pubsub'
Provides-Extra: pyteomics
Requires-Dist: psims>=1.3; extra == 'pyteomics'
Requires-Dist: pyteomics>=4.7; extra == 'pyteomics'
Provides-Extra: pytorch
Requires-Dist: torch>=2.0; extra == 'pytorch'
Provides-Extra: rabbitmq
Requires-Dist: aio-pika>=9.0; extra == 'rabbitmq'
Provides-Extra: ray
Requires-Dist: ray>=2.9; extra == 'ray'
Provides-Extra: redshift
Requires-Dist: asyncpg>=0.29; extra == 'redshift'
Provides-Extra: root
Requires-Dist: uproot>=5.7.4; extra == 'root'
Provides-Extra: rtf
Requires-Dist: striprtf>=0.0.27; extra == 'rtf'
Provides-Extra: s3
Requires-Dist: aioboto3>=12.0; extra == 's3'
Provides-Extra: safetensors
Requires-Dist: numpy>=1.26; extra == 'safetensors'
Requires-Dist: safetensors>=0.4; extra == 'safetensors'
Provides-Extra: salesforce
Requires-Dist: simple-salesforce>=1.12; extra == 'salesforce'
Provides-Extra: shapefile
Requires-Dist: pyshp>=2.3; extra == 'shapefile'
Provides-Extra: shopify
Requires-Dist: shopifyapi>=12.0; extra == 'shopify'
Provides-Extra: snappy
Requires-Dist: python-snappy>=0.7; extra == 'snappy'
Provides-Extra: snowflake
Requires-Dist: snowflake-connector-python>=3.0; extra == 'snowflake'
Provides-Extra: spss
Requires-Dist: pyreadstat>=1.3.4; extra == 'spss'
Provides-Extra: sqlite
Requires-Dist: aiosqlite>=0.19; extra == 'sqlite'
Provides-Extra: stripe
Requires-Dist: stripe>=7.0; extra == 'stripe'
Provides-Extra: tensorflow
Requires-Dist: tensorflow>=2.21; (python_version < '3.14') and extra == 'tensorflow'
Provides-Extra: tflite
Requires-Dist: ai-edge-litert>=2.1; (python_version < '3.14') and extra == 'tflite'
Provides-Extra: tiff
Requires-Dist: imagecodecs>=2026.3.6; extra == 'tiff'
Requires-Dist: pillow>=10.0; extra == 'tiff'
Requires-Dist: tifffile>=2026.3.3; extra == 'tiff'
Provides-Extra: twilio
Requires-Dist: twilio>=8.0; extra == 'twilio'
Provides-Extra: valkey
Requires-Dist: valkey-glide>=2.3; extra == 'valkey'
Provides-Extra: xlsx
Requires-Dist: openpyxl>=3.1; extra == 'xlsx'
Requires-Dist: xlsxwriter>=3.2; extra == 'xlsx'
Provides-Extra: zarr
Requires-Dist: zarr>=2.16; extra == 'zarr'
Provides-Extra: zendesk
Requires-Dist: zenpy>=2.0; extra == 'zendesk'
Provides-Extra: zstd
Requires-Dist: zstandard>=0.22; extra == 'zstd'
Description-Content-Type: text/markdown

# pirn-core

The core of **pirn** — a pipeline framework where everything is a *knot*. Imports as `pirn`.

`pirn-core` carries the engine, run/manager machinery, the connector public surface
(`pirn.connectors.*`), the shared provider bases (`pirn.core.providers.*`), and the
`sweet_tea` registry plumbing. Its base install is **domain-free** (constraint C2):
`import pirn` pulls no heavy backend, and core never imports a `pirn_<domain>` package.

## Install

```bash
pip install pirn-core
```

Backends are optional extras (none installed by default):

```bash
pip install "pirn-core[postgres,s3,kafka]"   # pick the backends you need
```

## Domains

The domain libraries ship as separate, independently-installable packages that each
depend on `pirn-core` and self-register their knots under `library="pirn"`:

| Package | Imports as | Domain |
|---|---|---|
| `pirn-signal` | `pirn_signal` | Digital signal processing |
| `pirn-data` | `pirn_data` | Data engineering / analytics |
| `pirn-ml` | `pirn_ml` | ML engineering (depends on `pirn-data`) |
| `pirn-agents` | `pirn_agents` | LLM agents |
| `pirn-health` | `pirn_health` | Health / clinical |
| `pirn-oilgas` | `pirn_oilgas` | Oil & gas |

Install a domain (it pulls `pirn-core` automatically):

```bash
pip install pirn-signal
```

See the [project README](https://github.com/snoodleboot-io/pirn) for the full
documentation, architecture, and the core/domains split rationale (ADR).
