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.184.tar.gz (336.0 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.184-cp313-cp313-win_amd64.whl (698.4 kB view details)

Uploaded CPython 3.13Windows x86-64

pytrilogy-0.3.184-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (793.2 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

pytrilogy-0.3.184-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (776.7 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

pytrilogy-0.3.184-cp313-cp313-macosx_11_0_arm64.whl (755.4 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

pytrilogy-0.3.184-cp313-cp313-macosx_10_12_x86_64.whl (775.8 kB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

pytrilogy-0.3.184-cp312-cp312-win_amd64.whl (698.9 kB view details)

Uploaded CPython 3.12Windows x86-64

pytrilogy-0.3.184-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (793.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

pytrilogy-0.3.184-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (777.3 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

pytrilogy-0.3.184-cp312-cp312-macosx_11_0_arm64.whl (755.5 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pytrilogy-0.3.184-cp312-cp312-macosx_10_12_x86_64.whl (776.4 kB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

pytrilogy-0.3.184-cp311-cp311-win_amd64.whl (697.8 kB view details)

Uploaded CPython 3.11Windows x86-64

pytrilogy-0.3.184-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (793.8 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

pytrilogy-0.3.184-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (777.6 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

pytrilogy-0.3.184-cp311-cp311-macosx_11_0_arm64.whl (755.5 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

pytrilogy-0.3.184-cp311-cp311-macosx_10_12_x86_64.whl (776.1 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: pytrilogy-0.3.184.tar.gz
  • Upload date:
  • Size: 336.0 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.184.tar.gz
Algorithm Hash digest
SHA256 939b0df908369f4fcf41aa3231e387b8c9cfd4c112f8a89d44827bc26dff4a12
MD5 e0c1f474fe5ba87edd338938d207b0a1
BLAKE2b-256 f05d2233605a68f870eda9252fd25d05491f58e60cf30281aaba88c88abdb640

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pytrilogy-0.3.184-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 698.4 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.184-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 e8e1f0895c6109d2cddcd2f6c1a5c93c1e2b25623f2f570c7918233acbd51e3e
MD5 cb0df6cb52a7c37ed8f001ad23c297f6
BLAKE2b-256 2aa4f3e094c8a007aade22e629817475868b3328a50eb1a8b96fd6e0e585e338

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.184-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 883fc9c30aa75f632e827592d164ea8642e05eb3849f16801830be3e22145398
MD5 b52bdf1c18cbaf81b723a6b1849828b1
BLAKE2b-256 43b0e46f3cd6e00ef3af68d976312cb0040c9aba6d301743d3944ba3eed07f8c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.184-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 cc94e63948ae0762b68f3995aee8caed0c00bff02539a03b9285f58a2cd20358
MD5 1285954f78eb30eae00e14480c58ae73
BLAKE2b-256 3f805180d8edaf42c49ffd1385073b832eaf04e98195d18e945ae48e9d094a8c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.184-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c03efa56ebdfabd800da7de6b2795d99b545d9da13ba158fca2221bbe68ed59b
MD5 d070b9ee6c7d428ecce19e80fa8f2c4e
BLAKE2b-256 0525fd06675db02d739d72c5ed8595faecca34399062e4dba46654446fc8b5f2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.184-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 2247872b1e41f5a58f900c377452eb6f307b74ded78a77a9f7e080842dc993ff
MD5 4d81531e29faaa9ba9b9b6f3efca25d1
BLAKE2b-256 1be0bb51a98f28acc1a0bf868f264e3d672d35e6580abf18c51936a895da3197

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pytrilogy-0.3.184-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 698.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.184-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 e63b71e235e70cdb6ae2540a7218e762873b087d99d7e227192c85477b8545d7
MD5 c7f85ba39e321738ab5720e4cb335790
BLAKE2b-256 1ed7f04a2dcae2bce90999ad815acd27a48a1eda056b6aa12939cbd0c8a7f35c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.184-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d275f8a6a0adc97e4183650e54e2fc467fceb9145e8159e215a16d7600879392
MD5 87f8aa570a16ab73e8910102240b5f78
BLAKE2b-256 e40954f0066ef1256533b8a19539d43209ba34eaa99a87c3959fcf908d1f1c5e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.184-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4289322a99fb89f11cce25436bee29628ff19ef7d4bd7296bb1140d9399da927
MD5 565a4bdf92a2343355a26ca01df41475
BLAKE2b-256 7dc0ba3d5e658deba07df00d7dd4521838bd24cf22288de8718e7cebaa1044f3

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.184-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b4046115d63c9566a0528ee20570c819ae1ed7dcd54c04bdf218cbc8d3486f5e
MD5 5ef341a9ab718356a54c4544b9c327f2
BLAKE2b-256 0ab2b48b204959d312a5735d360e7d0c4e1fa71224dca5ddf087a9e9da98db67

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.184-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 9bd9e4d33b1f9256b673f4c68765ce29dd92d6d30c9b36997839f7d092a11603
MD5 a57b7971b122a8fd23afacbe002b9653
BLAKE2b-256 39e2cb2102821b88b3219aa416a1e99602bc36ed08b549cfb3263fbfe1c18f31

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pytrilogy-0.3.184-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 697.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.184-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 506dc62437563812812335cc765a3cc255870baff0846039a139d4db1697e742
MD5 84ff4809a322972ac81807c0067d99b7
BLAKE2b-256 f0b34f1973c5647951f9c89ae7afdeddb250ee0c01ca9089ab107878466344ac

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.184-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3de881dbf7ea6adc152214cbfe932461e9c744c127bb1a0ecc0dfba2783f4133
MD5 08887394e5e56a386684bb0cb0616538
BLAKE2b-256 7a5a0da5f23f23dd6adcac890ebb71eca003369b5350c28056db8733b929ef79

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.184-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8ae10c03475a06352798aa6270af5c4b587d94f0bc3848b9d4d740770f5bc295
MD5 c8a23a903fefcc3aafa4c9a1f19c41e1
BLAKE2b-256 9d7be1fa9562577ee9d104fce68be71177f49770e8f90b7477c7d35ae8074605

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.184-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a4130f091b2dd6313226128de020698693cfcf1b0876193696944c399e953529
MD5 e17fd602df99db04e93067a5b2f5cd74
BLAKE2b-256 e4e67feccfef33c7d0061790d819d6593e8b9950526a19fbb09f291f59be37d5

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.184-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 f46ba93004f0487de2cb84e6fad0c7f442606a27145a9bf3f505ac392477c58f
MD5 1060a26991b379a45d3e4bcaf243f096
BLAKE2b-256 9591cdf2ba5a2d2a497d92705c14703e7fffd4c1a4d3c762e823446e75639dec

See more details on using hashes here.

Provenance

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