Skip to main content

Declarative, typed query language that compiles to SQL.

Project description

Website Discord PyPI version

Trilogy is a batteries-included data-productivity toolkit that accelerates SQL-based analytics with a typed, expressive language. It's great for humans - and even better for agents. Start with a single file and scale fast with a rich ecosystem, including UI and CLI tooling, public models to get started, rich python integration, and modern visuals and reporting.

Why Trilogy

SQL is the best way to work with data with but shows strain at scale and as it ages. Can we have the pros without the cons? We believe you can.

Trilogy adds a lightweight semantic layer to keep SQL fast through the full lifecycle of analytics - from exploration to production. It provides a full stack for interactive, visualization, and orchestration that can be adopted incrementally and without lock-in; start with checking types and asking agents questions; end with a more efficient and productive warehouse.

Headline features:

  • No manual joins; no from clause
  • Reusable models, types, and functions
  • Safe refactoring across queries
  • Supports all standard engines: BigQuery, DuckDB, Snowflake, Presto
  • Easy to write - for humans and AI
  • Built-in semantic layer without boilerplate or YAML

This repo contains pytrilogy, the reference implementation of the core language and CLI.

Install To try it out, include both the CLI and serve dependencies.

pip install pytrilogy[cli,serve]

or

uv tool install "pytrilogy[cli,serve]"

Docs and Website

[!TIP] Try it now: Open-source studio | Interactive demo | Documentation

Hello World

Trilogy includes a public model registry with fun datasets you can explore. Run the below to import, query, and explore one of these models directly.

# 1. Pull a public model (fetches all source .preql + setup.sql + trilogy.toml).
trilogy public fetch faa ./faa-demo
cd faa-demo

# Run a quick adhoc query (--import prepends the import for you — discover
# what's available with `trilogy explore flight.preql`)
trilogy run --import flight "select carrier.code, count(id) as flight_count order by flight_count desc;"

# Plot it
trilogy run --import flight "chart layer barh ( y_axis <- carrier.name, x_axis <- count(id) as flight_count ) order by flight_count desc limit 10;"

# 3. Add a derived datasource by grabbing the hosted snippet
trilogy file write reporting.preql --from-url https://raw.githubusercontent.com/trilogy-data/trilogy-public-models/refs/heads/main/examples/duckdb/faa/example.preql

# 4. Refresh — builds the managed asset declared in reporting.preql and tracks watermarks.
trilogy refresh reporting.preql

# 5. Launch the Studio UI against the live model (opens your browser) to explore + query
trilogy serve .

The snippet fetched in step 3 looks like this — copy/paste it into your editor if you'd rather author it by hand:

import flight as flight;

# derive reusable concepts
auto flight_date <- flight.dep_time::date;

# this can be properties or metrics
auto flight_count <- count(flight.id);

# datasources can be read from or written to
# use this to write to 
datasource daily_airplane_usage (
    flight_date,
    flight.aircraft.model.name,
    flight_count
)
grain(flight_date, flight.aircraft.model.name)
address daily_airplane_usage
;

Browse other available models with trilogy public list (filter with --engine duckdb or --tag benchmark). Every model in trilogy-public-models is pullable.

Principles

Versus SQL, Trilogy aims to:

Keep:

  • Correctness
  • Accessibility

Improve:

  • Simplicity
  • Refactoring and maintainability
  • Reusability and 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

Syntax Overview

Trilogy preql models are compositions of types, keys, and properties

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 Intro

Use the python SDK to embed Trilogy in larger python workflows.

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.

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.5",
    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>

Browse and pull public models:

trilogy public list [--engine duckdb] [--tag benchmark]
trilogy public fetch <model-name> [<dir>] [--no-examples]

Fetches model source files, setup scripts, and a ready-to-use trilogy.toml from trilogy-public-models into a local directory so you can immediately refresh and serve it.

Managing workspace files from the CLI

trilogy file has shell-agnostic CRUD operations on the filesystem.

