Skip to main content

Open-Source Business Rules Engine

Project description

License: MIT

Python Rules Engine

ZEN Engine is a cross-platform, Open-Source Business Rules Engine (BRE). It is written in Rust and provides native bindings for NodeJS, Python and Go. ZEN Engine allows to load and execute JSON Decision Model (JDM) from JSON files.

Open-Source Rules Engine

An open-source React editor is available on our JDM Editor repo.

Usage

ZEN Engine is built as embeddable BRE for your Rust, NodeJS, Python or Go applications. It parses JDM from JSON content. It is up to you to obtain the JSON content, e.g. from file system, database or service call.

Installation

pip install zen-engine

Usage

To execute a simple decision you can use the code below.

import zen

# Example filesystem content, it is up to you how you obtain content
with open("./jdm_graph.json", "r") as f:
  content = f.read()

engine = zen.ZenEngine()

decision = engine.create_decision(content)
result = decision.evaluate({"input": 15})

Loaders

For more advanced use cases where you want to load multiple decisions and utilise graphs you can build loaders.

import zen

def loader(key):
    with open("./jdm_directory/" + key, "r") as f:
        return f.read()

engine = zen.ZenEngine({"loader": loader})
result = engine.evaluate("jdm_graph1.json", {"input": 5})

When engine.evaluate is invoked it will call loader and pass a key expecting a content of the JDM decision graph. In the case above we will assume file jdm_directory/jdm_graph1.json exists.

Similar to this example you can also utilise loader to load from different places, for example from REST API, from S3, Database, etc.

Supported Platforms

List of platforms where Zen Engine is natively available:

For a complete Business Rules Management Systems (BRMS) solution:

JSON Decision Model (JDM)

GoRules JDM (JSON Decision Model) is a modeling framework designed to streamline the representation and implementation of decision models.

Understanding GoRules JDM

At its core, GoRules JDM revolves around the concept of decision models as interconnected graphs stored in JSON format. These graphs capture the intricate relationships between various decision points, conditions, and outcomes in a GoRules Zen-Engine.

Graphs are made by linking nodes with edges, which act like pathways for moving information from one node to another, usually from the left to the right.

The Input node serves as an entry for all data relevant to the context, while the Output nodes produce the result of decision-making process. The progression of data follows a path from the Input Node to the Output Node, traversing all interconnected nodes in between. As the data flows through this network, it undergoes evaluation at each node, and connections determine where the data is passed along the graph.

To see JDM Graph in action you can use Free Online Editor with built in Simulator.

There are 5 main node types in addition to a graph Input Node (Request) and Output Node (Response):

  • Decision Table Node
  • Switch Node
  • Function Node
  • Expression Node
  • Decision Node

Decision Table Node

Overview

Tables provide a structured representation of decision-making processes, allowing developers and business users to express complex rules in a clear and concise manner.

Decision Table

Structure

At the core of the Decision Table is its schema, defining the structure with inputs and outputs. Inputs encompass business-friendly expressions using the ZEN Expression Language, accommodating a range of conditions such as equality, numeric comparisons, boolean values, date time functions, array functions and more. The schema's outputs dictate the form of results generated by the Decision Table. Inputs and outputs are expressed through a user-friendly interface, often resembling a spreadsheet. This facilitates easy modification and addition of rules, enabling business users to contribute to decision logic without delving into intricate code.

Evaluation Process

Decision Tables are evaluated row by row, from top to bottom, adhering to a specified hit policy. Single row is evaluated via Inputs columns, from left to right. Each input column represents AND operator. If cell is empty that column is evaluated truthfully, independently of the value.

If a single cell within a row fails (due to error, or otherwise), the row is skipped.

HitPolicy

The hit policy determines the outcome calculation based on matching rules.

The result of the evaluation is:

  • an object if the hit policy of the decision table is first and a rule matched. The structure is defined by the output fields. Qualified field names with a dot (.) inside lead to nested objects.
  • null/undefined if no rule matched in first hit policy
  • an array of objects if the hit policy of the decision table is collect (one array item for each matching rule) or empty array if no rules match

Inputs

In the assessment of rules or rows, input columns embody the AND operator. The values typically consist of (qualified) names, such as customer.country or customer.age.

There are two types of evaluation of inputs, Unary and Expression.

Unary Evaluation

