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.210.tar.gz (372.1 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

pytrilogy-0.3.210-cp313-cp313-win_amd64.whl (739.7 kB view details)

Uploaded CPython 3.13Windows x86-64

pytrilogy-0.3.210-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (834.8 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

pytrilogy-0.3.210-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (818.2 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

pytrilogy-0.3.210-cp313-cp313-macosx_11_0_arm64.whl (798.6 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

pytrilogy-0.3.210-cp313-cp313-macosx_10_12_x86_64.whl (818.9 kB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

pytrilogy-0.3.210-cp312-cp312-win_amd64.whl (740.2 kB view details)

Uploaded CPython 3.12Windows x86-64

pytrilogy-0.3.210-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (835.3 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

pytrilogy-0.3.210-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (818.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

pytrilogy-0.3.210-cp312-cp312-macosx_11_0_arm64.whl (798.9 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pytrilogy-0.3.210-cp312-cp312-macosx_10_12_x86_64.whl (819.3 kB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

pytrilogy-0.3.210-cp311-cp311-win_amd64.whl (739.3 kB view details)

Uploaded CPython 3.11Windows x86-64

pytrilogy-0.3.210-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (835.3 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

pytrilogy-0.3.210-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (819.0 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

pytrilogy-0.3.210-cp311-cp311-macosx_11_0_arm64.whl (798.9 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

pytrilogy-0.3.210-cp311-cp311-macosx_10_12_x86_64.whl (819.3 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: pytrilogy-0.3.210.tar.gz
  • Upload date:
  • Size: 372.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pytrilogy-0.3.210.tar.gz
Algorithm Hash digest
SHA256 602ca409b9c57bbd2bd0a7fc729ae8014ec87487b54e0ae3044cb1ca8be26ded
MD5 d9e1b7be333cf02609fb42322a76a8c3
BLAKE2b-256 e9b373897e25d9914daa230968987dac0799523da297f5f459285d5760f16b67

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.210-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 ac742bd60d4c32d80e23404374e6ddaa53002ad3a96f71db41d2a0007260045c
MD5 8db462341fbf7c512979a4c8b2fabd49
BLAKE2b-256 ee69d565ec589b12857b86658a64d085b58e22171915d0f4e1b29a4145473108

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.210-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9d49cd6bb08c5b3832458580e8bc0bb0ba7abf3c17777464626502faa5769cb2
MD5 d4a52582e7d3ed4ca1a90c5b3630b913
BLAKE2b-256 fe3914746afdfb55ac30e8aa275ed0aaa171aa61c482ec55c5950bc5150e8355

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.210-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 6ce66aed9047064820643d091a0126bb10a0dd0e0de7c43427994343cc442317
MD5 53bbd0850d7c76797aa3ab4c00d6b109
BLAKE2b-256 3726bff61f1cb345dcda619ce515b62a4777bb9c84b6093e1d6efeef180b91e7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.210-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6620ef2fe5e460d49b9746045af11b21be08824777a4954a539b7b75b0ac72c4
MD5 e3c8b9cf2cc8ce617183b3e5ca15c63c
BLAKE2b-256 13667a3296fdc1ad4626e91dd5d567ea339f30c80e2abfcf79d53abcd169a680

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.210-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 28efcc156f6e88aa5b987bcf8da8c92e57630dbe72d027286a12bd215d384841
MD5 bbbb58f0e6f51fb36cdea1a5d2f63cbd
BLAKE2b-256 002a05ee8baa5c9d1302d9ee8b96e04f8e81324ff569364547f6f65a2c9c5ad4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.210-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 e50b756efc9b4f7c916967c1683558d2be72bb18441c0ff380ec1f5b816d5f31
MD5 ad9b6b61084d3a0d07a0e66dc00234db
BLAKE2b-256 00fed79275486d978050670d87f84cc428acbf4ed04f954d05653e24e1d0b024

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.210-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 18f61da0a7195ab2c751195574967ef02286ae08ee3668da1d14995ba41470a9
MD5 502cca8afc2ae0b37f52708f9cbc5e81
BLAKE2b-256 d550680edb5a8e56aa8b6ceb8891e5a6454b5daf599640071d14169f34a770b0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.210-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 acd8f4510e5c5c8a2906ae26c558619bb5d330a53d1487309b1a436e8e6de8bd
MD5 576a776ad7e9d049710382e13ce490a0
BLAKE2b-256 dbb712cedcee9c390e18c6067c442125145d6fbb4bd5be8079a97c60909dc500

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.210-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d9057215d996951cda6955d1ceb797ba7735a10aa6a52c5800c0cce1d8aac105
MD5 d09ae6e0ef090236e0311816d2514e87
BLAKE2b-256 7308e3e529f81c39540a64fd22dfa288b7cef3d987bd7ef83688f84297997d49

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.210-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 75a058c0159d4bbf3e10735199d40c02692b31dcfa942a695f7be3c358f47e3c
MD5 081ec84714f2cfdb71ff7e35a81eb96e
BLAKE2b-256 71e06b1404f26e9c26b033b0ef870ab816dcab7aeea779ad8145cfdff2f565ec

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.210-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 4b1558977e6b6d8174e3ae9677bcfaa126dade15190d2779eabf55924759abaa
MD5 de82e1e1b9ed8b60b284048229b4d4ed
BLAKE2b-256 b286004b94a9925f9bac7861e1d6d0b60c44eb1cd9bfb76537fbf1df8d7263db

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.210-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d7808cdc615074b5ced6e7cb0ae48680f52dbf87b7dc10e3b480e19fff772c10
MD5 3da792dd59b4741514fd13e9d57280ff
BLAKE2b-256 5a0b7bfc0f89d19bb5e7a4ea339f2b1c32828fd0034affca823ac0b61be159e6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.210-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 5c7cae7c4a9ceceaa1a6735d4eb77eeb8fbe540af687cf4791695b0c1ccf0576
MD5 2505247daf56acfe55ffe5135b40069a
BLAKE2b-256 1cf15290bfd73616de44536fd7ebf44a90e6ce1a99e20c1ab633fff78274ba02

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.210-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 90cbe38e024273f5ca2c3e6e6073f73961e3970294aedc0e65939a6a5e34d480
MD5 d8d27145bdb7e7e2f68b334c1f00e622
BLAKE2b-256 44ddd000f04b9a78b3fdc61556bcf56a1f870a20e3689116eb8e71be3c61ebd9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.210-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 24223e90cbff7cf9058c7cfb4d3953988da7804692068baf0af4320a04af3a5c
MD5 9ed6d00d9c584044d6a47f78065cdaf8
BLAKE2b-256 239d7ac772111b0a378111903ce65d8d28c9856754b8a8d1453759b8436f56b3

See more details on using hashes here.

Provenance

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