Skip to main content

Logic programming for AI agents: Datalog-family language compiling to optimized SQL

Project description

Synalog

Beta PyPI Downloads Discord CI Documentation License: Apache-2.0 Ask DeepWiki

Synalog

Logic programming for AI agents: Datalog-family language compiling to optimized SQL

Synalog is a logic programming language from the Datalog family — a fork of Logica with the entire engine (parser, compiler and verifier) rewritten in Rust. It compiles to optimized SQL and ships as a Python package built on PyO3: parsing is ~75x faster and compilation ~13x faster than the original Python implementation, so validating and compiling a program is effectively instant.

Synalog was built for the AI agents era. The main idea is to give an agent a dynamic semantic layer over its data — a layer of named concepts and rules that the agent both reads from and writes to at inference time. Unlike a traditional BI semantic layer, which is modeled once by humans and frozen, Synalog's layer is authored on the fly: the agent extracts entities and relationships into knowledge graphs, derives meaning with composable logical rules, and reasons over time with temporal reasoning — accumulating all of it as structured, reusable memory.

What the agent gains

A raw table is just rows; an agent has to re-interpret what they mean on every query. Synalog turns that meaning into a layer the agent owns:

  • A shared vocabulary over raw tables — instead of re-deriving "who is an active customer" or "what counts as revenue" in every query, the agent defines it once as a named concept and reuses it everywhere. The semantic layer is the agent's interface to the data.
  • Instant knowledge-graph construction from raw tables — a handful of *Node and *Edge rules turn existing relational tables into a traversable knowledge graph, with no ETL pipeline, no separate graph database, and no data movement. The graph is virtual: it compiles to SQL that runs directly on the source tables.
  • Knowledge graphs the agent can traverse — model entities as *Node concepts and relationships as *Edge concepts, then follow connections (composition, inverse, symmetric, recursive chains) without writing fragile join logic. See Knowledge graphs.
  • Recursion and transitive reasoning — transitive closures and graph traversals (org charts, taxonomies, bills of materials, referral chains, shortest paths) that are impossible to write correctly in raw SQL come out as a base case plus a recursive case, with the verifier guaranteeing termination.
  • Logical rules that compose — rules build on other rules, so knowledge accumulates instead of being re-derived. Complex questions decompose into small named predicates the agent can inspect, reuse, and combine.
  • Temporal reasoning — time-aware rules and edges (validity windows, "active today", overlap, point-in-time joins) let the agent answer when, not just what — reasoning that is notoriously error-prone to express directly in SQL.
  • Dynamic, not static — the layer evolves as the agent learns. New rules extend the vocabulary at runtime; the rule base itself becomes the agent's long-term memory over structured data.
  • Auditable reasoning — every derived fact traces back through named rules, giving full lineage from answer to source tables.
  • Compile-time verification — a formal verifier catches structural errors before any SQL touches a database, so a self-authored rule that parses but is unsound is rejected up front. See Verification.
  • A fast Rust engine — check and compile sit inside the agent's inner loop (every generated rule is validated, every query compiled, often several times per step). The Rust core makes that loop cost milliseconds instead of seconds. See Benchmark.

Because SQL engines are better optimized than logic programming engines, Synalog compiles into optimized SQL that runs on SQLite, DuckDB, BigQuery, PostgreSQL, Presto, Trino and Databricks — efficiently scaling to petabytes of data. See Supported engines.

Full documentation: https://synalinks.github.io/synalog/

At a glance

import duckdb
import synalog

source = """
@Engine("duckdb");

Employee(name: "Alice", department: "Engineering", salary: 75000);
Employee(name: "Bob", department: "Marketing", salary: 65000);
Employee(name: "Charlie", department: "Engineering", salary: 80000);

@OrderBy(EngineeringTeam, "name");
EngineeringTeam(name:, salary:) :- Employee(name:, department: "Engineering", salary:);
"""

errors = synalog.check(source)
assert errors == []

sql = synalog.compile(source, "EngineeringTeam")
rows = duckdb.sql(sql).fetchall()
# [('Alice', 75000), ('Charlie', 80000)]

Installation

pip install synalog

Or with uv: uv add synalog (or uv pip install synalog). The CLI also runs without installing via uvx synalog, or uvx --from 'synalog[run]' synalog to include the duckdb and psycopg drivers.

Requires Python 3.10+. Wheels are published for Linux (x86_64, aarch64, armv7, s390x, ppc64le; glibc and musl), Windows (x64, x86, aarch64) and macOS (x86_64, aarch64).

Quick start

import synalog

