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
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.176.tar.gz (325.3 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.176-cp313-cp313-win_amd64.whl (684.4 kB view details)

Uploaded CPython 3.13Windows x86-64

pytrilogy-0.3.176-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (777.8 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

pytrilogy-0.3.176-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (760.9 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

pytrilogy-0.3.176-cp313-cp313-macosx_11_0_arm64.whl (741.8 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

pytrilogy-0.3.176-cp313-cp313-macosx_10_12_x86_64.whl (762.0 kB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

pytrilogy-0.3.176-cp312-cp312-win_amd64.whl (685.1 kB view details)

Uploaded CPython 3.12Windows x86-64

pytrilogy-0.3.176-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (778.3 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

pytrilogy-0.3.176-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (761.2 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

pytrilogy-0.3.176-cp312-cp312-macosx_11_0_arm64.whl (742.1 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pytrilogy-0.3.176-cp312-cp312-macosx_10_12_x86_64.whl (762.6 kB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

pytrilogy-0.3.176-cp311-cp311-win_amd64.whl (684.1 kB view details)

Uploaded CPython 3.11Windows x86-64

pytrilogy-0.3.176-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (778.2 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

pytrilogy-0.3.176-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (761.2 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

pytrilogy-0.3.176-cp311-cp311-macosx_11_0_arm64.whl (741.9 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

pytrilogy-0.3.176-cp311-cp311-macosx_10_12_x86_64.whl (762.2 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: pytrilogy-0.3.176.tar.gz
  • Upload date:
  • Size: 325.3 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.176.tar.gz
Algorithm Hash digest
SHA256 df4c576fd53aa37e186bbff696dff1c019f8be94686604cf8dc541d0eab2ed43
MD5 0dffa5e57b9a2965ac301921c952f802
BLAKE2b-256 a81528ca4d5e738db41c91efdfab53860608572bde4fbae274cb8b3ae537b51f

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pytrilogy-0.3.176-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 684.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.176-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 3d85118d4d8158319537fb3d40170c9ec7262be25cc8d1405eb98dd11c27a869
MD5 afe31ee7c5359230401f69f808953354
BLAKE2b-256 3fd228f36118d29497874356d3e166f24858c7750020a9ac0795905533668ae6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.176-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7eaa3c80f529c54659a08697ae3e4e9e04fd978acb6d7fbb56fce53299e36351
MD5 9f9e54c7f24d7bfaee1c86c54fc51016
BLAKE2b-256 155655f49ca6fd7e8bb547dc9ba4e68f1ed03f9f2c99bda322ce8cc6fd19100c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.176-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 965ab6bb03c7277b19dc38c81140b86483825d7914956140dddbbbf0a7fb5cdb
MD5 13fd6417d8966de8414ac910b4dd9753
BLAKE2b-256 1e34b52d1908b330e48016612b6545d8210b3dab0af7a83241a1516af828a71f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.176-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 eb1ac62773a407b7942082bc94628918df25ce21c7313b9292c61f1450f3fc86
MD5 fb4e31f248d8e92c8f3fe140f65299dd
BLAKE2b-256 57d3b0b7e232af999f0680e7e64ff7e4bb9889f13e5200f9ac1265918546697d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.176-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 9e2dc870e366d7c34b11dd9283086a9da59b77794f5e38ffd8c074a3a54680bd
MD5 2366b45326497903c4f96f024e379a72
BLAKE2b-256 7b6175677fe0265b865ce93debbcf218c0495fb7aa831f9e35853a84a870254c

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pytrilogy-0.3.176-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 685.1 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.176-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 c67e6369c452616236031a6b04deef64c41cd815ccc4d986ea8f270c67081227
MD5 83ba3991bce93d45506b95437f16e240
BLAKE2b-256 3c900aeb2a8ad986a173e3abbb6da6ba8132ec0d7806bbe9e79cd47df9b8658d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.176-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e39553ef7604afbba6d6a865a435189cf2c8c2426dfb4588e66f5859478656f2
MD5 2ffab201d7d31e5b3572ccc7e0a621f3
BLAKE2b-256 54c3317ebb80dbfa614bc0faa491b5c0c9438752b994a8b504ac6e974b5db066

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.176-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f198943c6477f1696f2ffb1c1d4a444ac66f7a1c917b1896c301c0001638f5f8
MD5 a6456b63f6df6121596aa530270bbbba
BLAKE2b-256 2c10a11b1e6ce8e2f7ba4195a0cdbc240667bd433f497c5e5492d35d2f99ab0d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.176-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f1d9d8cb6e319fcc4739ad6c4077ad4617de7939545429b24b7ebfce7f5f5eff
MD5 6b3dcc98b63d1aa914ead4a96511d332
BLAKE2b-256 60d9ed8988131ddcdd2e4ed86cd3012febf6ffa6c812c135dc8742960275a716

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.176-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 db39abb7060f6bd11568f9d40bdc0fbf1f15973d7e3f2fa7cd34be0d08df2ec3
MD5 1415a2ba8e1c96861d806aded05bec16
BLAKE2b-256 00b05b99cabcf3c702a462b98dcb4aa39bf7c0d62ade923fd2c4b9ff50708d1e

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pytrilogy-0.3.176-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 684.1 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.176-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 537e18db6ae0a4f1e650be22a66cf7f4dd6690c26c07b1cd496467ae6d521989
MD5 57d4e9ce3691a483058a6cd0e5f93499
BLAKE2b-256 988865db48cc0b08ac022d3fe00de602e1d2b2ad3e9c3ff44a295a0c0124ccbe

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.176-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 39d4f88a3c1393d3c6761766a488b0e55c0ab31bbe99168d128ba7dc5877a80c
MD5 87c8254af9ea4f8f334f894eaa273af8
BLAKE2b-256 2ea8f5f906f0767676cf211489e7c6dba2fd0bf14851a4dc942fafd274aafd73

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.176-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 83cd000232aecb7a443dc5e7ede7f3592914931fe4e5963e06d833dc8ced198a
MD5 4f2d540d46991043d2d6424fe0826139
BLAKE2b-256 b525548045580d6eb8723bcc470554fa45dbe66b7d2b2261bc767c87fe0be37c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.176-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 73a3a6bdb95a93caf8f1652ebdea7f918d91b750e2f6a5b9da98dbc7d852590f
MD5 4de2aaef281c7cc87594548560ece768
BLAKE2b-256 ba49d6ad4d36accf15aa0398b0346f75542fbf1f93208e686d09062d9bb4ba45

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.176-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 e88f06db134d22b41a132ea8dc1fb4a369a4a318f858142841086bf22bf0808d
MD5 0eb6e34529a223bd4de70fcbc233ce2d
BLAKE2b-256 f1ac864c8100e8ae62c61f74e0f03d0ed4dd1887683451255f30f7d20bccd9f6

See more details on using hashes here.

Provenance

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