Unary evaluation is usually used when we would like to compare single fields from incoming context separately, for example customer.country and cart.total . It is activated when a column has field defined in its schema.

Example

For the input:

{
  "customer": {
    "country": "US"
  },
  "cart": {
    "total": 1500
  }
}
Decision Table Unary Test

This evaluation translates to

IF customer.country == 'US' AND cart.total > 1000 THEN {"fees": {"percent": 2}}
ELSE IF customer.country == 'US' THEN {"fees": {"flat": 30}}
ELSE IF customer.country == 'CA' OR customer.country == 'MX' THEN {"fees": {"flat": 50}}
ELSE {"fees": {"flat": 150}}

List shows basic example of the unary tests in the Input Fields:

Input entry Input Expression
"A" the field equals "A"
"A", "B" the field is either "A" or "B"
36 the numeric value equals 36
< 36 a value less than 36
> 36 a value greater than 36
[20..39] a value between 20 and 39 (inclusive)
20,39 a value either 20 or 39
<20, >39 a value either less than 20 or greater than 39
true the boolean value true
false the boolean value false
any value, even null/undefined
null the value null or undefined

Note: For the full list please visit ZEN Expression Language.

Expression Evaluation

Expression evaluation is used when we would like to create more complex evaluation logic inside single cell. It allows us to compare multiple fields from the incoming context inside same cell.

It can be used by providing an empty Selector (field) inside column configuration.

Example

For the input:

{
  "transaction": {
    "country": "US",
    "createdAt": "2023-11-20T19:00:25Z",
    "amount": 10000
  }
}
Decision Table Expression
IF time(transaction.createdAt) > time("17:00:00") AND transaction.amount > 1000 THEN {"status": "reject"}
ELSE {"status": "approve"}

Note: For the full list please visit ZEN Expression Language.

Outputs

Output columns serve as the blueprint for the data that the decision table will generate when the conditions are met during evaluation.

When a row in the decision table satisfies its specified conditions, the output columns determine the nature and structure of the information that will be returned. Each output column represents a distinct field, and the collective set of these fields forms the output or result associated with the validated row. This mechanism allows decision tables to precisely define and control the data output.

Example

Decision Table Output

And the result would be:

{
  "flatProperty": "A",
  "output": {
    "nested": {
      "property": "B"
    },
    "property": 36
  }
}

Switch Node (NEW)

The Switch node in GoRules JDM introduces a dynamic branching mechanism to decision models, enabling the graph to diverge based on conditions.

Conditions are written in a Zen Expression Language.

By incorporating the Switch node, decision models become more flexible and context-aware. This capability is particularly valuable in scenarios where diverse decision logic is required based on varying inputs. The Switch node efficiently manages branching within the graph, enhancing the overall complexity and realism of decision models in GoRules JDM, making it a pivotal component for crafting intelligent and adaptive systems.

The Switch node preserves the incoming data without modification; it forwards the entire context to the output branch(es).

Switch / Branching

HitPolicy

There are two HitPolicy options for the switch node, first and collect.

In the context of a first hit policy, the graph branches to the initial matching condition, analogous to the behavior observed in a table. Conversely, under a collect hit policy, the graph extends to all branches where conditions hold true, allowing branching to multiple paths.

Note: If there are multiple edges from the same condition, there is no guaranteed order of execution.

Available from:

  • Python 0.16.0
  • NodeJS 0.13.0
  • Rust 0.16.0
  • Go 0.1.0

Functions Node

Function nodes are JavaScript snippets that allow for quick and easy parsing, re-mapping or otherwise modifying the data using JavaScript. Inputs of the node are provided as function's arguments. Functions are executed on top of QuickJS Engine that is bundled into the ZEN Engine.

Function timeout is set to a 50ms.

const handler = (input, {dayjs, Big}) => {
    return {
        ...input,
        someField: 'hello'
    };
};

There are two built in libraries:

  • dayjs - for Date Manipulation
  • big.js - for arbitrary-precision decimal arithmetic.

Expression Node

The Expression node serves as a tool for transforming input objects into alternative objects using the Zen Expression Language. When specifying the output properties, each property requires a separate row. These rows are defined by two fields:

  • Key - qualified name of the output property
  • Value - value expressed through the Zen Expression Language

Note: Any errors within the Expression node will bring the graph to a halt.

Decision Table

Decision Node

