Skip to main content

Declarative, typed query language that compiles to SQL.

Project description

Trilogy

SQL with superpowers for analytics

Website Discord PyPI version

Trilogy is a batteries-included data-productivity toolkit to accelerate traditional SQL tasks - reporting, data processing, and adhoc analytics. It's great for humans - and even better for agents.

The language - also called Trilogy - lets you write queries without manual joins, reuse and compose logic, and get type-checked, safe SQL for any supported backend.

The rich surrounding ecosystem - CLI, studio, public models, python datasource integration - let you move fast.

Why Trilogy

SQL is easy to start with and hard to scale.

Trilogy adds a lightweight semantic layer to keep the speed, but make it faster at scale.

  • No manual joins; no from clause
  • Reusable models, calculations, and functions
  • Safe refactoring across queries
  • Works where analytics lives: BigQuery, DuckDB, Snowflake, Presto
  • Easy to write - for humans and AI
  • Built-in semantic layer without boilerplate or YAML

This repo contains pytrilogy, the reference implementation of the core language and cli.

Install To try it out, include both the CLI and serve dependencies.

pip install pytrilogy[cli,serve]

Docs and Web

[!TIP] Try it now: Open-source studio | Interactive demo | Documentation

Quick Start

Go from zero to a queryable, persisted model in seconds. We'll pull a public DuckDB model (some 2000s USA FAA airplane data, hosted parquet), add a derived persisted datasource, refresh it, then explore it in Studio.

# 1. Pull a public model (fetches all source .preql + setup.sql + trilogy.toml).
trilogy public fetch faa ./faa-demo
cd faa-demo

# Run a quick adhoc query (--import prepends the import for you — discover
# what's available with `trilogy explore flight.preql`)
trilogy run --import flight "select carrier.code, count(id) as flight_count order by flight_count desc;"


# Plot it
trilogy run --import flight "chart layer barh ( y_axis <- carrier.name, x_axis <- count(id) as flight_count ) order by flight_count desc limit 10;"

# 3. Add a derived datasource by grabbing the hosted snippet
trilogy file write reporting.preql --from-url https://raw.githubusercontent.com/trilogy-data/trilogy-public-models/refs/heads/main/examples/duckdb/faa/example.preql

# 4. Refresh — runs setup.sql, builds any managed assets, tracks watermarks.
trilogy refresh .

# 5. Launch the Studio UI against the live model (opens your browser) to explore + query
trilogy serve .

The snippet fetched in step 3 looks like this — copy/paste it into your editor if you'd rather author it by hand:

import flight as flight;

# derive reusable concepts
auto flight_date <- flight.dep_time::date;

# this can be properties or metrics
auto flight_count <- count(flight.id);

# datasources can be read from or written to
# use this to write to 
datasource daily_airplane_usage (
    flight_date,
    flight.aircraft.model.name,
    flight_count
)
grain(flight_date, flight.aircraft.model.name)
address daily_airplane_usage
;

Browse other available models with trilogy public list (filter with --engine duckdb or --tag benchmark). Every model in trilogy-public-models is pullable.

Key Features

Trilogy supports reusable functions. Where clauses are automatically pushed down inside aggregates; having filters the otuside.

const prime <- unnest([2, 3, 5, 7, 11, 13, 17, 19, 23, 29]);

def cube_plus_one(x) -> (x * x * x + 1);
def sum_plus_one(val)-> sum(val)+1;

WHERE 
   (prime+1) % 4 = 0
SELECT
    @sum_plus_one(@cube_plus_one(prime)) as prime_cubed_plus_one_sum_plus_one
LIMIT 10;

Run it in DuckDB

trilogy run hello.preql duckdb

Principles

Versus SQL, Trilogy aims to:

Keep:

  • Correctness
  • Accessibility

Improve:

  • Simplicity
  • Refactoring/maintainability
  • Reusability/composability
  • Expressivness

Maintain:

  • Acceptable performance

(we shoot for <~100-300ms of overhead for queyr planning, and optimized SQL generation)

Backend Support

Backend Status Notes
BigQuery Core Full support
DuckDB Core Full support
Snowflake Core Full support
Sqlite Core Full support
SQL Server Experimental Limited testing
Presto Experimental Limited testing

