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.208.tar.gz (367.9 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.208-cp313-cp313-win_amd64.whl (734.8 kB view details)

Uploaded CPython 3.13Windows x86-64

pytrilogy-0.3.208-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (829.9 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

pytrilogy-0.3.208-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (813.2 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

pytrilogy-0.3.208-cp313-cp313-macosx_11_0_arm64.whl (793.5 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

pytrilogy-0.3.208-cp313-cp313-macosx_10_12_x86_64.whl (813.7 kB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

pytrilogy-0.3.208-cp312-cp312-win_amd64.whl (735.3 kB view details)

Uploaded CPython 3.12Windows x86-64

pytrilogy-0.3.208-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (830.4 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

pytrilogy-0.3.208-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (813.8 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

pytrilogy-0.3.208-cp312-cp312-macosx_11_0_arm64.whl (793.9 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pytrilogy-0.3.208-cp312-cp312-macosx_10_12_x86_64.whl (814.1 kB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

pytrilogy-0.3.208-cp311-cp311-win_amd64.whl (734.3 kB view details)

Uploaded CPython 3.11Windows x86-64

pytrilogy-0.3.208-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (830.5 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

pytrilogy-0.3.208-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (814.0 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

pytrilogy-0.3.208-cp311-cp311-macosx_11_0_arm64.whl (793.6 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

pytrilogy-0.3.208-cp311-cp311-macosx_10_12_x86_64.whl (814.1 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: pytrilogy-0.3.208.tar.gz
  • Upload date:
  • Size: 367.9 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.208.tar.gz
Algorithm Hash digest
SHA256 12b145d485e919093e7ec2c8462c0a6db8091d038d0c1466ca84a611bde1afb2
MD5 7a36465561ef6845c79a61d303508ca8
BLAKE2b-256 919b245a3cc5adc93fb135b08f5c0cc42b77623c01f781812168fa1fa48b12bb

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pytrilogy-0.3.208-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 734.8 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.208-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 624e6d22fc048e3b3953bdd76def0f69dca5d7d069b467d6dee5746346425000
MD5 88c402efbd5febc38b2347c689bda7d6
BLAKE2b-256 d7b908b3f9c1e13cf70ceaa7f806e38bc7188c974cde80d218213464799eabdd

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.208-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 cb001f527e156f7fd239b092b666690d62f65f0d316f18ef338639b6b182a00f
MD5 1f87df82853d420e50d4f773713c376c
BLAKE2b-256 0d2ea91ca95494599043269d0ccfefcd4b90d7bd3312cd824d1a18678e8d5582

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.208-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 fa6dce1e48b910bf17f2ba7ffe847bc3439066a3ec5b0d5e2d03c1683c1b105f
MD5 7726997a11e69459583b3f2fe6ba1bdf
BLAKE2b-256 b436f4bd588ae18bb1858fd824c7c22dcee1a9b3bada4f21bc8c9a0fb5f87100

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.208-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3d3aea3648547e3469db3d3c94896cb17a685a4b3645a24802c2eef694ddb3bc
MD5 b43b85068955a608de1291ba2f0b59c1
BLAKE2b-256 db407e60653cb096fa3859d97e1566185d1802b7d7f66afb5ad1e0ed4deba85c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.208-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 23bbb0c8ab9e37574fe4caea3d4cc89a8e505d39009ae2cf0db10371e025e222
MD5 6d385f003f506ba2b1fc6d7c902997aa
BLAKE2b-256 d5f27fa91c43c493405abb7277b81dd255dd4b58ec2e8d64b41c5f24aa52a267

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pytrilogy-0.3.208-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 735.3 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.208-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 d1e41a0e142d0f123ce20d472b08fa9fbc36af61b4e8a3411dac656d52e9243e
MD5 c6e1c30a069ce204f8c767da63412f67
BLAKE2b-256 ed4c1953b1a007436f196d51b613cf3d6e5b46fb0817be18acf77a2d45abd31f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.208-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e302edc255031a638742f0e10d289230c9505b48603f4e60a539dfa2822672d9
MD5 e4e7847825542d0c615d0cd3e7496533
BLAKE2b-256 cf487e1fa12ce5360c2180fd68ac4fc003141a13932bc6d48ccf50dc6c8dd9e5

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.208-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 223c485861aacb18630cb7e04e6be16de3c23005aa9cdeaba64ed66a95bc0be2
MD5 c08fe3e240c88a1f95cc8ba18b847418
BLAKE2b-256 7ff819c24e4086a7e0c2069b1b0f4a43c8e072149d7e91685f6240ebb1d23d3e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.208-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 58a1f49f83b27c845650d322652a7c52c842ac0dd3c767232b0b33df4d621bd6
MD5 a1c5761e9971f0a7a4b279431343d27e
BLAKE2b-256 521553b9a118f001db3194beda6426db67a04b8588835f2325dc15acd5f7594c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.208-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 b40f779dc1bb38ab83c9edb5fefebdb504d9668058eaa7a5691fb88f5edbf7bd
MD5 d84fbe3f08df65666678e77d0d7f6496
BLAKE2b-256 7481d94b5646100ee5a0815aa54481575380bdcdf0bdea7262bf2c2aeaef4821

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pytrilogy-0.3.208-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 734.3 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.208-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 c42287e8dd9efe9546c842553824cf1b78bbfce07cf4dde015fd30154f7eba08
MD5 cc90bf06348516f58b57b4d01aec5987
BLAKE2b-256 f2abcdd4efeb98b64de35e75ce26a38d04a9c9c89df7115042f1af0b2f30ea86

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.208-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 89c78639e9bc451f30a7f62640f6eb04e701ddc17e677800060ee6c76e8d699e
MD5 c3f9b17faed58c9e254d5bb278fb3435
BLAKE2b-256 6154339a32a1584c57f6c2f012405cc5238e5ae701b2513f23951367e8260787

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.208-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 cf1256120d75f22febe48a4ceb39d404d76c6546020d1beb0cc83ab8229eda58
MD5 1110081ffd67fa301721bb27a3ccdf8b
BLAKE2b-256 3ec50ff9796f1b2ce5de1108397a961ef76538039c1f52fabda2fce165324a39

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.208-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 00f6d6db81e86c0b91331fadeb9e980ef48b285ad987fb3f8bb4642cfe3cb098
MD5 aa2075457cf83aa6050749d8f40b8566
BLAKE2b-256 8a407ee8a016aca1cb3011e0445578759cf30970762b071cb192b47e5dc07af0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.208-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 b704349485b79a679adbaf7df4aa1e5e966598b07f9e505ce249a7fcf2f3e2c3
MD5 c96ae9a4323def6be5c59f71a3a9739c
BLAKE2b-256 da4e0f736eb7b39ed1ed41ff2d7ba8b02d62a4ef801309d386656ed0bd154b39

See more details on using hashes here.

Provenance

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