Skip to main content
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 ~86.7x faster and compilation ~13.7x 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 entity and relationship concepts 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 and relationships as 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).

Add the skill to your coding agent

Synalog ships an Agent Skill — a SKILL.md that teaches a coding agent the language, the CLI and the conventions, so it writes and runs programs correctly. It follows the open Agent Skills standard, so it works with Claude Code, Cursor, Codex, OpenCode, Cline, Windsurf and 70+ other agents. Install it with the skills CLI — GitHub is the registry, so there is nothing to publish or install first:

npx skills add SynaLinks/synalog              # this project (./.claude/skills, ./.agents/skills, …)
npx skills add SynaLinks/synalog -g           # user-wide (~/.claude/skills, …)
npx skills add SynaLinks/synalog -a cursor codex   # only specific agents

The skill is maintained in this repo at skills/synalog/SKILL.md; npx skills add copies it into the right place for each agent.

Command-line interface

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

synalog program.l print Predicate      # print compiled SQL
synalog program.l run Predicate        # execute and print a table
synalog program.l run Predicate --csv  # execute and print CSV

Both print and run validate the whole program first and exit 1 with the verifier's errors if it is invalid, so verification always happens before any SQL is produced or executed.

$ 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.
  • --csv (with run) prints results as CSV instead of the rendered table.
  • --search REGEX (with print/run) 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.

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

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

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(Customer, "customer_id");
Customer(customer_id:) distinct :- Orders(customer_id:);

