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

Uploaded CPython 3.13Windows x86-64

pytrilogy-0.3.243-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.243-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.243-cp313-cp313-macosx_11_0_arm64.whl (1.1 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

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

Uploaded CPython 3.13macOS 10.12+ x86-64

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

Uploaded CPython 3.12Windows x86-64

pytrilogy-0.3.243-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.243-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.243-cp312-cp312-macosx_11_0_arm64.whl (1.1 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.12macOS 10.12+ x86-64

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

Uploaded CPython 3.11Windows x86-64

pytrilogy-0.3.243-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.243-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.243-cp311-cp311-macosx_11_0_arm64.whl (1.1 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

pytrilogy-0.3.243-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.243.tar.gz.

File metadata

  • Download URL: pytrilogy-0.3.243.tar.gz
  • Upload date:
  • Size: 488.3 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.243.tar.gz
Algorithm Hash digest
SHA256 77bb355c2b1f7554dc2399922a4393534e139a6936c2ea243aa2fd546687c2f8
MD5 cc5c265f56ef119f6a0bfbaf9f52bf4d
BLAKE2b-256 5f0bf213977f62f3de06448b8429a4fb699cc13226ecb15211f5d35390fed85f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.243-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 2718419525f166c8665c974828ff2ca9bd7b1026c495bb8b9f6f9b143313dd83
MD5 be69457db313119b32d57d3983c23942
BLAKE2b-256 dada2c02b5c8cba6bc59dd6302f733dcb6ac700ecf656be1a4840a3e149f7eed

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.243-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bb199cce57fc836697ed6725e28181a96bbfc47322911fbc9813c633ff469d44
MD5 d0fe670661c5aebd43d5fd6dd77b493c
BLAKE2b-256 7c3b474472dde6a46326cf9ea752616137b48cba5bd1ed4b59e776161072834f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.243-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 bc804b168cdd903603d96419b33129e4f9bae7d177b189f848ff97ec727319ab
MD5 18eaa8e45efd15f465b8cfd8a92d9b3c
BLAKE2b-256 f97d47a5c9570ccf5871b215d1de37f454b6216abc90402e6ce3ad672397fe61

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.243-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3c436da7b890240ba7070edefab2f550fc30d3a89392b7a43a2d73a79ec340fc
MD5 9cab17e252d69b831adf28dd68ce4727
BLAKE2b-256 16f818d14bf545849ca89e9526fa0abe331cb69e3411e8b429d8d798690fbeb5

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.243-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 be7e44f38a7445981e8efedb56c914b8561259c8f2975f699d40d41693eb40d6
MD5 e173645cc6256dc011a8b5e36f15f4ea
BLAKE2b-256 8876695cf4dc518c00eeb2b4d23d5b408e4ba55e9414510ade038ebfe1c9bc70

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.243-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 c19c07d070e19740bad6da5e0ad30c26b29f515db5828d09d8767c2b373a287c
MD5 fb33b81e6610c45724d65461799aa510
BLAKE2b-256 791824df4322ceaa2c1b440912cdcdaeaf21dec7f05bd422295a08ec342fc910

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.243-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b7323af5f005c09342b55e952d9c257aea90f0266ea351890322b34aef348399
MD5 fa0091349336ecba3e0105655e050f86
BLAKE2b-256 8bb8c4e89be82f8e30d660503921e6fff059c901146f03c696818b4ad094e373

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.243-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 9ecb534476171e0671d24e880f535de30ec9fa3b7ebe3c7bbdf386d48de43595
MD5 454eff5a9867d121e3a329a823a090f9
BLAKE2b-256 d37a91ba0052b5401d2dfc7f1c41217c5b75e8ce917c72155d2f175f6912b193

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.243-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5e2ddf68a040c005ece3f5aa40b7316b740f1ac61192b084dafab811fa03649c
MD5 cd1eab1ce75065f58d4071970797e8ce
BLAKE2b-256 b7812bd28214889c961a9926e9f23e4faf85cb77bc82851261d8ff8324dc3021

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.243-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 4b27edcc181a8aa6a0099b3f11dd9d5ec18f32e56f271aa641d4e9b834590a88
MD5 7571340489824ba85dbb4bd68c60fae0
BLAKE2b-256 99ada08c5b0fafa03870e9af2b9b43e25d71b34ca8e670a973dc4ead28d40d3a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.243-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 2bf93b44389c40445aea12b8525a6307382ffd61f5413446678e1b38b5e1ff00
MD5 058914878406276a6ad62d24cc74c1df
BLAKE2b-256 434514c1a4a8384feb1273144334b622ccc5761fcbd1c6afe979a6a8728ecbe9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.243-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5ddc852362fe1e4bacd63c08fd649db22073bc0c820427dbd636506a657450e1
MD5 61cc315672a7315fc1b9521043efd477
BLAKE2b-256 710e9e21321ad07829ff584c1f1990748e18eba2400056ad162990d31ba45059

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.243-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 703292be6ba7668905b47f4d9d679039770d6a97587e8318101e2d24dc9d9546
MD5 f6f54128d1624116ecbb412bae6bc5b8
BLAKE2b-256 e0952ac98c09cc16c7fdd9f91a2f7aa8d1dd12a6cc8433307df1c2ef65272aac

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.243-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7ab13214f7c87862dc54627987173119a14570bc214dcedf439c1f3945bed856
MD5 1a3a03e94e99b14893a23492a779db37
BLAKE2b-256 0b02edc82b7402554970860c2795523c7a1a7aedac518e8be2fb3e6d89fc4791

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.243-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 1e58bc0c5ec2a51524f65e98ebd20e3bc3e8fd142b3e626cda1f5eb352f4b29c
MD5 defe4bcc44a17be1af8a9b86592f5889
BLAKE2b-256 5ded7430c7671acdfd1fd05ad6b6609228404585f21dbb62d504425652378a89

See more details on using hashes here.

Provenance

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