source = """
@Engine("duckdb");

Employee(name: "Alice", department: "Engineering", salary: 75000);
Employee(name: "Bob", department: "Marketing", salary: 65000);
Employee(name: "Charlie", department: "Engineering", salary: 80000);

@OrderBy(EngineeringTeam, "name");
EngineeringTeam(name:, salary:) :- Employee(name:, department: "Engineering", salary:);
"""

errors = synalog.check(source)
assert errors == []

sql = synalog.compile(source, "EngineeringTeam")
print(sql)

You can then execute the SQL with any database driver (sqlite3, duckdb, psycopg, google-cloud-bigquery, etc.).

Command-line interface

Installing the package also installs a synalog command (also available as python -m synalog):

synalog program.l parse                # print the AST as JSON
synalog program.l check                # validate; exit 1 on errors
synalog program.l print Predicate      # print compiled SQL
synalog program.l run Predicate        # execute and print a table
synalog program.l run_to_csv Predicate # execute and print CSV
$ synalog program.l run EngineeringTeam
+---------+--------+
| name    | salary |
+---------+--------+
| Alice   | 75000  |
| Charlie | 80000  |
+---------+--------+
2 rows
  • - as the file reads the program from stdin; -c PROGRAM passes the program text inline, like python -c.
  • --engine overrides the program's @Engine annotation (default duckdb).
  • --limit / --offset paginate the result.
  • --search REGEX (with print/run/run_to_csv) keeps only rows where some column matches the regular expression REGEX, e.g. synalog program.l run Customers --search "(?i)acme". In the interactive session the same is .search Customers (?i)acme.
  • run executes locally on duckdb (needs pip install duckdb), sqlite (stdlib), or psql (needs pip install psycopg and --dsn or SYNALOG_PSQL_DSN). For other engines, use print and run the SQL with your own client. pip install 'synalog[run]' pulls in the duckdb and psycopg drivers.
  • import path.to.file.Pred; statements resolve path/to/file.l against the program file's directory, then the current directory; pass --import-root DIR (repeatable) to search elsewhere.
  • --load TABLE=PATH (repeatable) loads a csv/tsv/json/jsonl/parquet file as a table before running, e.g. synalog senior.l run Senior --load employees=employees.csv.
  • synalog init scaffolds a project (uvx synalog init runs it without installing; it asks for a name and description): a starter program importing a reusable lib/ module, sample data in data/, and agent instructions (AGENTS.md, CLAUDE.md, .agents/skills/synalog/SKILL.md) so coding agents know how to use Synalog.

Running synalog with no arguments starts an interactive session, in the spirit of python (the options above, e.g. --engine or --load, apply to it too):

$ synalog
Synalog 0.1.0 on duckdb — type .help for help
>>> Employee(name: "Alice", salary: 75000);
>>> Employee(name: "Bob", salary: 65000);
>>> Total(t? += salary) distinct :- Employee(salary:);
>>> Total
+--------+
| t      |
+--------+
| 140000 |
+--------+
1 row

Type a rule ending in ; to add it to the session program (it is validated first, and rejected with an error if invalid), or a predicate name to compile and run it. .help lists the session commands (.show, .sql <Pred>, .engine <name>, .load <table> <path>, .clear, .exit).

Python API

parse(source, file_name=None, engine=None, import_root=None) -> str

Parse source and return the AST as a JSON string.

ast = synalog.parse(source)

compile(source, predicate, limit=None, offset=None, engine=None, import_root=None) -> str

Compile a single predicate to SQL. limit is combined with the @Limit directive: actual = min(limit, @Limit).

sql = synalog.compile(source, "TopCustomers", limit=20, offset=40)

search(source, predicate, pattern, limit=None, offset=None, engine=None, import_root=None) -> str

Compile a predicate to SQL that keeps only rows where some column matches the regular expression pattern (the per-column conditions are OR-ed, each column cast to text). The regex is evaluated by the target engine's native operator (~ on PostgreSQL, REGEXP on SQLite, regexp_matches on DuckDB, REGEXP_LIKE elsewhere) — it is not a SQL LIKE pattern. limit/offset apply to the filtered rows.

sql = synalog.search(source, "Customers", "(?i)acme", limit=20)

compile_all(source, engine=None, import_root=None) -> dict[str, str]

Compile every defined predicate in the program. Returns a mapping predicate_name -> sql.

sqls = synalog.compile_all(source)
for name, sql in sqls.items():
    print(name, sql)

check(source, engine=None, import_root=None) -> list[str]

Run structural validation. Returns a list of error messages; empty if the program is valid.

errors = synalog.check(source)
if errors:
    for e in errors:
        print(e)

All of these functions accept an optional engine keyword that overrides the program's @Engine annotation (one of sqlite, duckdb, bigquery, psql, presto, trino, databricks; default duckdb) and an optional import_root keyword listing directories where import statements look up .l files (default: the current directory). They raise ValueError on syntax or compilation errors.