Semantic Layer Intro

Semantic models are compositions of types, keys, and properties

Save the following code in a file named hello.preql

# semantic model is abstract from data

type word string; # types can be used to provide expressive metadata tags that propagate through dataflow

key sentence_id int;
property sentence_id.word_one string::word; # comments after a definition 
property sentence_id.word_two string::word; # are syntactic sugar for adding
property sentence_id.word_three string::word; # a description to it

# comments in other places are just comments

# define our datasource to bind the model to data
# for most work, you can import something already defined
# testing using query fixtures is a common pattern
datasource word_one(
    sentence: sentence_id,
    word:word_one
)
grain(sentence_id)
query '''
select 1 as sentence, 'Hello' as word
union all
select 2, 'Bonjour'
''';

datasource word_two(
    sentence: sentence_id,
    word:word_two
)
grain(sentence_id)
query '''
select 1 as sentence, 'World' as word
union all
select 2 as sentence, 'World'
''';

datasource word_three(
    sentence: sentence_id,
    word:word_three
)
grain(sentence_id)
query '''
select 1 as sentence, '!' as word
union all
select 2 as sentence, '!'
''';

def concat_with_space(x,y) -> x || ' ' || y;

# an actual select statement
# joins are automatically resolved between the 3 sources
with sentences as
select sentence_id, @concat_with_space(word_one, word_two) || word_three as text;

WHERE 
    sentences.sentence_id in (1,2)
SELECT
    sentences.text
;

Run it:

trilogy run hello.preql duckdb

UI Preview

Python SDK Intro

Trilogy can be run directly in python through the core SDK. Trilogy code can be defined and parsed inline or parsed out of files.

A BigQuery example, similar to the BigQuery quickstart:

from trilogy import Dialects, Environment

environment = Environment()

environment.parse('''
key name string;
key gender string;
key state string;
key year int;
key yearly_name_count int; int;

datasource usa_names(
    name:name,
    number:yearly_name_count,
    year:year,
    gender:gender,
    state:state
)
address `bigquery-public-data.usa_names.usa_1910_2013`;
''')

executor = Dialects.BIGQUERY.default_executor(environment=environment)

results = executor.execute_text('''
WHERE
    name = 'Elvis'
SELECT
    name,
    sum(yearly_name_count) -> name_count 
ORDER BY
    name_count desc
LIMIT 10;
''')

# multiple queries can result from one text batch
for row in results:
    # get results for first query
    answers = row.fetchall()
    for x in answers:
        print(x)

LLM Usage

Connect to your favorite provider and generate queries with confidence and high accuracy.

from trilogy import Environment, Dialects
from trilogy.ai import Provider, text_to_query
import os

executor = Dialects.DUCK_DB.default_executor(
    environment=Environment(working_path=Path(__file__).parent)
)

api_key = os.environ.get(OPENAI_API_KEY)
if not api_key:
    raise ValueError("OPENAI_API_KEY required for gpt generation")
# load a model
executor.parse_file("flight.preql")
# create tables in the DB if needed
executor.execute_file("setup.sql")
# generate a query
query = text_to_query(
    executor.environment,
    "number of flights by month in 2005",
    Provider.OPENAI,
    "gpt-5-chat-latest",
    api_key,
)

# print the generated trilogy query
print(query)
# run it
results = executor.execute_text(query)[-1].fetchall()
assert len(results) == 12

for row in results:
    # all monthly flights are between 5000 and 7000
    assert row[1] > 5000 and row[1] < 7000, row

CLI Usage

Trilogy can be run through a CLI tool, also named 'trilogy'.

Basic syntax:

trilogy run <cmd or path to trilogy file> <dialect>

With backend options:

trilogy run "key x int; datasource test_source(i:x) grain(x) address test; select x;" duckdb --path <path/to/database>

Format code:

trilogy fmt <path to trilogy file>

Browse and pull public models:

trilogy public list [--engine duckdb] [--tag benchmark]
trilogy public fetch <model-name> [<dir>] [--no-examples]

Fetches model source files, setup scripts, and a ready-to-use trilogy.toml from trilogy-public-models into a local directory so you can immediately refresh and serve it.

