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.187.tar.gz (340.5 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.187-cp313-cp313-win_amd64.whl (703.9 kB view details)

Uploaded CPython 3.13Windows x86-64

pytrilogy-0.3.187-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (798.9 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

pytrilogy-0.3.187-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (782.1 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

pytrilogy-0.3.187-cp313-cp313-macosx_11_0_arm64.whl (760.9 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

pytrilogy-0.3.187-cp313-cp313-macosx_10_12_x86_64.whl (781.3 kB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

pytrilogy-0.3.187-cp312-cp312-win_amd64.whl (704.6 kB view details)

Uploaded CPython 3.12Windows x86-64

pytrilogy-0.3.187-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (799.4 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

pytrilogy-0.3.187-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (782.8 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

pytrilogy-0.3.187-cp312-cp312-macosx_11_0_arm64.whl (761.0 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pytrilogy-0.3.187-cp312-cp312-macosx_10_12_x86_64.whl (781.9 kB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

pytrilogy-0.3.187-cp311-cp311-win_amd64.whl (703.4 kB view details)

Uploaded CPython 3.11Windows x86-64

pytrilogy-0.3.187-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (799.5 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

pytrilogy-0.3.187-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (783.1 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

pytrilogy-0.3.187-cp311-cp311-macosx_11_0_arm64.whl (760.9 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

pytrilogy-0.3.187-cp311-cp311-macosx_10_12_x86_64.whl (781.6 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: pytrilogy-0.3.187.tar.gz
  • Upload date:
  • Size: 340.5 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.187.tar.gz
Algorithm Hash digest
SHA256 42c95c407ba03ab0399c32d2e2afb0e6087722848571c3c3b26bf41b3919469f
MD5 81c5f2668ac37ac3109a2ad3864b2302
BLAKE2b-256 0f044de8ae762222fa6bea8804c8a1f3cd90461d70ec12459ce3ebf5679edbe1

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pytrilogy-0.3.187-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 703.9 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.187-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 82e1f8705af6e10a75c324896711b0967372c4eb65d2f171362b7599c803bb11
MD5 8270b3744e93f82a313492c256461074
BLAKE2b-256 ae0817fc005f3e08e4e6ec4a0171e018bb56bb333fe0953db9fed3498fb9dc17

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.187-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bc42e03824f613b7fd78afc93aaba6cdfd2e76b03ed1dbe178427d88f1b34948
MD5 b50e14595e1dc48a692e4afc59d66bb4
BLAKE2b-256 53bbe3da2bf166921d3371cf4c9aa655768390e8b797378b2bb390441dbce587

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.187-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 410e6a0fa86b6e4e4f03d306cd0d094285e0a43e21ea94fe0b07f7c296ba87af
MD5 9c5d6c54ced0117f83bf676853dc2d08
BLAKE2b-256 59f1f126c5e1b2e3503aea45cfe0e923bc8a421c589b07096ab2f248efacfbf2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.187-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8fdef951b7a779a700fd9d561194a1af432ac7f6812162dbb87ac038ea9973a7
MD5 620893928b6e8b2a68bada12a9159431
BLAKE2b-256 9a7fdc75c614ce920224cff286202cac4f3b8870fbb5f07f858c77933b6ba240

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.187-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 40bc4ccfdcfe24b5d61bff8837cf3027b27cb899623ba2c7ba12a047e0be1c73
MD5 f5945f8441e3d7e80ba2ac4bb45b4197
BLAKE2b-256 3c4b0a7987ddf6d7d09018471d7636f8fa66502e9020927a48461b338f5d7bea

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pytrilogy-0.3.187-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 704.6 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.187-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 fe3641421eb84dfd6027a3596d25e8b0c5a6de0b3d8aa18208cf4288f5807053
MD5 b5d43bebf5d1b52b53da2952ba0b0049
BLAKE2b-256 d4619d7e5b108c0fceba4b379c650199f949257a7ae58680f029d4b1d26dbaca

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.187-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f413bfe20701d1cee9de6b0c62d32939abc60baa67a2671164394c07aa8009be
MD5 f716ae17ddc4038f822809df33083ff1
BLAKE2b-256 9c860d2bc5a791a6f44f1dc5d17981956f6652f306c50c856ca71d27e2b64078

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.187-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 725600a2e496fc9d9eaa54036e36bd090f6156768e867b77cd7f2929e7bcf103
MD5 27eedaf3e816a67e0e14a0e4e117b9e3
BLAKE2b-256 a13f237cd432b2676012eec35ed7cc25b09d2cc988b354835132ec41360c926b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.187-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d0072085d907c813fcf089c1c44f83aa9a0cb716c3aa549d67065694c408faff
MD5 e05d98762ec1dbf7049f25b379d6f888
BLAKE2b-256 c94035c867de422aa4f8ad3c8fcbdb7fc399f57a0fa7f8133e137e394e6cbeb8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.187-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 9ef6cf7d0a533c7dd5019eca8cb6d55abbc8a2fbbb09a82158acf3f25bf08dcd
MD5 c88f3d0b5ae0ffd28c2d0f361bacca8a
BLAKE2b-256 aa78d3111fd6270e7045599157c61d0b6eae3e52158a8f220f7100bd17f47585

See more details on using hashes here.

Provenance

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

File metadata

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

File hashes

Hashes for pytrilogy-0.3.187-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 b16dc8de452fa4c11af29ded3d4606af56a4b112e6e2f96dd8faa0a0a3f8d1f0
MD5 fe201cd495563b901b8b533f7e9469ab
BLAKE2b-256 f49b75aa7e11d1e45009fe9f53ecca86e7255096a6d8bda1b6667580e019e8b9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.187-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bfc7e14c3e12d91d85c5ed0e0da7f1c92c0903e50ca4c26b223a52313c436e12
MD5 92ba49122e817aa11f3a06aa8cf88212
BLAKE2b-256 adf3a86b8d6313e1b79d750652aca2156a14bed73e48dbd0798d6b89c2b9d752

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.187-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 36dc6d8d9a1f2f963a89e972308cae8ea1fc0d6c20627fbaacc37091ebaeadb8
MD5 337de7cae757f22a4bc02d794d4266bb
BLAKE2b-256 8db541f0b8ccf3eea68560ed2897cab6f928ed00f6056222f3241b9f554a4201

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.187-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 be90b23ff871f637156e8043ccf2fb64d29ef4a54c604dac007484e1fd2f4873
MD5 4f4ba05d5d2f694082ef6ee23e48b4c4
BLAKE2b-256 f6f69392512bc643588f75cdacb074e46c9ef415f2a205c255aed37f4db1d74e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.187-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 fc08a9f7c4d0c8bd3815589f8b7ff06a394ff6f346a298feb752f17891deb5c0
MD5 648eccb3a8fc7f7808f111179b82e1a8
BLAKE2b-256 2d183a2e01f5f1857f494f96ba4d873e0b4f9270dd4e78c0ba8ecff0aba79566

See more details on using hashes here.

Provenance

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