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 semantic SQL language for analytics.

It lets you write queries without manual joins, reuse and compose logic, and get type-checked, safe SQL for any supported backend.

Why Trilogy

Analytics SQL can get hard to maintain - fast.

Trilogy adds a lightweight semantic layer that makes queries reusable, refactorable, and safer at any 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

Trilogy is future proof - with the fast feedback loops agents crave -but is built for people first.

This repo contains pytrilogy, the reference implementation of the language.

Quick Start

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

Install

pip install pytrilogy[cli]

Create a file hello.preql

Trilogy supports reusable functions and constants.

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

def cube_plus_one(x) -> (x * x * x + 1);

WHERE 
    prime_cubed_plus_one % 7 = 0
SELECT
    prime,
    @cube_plus_one(prime) as prime_cubed_plus_one
ORDER BY
    prime asc
LIMIT 10;

Run it in DuckDB

trilogy run hello.preql duckdb

What Trilogy Gives You

  • Speed - write less, faster. Concise but powerful syntax
  • Efficiency - easily reuse and compose functions and models, modeled after python
  • Easy refactoring - change and update tables without breaking queries, and easy testing snd static analysis
  • Testability - built-in testing patterns with query fixtures
  • Straightforward - for humans and LLMs alike

Trilogy is especially powerful for data consumption, providing a rich metadata layer that makes creating, interpreting, and visualizing queries easy and expressive.

We recommend starting with the free studio UI to explore Trilogy for most users. The SDK pytrilogy provides a CLI - similiar to DBT - that can be run locally to parse and execute trilogy model [.preql], or can be embedding larger python applications by importing the trilogy package.

Trilogy is Easy to Write

For humans and AI. Enjoy flexible, one-shot query generation without any DB access or security risks.

(full code in the python API section.)

query = text_to_query(
    executor.environment,
    "number of flights by month in 2005",
    Provider.OPENAI,
    "gpt-5-chat-latest",
    api_key,
)

# get a ready to run query
print(query)
# typical output
'''where local.dep_time.year = 2020  
select
    local.dep_time.month,
    count(local.id2) as number_of_flights
order by
    local.dep_time.month asc;'''

Goals

Versus SQL, Trilogy aims to:

Keep:

  • Correctness
  • Accessibility

Improve:

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

Maintain:

  • Acceptable performance

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

Examples

Hello World

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 Usage

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>

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

Not exhaustive - see documentation for more details.

Import

import [path] as [alias];

Concepts

Types: string | int | float | bool | date | datetime | time | numeric(scale, precision) | timestamp | interval | array<[type]> | map<[type], [type]> | struct<name:[type], name:[type]>

Key:

key [name] [type];

Property:

property [key].[name] [type];
property x.y int;

# or multi-key
property <[key],[key]>.[name] [type];
property <x,y>.z int;

Transformation:

auto [name] <- [expression];
auto x <- y + 1;

Datasource

datasource <name>(
    <column_and_concept_with_same_name>,
    # or a mapping from column to concept
    <column>:<concept>,
    <column>:<concept>,
)
grain(<concept>, <concept>)
address <table>;

datasource orders(
    order_id,
    order_date,
    total_rev: point_of_sale_rev,
    customomer_id: customer.id
)
grain orders
address orders;

Queries

Basic SELECT:

WHERE
    <concept> = <value>
SELECT
    <concept>,
    <concept>+1 -> <alias>,
    ...
HAVING
    <alias> = <value2>
ORDER BY
    <concept> asc|desc
;

CTEs/Rowsets:

with <alias> as
WHERE
    <concept> = <value>
select
    <concept>,
    <concept>+1 -> <alias>,
    ...

select <alias>.<concept>;

Data Operations

Persist to table:

persist <alias> as <table_name> from
<select>;

Export to file:

COPY INTO <TARGET_TYPE> '<target_path>' FROM SELECT
    <concept>, ...
ORDER BY
    <concept>, ...
;

Show generated SQL:

show <select>;

Validate Model