Managing workspace files from the CLI

trilogy file has shell-agnostic CRUD operations on the filesystem.

trilogy file list .                      # list entries (-r for recursive, -l for size)
trilogy file read reporting.preql        # dump contents to stdout
trilogy file write path --content "..."  # create/overwrite from a string
trilogy file write path --from-file src  # copy from a local file
trilogy file write path --from-url URL   # fetch from http(s):// or file:// URL
trilogy file delete path --recursive     # remove a file or directory
trilogy file move old.preql new.preql    # rename within a backend
trilogy file exists path                 # exit 0 if present, 1 otherwise

Backend Configuration

BigQuery:

  • Uses applicationdefault authentication (TODO: support arbitrary credential paths)
  • In Python, you can pass a custom client

DuckDB:

  • --path - Optional database file path

Postgres:

  • --host - Database host
  • --port - Database port
  • --username - Username
  • --password - Password
  • --database - Database name

Snowflake:

  • --account - Snowflake account
  • --username - Username
  • --password - Password

Config Files

The CLI can pick up default configuration from a config file in the toml format. Detection will be recursive form parent directories of the current working directory, including the current working directory.

This can be used to set

  • default engine and arguments
  • parallelism for execute for the CLI
  • any startup commands to run whenever creating an executor.
# Trilogy Configuration File
# Learn more at: https://github.com/trilogy-data/pytrilogy

[engine]
# Default dialect for execution
dialect = "duck_db"

# Parallelism level for directory execution
# parallelism = 2

# Startup scripts to run before execution
[setup]
# startup_trilogy = []
sql = ['setup/setup_dev.sql']

More Resources

Python API Integration

Root Imports

Are stable and should be sufficient for executing code from Trilogy as text.

from pytrilogy import Executor, Dialect

Authoring Imports

Are also stable, and should be used for cases which programatically generate Trilogy statements without text inputs or need to process/transform parsed code in more complicated ways.

from pytrilogy.authoring import Concept, Function, ...

Other Imports

Are likely to be unstable. Open an issue if you need to take dependencies on other modules outside those two paths.

MCP/Server

Trilogy is straightforward to run as a server/MCP server; the former to generate SQL on demand and integrate into other tools, and MCP for full interactive query loops.

This makes it easy to integrate Trilogy into existing tools or workflows.

You can see examples of both use cases in the trilogy-studio codebase here and install and run an MCP server directly with that codebase.

If you're interested in a more fleshed out standalone server or MCP server, please open an issue and we'll prioritize it!

Trilogy Syntax Reference

See documentation for more details.

Contributing

Clone repository and install requirements.txt and requirements-test.txt.

Please open an issue first to discuss what you would like to change, and then create a PR against that issue.

Similar Projects

Trilogy combines two aspects: a semantic layer and a query language. Examples of both are linked below:

Semantic layers - tools for defining a metadata layer above SQL/warehouse to enable higher level abstractions:

Better SQL has been a popular space. We believe Trilogy takes a different approach than the following, but all are worth checking out. Please open PRs/comment for anything missed!

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pytrilogy-0.3.244.tar.gz (494.1 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

pytrilogy-0.3.244-cp313-cp313-win_amd64.whl (1.1 MB view details)

Uploaded CPython 3.13Windows x86-64

pytrilogy-0.3.244-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

pytrilogy-0.3.244-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.2 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

pytrilogy-0.3.244-cp313-cp313-macosx_11_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

pytrilogy-0.3.244-cp313-cp313-macosx_10_12_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

pytrilogy-0.3.244-cp312-cp312-win_amd64.whl (1.1 MB view details)

Uploaded CPython 3.12Windows x86-64

pytrilogy-0.3.244-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

pytrilogy-0.3.244-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

pytrilogy-0.3.244-cp312-cp312-macosx_11_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pytrilogy-0.3.244-cp312-cp312-macosx_10_12_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

pytrilogy-0.3.244-cp311-cp311-win_amd64.whl (1.1 MB view details)

Uploaded CPython 3.11Windows x86-64

pytrilogy-0.3.244-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

pytrilogy-0.3.244-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.2 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

pytrilogy-0.3.244-cp311-cp311-macosx_11_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

pytrilogy-0.3.244-cp311-cp311-macosx_10_12_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

File details

Details for the file pytrilogy-0.3.244.tar.gz.

File metadata

  • Download URL: pytrilogy-0.3.244.tar.gz
  • Upload date:
  • Size: 494.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pytrilogy-0.3.244.tar.gz
Algorithm Hash digest
SHA256 d5584a76595cd1b892968c75bdad1660dcec29dc9c5e33d685cef017666dc9d0
MD5 e0c20224d81738b1ed00d3334911faba
BLAKE2b-256 4102e7d42179c4adda92d3ca05d5d95ef19dbbdfabdbf56831acd2abfd6af5f9

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytrilogy-0.3.244.tar.gz:

Publisher: pythonpublish.yml on trilogy-data/pytrilogy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pytrilogy-0.3.244-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for pytrilogy-0.3.244-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 52dfae3217ac1b17f20db8f8e558d8f796c3107667507bc348f8c96a39a4035a
MD5 9ccea1e702a4f33392632f1900f36b59
BLAKE2b-256 004355a9825f4673dffd640d726d5960a0700879172fa396e49a4d9028e81af0

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytrilogy-0.3.244-cp313-cp313-win_amd64.whl:

Publisher: pythonpublish.yml on trilogy-data/pytrilogy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pytrilogy-0.3.244-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pytrilogy-0.3.244-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7343d15699b16bdbeaf9cdf3c2df555dee4541f803931bf04f5c2be6caa4b2e2
MD5 74b1e8f243ceba8d984bec4ec7c91857
BLAKE2b-256 d2e9a9d6c7a5718cea024e403a2af542d54092005843a49210fcca42ad5f0edc

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytrilogy-0.3.244-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: pythonpublish.yml on trilogy-data/pytrilogy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pytrilogy-0.3.244-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pytrilogy-0.3.244-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 534cf57a31ffc23e7d6bfb3aa84706ed1117cc7913442512390a06997250233e
MD5 3219351dc6124e52e082791f19ef53c1
BLAKE2b-256 aa303fa90a44ce84a9c99b82e42a8f88934903f5e474a4540c7ea24bde94acc0

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytrilogy-0.3.244-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: pythonpublish.yml on trilogy-data/pytrilogy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pytrilogy-0.3.244-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pytrilogy-0.3.244-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5dcfce6d049b4e9b5d8f41c1a06842abdfce0df6264cd9fcae93ce850757b2f2
MD5 36215a9277b2c67072c01307a687720b
BLAKE2b-256 ac2ae5911a5937e9ff91bad27b0411b10ad5cac85ea92710da20c14ca1826b67

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytrilogy-0.3.244-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: pythonpublish.yml on trilogy-data/pytrilogy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pytrilogy-0.3.244-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pytrilogy-0.3.244-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 c8eed9218e3db212095c45185b5df692331c6880ca3a1db8cf32e37c3f3e6c93
MD5 b82106e664b7899ae77cf1cfd221e131
BLAKE2b-256 25fc6ab04bd5e7da05823b82ffe6b134688d0b1f9f0212217627cbd72c24964b

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytrilogy-0.3.244-cp313-cp313-macosx_10_12_x86_64.whl:

Publisher: pythonpublish.yml on trilogy-data/pytrilogy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pytrilogy-0.3.244-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for pytrilogy-0.3.244-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 d5b3a54873e57c8cef785c3c6c47b015163982492b49475e0712d7f426b3236c
MD5 9da6c7ff7b79403cfafedafce4602957
BLAKE2b-256 be2bb57621747c4766031429122ec0b11fcf915577ffc944c0a6061fda2ae0df

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytrilogy-0.3.244-cp312-cp312-win_amd64.whl:

Publisher: pythonpublish.yml on trilogy-data/pytrilogy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pytrilogy-0.3.244-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pytrilogy-0.3.244-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e394afb27dbd6e57b0e01e0bb402d96d4c56178d046e3e2812b95ffe0e251f5d
MD5 6ef524c322ea79a663e6f9277bd49d43
BLAKE2b-256 19ae6a9e63e0679c27776661681a88159c1226582f83821e1a6593c1cc44aabe

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytrilogy-0.3.244-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: pythonpublish.yml on trilogy-data/pytrilogy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pytrilogy-0.3.244-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pytrilogy-0.3.244-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 497c8c422b04665eb049ffc76e35ca24d0bd88671815f3a684f6033227a6d10d
MD5 25dec46f605c688beb9e229e153601b0
BLAKE2b-256 ac15b5ac8fc22780b0ea2873143fb8e85ace7dc61f51754d6733c36eaa35e2a4

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytrilogy-0.3.244-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: pythonpublish.yml on trilogy-data/pytrilogy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pytrilogy-0.3.244-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pytrilogy-0.3.244-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5b8b8875391c11268bf41d8ee02c9de9fcb81a78095c416659038c09aa16b5f0
MD5 f2cdb38dc5b665fcfa206054eb61482c
BLAKE2b-256 200d22ec58a586c28246a5dba31a0ba561bf7d6aa206cbe245b055815ab2799f

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytrilogy-0.3.244-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: pythonpublish.yml on trilogy-data/pytrilogy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pytrilogy-0.3.244-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pytrilogy-0.3.244-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 3725535e96c8f7e0f8ad99710c043edc4fc1040cb767f99191d2edc815be999f
MD5 38d34ba5e73e0cb9ec04fab223727147
BLAKE2b-256 0a578206885b71c134d6274fd357f31a98817da5f40be82ca93987ba74a3d2a7

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytrilogy-0.3.244-cp312-cp312-macosx_10_12_x86_64.whl:

Publisher: pythonpublish.yml on trilogy-data/pytrilogy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pytrilogy-0.3.244-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for pytrilogy-0.3.244-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 e9b32b84890f1075818abf401bc20fb912c9f6b32b6bbac815e1cd18136c9b20
MD5 debefde65deb0e8bd1c6526a58ddbe25
BLAKE2b-256 5fd252e9e6cb938c7be2748821c80672fde752f78b53e317bf14b0eb92133901

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytrilogy-0.3.244-cp311-cp311-win_amd64.whl:

Publisher: pythonpublish.yml on trilogy-data/pytrilogy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pytrilogy-0.3.244-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pytrilogy-0.3.244-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 fbcf4d82ac5ea720561a384b249e5f2331499d4eb8a976a5b4d6acf27d43ca60
MD5 ad765c0484ca0c6adc71a1348a2a6380
BLAKE2b-256 e616b9f98e8eb9cba7cd587c3529c7c2248b740e36d7d91cfc292447de73804c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytrilogy-0.3.244-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: pythonpublish.yml on trilogy-data/pytrilogy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pytrilogy-0.3.244-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pytrilogy-0.3.244-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 2f834bd852a74174e5491f154c1b74e55fb9cd9a15561253b6a26fbc5442d5bd
MD5 079f84c5a396d24d0ea585043d61d077
BLAKE2b-256 a9cf5f2d02efd2003bf18be2f522a6f3e905d56622071684984072523fbeaae9

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytrilogy-0.3.244-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: pythonpublish.yml on trilogy-data/pytrilogy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pytrilogy-0.3.244-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pytrilogy-0.3.244-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 119d9c0ae9e98ee0ae4c1daff6b73b3ae82f049fa59984183184c5d3a200a470
MD5 ef822656397b615d2f687d68984eceee
BLAKE2b-256 49a52ab3bfda8df908084e0c66497494116ca3d0ace59c814934192c299debe9

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytrilogy-0.3.244-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: pythonpublish.yml on trilogy-data/pytrilogy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pytrilogy-0.3.244-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pytrilogy-0.3.244-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 535937811c84981a16e2913ba67c5fbada5cd999a7276e9140185d58e6f3a17e
MD5 d7d7a110dcb07957d17facda00aced7e
BLAKE2b-256 aecfca5a26721bf68786396f1813fc549c0c67364d4622e6cbe0880c7cab1060

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytrilogy-0.3.244-cp311-cp311-macosx_10_12_x86_64.whl:

Publisher: pythonpublish.yml on trilogy-data/pytrilogy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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