The "Decision" node is designed to extend the capabilities of decision models. Its function is to invoke and reuse other decision models during execution.

By incorporating the "Decision" node, developers can modularize decision logic, promoting reusability and maintainability in complex systems.

Support matrix

Arch Rust NodeJS Python Go
linux-x64-gnu :heavy_check_mark: :heavy_check_mark: :heavy_check_mark: :heavy_check_mark:
linux-arm64-gnu :heavy_check_mark: :heavy_check_mark: :heavy_check_mark: :heavy_check_mark:
darwin-x64 :heavy_check_mark: :heavy_check_mark: :heavy_check_mark: :heavy_check_mark:
darwin-arm64 :heavy_check_mark: :heavy_check_mark: :heavy_check_mark: :heavy_check_mark:
win32-x64-msvc :heavy_check_mark: :heavy_check_mark: :heavy_check_mark: :heavy_check_mark:

We do not support linux-musl currently.

Contribution

JDM standard is growing and we need to keep tight control over its development and roadmap as there are number of companies that are using GoRules Zen-Engine and GoRules BRMS. For this reason we can't accept any code contributions at this moment, apart from help with documentation and additional 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

zen_engine-0.53.0.tar.gz (297.0 kB view details)

Uploaded Source

Built Distributions

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

zen_engine-0.53.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl (5.1 MB view details)

Uploaded PyPymanylinux: glibc 2.28+ ARM64

zen_engine-0.53.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl (5.4 MB view details)

Uploaded PyPymanylinux: glibc 2.28+ x86-64

zen_engine-0.53.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl (5.1 MB view details)

Uploaded PyPymanylinux: glibc 2.28+ ARM64

zen_engine-0.53.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl (5.4 MB view details)

Uploaded PyPymanylinux: glibc 2.28+ x86-64

zen_engine-0.53.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl (5.1 MB view details)

Uploaded PyPymanylinux: glibc 2.28+ ARM64