trilogy file list .                      # list entries (-r for recursive, -l for size)
trilogy file read reporting.preql        # dump contents to stdout
trilogy file write path --content "..."  # create/overwrite from a string
trilogy file write path --from-file src  # copy from a local file
trilogy file write path --from-url URL   # fetch from http(s):// or file:// URL
trilogy file delete path --recursive     # remove a file or directory
trilogy file move old.preql new.preql    # rename within a backend
trilogy file exists path                 # exit 0 if present, 1 otherwise

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, ...

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.305.tar.gz (1.2 MB 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.305-cp314-cp314-pyemscripten_2026_0_wasm32.whl (1.6 MB view details)

Uploaded CPython 3.14PyEmscripten 2026.0 wasm32

pytrilogy-0.3.305-cp313-cp313-win_amd64.whl (1.9 MB view details)

Uploaded CPython 3.13Windows x86-64

pytrilogy-0.3.305-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

pytrilogy-0.3.305-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.0 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

pytrilogy-0.3.305-cp313-cp313-macosx_11_0_arm64.whl (2.0 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

pytrilogy-0.3.305-cp313-cp313-macosx_10_12_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

pytrilogy-0.3.305-cp312-cp312-win_amd64.whl (1.9 MB view details)

Uploaded CPython 3.12Windows x86-64

pytrilogy-0.3.305-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

pytrilogy-0.3.305-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.0 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

pytrilogy-0.3.305-cp312-cp312-macosx_11_0_arm64.whl (2.0 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pytrilogy-0.3.305-cp312-cp312-macosx_10_12_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

pytrilogy-0.3.305-cp311-cp311-win_amd64.whl (1.9 MB view details)

Uploaded CPython 3.11Windows x86-64

pytrilogy-0.3.305-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

pytrilogy-0.3.305-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.0 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

pytrilogy-0.3.305-cp311-cp311-macosx_11_0_arm64.whl (2.0 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

pytrilogy-0.3.305-cp311-cp311-macosx_10_12_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

File details

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

File metadata

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

File hashes

Hashes for pytrilogy-0.3.305.tar.gz
Algorithm Hash digest
SHA256 426b79c061fe7616ed1e63e98e7267b00d0233225047c378dfb7979911cbfe1c
MD5 5d6955dcfbca17105d9286a65a42c834
BLAKE2b-256 015399c6e695013a29a20b4c93e0a3082aeee288f2b8b58f48b240f45e6f7c51

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytrilogy-0.3.305.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.305-cp314-cp314-pyemscripten_2026_0_wasm32.whl.

File metadata

File hashes

Hashes for pytrilogy-0.3.305-cp314-cp314-pyemscripten_2026_0_wasm32.whl
Algorithm Hash digest
SHA256 c59bde15c2e7dabec726c55779cbc8be2f086449f4be88d29906e9760a624ca0
MD5 6f344c3cea44911f97c0c9f5d27a6058
BLAKE2b-256 fa53f01137a2cf0c8d2f2f0386ddf7531d0b65ed7d6d77bd4225f122d4e0e60e

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytrilogy-0.3.305-cp314-cp314-pyemscripten_2026_0_wasm32.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.305-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for pytrilogy-0.3.305-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 f3d6498c56c7b182d6cc23d36fb38e9e584d985ab14739cb6f219ca1d7aad2ff
MD5 77d48ad728d7aa8c35b136bad89553ee
BLAKE2b-256 74f98a8b801b5e359cc9b54d7377829ffcd9461457e4ef1e228e0b04f87a3299

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.305-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8aa284f9862f245ca0cbba632eb56518b83a20cce149fe30a5010f4b07fc70f0
MD5 04690be9c804793c6cb736ec3bf7aced
BLAKE2b-256 2613c6b2bebf34678f2ff6f14c28ff7217d449a78f26dccfb5d745ad8abd9fbe

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.305-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 2b72cc887156585fe186cb9a5086e7f105f611395732ef7f495c33ba567b9954
MD5 20b0e501f5f1177806ef1fd9c46cef76
BLAKE2b-256 ec2c53a2aedeafcd846867a60040f6881235cd8297accd4a2f8c4625d1f09325

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.305-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4aac3e040929f2d5d431ff9ec221862855c481d3e2f00a102c0ec4420db9432a
MD5 5c8949362c2e0bc1d53ad2a62821e0ea
BLAKE2b-256 0dd95ddeccceb282df4f997e6ee4b5ba7132dd18e7017d3022852043cd910985

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.305-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 677bcd97c369b25055361e4efa06dee9b63a9ec1c323f82c6056827803f176dd
MD5 2ef6ce958f1e9c1cec1827f33ed6d528
BLAKE2b-256 7a0615e23c0a1d32ff597b164c982d63e7dfe8bae916fe3f2de334ebcf6f36ef

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.305-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 1d1f0b4e58365f1f71fcf9ff7571ead064e973a03869e6def37a918e9a42b4ac
MD5 80144371ecc62a8b9b214f487e171b73
BLAKE2b-256 3cefdb23f234ff6e1727cdacf65404ba5f9e05dd6b1d11bb123201cd2ea1f01b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.305-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7e412ff647b3bd2f8b38931350c2f63e3557e80466b9e299dff7ab4b739e5a32
MD5 75a4edab4e845bd43b67650ee929c790
BLAKE2b-256 6ba845396e793400f6d2f88745132f37b1ba6babf8e349b1e6af0162f67f4000

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.305-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 9f000768d3b3ec724390d7ed61031e7600692c68129880ba254a9b163d81486f
MD5 de53463d74f98b18d01da0d2eb2b4b53
BLAKE2b-256 371281ff189b8a70923191a4fa13105565c06504c193427168753f23ec47a23e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.305-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 be530049c38ba831ad0ce8ff9c3f94b4f9e7d2c91790479c799ab6c235058436
MD5 87827a1bdfdc2de829158d81cfd2c3d3
BLAKE2b-256 22ad1ad8e216e57577792513d1dae0349f5eac32912a916079ec4b072f224af0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.305-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 8bd28c8faa88e36a8670064000e1f45808620170dc9a0c217cb88d159548f07f
MD5 e533d8f7d06f486f4b341fd44e877f59
BLAKE2b-256 d965ceca32fa9c05299f58103101ea752f76ab9292ad75b9300fb0617a5bb6e5

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.305-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 1593cafc90943b1fdbd8158ea7dce32c933f0a93f33b0bafd3761ce93a169cde
MD5 ead937418191fde6a016c10cce9e6712
BLAKE2b-256 d2e6c75080fc22b5c402e791d97e0d9f867243ba3c6e28a38dee7d8f1e6f7383

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.305-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 048b7edebed023e5944ab9adad237eac11e0c6a6329be11f913d930673684079
MD5 3daabda75a2d0fbbb968f510cb621a0f
BLAKE2b-256 42c31d3af1ddddc753eee12d19b8dc1bb287bec8e0dc5d8517d3d649beb31d39

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.305-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 962e92f5b8bfe443ef691170fcc9f17eca3011855419b27e06592630719db588
MD5 6cf5659ec660b6efc52d760251b83778
BLAKE2b-256 808e2d202b9a8318843e7439901c9b749d7779b68093d70074aeddbad66a5777

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.305-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 90a9c5f1150f28c976cda748d3c3b8dbc65b0895a12620a0fa141151e2810159
MD5 dfdf8bebfe3c54e8639489617c0a7c61
BLAKE2b-256 76c91a73276e135b94a34dbaba0b32aac6c37e7e8f48b54ca682077abe22d2f4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.305-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 90181b738fb9961f7b5cff3371e2417b8c3d24ef1b1da86d5cb32a2b858acb63
MD5 97b1e9160d31293998527e4dc05be0ea
BLAKE2b-256 6eedfd277c1a6ada086e6d8770a4dd7b23a6c78ef89fa65c8e06dc42168b680e

See more details on using hashes here.

Provenance

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