Skip to main content

Declarative, typed query language that compiles to SQL.

Project description

Trilogy

SQL with superpowers for analytics

Website Discord PyPI version

The Trilogy language is an experiment in better SQL for analytics - a streamlined version that replaces tables/joins with a lightweight semantic binding layer and provides easy reuse and composability. It compiles to SQL - making it easy to debug or integrate into existing workflows - and can be run against any supported SQL backend.

It shines when used with AI agents, but is built for people first.

pytrilogy is the reference implementation, written in Python.

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 studio to explore Trilogy. For integration, pytrilogy can be run locally to parse and execute trilogy model [.preql] files using the trilogy CLI tool, or can be run in python by importing the trilogy package.

Quick Start

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

Install

pip install pytrilogy

Save in hello.preql

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

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.189.tar.gz (342.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.189-cp313-cp313-win_amd64.whl (705.3 kB view details)

Uploaded CPython 3.13Windows x86-64

pytrilogy-0.3.189-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (800.3 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

pytrilogy-0.3.189-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (783.6 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

pytrilogy-0.3.189-cp313-cp313-macosx_11_0_arm64.whl (762.4 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

pytrilogy-0.3.189-cp313-cp313-macosx_10_12_x86_64.whl (782.8 kB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

pytrilogy-0.3.189-cp312-cp312-win_amd64.whl (705.9 kB view details)

Uploaded CPython 3.12Windows x86-64

pytrilogy-0.3.189-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (800.8 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

pytrilogy-0.3.189-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (784.1 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

pytrilogy-0.3.189-cp312-cp312-macosx_11_0_arm64.whl (762.5 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pytrilogy-0.3.189-cp312-cp312-macosx_10_12_x86_64.whl (783.5 kB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

pytrilogy-0.3.189-cp311-cp311-win_amd64.whl (704.8 kB view details)

Uploaded CPython 3.11Windows x86-64

pytrilogy-0.3.189-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (800.9 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

pytrilogy-0.3.189-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (784.5 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

pytrilogy-0.3.189-cp311-cp311-macosx_11_0_arm64.whl (762.3 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

pytrilogy-0.3.189-cp311-cp311-macosx_10_12_x86_64.whl (783.0 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: pytrilogy-0.3.189.tar.gz
  • Upload date:
  • Size: 342.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.189.tar.gz
Algorithm Hash digest
SHA256 14a55b7632d145252073a7d78c8ee3a7e985a525d6fe0502aba285a52c5a8b9e
MD5 4f085db4a6773ccbc45b35a4d5760416
BLAKE2b-256 30fa5d9e1fbe44b009eeb1d9369ead32f4b809f2a377c093aae85ec42981b961

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pytrilogy-0.3.189-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 705.3 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.189-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 d9fe3efb7bd2fe5582e2591d83e4968839d4038fc5ec1ef16cf360ff0edfb75d
MD5 b7ac2997989ece553cd263d401ca7c8a
BLAKE2b-256 4f44df72ed83f76cb1d9d5655eb376c322794f738590e7965a9d94f174e5e5be

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.189-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a4dbfbe12fd63ed97a22ffcc6b60060f1c96ca9ef82198ed9062566d074edfa2
MD5 02fced03687d599fcfd8bef246bd3be7
BLAKE2b-256 c3dbcf4fa5287d5ac860a981c8e4de080e905716f5c045545936abc9df1dd053

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.189-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f3c837fefd52f342bfb5d83edbad3afcc87244a0871ca29e1ea6f611d354e5c8
MD5 5b0a21f12211904c1eb5d2f1c1be9560
BLAKE2b-256 c6facd9ad7e361a7a7d39dae09f59f586454106451f5f0ccc812c4558996d3ee

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.189-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0618e75193a8d0e48bf73adb55b7367274fa7fd8e5e138582091f4035e730c77
MD5 a103fb34c8fabd8e1ffa86314d873fae
BLAKE2b-256 045509b1941bdbadcd3db611cff6b70ff8f07267dcab43313b0cd2b4a1866739

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.189-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 fed4c5f3f9637e02353a416f0fe7d88c401303f492ef512e7854cdc8a31574e0
MD5 b0f875d09b9b45fd75db88359fab73a5
BLAKE2b-256 8424b3aec24055e0c9e828291dae62182335f25fcecad9288a1f1cd66682c85f

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pytrilogy-0.3.189-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 705.9 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.189-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 2a4d81d91d7a06228f4b5e7a4a816eae7fdb3bda916512b7155568cdd7d4bf58
MD5 eba09dd3baa59d2d8294bed56a45b19f
BLAKE2b-256 0bc66d6edecb2ed35e9dba8345eb78f38fbe1661f1e10375b1d63d6232141d07

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.189-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0952a3e1649fd721563e0284add5c5fef5533b510dc872478bc5576000279cf2
MD5 2c17c42549ca2178054800eb8af724cb
BLAKE2b-256 d89ebd64098aea103565fd20948f3c4f884149106c0b0275b02d60a6f641dc63

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.189-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 ad37947ded8f3826c8ef3b75dc6f6eab3e6c141d0ec7f12dc3ae42aca5f1d8bb
MD5 8b0062e3b81f539b6356cf21010c22d8
BLAKE2b-256 889b6dfce290be15f0e1efcca9b2af1e2812c0e6bf8b1deedfe58e6cdc2f17a6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.189-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 57a6424f7e2bcf46539d5dd70395590c97ab081afef39d7723ff6bc2b521946e
MD5 e29b46b1ed8c31fe50529954ced8cb1d
BLAKE2b-256 d152445a69bebf6a16cb3b905c8d5a43b5cb2ce21300c637aa877a080e01f5df

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.189-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 a1619ac92b78574d8fe3ba8a43d008b53828eb7c6e817a4843040f94089be8bc
MD5 c1d51088280acc9fabc0312e7c658a91
BLAKE2b-256 cbba8c3fe1a4ceeab8f061780b86481d6f7a8b60ba6c525056e8dd27f928aba4

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pytrilogy-0.3.189-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 704.8 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.189-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 cf22426abd1f1a47a5a511932faa204febe3a13f843f9d24dad463148db6ab44
MD5 22b88251e7114f492274ca128cb668d8
BLAKE2b-256 92b7c24b81fafe6c5081b45363cd337d85b10f50c514ce7bd1753488983f84d9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.189-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3fd73004ea6c894ee716ebc72b93280f80ec92e718d71e2f865909c912b157a0
MD5 cff2f2f8cf89fd2fb2f712bb5c211602
BLAKE2b-256 6faa059f9387a81ab1a77891ce4979413216d5067a6a7b8d64157ed6e9921830

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.189-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 b167b1d7c5c6672c6f3ebec8345bda2c498e69ad4c85f992858c1ce4d7531d51
MD5 3569f97b60db9e953ac8935317feb401
BLAKE2b-256 32df8713cbdc5663994bd97c3aa4d934379b2a3d6e06640882c7b1befec8d002

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.189-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7bf09133a70a1ffab134314be4af704e5b26ed0c9387a13bff10ade26c99640c
MD5 545afcac90aa7dbde024a7f82839ed2f
BLAKE2b-256 2e146055d5cd46884aca03412b4c8889815dfdcdcdc67ebb8be6b409c3f8cda1

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.189-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 9c12b5d4c62f5bc9e16f16d6ec2f23e7820101d7922ce61e68fc35f783136c9f
MD5 efc40c11961e98ad2edc383311b01193
BLAKE2b-256 fd82a225a277d163432ece9383711e826089b4f81f7406ac6c5adbfa73dddc4e

See more details on using hashes here.

Provenance

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