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.220.tar.gz (394.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.220-cp313-cp313-win_amd64.whl (843.6 kB view details)

Uploaded CPython 3.13Windows x86-64

pytrilogy-0.3.220-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (938.2 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

pytrilogy-0.3.220-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (915.0 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

pytrilogy-0.3.220-cp313-cp313-macosx_11_0_arm64.whl (891.7 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

pytrilogy-0.3.220-cp313-cp313-macosx_10_12_x86_64.whl (920.6 kB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

pytrilogy-0.3.220-cp312-cp312-win_amd64.whl (844.0 kB view details)

Uploaded CPython 3.12Windows x86-64

pytrilogy-0.3.220-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (938.8 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

pytrilogy-0.3.220-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (915.6 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

pytrilogy-0.3.220-cp312-cp312-macosx_11_0_arm64.whl (892.0 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pytrilogy-0.3.220-cp312-cp312-macosx_10_12_x86_64.whl (921.0 kB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

pytrilogy-0.3.220-cp311-cp311-win_amd64.whl (842.4 kB view details)

Uploaded CPython 3.11Windows x86-64

pytrilogy-0.3.220-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (938.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

pytrilogy-0.3.220-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (916.0 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

pytrilogy-0.3.220-cp311-cp311-macosx_11_0_arm64.whl (891.9 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

pytrilogy-0.3.220-cp311-cp311-macosx_10_12_x86_64.whl (920.8 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: pytrilogy-0.3.220.tar.gz
  • Upload date:
  • Size: 394.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.220.tar.gz
Algorithm Hash digest
SHA256 7bf4409525b3157c68646e8a9e7e0d39a758712eb2fecf2c6ec7f6aff6acb84d
MD5 f291e61d2aa2feb4395b4b37f46d2b85
BLAKE2b-256 7fc42b908191c3e7832414692ea8576fda7a8907f74bf9841241e007c562d4a7

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pytrilogy-0.3.220-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 843.6 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pytrilogy-0.3.220-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 8ffdd797a60313cf68cff5ebb12a7929961936b528e5fb7ed8b132e48bb52299
MD5 85a52648676b876f619ab3337f18bb30
BLAKE2b-256 347953b63ad10b07f17f8de75a4d87054986cac6fe1bbbe5f5729458cfb01798

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.220-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 44802d16e64af2c2979c56eb43ca711da689a3029c48b39f7be24e189c26b3a7
MD5 f6f68f6b96fb204966d0011c908c5d21
BLAKE2b-256 79bb372578022b69c61e0f6e2b1803850846f86d588076d92a6c47d9a23ebc96

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.220-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a0a7bbe216c7c10377e62ed83c66506588db2face68cbaff992eb9388575f9dd
MD5 fc8e4a52b10dae5cf932502bafdcdd71
BLAKE2b-256 4c601903d674089af36fdb9e92789be066c16a58766d307a8624d52d6734a583

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.220-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bb1c73aab1fc5b3cc26225578e9f4816d03f69ee0ea129a9defeb6a7fc49c5f7
MD5 7193d0003eda43e219cdf6871857659e
BLAKE2b-256 ba99d77ddab79110c98b2a4924e546635e56e02d5506c55ea3e81696112245f5

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.220-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 3652d930f0b616dea64f19f91e34217cd70dd8b75d6f136c353bf45927efb89e
MD5 ebb10f002895c93b675afb2dc96bb796
BLAKE2b-256 8634bde916223faa890c3185ad5641e0fdd3fd46e20ddf957d25aede322b6ad9

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pytrilogy-0.3.220-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 844.0 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pytrilogy-0.3.220-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 05952643649649b4cc529eff2d96614fc9fc2253d2d8254239f423acdb43f6e1
MD5 2b93d0c2874102c8cda9c7be3194f53f
BLAKE2b-256 8efa3541fd2b4389dd159a87a6b0fa09e8549a59d76a7c0cf3d0ee25ee02b970

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.220-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a77e40419d0cca838fb49d5daa999016dcb338379b9d1ae563e13ad0397c4daa
MD5 96cc4316c97da90e8577675c722a9194
BLAKE2b-256 746948432569dcaa26a96ede9cc42e82e467cd2bcbc332d23b62911d3731fb75

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.220-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 942907db3bb747116b3013b2f95e2b2fd9622fab154b79750a0948979daa6ee1
MD5 aad46ce8ea8140967b9b9d86b01d3949
BLAKE2b-256 440e1076ddb9520ed0b4c561eb1cea7c1e1ca44ec182921855cbf2f56fa9c308

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.220-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 595d36bb192d7826def6fdaa9c6935c69f08ed70e603d81b08ed79eb7255014e
MD5 9a87c2fa078a7bb81163684a781c7656
BLAKE2b-256 a51d04579d54bc046e25846431c730ed3a2ae9f57fe3cc80d3b4c1bf8a935e45

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.220-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 73bf0efacf4a69ba417a178b6cd8dc615fb9944096bed592a6cbdb542b09e8e5
MD5 a8e1d45b7c84186edcdb8a932e5317e5
BLAKE2b-256 d1b2b91e3a7fd966a6eb05a484ecefa306db9adf7eed824e4ed9ea3ff4f8577c

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pytrilogy-0.3.220-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 842.4 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pytrilogy-0.3.220-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 19404728a40b7bb8fd90f97a537138d488084c5c62b12105bff2198905c195ee
MD5 6eb78690b65dc1f4ca00d338ddf88db3
BLAKE2b-256 7e7ddaa4d36986440b9940dcd980f5103c1f6260dcd9c5b0b933770bd0852141

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.220-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 99a3fc282fd10966aaca2e2d1952e1eeef3fa4185b7a08e596f954f0774966f6
MD5 417b6512b55b02b4ebb8a9325f0d24a0
BLAKE2b-256 53de44ddb4628d76afdebbcc4b577e09952a7cc9d6aa465473049c231406a343

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.220-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 22c664727a7ea6fe79365736ada0d125b4bec304d5e993bad1ffba89eb3b9729
MD5 5e60241c5c4d6a3c6b9d4d9554c43c89
BLAKE2b-256 13816170e1befcfd2ef307b6d2e8cf6088dd7a4093461dbbe590656946b03e3d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.220-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 345377a184988c2387dd61626342e22a12039d5e1585cbbbf633b905eab4a000
MD5 2056f9a7c2d90712fe1c887664fda4b2
BLAKE2b-256 17a4b4eb6b2030ab4f0e6f1057dcc321de4a19b8a0c962bd11a8d8f3695b7bd8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.220-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 650ee513f4b79117a36aacd0c82a3d22710d7ef51ef7a0440f09a696c0f59af3
MD5 e46826441c478362a3065fc2824d408e
BLAKE2b-256 7e55c1f05686dd52bdd099f668b096e5916c9466e1b152ee1e0267faafb6b1f7

See more details on using hashes here.

Provenance

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