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 the rich surrounding ecosystem - CLI, studio, public models, python integration - let you move fast to scale.

Why Trilogy

SQL is easy to start with and hard to manage and maintain at scale.

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

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.271.tar.gz (648.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.271-cp313-cp313-win_amd64.whl (1.3 MB view details)

Uploaded CPython 3.13Windows x86-64

pytrilogy-0.3.271-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

pytrilogy-0.3.271-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.4 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

pytrilogy-0.3.271-cp313-cp313-macosx_11_0_arm64.whl (1.3 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

pytrilogy-0.3.271-cp313-cp313-macosx_10_12_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

pytrilogy-0.3.271-cp312-cp312-win_amd64.whl (1.3 MB view details)

Uploaded CPython 3.12Windows x86-64

pytrilogy-0.3.271-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

pytrilogy-0.3.271-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.4 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

pytrilogy-0.3.271-cp312-cp312-macosx_11_0_arm64.whl (1.3 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pytrilogy-0.3.271-cp312-cp312-macosx_10_12_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

pytrilogy-0.3.271-cp311-cp311-win_amd64.whl (1.3 MB view details)

Uploaded CPython 3.11Windows x86-64

pytrilogy-0.3.271-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

pytrilogy-0.3.271-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.4 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

pytrilogy-0.3.271-cp311-cp311-macosx_11_0_arm64.whl (1.3 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

pytrilogy-0.3.271-cp311-cp311-macosx_10_12_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: pytrilogy-0.3.271.tar.gz
  • Upload date:
  • Size: 648.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.271.tar.gz
Algorithm Hash digest
SHA256 a935869cd123fb99fa59fae031fb632877c24985e859082012cf16bb5d06581d
MD5 c3f15018629a98a82f33dce09548be85
BLAKE2b-256 9854b2259e7347064b8bee15baf1717a730b65d5d00033c2343768d9161be1fe

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.271-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 17b070f48971691522ec3d735f9512ca284f3a7665021831b251dabe58621e7f
MD5 ca2f97d4eb136615826bcfe530b94843
BLAKE2b-256 30dab0d7884b6b041e9e3d006bf3143286411a5193c6d0d194497fc4d51bc1ef

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.271-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1cae6dbe2822969898f4609e69f4186dcd1b2bbceac12ba786f18c071f678f88
MD5 8151da6596c9cb1affb64df2e6fc3fd0
BLAKE2b-256 a33f252c56d36335942ea4d2af34f471acabdc1114a0b32abb85a824629c9d8a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.271-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 0e5c0dc48882203a209857fa8f728ae2395c4eeca9de597c2842189a1004f52e
MD5 0ac54d3621868ee52c4fb2243153974f
BLAKE2b-256 283d08c4871e770ec04df249cbd4a10ef3bd4f71953080c3becc4255e8f6dc4a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.271-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8fae2fb9f0582220d3cf93a09b81d3d8d954ff2dc2130b488255d0e286ac9e5e
MD5 0e1b6e06d8677263c4390a17db9629dd
BLAKE2b-256 20279d7968c603471639edacb21701912bfb9e0bda437eb6514215e190b52b6e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.271-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 cab796533a9ec25a5a1060aff9857ae310f6d0ebfb15e46b8ba43eb194293fad
MD5 07ae9e8a3e644020af74accc7ea20e56
BLAKE2b-256 a9dd336e46a300e8d9fbf7a0f7dade163a7860e36d5fe24ac044cc6a9f75def7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.271-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 89721223d98cbd6450726c8d480cfc4fe669d1ad7369fb05a7b9820074118ea8
MD5 0196ada6a3501721a5ea439b57041e96
BLAKE2b-256 caae80d00636560c82b92c4a54c4612255cbe97c4abf50f10e8363a671f1e3aa

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.271-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 edc66739b75b152db4a475d4e73f08493dced0b99db0f79576ab080aacfdf9a1
MD5 4efd99829f7a25b9e0a4cca797057e31
BLAKE2b-256 9272a0305eb2f18254d131963638e0d6ff1069f52a5db9f40f10ca2492def10b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.271-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 020eca920c6778bc88ad7f235826697ccec4c122f13f2a0eecf444cffe931416
MD5 13f0208fc50be2675d6f871ab5d75360
BLAKE2b-256 1165818abc7af917c5698f83ef719cd0d9038f5ebdd62003107f9ad3e4fd2e90

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.271-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 77ea1957ca23dfc9c21de4d630bdf37f6db8fbafe68cca6ddf4a940c6816a27f
MD5 ee28a782beef2ee0531a5f2f8133b363
BLAKE2b-256 3a744a5c72c4bd34a6f09bfebc2ba54b16d065a54fdc8fb05651665e1470f515

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.271-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 5c16e9c140618b0e925793f62cd90aae08c943f7b6f641251e189d744523f2d2
MD5 79949eb12fd912718088d1f851d49261
BLAKE2b-256 32d611bfa63deb5e6a0beaab65ab4795684c2d81e31e6aa229da42c82525d086

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.271-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 f82100d46ebdcbb384feafb0939c4b7d8e95c58e061bf98079a470f40d2cb707
MD5 b3ae973f54c537a2d6d4f9a2c0dfa58c
BLAKE2b-256 890f51ce7828b1bc17aca5d002d5466eaca8b4a45fcea785b0e1c4e8d7914147

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.271-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1fbf14e72796e603e83df9a683e6466a5f36c6e789e5929a0e0f93a7f62d1bda
MD5 2be849e3693c5ec66d56c80895191065
BLAKE2b-256 0d780d8d81b91191916c057daf1b1937c9340ee821dcf5bf324d48dae0c6aa6d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.271-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 2e07a3ef5d13e28720d17a6995b1f5bc40f4bc9d7786d37d5af844d4f4413452
MD5 96c0e446cd468d61da4eea0910471f66
BLAKE2b-256 6e73270d48df7444fe5a268998369d7d828c935d57fb04446abda9abf737bdc0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.271-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4d698da6db52faf2f05c58ab369b0928e2adfd5d991e6b0ee0c520721ed41ab1
MD5 ff48d2887cbc97139c872bf3ad8d44d2
BLAKE2b-256 c7e51c9b3cc29f9819c44a7fe41d77598c3b021e9730fbde4f69e82e90bf92e9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pytrilogy-0.3.271-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 4c13bd27a9b8f46e2ef4bd04139eee148b89ee6d9a48f766be874318090af0f3
MD5 305382b5409c76569f23cb302fff4456
BLAKE2b-256 54ee7cfb9ca3dd419825b3de732add2d62d1b054a2091c3de1bf3f9364194352

See more details on using hashes here.

Provenance

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