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 batteries-included data-productivity toolkit to accelerate traditional SQL tasks - reporting, data processing, and adhoc analytics. It's great for humans - and even better for agents.

The language - also called Trilogy - lets you write queries without manual joins, reuse and compose logic, and get type-checked, safe SQL for any supported backend.

The rich surrounding ecosystem - CLI, studio, public models, python datasource integration - let you move fast.

Why Trilogy

SQL is easy to start with and hard to scale.

Trilogy adds a lightweight semantic layer to keep the speed, but make it faster at 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

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]

Docs and Web

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

Quick Start

Go from zero to a queryable, persisted model in seconds. We'll pull a public DuckDB model (some 2000s USA FAA airplane data, hosted parquet), add a derived persisted datasource, refresh it, then explore it in Studio.

# 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 — runs setup.sql, builds any managed assets, tracks watermarks.
trilogy refresh .

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

Key Features

Trilogy supports reusable functions. Where clauses are automatically pushed down inside aggregates; having filters the otuside.

const prime <- unnest([2, 3, 5, 7, 11, 13, 17, 19, 23, 29]);

def cube_plus_one(x) -> (x * x * x + 1);
def sum_plus_one(val)-> sum(val)+1;

WHERE 
   (prime+1) % 4 = 0
SELECT
    @sum_plus_one(@cube_plus_one(prime)) as prime_cubed_plus_one_sum_plus_one
LIMIT 10;

Run it in DuckDB

trilogy run hello.preql duckdb

Principles

Versus SQL, Trilogy aims to:

Keep:

  • Correctness
  • Accessibility

Improve:

  • Simplicity
  • Refactoring/maintainability
  • Reusability/composability
  • Expressivness

Maintain:

  • Acceptable performance

(we shoot for <~100-300ms of overhead for queyr planning, and optimized SQL generation)

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

Semantic Layer Intro

Semantic 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

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>

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

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