Language overview

By convention, a Synalog program is organized into three sections: tables, concepts and rules. Tables map external data sources (a database table is referenced by its lowercase database name and mapped once to a PascalCase predicate). Concepts extract entities and relationships from tables. Rules derive new data from concepts. The section headers are plain comments — the structure is a convention, not syntax.

# Tables — read-only mappings of database tables
Orders(customer_id:, product_id:, amount:, status:) :-
  orders(customer_id:, product_id:, amount:, status:);

# Concepts — extract entities and relationships

@OrderBy(CustomerNode, "customer_id");
CustomerNode(customer_id:) distinct :- Orders(customer_id:);

@OrderBy(PurchasedEdge, "customer_id");
PurchasedEdge(customer_id:, product_id:) distinct :- Orders(customer_id:, product_id:);

# Rules — derive insights from concepts

@OrderBy(CustomerSpend, "total", "DESC");
CustomerSpend(customer_id:, total? += amount) distinct :- Orders(customer_id:, amount:);

Named arguments

Synalog uses named arguments only (no positional arguments). The left side of : is the column name, the right side is the variable:

# column "amount" bound to variable "total"
Orders(amount: total)

# shorthand: column and variable share the same name
Orders(amount:)

Variables and expressions

Variables are defined with ==. Arithmetic, string and comparison operators are supported:

OrderWithTax(order_id:, total:) :-
  Orders(order_id:, amount:),
  total == amount * 1.10;

Operators: +, -, *, /, ^ (power), % (modulo), ++ (string concat), ==, !=, <, >, <=, >=, &&, ||, !, in, is null, is not null.

Aggregation

Aggregation uses the distinct keyword and special operators in the rule head:

# Sum
Revenue(total? += amount) distinct :- Orders(amount:);

# Count
OrderCount(n? += 1) distinct :- Orders(order_id:);

# Min / Max
Cheapest(min_price? Min= price) distinct :- Products(price:);
Priciest(max_price? Max= price) distinct :- Products(price:);

# Average
AvgOrder(avg? Avg= amount) distinct :- Orders(amount:);

# Collect into list / set
AllNames(names? List= name) distinct :- Users(name:);
UniqueNames(names? Set= name) distinct :- Users(name:);

# Value with max/min key
TopSeller(name? ArgMax= name -> revenue) distinct :- Sales(name:, revenue:);

Logical operators

# Conjunction (AND) — comma
Result(x:, y:) :- TableA(x:), TableB(x:, y:);

# Disjunction (OR) — pipe
Combined(x:) distinct :- SourceA(x:) | SourceB(x:);

# Negation (NOT) — tilde
Inactive(user_id:) :- Users(user_id:), ~Logins(user_id:);

Multiple rule definitions for the same predicate combine results (union):

HighValue(user_id:) :- Orders(user_id:, amount:), amount > 10000;
HighValue(user_id:) :- Referrals(user_id:, tier: "vip");

Conditionals

OrderSize(order_id:, size:) :-
  Orders(order_id:, amount:),
  size == (if amount > 1000 then "large"
           else if amount > 100 then "medium"
           else "small");

Directives

Directives control predicate behavior and must be placed before the rule definition:

@OrderBy(TopCustomers, "total", "DESC");
@Limit(TopCustomers, 10);
TopCustomers(customer_id:, total? += amount) distinct :- Orders(customer_id:, amount:);
Directive Purpose
@OrderBy(Pred, col1, ...) Sort order. Append "DESC" for descending
@Limit(Pred, n) Maximum number of rows
@Recursive(Pred, n) Allow recursion with iteration limit
@Ground(Pred) Force materialization before dependents
@Engine(name) Target SQL engine

Functors

Functors let you reuse predicate logic by parameterizing input predicates:

# Define a reusable pattern
@OrderBy(SegmentRevenue, "segment_id");
SegmentRevenue(segment_id:, total? += amount) distinct :-
  Segment(segment_id:, user_id:),
  Orders(user_id:, amount:);

# Apply to different segments
EnterpriseRevenue := SegmentRevenue(Segment: EnterpriseCustomers);
SMBRevenue := SegmentRevenue(Segment: SMBCustomers);

Recursion

Recursive predicates compute transitive closures — for example, finding all managers above an employee:

@Recursive(AllManagers, 20);

# Base case: direct manager
AllManagers(employee_id:, manager_id:) :- Employees(employee_id:, manager_id:);

# Recursive case: manager's managers
AllManagers(employee_id:, manager_id:) :-
  AllManagers(employee_id:, intermediate:),
  Employees(employee_id: intermediate, manager_id:);

Useful for: referral chains, org charts, product taxonomies, bill of materials.