@OrderBy(Purchased, "customer_id");
Purchased(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 (504 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 13.4 s 0.15 s 87x
Compile 61.3 s 5.2 s 13x
Verify 0.16 s Rust-only

Synalog vs Python Logica: speedup by SQL engine

Speedup is the geometric mean of per-program speedups (every program weighted equally). Parsing is uniformly ~85–88x faster; compilation ranges from ~11x (trino, presto) to ~19x (duckdb). Verification — safety, stratification, recursion and reserved-name checks — is a Synalog-specific pass with no standalone Python equivalent. Per-engine tables 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

Download files

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

Source Distribution

synalog-1.0.0.tar.gz (948.6 kB view details)

Uploaded Source

Built Distributions

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

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

Uploaded CPython 3.14tWindows x86-64

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

Uploaded CPython 3.14tWindows x86

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

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

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

Uploaded CPython 3.14tmusllinux: musl 1.2+ i686

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

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARMv7l

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

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARM64

synalog-1.0.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-1.0.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.7 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ s390x

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

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ppc64le

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

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARMv7l

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

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARM64

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

Uploaded CPython 3.14tmanylinux: glibc 2.5+ i686

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

Uploaded CPython 3.14tmacOS 11.0+ ARM64

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

Uploaded CPython 3.14tmacOS 10.12+ x86-64

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

Uploaded CPython 3.10+Windows ARM64

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

Uploaded CPython 3.10+Windows x86-64

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

Uploaded CPython 3.10+Windows x86

synalog-1.0.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-1.0.0-cp310-abi3-musllinux_1_2_i686.whl (1.9 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ i686

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

Uploaded CPython 3.10+musllinux: musl 1.2+ ARMv7l

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

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

synalog-1.0.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-1.0.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-1.0.0-cp310-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.9 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ppc64le

synalog-1.0.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-1.0.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-1.0.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-1.0.0-cp310-abi3-macosx_11_0_arm64.whl (1.5 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

synalog-1.0.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-1.0.0.tar.gz.

File metadata

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

File hashes

Hashes for synalog-1.0.0.tar.gz
Algorithm Hash digest
SHA256 b9c7c15afd46d440d9192e498982e6de94c2a770ce8443b9397742c05189e0fd
MD5 e98da6eaa8e7cff185253b8b7a040e0e
BLAKE2b-256 6d50a0cf1e1fe6667dc73a6c619c7b9174e1d20eacbf88879f2974208b5477f9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for synalog-1.0.0-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 9054d94caf6fc8f49b1c2818bcb9e8a4023a1511e5a61e387c4dae543b6e4e3a
MD5 e76db584d0308653f8365f4b12c2df11
BLAKE2b-256 2b913d18814db251316db2aa931f3d50dcd36ef9a38bcbdef9e4b760c867a414

See more details on using hashes here.

File details

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

File metadata

  • Download URL: synalog-1.0.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-1.0.0-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 3965e33dd35d5c90cbb54618644ca397755f1544be748d695fa8bcd2cafa9f07
MD5 7678c84c18e4f9cd81fb98ddf2cd189b
BLAKE2b-256 9428ef1cbbddb5365d932cd49ea6115012f37a452a2303fe61e98ce24321ea34

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for synalog-1.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 49a7d98389e003f9a4dcf56d15ccfac007285d7380094f7691deb0d8fd13be1b
MD5 f468ca5c451d55377c04efe9fa3bcf19
BLAKE2b-256 9578b285c4a1ef63a3b3c20a9725158b3686971dd71180d4c714194653d65812

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for synalog-1.0.0-cp314-cp314t-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 a406d013ed27f539a2ee305bf2d4574abad67f73db3f163822bd1b87ff394c86
MD5 a1972640080292956ae2a95c3cd8e6bc
BLAKE2b-256 02065d2bd8651ffee5c99b1714b634d7591cf81765ae37affd06265abdc4b2fb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for synalog-1.0.0-cp314-cp314t-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 ae4232d8080e9dc664f201f5a1d85ca863fce931049a3373a8cef986356701bb
MD5 603f4c8145f76b4b8755a1b7ae55a61e
BLAKE2b-256 eadb30099fe06f284ccb545d082b76195f8fee6cc45202283aaa2f540df2f979

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for synalog-1.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 9ed623b6c6ba29651376e2dcc330c03c5c1cbf7918807404c73113f52d4e2bb0
MD5 a36f793c1f62eb91c68495c71503a1bf
BLAKE2b-256 0c989870cc447ed2fa5e74733a32d9a65fb06fcfe5450f3e61f10fdf0348f70f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for synalog-1.0.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4f45e051871d503769cf77670c9b11fb43c8f9b46572e0636635eae52298d059
MD5 3924d051bc49e80918dab01b0fa92f49
BLAKE2b-256 43e602dc488506d9fcb318325d6b029173fe26e480912eb4efc1a9e6028e1446

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for synalog-1.0.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 5e9959e6a58edfdb809a09e8ebea9c250e99258ddd9f42b59da4fe62506dc96a
MD5 96449a42e8bd3c952c9db4237dc5fddb
BLAKE2b-256 916f61a56284b6e0a3789098596f8a4b6426c1a0e8833936ed309d332b20a89e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for synalog-1.0.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 871f65d16200ebb9c7b9ae24799d3c55c5d6396f422cd241968f6063e4de2c5c
MD5 9a2bc414187461998af5523186e3e219
BLAKE2b-256 e6736dd420f2ccd9438ebe1b80baf8126eb579124bdae617f8fdbbbc6b8f3ad8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for synalog-1.0.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 f3d5a733c0e4191e7386dcc6bd436495bf7da6fcab311edabc37e4680f9aa541
MD5 b58d31c671d9332a88c81ae734cd5606
BLAKE2b-256 62d2c3daba2c92c3dc6868d39441e7bd8fe636bd42ab66fc6f6fefe76eff8a14

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for synalog-1.0.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f1a6b1b33aecad10ca2c642d535055c0f587818d91da063b3a820d0d5b229657
MD5 413837d2c72a82693d58a4706c96b4e9
BLAKE2b-256 9e59954b95c118eb519efc400631b065d4d4999c782b32087642d5314cec368f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for synalog-1.0.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 6c2b3d4ffb466a0232ef03c8c89ec6a93388813f335df62ed16e3513ae4345f6
MD5 7e4dd723ea50c53f3bb68aec8731befb
BLAKE2b-256 40847b234514ef1204d466b068a7f24f8bfaed6b79aab659273335f3b23ba313

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for synalog-1.0.0-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4cb0155a65c372b8b7d45f5d7e11ede9a18148b2acb07917909dea818588e9d2
MD5 1d7963dca528fb838cbec2ad7fa0dd20
BLAKE2b-256 767054716555c06872005fa0b74135f6458a8ff22790ee42186c566384bcc68f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for synalog-1.0.0-cp314-cp314t-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 c7345c1d634af3fee570e3ea37850fd34c284c6372bd5cec036b9b03878fe9a5
MD5 535997fa71b09f93388ef3becc7f03f4
BLAKE2b-256 ddb6f942ebc8ed6f9c616a0d7f8cbbb8a3f2b4ac690e89da52ac8a21b7e597e0

See more details on using hashes here.

File details

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

File metadata

  • Download URL: synalog-1.0.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-1.0.0-cp310-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 31bc97a3e83a64528f76b167635fb7b67bb22187e19c0c9462b51c6915b50e76
MD5 fdd982d5390b3087040143b301a1105b
BLAKE2b-256 0e1b1151be0a5d16cf9ba2e5a83795209b33ee9171b9a26f3cde84149e3628ce

See more details on using hashes here.

File details

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

File metadata

  • Download URL: synalog-1.0.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-1.0.0-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 f744dd70d754816a06254016f030415fd4929edcbb902654990e08492d61f724
MD5 aa733973a17998add8423c67b2606a5c
BLAKE2b-256 5464699f456b2369a155c28e25c95fc303aba1928133d51fceaca3547b3a4d36

See more details on using hashes here.

File details

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

File metadata

  • Download URL: synalog-1.0.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-1.0.0-cp310-abi3-win32.whl
Algorithm Hash digest
SHA256 5254f7b23c75f92208a54ce9888ab24a072e94e7cd4ed11a4f292808b636f884
MD5 cf653ec47021e83a76c9f7fb5951181a
BLAKE2b-256 0744adad4253e7902729d8f03af402b1e8bc0033949975914c396e56c17576d5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for synalog-1.0.0-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a203a81c54a7be996e1b87cc81810ac4848cebb48e2ed74cf59911fa82222508
MD5 1516d2234ed234ac25af1d591487c502
BLAKE2b-256 9acba20d793771b06e5bdcae94c329342c91be28e61101cd7d975636f34052a1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for synalog-1.0.0-cp310-abi3-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 eb492be8044418aca483ac95a5032d9a6631d75e80807ce345d9747e244e2f98
MD5 043ef6b9393e27a45294775c5d5978c6
BLAKE2b-256 effaec58b521b6a10a0f9cfce587be5bdd48bdf289b7a957c678d7da470a9de6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for synalog-1.0.0-cp310-abi3-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 5c4acfaed1cad48be0ac5b0e9394e2f906bc419e65b05cce9e6050f1f23313bc
MD5 849dc7fa2556e655586c5fb90830e281
BLAKE2b-256 05604c28438389a78c17ca6b87489aef8b990242f0bd099c3cbc36a2ad83649e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for synalog-1.0.0-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 eb7a8ebf8dcaa49b2a8ad27655421a8734e435d51fc79d9bda71e88cdb180c2e
MD5 c9c7bf91322e7e5434281e57c81dbe81
BLAKE2b-256 64ead4f19e90fdf288ccaedee1af408ab11f5f0b8aa67c7d562b49ef9cf83394

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for synalog-1.0.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 87fc8c115103345b7a9038bdb29daef5128a6df3ec8b4b0c6dae2c65d0ed2510
MD5 2c65c0acea2c388b9bc4531e67a6c65d
BLAKE2b-256 225d26ba85858f24618e4513af1797d2275d8413a82b9151e2ed6c67c18d54bd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for synalog-1.0.0-cp310-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 6d4fa1f15df59e4c8813aae13222f6de280c41fdbce5ca741e72e815cee0eea1
MD5 e9059717d888c0edb2e1c6e2eb41c6b1
BLAKE2b-256 0c617a80800fdc3b781858d0436317cbfa5d7eda324afff10f915755737ac822

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for synalog-1.0.0-cp310-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 64c6f96af58218019723dc73f323de0f6467686a28f2501819cea2e098159231
MD5 9596d9723159a2619263b3832ca6287d
BLAKE2b-256 a63d486305d2216c95e2de70b0638f0dbf02be7eb724b42a24dee99562f29073

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for synalog-1.0.0-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 ff3ec93669b536c989bef955324010bdb2a66fa5072510649dbac9bc0bb6475d
MD5 e32c8142ea90bc8ca833769f06c5143e
BLAKE2b-256 3363e5136e57688e5f070cb8c8b4a15cb16963ad46eb063cbb5d0a480665cdb4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for synalog-1.0.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4b8d447d36a302a8bf7e82a088defbacfbfbb01f52b2d99b5c7daad63569d5d1
MD5 7849126592d9ce720af8aec99a173495
BLAKE2b-256 05d9b5bd73751aaec9019d6b2fa9de318cec0fa65ca3de1733e4760d832f6702

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for synalog-1.0.0-cp310-abi3-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 903e450c18d8bae9e4976a8647915d52c04dfab8f1c545445317d7b7eb588b83
MD5 25b91aa1dc48f032eb377b04f52e5636
BLAKE2b-256 12dc4014b55ca489b2e9eaf7764be69f8c1648fb6ce44aece5f755824976b6a9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for synalog-1.0.0-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1df20aa514f90ef403720b2ea0303181ac4961d3cc99b9c82ff410c6633854c3
MD5 8b55cb1337111164f4359531491e282f
BLAKE2b-256 34e1012044150c26c3a04d1a141ffbf2b0641e4dcf54f7a608bbbc31a4323efb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for synalog-1.0.0-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 d60ec97079f065260973865bc76b59b4d99c1f53787c6560e78f5b8dc814033d
MD5 366748cbc8b003c08cc606ba0e613e7a
BLAKE2b-256 3fa342305e2cc5616463675990ee91723a5db653d9efb9e039235ef3aa7de3e6

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