See documentation for more details.

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.245.tar.gz (497.4 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.245-cp313-cp313-win_amd64.whl (1.1 MB view details)

Uploaded CPython 3.13Windows x86-64

pytrilogy-0.3.245-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

pytrilogy-0.3.245-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.2 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

pytrilogy-0.3.245-cp313-cp313-macosx_11_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

pytrilogy-0.3.245-cp313-cp313-macosx_10_12_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

pytrilogy-0.3.245-cp312-cp312-win_amd64.whl (1.1 MB view details)

Uploaded CPython 3.12Windows x86-64

pytrilogy-0.3.245-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

pytrilogy-0.3.245-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

pytrilogy-0.3.245-cp312-cp312-macosx_11_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pytrilogy-0.3.245-cp312-cp312-macosx_10_12_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

pytrilogy-0.3.245-cp311-cp311-win_amd64.whl (1.1 MB view details)

Uploaded CPython 3.11Windows x86-64

pytrilogy-0.3.245-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

pytrilogy-0.3.245-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.2 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

pytrilogy-0.3.245-cp311-cp311-macosx_11_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

pytrilogy-0.3.245-cp311-cp311-macosx_10_12_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: pytrilogy-0.3.245.tar.gz
  • Upload date:
  • Size: 497.4 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.245.tar.gz
Algorithm Hash digest
SHA256 122802b828a31a233c7bb0ded60da9cbb70834547b4ab4ef082a1e9f3b5de523
MD5 3d9b319680d0d2fe5ee06e6e025b5478
BLAKE2b-256 955c3db6d89f35ded2249e3d7793d8dcd6902c148af281c5187860b434f94038

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.245-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 f2e7e3cf0f879232be53de23a6da212f6dafc0c5438277748d940a43e7b4dae4
MD5 f51d8defec4d023fd491892cae23af81
BLAKE2b-256 e7fd17325a051642cd329c6247e67197d53ca16b30040722a70eacd2c7e853dc

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.245-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9e5b4925c25213a758572ac7a8dfae2e3d8e1d3bc3e9707fb4d292b93113af31
MD5 964158f07cf3966a367e9b7287fa84d3
BLAKE2b-256 7a82a9c6bf72658fa450c057839cd34ac13b67d058e9190afc4659620e7c6724

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.245-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 14823e9c12d0da400c708af0d0f5c01914b24acda8f1d7bbc091a278735c8fa4
MD5 9faecaddb9152fe2759e42839341b1c4
BLAKE2b-256 35d0d6da2d46acf91a5da9859eb25d45dc7b831bdde4c44d44b5d72498ace1e1

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.245-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d19a3e12409a522430c734a6daa472c8cd3aa0d70c778ac7664aef645e0ffcc0
MD5 c4b9be58bb8582110014627f51eb9f04
BLAKE2b-256 597a4d39b36c25fe6ea860be0fa92faf58d04c6e5f49a28a3baea554fb901144

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.245-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 1a5c1b2ae2ef412df13b77efbf9b09a14625f74861108d7682b3f7514c9458e4
MD5 70e62f30c798c755345650cdf6236b3f
BLAKE2b-256 7715ca3b6eea6f6d869ab8cabff7141b5555d9b2054cbef901edfde48edea712

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.245-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 cdc9ca04218690baa3cc74b84ee0eb85928204ce1cd803b5ee29e9087af0e616
MD5 08d52cc6e8c351cf4f7b7553e10d3ad8
BLAKE2b-256 f0703f51655897dac2e8a56b2b45b05f04b6ae9b5dffd01bc38c8f4cef325c11

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.245-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 177f939b4f10e1a0bba0d1c1d2aa68ce7dd669c8f5dcfef2e9d0e98c24f6ad12
MD5 0e8903f4974cc91c231cbb22be9cfb7a
BLAKE2b-256 009712bf50f0c9bc9ba4748701a2cab6eb21e2cb11829df43d49b01a838b4038

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.245-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 94e965bea359cf982eb4ad8b54568feb897ed53508d86d84cdb3b5ad87a6e7f7
MD5 39b2e0be8d36760b9b268b03ff2c2dd6
BLAKE2b-256 d83b0d9d81edd1f23329a3a9c60203c4481aced24161279386a6fd24f40a4041

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.245-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1767d29ee88500398d09ffbae8bf13544189269b65ca11ab7f8d88f6c7703f1a
MD5 85d44d76dc22388f60e70ffb10c03aea
BLAKE2b-256 3619fc5e3d79dcbb39c62d205e4f2777bc6af41cdab79ed9b22897b752b1a7b2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.245-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 db129a0addb1dd3f3252d29f700b2634a153990a06f2111612eeabe9a2209986
MD5 634c952a0b0c0588840b660367da86fc
BLAKE2b-256 b836445a830d1a67453d9f42f2971669f0a06b621d41ea457a7320064a4f907f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.245-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 3e59e9c4888001fee767548d56f83a4153d34b8e3dc52e22dd8f4754ea0dd995
MD5 67ecfa303e3db5274954c40325a05e5f
BLAKE2b-256 429179d9c7b2437fe983583b3d77e3b86de63280d499f0b6a4f4ed18404ef1b0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.245-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 092482834b251b73c9d1cc56353ba389f89f7b3d1a51d00f7ebb86395404e09a
MD5 e4b2f882a64cea7f0bfb5c0049d0b1ef
BLAKE2b-256 3654b363667b3ec7a951ed6259bf605539815f0f9832ff1b20589137210ca20b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.245-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 07be22c7dfebb6f82e9b18c5306566d68161a6713eed9c931b5bdbc70924a6d6
MD5 21f3e9ffb19773cd4920b16e19d6b747
BLAKE2b-256 7d7a4df2a53bb19dfd850715cbcd17d0dd0c1f317a61c348d09fc0b981b27aec

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.245-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0c131354df404fc3fbb5986f8a1f3e29c408250346995666da6f07cc2a6128ba
MD5 092e093987a0cc6d18f79f5a866799b6
BLAKE2b-256 f49d4a324951fdc504294527f06344d8acd00e93f026ee25d23dac1a0c1b86b8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.245-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 ef1bdd1c8e985ed9eecdaf9f3e19c32dca134251581b18b422465303868b12a4
MD5 440db09837a78fc4aad44ac9a01be021
BLAKE2b-256 38ff2f69d2da53c37fd5a347826d1e2a9193f14bee9d4d4ab64e29156e70d463

See more details on using hashes here.

Provenance

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