validate all
validate concepts abc,def...
validate datasources abc,def...

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.229.tar.gz (455.8 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.229-cp313-cp313-win_amd64.whl (1.1 MB view details)

Uploaded CPython 3.13Windows x86-64

pytrilogy-0.3.229-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.229-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.1 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

pytrilogy-0.3.229-cp313-cp313-macosx_11_0_arm64.whl (1.1 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

pytrilogy-0.3.229-cp313-cp313-macosx_10_12_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

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

Uploaded CPython 3.12Windows x86-64

pytrilogy-0.3.229-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.229-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.1 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

pytrilogy-0.3.229-cp312-cp312-macosx_11_0_arm64.whl (1.1 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pytrilogy-0.3.229-cp312-cp312-macosx_10_12_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

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

Uploaded CPython 3.11Windows x86-64

pytrilogy-0.3.229-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.229-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.1 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

pytrilogy-0.3.229-cp311-cp311-macosx_11_0_arm64.whl (1.1 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

pytrilogy-0.3.229-cp311-cp311-macosx_10_12_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: pytrilogy-0.3.229.tar.gz
  • Upload date:
  • Size: 455.8 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.229.tar.gz
Algorithm Hash digest
SHA256 f124b56a0889d8f3c156d65c968e84042ee8aa12bec3116f37ac55527cdc4c32
MD5 d708bacd8c204b2c30fc701bd64e842b
BLAKE2b-256 e7debc408cc19d21f5bc6d226260fed3d4799975de8224fed7dd8c6d50963865

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytrilogy-0.3.229.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.229-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for pytrilogy-0.3.229-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 dde27083ef14498f37bdc1619112f0a7b928eb4e50d6f92e5766d05bc01f4bbc
MD5 55305e963f6b34de3f628d3819eb7461
BLAKE2b-256 a8ba159034cb4d7d6ef08ebe5b5bab4bad0309944ed90644255214f5720d7929

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytrilogy-0.3.229-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.229-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pytrilogy-0.3.229-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8bb3ef90213b7a86fcb0d6f5bdd2cd8b364ded22d1a04db9c15a8b949d4025f5
MD5 ab0345b3f6989f8e26b28e9da8e7fa80
BLAKE2b-256 b146efe204afba01dc64a1120a28a8a2e954ae0ade8190da2da5a6076502a972

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytrilogy-0.3.229-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.229-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pytrilogy-0.3.229-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 99848c241d8305a60234ab7cb764d0d0529889a9195d91730f0207f5567e8bee
MD5 4c7530e9228db6f7d2d0e83eca24649b
BLAKE2b-256 8da3f5b9b928422d816bdd8ae5d176dcad83e197abb73d006e9da2b8747cb804

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytrilogy-0.3.229-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.229-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pytrilogy-0.3.229-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 da66663bfd3801bbf6b87ee761df7271954b15e7c8578d96a89b8dca1a20170c
MD5 cf0f2b313f17722a2ee2ef9ed5193d49
BLAKE2b-256 fca9d72dbb2fb22ba843e3001c339609eff68ec329006bc58bcc3085cf14f60a

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytrilogy-0.3.229-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.229-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pytrilogy-0.3.229-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 6cb4e339b4c181978af8b059a86a6fd688fc9de9f5f63cfd6ca8eb7fa07edd7e
MD5 099599ce1311c347c0769fc5c9d3a32e
BLAKE2b-256 34d5974540cbbe37597dbc952234d19d1eef7ce98341e22ed22d293ae82dae88

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytrilogy-0.3.229-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.229-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for pytrilogy-0.3.229-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 4b9cd43893662eed445913f73e0755da40fdb5fa30474ebdd26278d25ff7f2b7
MD5 357eb2a2c40479901047c18388f60004
BLAKE2b-256 88078466100f1db4e1643cd710a534c9910719ff3ba06297c11bd2e4f38cfdfd

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytrilogy-0.3.229-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.229-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pytrilogy-0.3.229-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 99164fd2d21f3a7342752c910c12283835172e1e2b27d2eae7c3ee0414ace9eb
MD5 b40224b276adce5ec91374833a22627d
BLAKE2b-256 81d545fc5cadbc528060893498c6a35427ec0aeffece165bce459ccec38fed42

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytrilogy-0.3.229-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.229-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pytrilogy-0.3.229-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 ee2a9024b948ed1a46b3503c4b23bcb927afeac5192417003ef2c152dc99aa10
MD5 e4ff493266366a46dd4dff7d3ddf3064
BLAKE2b-256 1134eebdb3b1b4e7f6f67068a3c5236f22018a28744425432e47622465f3c018

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytrilogy-0.3.229-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.229-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pytrilogy-0.3.229-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c6574d9481229c3ca19ad865ffa194ec8f4ff3bbdfdedc421fd8c6148aa31192
MD5 eda8286581da0d1864cc9052825d841d
BLAKE2b-256 8fe2019a367705cac102634d57f032ed21d9ba74bc90a0d182bb6404867524ea

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytrilogy-0.3.229-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.229-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pytrilogy-0.3.229-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 72032c10067ca63ea4ff2a306dd9b45645576b1117e6ca6c538f56dda8c2b330
MD5 cfa83fb36e12bfab0f4df5ba7f7994ad
BLAKE2b-256 c8995c9250ee84d66aa1cbe23321d2bf63c2b692124daeb7a9573c21bc56939a

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytrilogy-0.3.229-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.229-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for pytrilogy-0.3.229-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 f6aa875463eec0f43565ea8d4ebcbaabf44cf875ad5a52233edc05ec8d9dd0a4
MD5 278e823139fe8a54588e6ce36f33de28
BLAKE2b-256 dd6967eb7414fb985130214df32c881e65102dafac00bb0096cee5de70f2bf31

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytrilogy-0.3.229-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.229-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pytrilogy-0.3.229-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ef3e2c48b2a373373e3b74d4df81b3dabf6a5492640072b375318df4083fa32f
MD5 c29e14b0f29a7d61c81f482dba575f43
BLAKE2b-256 d6b52382a8bb65f3a8f95bcd33e528b344e55146df89f31f1dfc850d2b004df1

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytrilogy-0.3.229-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.229-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pytrilogy-0.3.229-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 47e8a0b5d6fdfe673abdbfe98ef5b521e67a608ce0e2b5755d1d0ce1c530c5e9
MD5 4c40e68f6ce9b5aadf630a6db4f7056f
BLAKE2b-256 0782cf6cce646c5e5b75c7636f5e1159a56b5c38f5c602338dfdceced982b488

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytrilogy-0.3.229-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.229-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pytrilogy-0.3.229-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e71ce511d2501bd662899a9006d3fcfb14d1bcf749e21d15f7f0da3d3325e11c
MD5 87048e7d9b8db04f5fb4290c4d654f0d
BLAKE2b-256 70d8e4a857b07a6bcbf0e7e966d4626aec7a5923fe34c3b211d1f23dd0e8ab0c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytrilogy-0.3.229-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.229-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pytrilogy-0.3.229-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 15fa3d55612fd0d45a2b96345e27d408a5e09cbe4d9114bf0c6daf7ac16ebbd6
MD5 d8694d570ff7e612e1b21fb322d8e823
BLAKE2b-256 6bc8fdf831e7ac92974f063758e3b6c5db271f5777114819e23314ba0429834f

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytrilogy-0.3.229-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