Shortest paths

Find shortest paths in weighted graphs using Min= aggregation:

ShippingCost("warehouse_main") = 0;

ShippingCost(destination) Min= cost :-
  ShippingRoutes(origin: "warehouse_main", destination:, cost:);

ShippingCost(destination) Min= ShippingCost(hub) + cost :-
  ShippingCost(hub),
  ShippingRoutes(origin: hub, destination:, cost:);

Temporal data

When working with timestamps or dates, always convert to string first:

@OrderBy(MonthlyOrders, "month");
MonthlyOrders(month:, count? += 1) distinct :-
  Orders(created_at:),
  month == Substr(ToString(created_at), 1, 7);

# Filter by date range
RecentOrders(order_id:) :-
  Orders(order_id:, created_at:),
  ToString(created_at) >= "2024-01-01";

Today(date:) (today's date as "YYYY-MM-DD") and Now(timestamp:) (the current instant as the engine's native timestamp) are built-in concepts. They are inlined per dialect by the compiler — no runtime table needed, so they work on every engine. Now is the most precise value; derive coarser parts (date, time, hour) from it through the ToStringSubstr pipeline. Join against Today whenever a rule needs "today":

@OrderBy(ThisMonthOrders, "order_id");
ThisMonthOrders(order_id:, created_at:) :-
  Orders(order_id:, created_at:),
  Today(date:),
  Substr(ToString(created_at), 1, 7) == Substr(date, 1, 7);

They are reserved names: you cannot redefine, extend, or update them.

Built-in functions

String: Substr, Length, Upper, Lower, Split, Join, Like, Format

Array: Size, Element, ArrayConcat, Range

Math: Abs, Floor, Ceil, Round, Sqrt, Log, Exp, Sin, Cos

Type casting: ToInt64, ToFloat64, ToString

Other: Coalesce, IsNull

Built-in concepts: Today(date:) — today's date as "YYYY-MM-DD"; Now(timestamp:) — current instant as a native timestamp (see Temporal data above).

Supported engines

Engine @Engine value Notes
DuckDB duckdb Default engine
SQLite sqlite
PostgreSQL psql
BigQuery bigquery
Trino trino
Presto presto
Databricks databricks Double-quoted string literals

Each engine has its own SQL dialect for string literals, array syntax, GROUP BY style, record construction, regex matching, and standard library functions.

Benchmark

The Rust core is benchmarked against the original Python Logica implementation on every program of the compiler test suite (498 programs across 6 engines). Both run in-process — Synalog through the same PyO3 extension that pip install synalog ships — so the numbers measure exactly what a Python caller gets:

Python Logica Synalog (Rust) Speedup
Parse (total) 13.0 s 0.17 s ~75x
Compile (total) 58.5 s 4.5 s ~13x

The speedup is uniform across engines for parsing and ranges from ~10x (trino, presto) to ~18x (duckdb) for compilation. Per-engine tables, plots and methodology are on the Benchmark page; reproduce with python3 benchmark.py.

Verification

Unlike Logica, which lets the database raise errors at execution time, Synalog embeds a formal verifier that catches issues at compile time.

Check What it detects
Safety Head variables not bound in the body
Safe negation Negated variables without a positive occurrence
Safe aggregation Aggregated variables not bound outside the aggregate
Stratification Negative recursion cycles
Arity Predicates used with inconsistent argument counts
Recursion Missing base cases, trivial loops, unbounded recursion without @Recursive
Reserved names Rules that redefine a built-in library predicate (Num, Str, ArgMin, Today, Now, ...)
Unsafe SqlExpr User rules that reach for the raw-SQL escape hatch
errors = synalog.check(bad_source)
for e in errors:
    print(e)
# Unbound variable 'y' in head of rule: Test(x:, y:) :- Numbers(x:)

Differences with Datalog and Logica

Named attributes only

Synalog doesn't support positional attributes like Logica or Datalog — it only uses named attributes, which reduce agent mistakes. This feature is optional in Logica; we made it mandatory.

In Synalog, the compiled SQL uses actual column names, not col{i} format, making it compatible with existing database schemas.

Pagination

Pagination is critical for AI agents with limited context windows. It also avoids loading large amounts of data into memory, enabling use on memory-constrained cloud infrastructure.

Synalog applies pagination at compile time via the limit and offset arguments of compile(). The limit is combined with the @Limit directive: actual_limit = min(limit, @Limit).

Compile-time verification

Synalog embeds a formal verifier that catches structural errors before any SQL is generated. This prevents agents from producing programs that parse correctly but fail at execution time — a common failure mode when working with SQL directly.

Building from source

The project uses maturin to build the Python wheel from the Rust crate.