zen_engine-0.53.0-cp314-cp314t-manylinux_2_28_aarch64.whl (5.1 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.28+ ARM64

zen_engine-0.53.0-cp314-cp314-win_amd64.whl (5.5 MB view details)

Uploaded CPython 3.14Windows x86-64

zen_engine-0.53.0-cp314-cp314-manylinux_2_28_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ x86-64

zen_engine-0.53.0-cp314-cp314-manylinux_2_28_aarch64.whl (5.1 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ ARM64

zen_engine-0.53.0-cp314-cp314-macosx_11_0_arm64.whl (4.9 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

zen_engine-0.53.0-cp314-cp314-macosx_10_12_x86_64.whl (5.2 MB view details)

Uploaded CPython 3.14macOS 10.12+ x86-64

zen_engine-0.53.0-cp313-cp313t-manylinux_2_28_aarch64.whl (5.1 MB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.28+ ARM64

zen_engine-0.53.0-cp313-cp313-win_amd64.whl (5.5 MB view details)

Uploaded CPython 3.13Windows x86-64

zen_engine-0.53.0-cp313-cp313-manylinux_2_28_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

zen_engine-0.53.0-cp313-cp313-manylinux_2_28_aarch64.whl (5.1 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

zen_engine-0.53.0-cp313-cp313-macosx_11_0_arm64.whl (4.9 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

zen_engine-0.53.0-cp313-cp313-macosx_10_12_x86_64.whl (5.2 MB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

zen_engine-0.53.0-cp312-cp312-win_amd64.whl (5.5 MB view details)

Uploaded CPython 3.12Windows x86-64

zen_engine-0.53.0-cp312-cp312-manylinux_2_28_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

zen_engine-0.53.0-cp312-cp312-manylinux_2_28_aarch64.whl (5.1 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ ARM64

zen_engine-0.53.0-cp312-cp312-macosx_11_0_arm64.whl (4.9 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

zen_engine-0.53.0-cp312-cp312-macosx_10_12_x86_64.whl (5.1 MB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

zen_engine-0.53.0-cp311-cp311-win_amd64.whl (5.5 MB view details)

Uploaded CPython 3.11Windows x86-64

zen_engine-0.53.0-cp311-cp311-manylinux_2_28_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

zen_engine-0.53.0-cp311-cp311-manylinux_2_28_aarch64.whl (5.1 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ ARM64

zen_engine-0.53.0-cp311-cp311-macosx_11_0_arm64.whl (4.9 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

zen_engine-0.53.0-cp311-cp311-macosx_10_12_x86_64.whl (5.1 MB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

zen_engine-0.53.0-cp310-cp310-win_amd64.whl (5.5 MB view details)

Uploaded CPython 3.10Windows x86-64

zen_engine-0.53.0-cp310-cp310-manylinux_2_28_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

zen_engine-0.53.0-cp310-cp310-manylinux_2_28_aarch64.whl (5.1 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ ARM64

zen_engine-0.53.0-cp39-cp39-manylinux_2_28_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.28+ x86-64

zen_engine-0.53.0-cp39-cp39-manylinux_2_28_aarch64.whl (5.1 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.28+ ARM64

zen_engine-0.53.0-cp38-cp38-manylinux_2_28_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.28+ x86-64

zen_engine-0.53.0-cp38-cp38-manylinux_2_28_aarch64.whl (5.1 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.28+ ARM64

zen_engine-0.53.0-cp37-cp37m-manylinux_2_28_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.28+ x86-64

zen_engine-0.53.0-cp37-cp37m-manylinux_2_28_aarch64.whl (5.1 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.28+ ARM64

File details

Details for the file zen_engine-0.53.0.tar.gz.

File metadata

  • Download URL: zen_engine-0.53.0.tar.gz
  • Upload date:
  • Size: 297.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.12.6

File hashes

Hashes for zen_engine-0.53.0.tar.gz
Algorithm Hash digest
SHA256 a84eb098a7e752bcce77efea3f82b9f790476c5d74f668b17a4647626865d12f
MD5 13d17670266253457a3f15d3d9537684
BLAKE2b-256 6ee3a0be526a8f5f9114091fe5d04dff3c682f811a4266f41dbe607f8a9f330b

See more details on using hashes here.

File details

Details for the file zen_engine-0.53.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for zen_engine-0.53.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d79523d81527d7e5203c3e117f0d985ce3bb28f36610d7b6003d6deb71f3b6c7
MD5 e5d5c72edc2337340ba34a9e7fc543c5
BLAKE2b-256 def3dd1fc88511b7ea75aa324d1b5309ba8780f30be4a21023b7924c022eda01

See more details on using hashes here.

File details

Details for the file zen_engine-0.53.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for zen_engine-0.53.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3ac182e84151445a368b3e36dbe5e69f8c1fd5848c9cf0c223e978ec28f968cc
MD5 8d6fda7ff98a4dbe6350bc04c4acf026
BLAKE2b-256 d5ff69535aecfdb423dec6c064648a0b23d38146141eb3c7f19a5678ec7302db

See more details on using hashes here.

File details

Details for the file zen_engine-0.53.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for zen_engine-0.53.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e4e98c13e78bc96fd9e0232277ab5dc88e9eb77380d472e216cc32016ba3118f
MD5 095ef6e64fd38131ce8d886474cc0c3f
BLAKE2b-256 b061046bc79f99097a3ba85e67f6489f961fd52b4c6c341d66b7df014dac54d3

See more details on using hashes here.

File details

Details for the file zen_engine-0.53.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for zen_engine-0.53.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4ea9e56f6699338cb10a928bcdd2424a8fb88e9e8116a628d6e713fe3807620d
MD5 f7f07dcea1ad042479bf11d4cdae4578
BLAKE2b-256 ff50c47b9f9cf636e027fc8f45b79c36ca0f76a68e8f539608a3917fa8c62102

See more details on using hashes here.

File details

Details for the file zen_engine-0.53.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for zen_engine-0.53.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7d280325168d9729ba4124dd1ebd9321e107513a1ba448dec4f091d07f952064
MD5 5a7eb8904d2be50532002905bafc81b8
BLAKE2b-256 ce20a26b574ff140e067acb9574c7e6aeb7e476a43b9e89dd7e09bd03c28270d

See more details on using hashes here.

File details

Details for the file zen_engine-0.53.0-cp314-cp314t-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for zen_engine-0.53.0-cp314-cp314t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 a91687e4f46129bfe5d5ada588035f02a7b2c1af6805b4d2726af00cf7a0a3c6
MD5 5d2f9d59c0a4ff6b3259b8eecdd8cdbe
BLAKE2b-256 d2dd895a7285bae37b4b14855e0157f568db6df6c3da43c778afbd32dc1847a1

See more details on using hashes here.

File details

Details for the file zen_engine-0.53.0-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for zen_engine-0.53.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 cca6e80e8a6d5729ccf7481300ddd5228c8b4ac8df247ad5d46198a6c0b4d43e
MD5 f8936952c1da782d15a624505c47ab77
BLAKE2b-256 bb0665f0f19dc0e5c9afe1292dd9e20f36e6d787443405ee5e4a8427e9fbd330

See more details on using hashes here.

File details

Details for the file zen_engine-0.53.0-cp314-cp314-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for zen_engine-0.53.0-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 848b9deadb2806ffd0544bd2b8d0cd04487df0310490a28f32cb2ab0526de19a
MD5 05fafd0c27ae1a40cec15889477b5072
BLAKE2b-256 22deee998f68efec931c572fc53a932c561721ebde72e324d875c912e24ed508

See more details on using hashes here.

File details

Details for the file zen_engine-0.53.0-cp314-cp314-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for zen_engine-0.53.0-cp314-cp314-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 f35affe2f838a6aaa657cbc1731e50d6670d3fe42359d2138d72550d5f0f4342
MD5 7c465d6c4e076336b0a8c766a6f97323
BLAKE2b-256 d51d3ac91fcb4a69a440759cb2fd1e59756808a04d9753c7c11628cd714f3a7d

See more details on using hashes here.

File details

Details for the file zen_engine-0.53.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zen_engine-0.53.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 67e3821efbc47a839a51d54dc3046b6429af5f43be89e05d9b9133ce97144cff
MD5 a63a6f1d26323b98b6b005a64c64f552
BLAKE2b-256 278111d7f1ac1f8717e33301392fd5e144ccd25ffc252cdd4558d77cf41d5afe

See more details on using hashes here.

File details

Details for the file zen_engine-0.53.0-cp314-cp314-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for zen_engine-0.53.0-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 053b1ccaa4a2b33d48f811ddfc5efe10e76038e8a14188883971e811a03e90d6
MD5 e95bcba237160d5496e8556e550fa61a
BLAKE2b-256 dc673eefa02334a98c6d7a84f510fd7ee4478a01cffb64269dbb3abf261b7063

See more details on using hashes here.

File details

Details for the file zen_engine-0.53.0-cp313-cp313t-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for zen_engine-0.53.0-cp313-cp313t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 aeffccedeaf21448cd44504829e4a3ad2b4275edb0b921eeee757094b2e30be0
MD5 150a96f247d6a0fd870df54e7e02c2e3
BLAKE2b-256 cb42bf211eb8a5aad216b533e19b76f0309cc86fbbb639b6cd32b711b2a48d88

See more details on using hashes here.

File details

Details for the file zen_engine-0.53.0-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for zen_engine-0.53.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 ac1b6b59ff6c2a2712c71aaad900689d66aff4eb95b1596f6fcddebd7a58e8b8
MD5 efaad8269d6cdcecdec3d38780bb7ebc
BLAKE2b-256 220a0f96f4f0570963bd99d181355068191b24b75928c6ad5205bc015ca37842

See more details on using hashes here.

File details

Details for the file zen_engine-0.53.0-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for zen_engine-0.53.0-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e1e6b8adbbd09a249c7dd3ec4a1020f273a00da07428e73bc66361ffc151c70a
MD5 9de23b8a1672b31845433fcc0eaf7279
BLAKE2b-256 6c6f275fa88936dc4747781357e1e79f7b1e922d4b0f233f3c256e710c66de11

See more details on using hashes here.

File details

Details for the file zen_engine-0.53.0-cp313-cp313-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for zen_engine-0.53.0-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 710547e8b799cdb0b1fc17715a66f95aa23efeefe1a21f72da39b308a9fad607
MD5 a6712a52320fd3b2b78a547dbcc88145
BLAKE2b-256 ba1604f346eb871861c0bf360ec6dc6f4cb4e671a7ba638deef991ff4b6fa843

See more details on using hashes here.

File details

Details for the file zen_engine-0.53.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zen_engine-0.53.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 780c3a5c38e20fece1a85ac589476909b713167ed84ed6e6146b4f10736d9a34
MD5 15b5377a3baea06afe4ded900c8fb218
BLAKE2b-256 0556a134480b6f082c2f7de46fe5f6610a4934e04d412814f5e46b12ece29f96

See more details on using hashes here.

File details

Details for the file zen_engine-0.53.0-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for zen_engine-0.53.0-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 feb2ef41f25e0e6037cc0a968710532cbd5800f827478e35fb7f2e4ce41e5cda
MD5 06ccd5873ec2fed25a9c86bfcf1b8808
BLAKE2b-256 0eafd43e17e55b8d4b30d65bec32867bc5b0223972783a92bfe056b8f701e790

See more details on using hashes here.

File details

Details for the file zen_engine-0.53.0-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for zen_engine-0.53.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 dbbdc73173915a68f7b6f014d4392e97ef826ebf4b6f35b17eec8733de8e09dc
MD5 281d1432a959d10db6f9bdea8f248f7a
BLAKE2b-256 6ecb8389ebfe5f6dd408baf993111ae37716da6b2605e5b5fd74808e3a7f01b7

See more details on using hashes here.

File details

Details for the file zen_engine-0.53.0-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for zen_engine-0.53.0-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3559308fe0a9a5b428553daf3194b3e6900ca53fcdd9e2883b7ca99da3153963
MD5 be582a4ffa468639753d4082ab93b817
BLAKE2b-256 3892936bd387da68b8c550ef39459e064573c93c7f79f66e43f4b4511bf96d5c

See more details on using hashes here.

File details

Details for the file zen_engine-0.53.0-cp312-cp312-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for zen_engine-0.53.0-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 2570749ddc59f6171787cedc955c08c729db09f00fcd1950872236f8abcbedd1
MD5 de2d2e6ddfd4a0c134750327e542790a
BLAKE2b-256 3240b5e60eb149e76f592f248b5eaefa097ddb34a02bfee46be20b74ab1e6994

See more details on using hashes here.

File details

Details for the file zen_engine-0.53.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zen_engine-0.53.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c67ba999f3f46b66a03e392065d5103d0a8fa3588109f4a12272c27ece4641fd
MD5 b0658d0e385ed79f07035ad02c8746d5
BLAKE2b-256 7f2c32ef2683f3e00b3092246faa50662282275025f84f9f7d8d3bef50a9d438

See more details on using hashes here.

File details

Details for the file zen_engine-0.53.0-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for zen_engine-0.53.0-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 12c626197e912cb7bc0f5fcf7ef67ab05fbcbfd0bdcf680b78fe6910d47fb1ab
MD5 59238ab90c14fdbc21791406a5f25f65
BLAKE2b-256 3f61cdc3a1ae52f442abe27cf3486bec9e3836477dd349fac7f61cc9c52da089

See more details on using hashes here.

File details

Details for the file zen_engine-0.53.0-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for zen_engine-0.53.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 06e526eb5699064543b2c78530cb1f8657a78d93df91b1553ecddefe8a24f70a
MD5 094b1e774d89eb3ef8204f0b80e9ccef
BLAKE2b-256 a1e34be0c04f2fc0fc47a5393c5af19b4c8e83df8a64dd3cf683829ef71a7c5a

See more details on using hashes here.

File details

Details for the file zen_engine-0.53.0-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for zen_engine-0.53.0-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f254f4a104a485bb5a1906512335b81a796183dd7aa4b069f10a266fea64f660
MD5 28520758141cbcc991d9dad9e7ad7667
BLAKE2b-256 ffde1c31afd5c711b12af37f622e35a1f09cc136f8f4510dcd6873d99a064958

See more details on using hashes here.

File details

Details for the file zen_engine-0.53.0-cp311-cp311-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for zen_engine-0.53.0-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 586ecc370ae7e3ec782bf107f986c03c550233785332e82fadcf821dc037985b
MD5 c176e58cfed0bb06ef0ec8115af0deb6
BLAKE2b-256 69ac059f86a859a9f6c414ded7263cf07e8b719ab1b9067b274bdb9c51d0d499

See more details on using hashes here.

File details

Details for the file zen_engine-0.53.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zen_engine-0.53.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 037b5642a6ad8f4ea340edb884e40e2d2187439845b588f207643faed8b3d3e2
MD5 5cff6d904ead4c394eb9ef5443c82a1f
BLAKE2b-256 c23469d49d93a9ecc1058b7e3ca6c61c2358e829804930b48c815f290c615046

See more details on using hashes here.

File details

Details for the file zen_engine-0.53.0-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for zen_engine-0.53.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 541bf2f7fad5340ddc4e5b9917bc3d709de2c3b40499c9074f49d40c130bb80a
MD5 d0c33575df6a3b2593cd2fcb7938ba79
BLAKE2b-256 a1814828accf07eb975f08ba9b3c7e0f9ac9e6a61acbca767f199a392bb5e155

See more details on using hashes here.

File details

Details for the file zen_engine-0.53.0-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for zen_engine-0.53.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 25371d867fc2f1afada2fd7f2f76e8c1bccc24da6ac1a4d9230fbdfff89d635d
MD5 5f2de84380ab4ebab256fc4028603114
BLAKE2b-256 4a93af35835b3b6335f04330f450dcf3c671b7ea0bce70130ca9c5ef04a83857

See more details on using hashes here.

File details

Details for the file zen_engine-0.53.0-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for zen_engine-0.53.0-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f2752699194d449f2c25a3ffbcb65ac97ba0b5975f9ba0daad597e4d64500dcf
MD5 ce6cd5faa75e713b5e383e7000ed245f
BLAKE2b-256 45543eecf137a15eac7c960650f8fa3db1cdace30e7a3d99df738d0f9fcc322b

See more details on using hashes here.

File details

Details for the file zen_engine-0.53.0-cp310-cp310-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for zen_engine-0.53.0-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 ee795db67d7628923ff86db17e52e5befd505bbc904386ed553e99c09fe4f38a
MD5 d43f763a6a6a53862c01b7bf8a7deb5f
BLAKE2b-256 5d880cfbb55201d7c89959e469f1880433c2c3dea5072901362a887206cd7754

See more details on using hashes here.

File details

Details for the file zen_engine-0.53.0-cp39-cp39-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for zen_engine-0.53.0-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c4c87a4e2c671a80cb5bcc1f0cbe37073a96b742426448a9e1f655ab336a6949
MD5 bf09a3ed8e6dea45e2eb9abea855549f
BLAKE2b-256 20317a1d3d7d0fadba315a546277dec8c947de8c33a040b3be7b716be70397c5

See more details on using hashes here.

File details

Details for the file zen_engine-0.53.0-cp39-cp39-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for zen_engine-0.53.0-cp39-cp39-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 48e41f2f8c44d32ddc8fee61afd14949769fe1aeedb22e3ada6766dc8a5d27c1
MD5 3b832af9b519c03d371bb781e71c5120
BLAKE2b-256 fdda0566965fa877edb6683be5eae07df66b66c625ea89931adf7e83fc5ba04b

See more details on using hashes here.

File details

Details for the file zen_engine-0.53.0-cp38-cp38-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for zen_engine-0.53.0-cp38-cp38-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0f8e46664dc2aa92558740483e4140a09b6a3f34b4639a9a9037ffe4c585b83b
MD5 f41b94d27af340a32666dfd684e25137
BLAKE2b-256 1dd54c455512736d0d89c63f121dca410a60d3a4351c9f0e293c75751d984a6d

See more details on using hashes here.

File details

Details for the file zen_engine-0.53.0-cp38-cp38-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for zen_engine-0.53.0-cp38-cp38-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 1422ecc71a28546ece36be8507e569dd5bc41630d9ed651f568d209f749718b7
MD5 e74a0c79a11b77fd8594fd9e256e9277
BLAKE2b-256 776e18b80f18e1ae2610f30a79bb827d9c8a7acf630e75dcc1c5c1ae9cd0396b

See more details on using hashes here.

File details

Details for the file zen_engine-0.53.0-cp37-cp37m-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for zen_engine-0.53.0-cp37-cp37m-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2e476a1f828f827a0de195ed5056d75fbb2901633c428141a8422339e7446323
MD5 0e573b641af92587a2acb01368d67017
BLAKE2b-256 27958d1acbdf158c00324c7b909d387d4b42b86ee35a9ed01e4e331f150bf80e

See more details on using hashes here.

File details

Details for the file zen_engine-0.53.0-cp37-cp37m-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for zen_engine-0.53.0-cp37-cp37m-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d551a1efc9606316e0b39208bbd90f1cfd04391aaa3db39d95af508f669fc7f5
MD5 61fb63fc6dff13947eaaab425f9d44d4
BLAKE2b-256 0caba30df427e3f2803608a129a9676d30304547c41b00838a912e18cd58210d

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