pip install maturin
maturin develop --release    # install into the active venv
maturin build --release      # produce a wheel in target/wheels/

Run the Rust test suite:

cargo test

Run specific test groups:

cargo test --lib                        # unit tests
cargo test --test compiler_tests        # compiler golden tests (all engines)
cargo test --test parser_tests          # parser golden tests (all engines)
cargo test --test verifier_tests        # verifier tests (all engines)
cargo test --test search_tests          # search feature tests (all engines)

Golden test generation

Golden SQL files are generated by the Python Logica compiler to serve as the reference:

cd tests/compiler_tests && python3 generate_expected_sql.py
cd tests/parser_tests && python3 generate_expected_json.py

Requires pip install logica.

Project structure

src/
  lib.rs                  # Public API: parser, compiler, verifier, errors
  errors.rs               # Unified error types with help messages
  python.rs               # PyO3 bindings (the _synalog extension module)
  parser/
    parse.rs              # Logica syntax -> JSON AST
    rewrite.rs            # AST rewrites (aggregation, multi-body)
    json.rs               # Custom JSON implementation
  compiler/
    universe.rs           # LogicaProgram: AST -> SQL compilation
    annotations.rs        # @OrderBy, @Limit, @Recursive, etc.
    dialects.rs           # Engine-specific SQL generation
    expr_translate.rs     # Expression -> SQL translation
    rule_translate.rs     # Rule -> SQL translation
    functors.rs           # Functor expansion (@Make)
    concertina.rs         # Multi-predicate execution orchestration
    type_inference/       # Type checking subsystem
  verifier/
    mod.rs                # Validation entry point
    safety.rs             # Variable binding checks
    stratification.rs     # Negative cycle detection
    arity.rs              # Argument count consistency
    recursion.rs          # Recursion safety checks
    reserved.rs           # Reserved predicate name check
python/
  synalog/__init__.py     # Python package wrapper
  synalog/cli.py          # The synalog command (one-shot + REPL)
  synalog/runners.py      # Local SQL runners (duckdb, sqlite, psql)
tests/
  compiler_tests/         # Golden SQL tests per engine
  parser_tests/           # Golden JSON tests per engine
  verifier_tests/         # Negative verification tests per engine
  cli/                    # CLI tests (pytest)
  search_tests.rs         # Search feature integration tests

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

synalog-0.1.0.tar.gz (934.1 kB view details)

Uploaded Source

Built Distributions

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

synalog-0.1.0-cp314-cp314t-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.14tWindows x86-64

synalog-0.1.0-cp314-cp314t-win32.whl (1.3 MB view details)

Uploaded CPython 3.14tWindows x86

synalog-0.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

synalog-0.1.0-cp314-cp314t-musllinux_1_2_i686.whl (1.9 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ i686

synalog-0.1.0-cp314-cp314t-musllinux_1_2_armv7l.whl (1.9 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARMv7l

synalog-0.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl (1.8 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARM64

synalog-0.1.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ x86-64

synalog-0.1.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.7 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ s390x

synalog-0.1.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.8 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ppc64le

synalog-0.1.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.6 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARMv7l

synalog-0.1.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.6 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARM64

synalog-0.1.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl (1.8 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.5+ i686

synalog-0.1.0-cp314-cp314t-macosx_11_0_arm64.whl (1.5 MB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

synalog-0.1.0-cp314-cp314t-macosx_10_12_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.14tmacOS 10.12+ x86-64

synalog-0.1.0-cp310-abi3-win_arm64.whl (1.3 MB view details)

Uploaded CPython 3.10+Windows ARM64

synalog-0.1.0-cp310-abi3-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.10+Windows x86-64

synalog-0.1.0-cp310-abi3-win32.whl (1.3 MB view details)

Uploaded CPython 3.10+Windows x86

synalog-0.1.0-cp310-abi3-musllinux_1_2_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ x86-64

synalog-0.1.0-cp310-abi3-musllinux_1_2_i686.whl (1.9 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ i686

synalog-0.1.0-cp310-abi3-musllinux_1_2_armv7l.whl (1.9 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARMv7l

synalog-0.1.0-cp310-abi3-musllinux_1_2_aarch64.whl (1.8 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

synalog-0.1.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ x86-64

synalog-0.1.0-cp310-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.7 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ s390x

synalog-0.1.0-cp310-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.8 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ppc64le

synalog-0.1.0-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.6 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARMv7l

synalog-0.1.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.6 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARM64

synalog-0.1.0-cp310-abi3-manylinux_2_5_i686.manylinux1_i686.whl (1.8 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.5+ i686

synalog-0.1.0-cp310-abi3-macosx_11_0_arm64.whl (1.5 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

synalog-0.1.0-cp310-abi3-macosx_10_12_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

Details for the file synalog-0.1.0.tar.gz.

File metadata

  • Download URL: synalog-0.1.0.tar.gz
  • Upload date:
  • Size: 934.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.14.0

File hashes

Hashes for synalog-0.1.0.tar.gz
Algorithm Hash digest
SHA256 9adfde031e1ed5a8ceb2a8bec17b2c0335f7beb8157245a375c093003544c241
MD5 25981065ef27fcd67cc0ecc7ac5f08f1
BLAKE2b-256 49a677ec944cd718cedb763a771eeac40da2cddeae15da56bd478aa925b1254c

See more details on using hashes here.

File details

Details for the file synalog-0.1.0-cp314-cp314t-win_amd64.whl.

File metadata

File hashes

Hashes for synalog-0.1.0-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 7b042d1b8e87095c9fe13a023ff5e7f97636a670a0407fe68aa1958335e7042e
MD5 8157a51e59e4b2bfc42d590559cf6b77
BLAKE2b-256 287492c535cbf17c85f428666e6e79ac1a8650d0f5518856c315034163590309

See more details on using hashes here.

File details

Details for the file synalog-0.1.0-cp314-cp314t-win32.whl.

File metadata

  • Download URL: synalog-0.1.0-cp314-cp314t-win32.whl
  • Upload date:
  • Size: 1.3 MB
  • Tags: CPython 3.14t, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.14.0

File hashes

Hashes for synalog-0.1.0-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 c36563e0badce28155ba1c2b353eba14c5b1f3340117d1cced36b2f3546600fd
MD5 206d19cce5aac78d10d41aa2355d5f2a
BLAKE2b-256 b491efe9b1b697488e7c3f9fe8281950ed6d983a82124ff4f986947dfb5e89e0

See more details on using hashes here.

File details

Details for the file synalog-0.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for synalog-0.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a86f163076d9c1eda691ebb520932adbd528dce003291d6c686c1ab80a033e5c
MD5 6def50a77262aa41a4211aad93e4eece
BLAKE2b-256 973d8957c12c35575cd871062dd4be3207ad9003c99cd9eb49c3f7fc091ae81f

See more details on using hashes here.

File details

Details for the file synalog-0.1.0-cp314-cp314t-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for synalog-0.1.0-cp314-cp314t-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 e927529b86c81eee84ba150ea7fa2d6f65025901e18bf55db8cd4befa41401b5
MD5 9c32b4f18ca64ed4f12e8ab37b208fef
BLAKE2b-256 9a8a4b10e46123a4515d89ff8cf5eb27b258d6bef8239b7106a8c2a96cc7ea2c

See more details on using hashes here.

File details

Details for the file synalog-0.1.0-cp314-cp314t-musllinux_1_2_armv7l.whl.

File metadata

File hashes

Hashes for synalog-0.1.0-cp314-cp314t-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 fe47e4d1e32512e01680b44708b536ebb6b0321d9e5e774c1dac34ea666a9d3b
MD5 c67995c68ff9078893c106a047f3c77c
BLAKE2b-256 4141ee01a35dce08056d5310ec7a64324ce7320727158e2acfcaf9429f85409d

See more details on using hashes here.

File details

Details for the file synalog-0.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for synalog-0.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 932e215a5a7a9e8ed99d8be43563e1c71683a2b7a59fa82b14de8943cf13fe38
MD5 1c0eae856cc7422c574a862f0d61eafe
BLAKE2b-256 e3cb3c51750a07cb3adff40e92f0c29d1f08ac1d4be369f0197f890697e6d8eb

See more details on using hashes here.

File details

Details for the file synalog-0.1.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for synalog-0.1.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1755a9295d64859bcd42a16cf05ab877a1032c386819c6ac2d56eb403bb08514
MD5 faa280ce1dea1293da05ffbc201f24a5
BLAKE2b-256 adf751c1ffea75453e36c4a484bd5e58bfd803181dc24401de31b3afebd1e371

See more details on using hashes here.

File details

Details for the file synalog-0.1.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for synalog-0.1.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 a2ced39b00a603c7f160c6c955ec2857ddfa3977bf6fcf9cc51d00deea374c68
MD5 a29de9dcc15426a49d91749a702cf480
BLAKE2b-256 6308bfb0e9bae19164b848193e93e599b7a0fe032ca603ec84a7d12f6c018b7e

See more details on using hashes here.

File details

Details for the file synalog-0.1.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for synalog-0.1.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 69139c36c3398bccf6581e7aaa95978a554a02ddb0da515963820af6e7c2bf26
MD5 e05025cd80251a634c9878121258f8e2
BLAKE2b-256 642f4a955153b2c716403c1fd6044609a6e821d7f1b031e514a1cff4fa680624

See more details on using hashes here.

File details

Details for the file synalog-0.1.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for synalog-0.1.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 d56dd1e09013ded8cfed7e2ad6bf4bdbedd04445e42a9f4a25255c9e4f8b3326
MD5 e6334d2009e124ef77ed94ae99a685be
BLAKE2b-256 e3fd7ead2fc196989f9d8a432c5c7530334e16f5a9bc2b474b5e0b0afd81c59f

See more details on using hashes here.

File details

Details for the file synalog-0.1.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for synalog-0.1.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 11d8e34c370542cc896ca349c3a7e6bcbea6f0507376ca992fdaee3bcf66bb8d
MD5 cc4ce8297d2de4efb1f7e7e30617e7d0
BLAKE2b-256 1b4d65368b05a2f3216efb7ac97df4313fa6ac886baf19db64bccc68556bf0f7

See more details on using hashes here.

File details

Details for the file synalog-0.1.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for synalog-0.1.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 0ebdc7a0ffb5d9d47137ddc62c46305ee643dc279078ec66dae7aaa146c62f0a
MD5 3834f5b4372bf98e47e767827db97373
BLAKE2b-256 69ee7944614e8df2118652ad8d0aa9f46a3ea634470ac8a0904560c449814774

See more details on using hashes here.

File details

Details for the file synalog-0.1.0-cp314-cp314t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for synalog-0.1.0-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c347e0ec5cb633bc0ee24e4bf7f6c455b989ad59802bf76a9c696577b50dd079
MD5 5c81dddabcb5bd7f9f867c9c4df7fcc7
BLAKE2b-256 021283a2ffbd63966a706291e655d61f10ec914f120cc1b43303f171484a0b4f

See more details on using hashes here.

File details

Details for the file synalog-0.1.0-cp314-cp314t-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for synalog-0.1.0-cp314-cp314t-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 1a3e0f295238825e1b8c2ced39e3c892b5e7dfcee273f1318e4a3dddb23d9647
MD5 dff1b7210055d8b2085fbeae5e14ce3a
BLAKE2b-256 f51b52948c19c2451d15b1e0c554db14bb67af94ee52376eb636463ef13e2958

See more details on using hashes here.

File details

Details for the file synalog-0.1.0-cp310-abi3-win_arm64.whl.

File metadata

  • Download URL: synalog-0.1.0-cp310-abi3-win_arm64.whl
  • Upload date:
  • Size: 1.3 MB
  • Tags: CPython 3.10+, Windows ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.14.0

File hashes

Hashes for synalog-0.1.0-cp310-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 9c61adb2ab103c515e56371314b48f6b912932a705d90454f90064bfbdef3fea
MD5 d5f75b6e882d2f159a0a8bf67f7b89b6
BLAKE2b-256 0e112ae6b4a1e47f6f79c57207743a1cd6c596cf404174bc6a18eed2b9edc612

See more details on using hashes here.

File details

Details for the file synalog-0.1.0-cp310-abi3-win_amd64.whl.

File metadata

  • Download URL: synalog-0.1.0-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.10+, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.14.0

File hashes

Hashes for synalog-0.1.0-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 5db7857b1d9ddcc134bd69712e090fd95c934f9a64ca131cbfc6e1a99b8cfaf7
MD5 60ed623a7faae12782fc740bf79116ff
BLAKE2b-256 0a10cdddae2648da51c304fedf5474ac149086e039d27d6a1d49e531a315bb9d

See more details on using hashes here.

File details

Details for the file synalog-0.1.0-cp310-abi3-win32.whl.

File metadata

  • Download URL: synalog-0.1.0-cp310-abi3-win32.whl
  • Upload date:
  • Size: 1.3 MB
  • Tags: CPython 3.10+, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.14.0

File hashes

Hashes for synalog-0.1.0-cp310-abi3-win32.whl
Algorithm Hash digest
SHA256 334b5018e0c96b1f262ff2983a8667ae7acb589223b810aa111d2c8d7b93a992
MD5 b0d3f6ee7f0a87f91125f974d4d534d6
BLAKE2b-256 4f9f277a01469caa68d236558d4f9c8f2c77d8ee12151982f09b5a749abd6dae

See more details on using hashes here.

File details

Details for the file synalog-0.1.0-cp310-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for synalog-0.1.0-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a3172c130f147ab9355ad5291ba53e4977ec12be8fc513dea03f87597aaad214
MD5 751dde6dd8c3be6bc7aafd6539b30742
BLAKE2b-256 705bd8613a8d167dfd5ed36af18ba34a02588bebc0d605124aff41e003f01b13

See more details on using hashes here.

File details

Details for the file synalog-0.1.0-cp310-abi3-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for synalog-0.1.0-cp310-abi3-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 a8663a40a1e5938a5b4e1591cf526c558e23f681eb480a51f483caf439805f1b
MD5 b2301d85511680b09ee145ac82bbe9ac
BLAKE2b-256 992dfc71efd880030dc9136ed292bc09c57b9d927ba1971714e2a1d5e11afe97

See more details on using hashes here.

File details

Details for the file synalog-0.1.0-cp310-abi3-musllinux_1_2_armv7l.whl.

File metadata

File hashes

Hashes for synalog-0.1.0-cp310-abi3-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 a0c17b36e59cf722ec05112a24d5ca8b7312fa33b9e83986123956148af6b8da
MD5 4bc6972114a70a8ce05c313d9d1d8ea9
BLAKE2b-256 aee3eb39f4aba1c160aecc5c9843ba3f4c7e4f0139a3841a356f4fa84e4d8977

See more details on using hashes here.

File details

Details for the file synalog-0.1.0-cp310-abi3-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for synalog-0.1.0-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 c3c1aabb2b30d9eea7406c80aa2860ad270525db4ef91424b755808068946a72
MD5 6856fb53bf0ee4403df43b4936cc27cc
BLAKE2b-256 429f8c535cae8c52855a567ad5fb8ad63f7d678ed0f40f0578263f88d9b190b1

See more details on using hashes here.

File details

Details for the file synalog-0.1.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for synalog-0.1.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c0a8f66cf441c1fe34963ff7871f90288abbf000071631947ffb24d98add27c3
MD5 11c7cff8a2e6f46a35deac54e749414e
BLAKE2b-256 0bebd3428351b250c7d122a298f29539bc97cafa0d7890347ec54574afaa30de

See more details on using hashes here.

File details

Details for the file synalog-0.1.0-cp310-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for synalog-0.1.0-cp310-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 0fe95e017424d83e57a75c66c0248b90e69ed6f9aee6cc82c550c1f8c0b63d35
MD5 4209669d894b33b361eaa2524d0bb479
BLAKE2b-256 67a3150b7665ce15d3c7ee3a4e2b7e9b66000d82377bc4fc1b397e10d7eb3566

See more details on using hashes here.

File details

Details for the file synalog-0.1.0-cp310-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for synalog-0.1.0-cp310-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 5ca1a391c136bade63137ffd58412237bc4f267dd4c19c004c7cf113cce62356
MD5 11da600137635d8a643529ba196d32a3
BLAKE2b-256 857615f278ce398882af19aaa71d3c763f78c514c1fb7e1ae58f48e53dbae078

See more details on using hashes here.

File details

Details for the file synalog-0.1.0-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for synalog-0.1.0-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 bed770245a091dafae997df080dd0e3c76beda11f7d23735d2d84cc48237ac65
MD5 ee76d001e4d99c2329f13b149f114bea
BLAKE2b-256 e5fa74b22c240f2deb9afe6343479434aadb797cdf53e46c4c335c0133d003a1

See more details on using hashes here.

File details

Details for the file synalog-0.1.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for synalog-0.1.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4af60a5d69c243c6b577deec9493ce5899c9763515374a7527df629dc6a1526b
MD5 c89ee4b470089dadeb16dd1dde32be7a
BLAKE2b-256 bfbc0e7c21cab978485801b02ecc8ccde418e7a75ca92d775fdeb0fdfa574483

See more details on using hashes here.

File details

Details for the file synalog-0.1.0-cp310-abi3-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for synalog-0.1.0-cp310-abi3-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 6af04ab4fac3efee3bd3412bf82f4ab462539da50432b9f7697cdab1ba185ec8
MD5 9ec03b08b2a22c8368d02f58a48a4aa1
BLAKE2b-256 493ce761738358bad9184aa5fa50eb97d383e8c76743ccda68b09871911e18fb

See more details on using hashes here.

File details

Details for the file synalog-0.1.0-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for synalog-0.1.0-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 53ffe4dc0d6a192af95c702291597b9e5e7106c5c07ae8345e2738459037e354
MD5 35218a9d98f13b8e9300b541c41aa816
BLAKE2b-256 b59ef0ebe41e77410b272cc7af76c0bbd75341e962a5befd5ce8ab1672dca9cb

See more details on using hashes here.

File details

Details for the file synalog-0.1.0-cp310-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for synalog-0.1.0-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 284b79a39b6385003ffb76d48dd662f00f112a4398c8424beb2abc3d4dbf5ca5
MD5 79c08b2afdd8846c2db74bd2bd0ecf9d
BLAKE2b-256 27f0653997b47eef93a458970a32e87a29b219b2445fa75c274c962ada3a1b6a

See more details on using hashes here.

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