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.50.0.tar.gz (291.2 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.50.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl (4.9 MB view details)

Uploaded PyPymanylinux: glibc 2.28+ ARM64

zen_engine-0.50.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl (5.2 MB view details)

Uploaded PyPymanylinux: glibc 2.28+ x86-64

zen_engine-0.50.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl (4.9 MB view details)

Uploaded PyPymanylinux: glibc 2.28+ ARM64

zen_engine-0.50.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl (5.2 MB view details)

Uploaded PyPymanylinux: glibc 2.28+ x86-64

zen_engine-0.50.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl (4.9 MB view details)

Uploaded PyPymanylinux: glibc 2.28+ ARM64

zen_engine-0.50.0-cp313-cp313t-manylinux_2_28_aarch64.whl (4.9 MB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.28+ ARM64

zen_engine-0.50.0-cp313-cp313-win_amd64.whl (5.2 MB view details)

Uploaded CPython 3.13Windows x86-64

zen_engine-0.50.0-cp313-cp313-manylinux_2_28_x86_64.whl (5.2 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

zen_engine-0.50.0-cp313-cp313-manylinux_2_28_aarch64.whl (4.9 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

zen_engine-0.50.0-cp313-cp313-macosx_11_0_arm64.whl (4.6 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

zen_engine-0.50.0-cp313-cp313-macosx_10_12_x86_64.whl (5.0 MB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

zen_engine-0.50.0-cp312-cp312-win_amd64.whl (5.2 MB view details)

Uploaded CPython 3.12Windows x86-64

zen_engine-0.50.0-cp312-cp312-manylinux_2_28_x86_64.whl (5.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

zen_engine-0.50.0-cp312-cp312-manylinux_2_28_aarch64.whl (4.9 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ ARM64

zen_engine-0.50.0-cp312-cp312-macosx_11_0_arm64.whl (4.6 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

zen_engine-0.50.0-cp312-cp312-macosx_10_12_x86_64.whl (5.0 MB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

zen_engine-0.50.0-cp311-cp311-win_amd64.whl (5.2 MB view details)

Uploaded CPython 3.11Windows x86-64

zen_engine-0.50.0-cp311-cp311-manylinux_2_28_x86_64.whl (5.2 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

zen_engine-0.50.0-cp311-cp311-manylinux_2_28_aarch64.whl (4.9 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ ARM64

zen_engine-0.50.0-cp311-cp311-macosx_11_0_arm64.whl (4.7 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

zen_engine-0.50.0-cp311-cp311-macosx_10_12_x86_64.whl (5.0 MB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

zen_engine-0.50.0-cp310-cp310-win_amd64.whl (5.2 MB view details)

Uploaded CPython 3.10Windows x86-64

zen_engine-0.50.0-cp310-cp310-manylinux_2_28_x86_64.whl (5.2 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

zen_engine-0.50.0-cp310-cp310-manylinux_2_28_aarch64.whl (4.9 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ ARM64

zen_engine-0.50.0-cp39-cp39-win_amd64.whl (5.2 MB view details)

Uploaded CPython 3.9Windows x86-64

zen_engine-0.50.0-cp39-cp39-manylinux_2_28_x86_64.whl (5.2 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.28+ x86-64

zen_engine-0.50.0-cp39-cp39-manylinux_2_28_aarch64.whl (4.9 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.28+ ARM64

zen_engine-0.50.0-cp38-cp38-manylinux_2_28_x86_64.whl (5.2 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.28+ x86-64

zen_engine-0.50.0-cp38-cp38-manylinux_2_28_aarch64.whl (4.9 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.28+ ARM64

zen_engine-0.50.0-cp37-cp37m-manylinux_2_28_x86_64.whl (5.2 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.28+ x86-64

zen_engine-0.50.0-cp37-cp37m-manylinux_2_28_aarch64.whl (4.9 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.28+ ARM64

File details

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

File metadata

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

File hashes

Hashes for zen_engine-0.50.0.tar.gz
Algorithm Hash digest
SHA256 a562e0af22312e86174de36e5b1891334ea7863db23fd60a7abbfb4afc519fb3
MD5 5bd1ad7f94be9ef8903eaf2b99aafdf3
BLAKE2b-256 dabe22dea139be009b6072b9f19c7a75c6e5d76f9dc5e233f56404cf87fd76c0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.50.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 4c0e1716720718be9dbb028950de2f82a774880b2db0aebb247732c6d6c5e7c2
MD5 2733d176ed7fdb207422695557341d42
BLAKE2b-256 377681d30177db39560d91e1981767609eb6e79845b21de84dfba69c8ef2d60e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.50.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4a65a7e3b04a2a06ba1ff8416784ab09f9cd4e70a3b3688781e746d6cd77a196
MD5 6fece007ea94284cb32da4c1bb16aa62
BLAKE2b-256 69f7860fab1978c6957e0c3bea298a6794385f8d00e28552711de96f28713779

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.50.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d38645596d5f0d8c198a9166e0627fb62e388036f751a7e976900d0542827d8c
MD5 a6c81fa73ce6d4f727ace871e430d5c6
BLAKE2b-256 37379a4b9c074b7cc9184bcf00598a6993d3016cc4e02b6bbf623f81cde8e5ec

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.50.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7601d8ebc2b173d872336821c09b476f4a13b383850cb185e29845a415ede484
MD5 b05be0589b774254ec7fff936faa3d4c
BLAKE2b-256 c421f63190c970304fd7a8951aff6e26c83bb8ca81c322f2970048b661eda363

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.50.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 86711e6ba92a38c840e360541736a4711c65bc103c154e7ac2072e44520d50e4
MD5 7138295f999b29e4181d3e7e2f4d2a02
BLAKE2b-256 f774fe83948b9a01f33e5bb44399580c28ed097f061a752f1de18de744d4cf5b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.50.0-cp313-cp313t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e8e4164666a66abd244abf49caabfc466f0ff2d5f212c4aab49a2658cda15f51
MD5 393ac4bf4b724106cf2f1ada02fe2c6c
BLAKE2b-256 0a5f93283f0d91847622cf1bf94382a0968d0be6f0b782ba5df72857ea1d2ca2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.50.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 3d23f21826dbf805e274af89fd2e2414f19397d7dcc740952c1247bb9c617158
MD5 4aa54746daf7a371910d8865afc684e9
BLAKE2b-256 5420cdf21f90bebbb3691d5767e9cf789ca928e0346fb135477a62bcd8f6424d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.50.0-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 bd749ca5691748d6196965733ccb29b86d17b1a795d14196a87d60911adc91c3
MD5 4904c0e163e251ef925e9cded48d3c49
BLAKE2b-256 8a12ded4c1aa71bff009d76c62bb1a4b332ab29028f00131a032c8344ca4bf5f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.50.0-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 6cf90581a68d0b17aced01c804398363d31d818072d32c47294db6c8a9cf6045
MD5 05f2c87e6e091a49710223616c2421db
BLAKE2b-256 89fa8484aacc3c791fb82fbc4a6754e4c8c91a3bf2f2f440c353d6dca706f409

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.50.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5f03f6eff16d2b7c5fa35bbcc436c8306662a9232c50cde902d9d298b0757c2d
MD5 afc26b5830bbb804e24ebd0ec177a2cb
BLAKE2b-256 753baa88a4e5ee27b0e0a478629eda7dd63fb59c8e5a59482b03de0c694d75c2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.50.0-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 86794b55a083aae2538a803d8d370c5fda07dba75eedb9299a6f81639ca21fc6
MD5 aaf28ebb81c429bbeb532e838571af91
BLAKE2b-256 076de5a173886d7d6a77ad6188abdca011b31bc4661359f9516007a5422e6fac

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.50.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 c860788cf038e63fdce0dcacf6887505fc577704e11c143938fd00de827d86ce
MD5 65881dfd40a6e5a4fa69f795315d9ea2
BLAKE2b-256 cc90c7eb47d4c53a1a3c76cb1a58295e63dc74b290ed96d878fff2ed20c9759e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.50.0-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9848aaf263fbe4abb8bb82f9d74b082a161f76d43181d620258c87febc83b917
MD5 d70fcafa9156ab64903bdd35d575bac0
BLAKE2b-256 3ce31855fb412ee512bab09add86e6c3088c356b7815eb0cd082c8d56a60fa39

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.50.0-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 eb8633150899065c1d2e7afb64d4bfe74ea5bdd785182b4374c6aa4810533693
MD5 03777b3a78d451d01d72ef1aa81f707e
BLAKE2b-256 c59b1a3b55c025c8d5a951ae05f36230fcd0b2a8ff543293d7717ae85f24cfd5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.50.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 40f262c32a95e9e3e56741211a8b20376d1babfc389d9dc882f21039f9a9c7e1
MD5 7ecd9851b9987a1a89b6bb3eab563426
BLAKE2b-256 ac5fcb07d07ebcf226deea538c2a74c67558da01ac859abccf5dd2880b2dd92d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.50.0-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 b4d31d1c46c07a9f464e1cea5b1fccc4414ecaf365ecae9270bfeb5b722186b3
MD5 1bf44f0da27a381461b3b457b6d3b1e1
BLAKE2b-256 7adf7d6fd42386e65061732382577fd5f4ec0990844e727af3660fdc3e584778

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.50.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 b49422bc8180ddd871ee16c14dd24aa89ed7d298448c5f5379f6a872eab83a20
MD5 c491a46c9d3eb4f543763a0526cb018c
BLAKE2b-256 0957f9c649971ae5581ecbd033dfe47d0fdbb5d9ae0cea8da6177087f2f2ff8b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.50.0-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 bda8006cebece2193e42f086272c5d5bd215eecce37612b369321502511f2e5c
MD5 6095a6cae27407db7709ad622f2e84d9
BLAKE2b-256 1043dce3e9f4f8f99f4ed831912a68cc34d54c516de8005154f7a88f8e7aabbd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.50.0-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 0be509cfa4a41de84a716eac1e1a7bf9efc02adce559611d6586c9654b3bf58e
MD5 40fa91749d7304b42edd5f264421bd70
BLAKE2b-256 04541f4b59af0b02449b168b8ea8b481dbb31308ce7c35d244fe23b7902fc9cf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.50.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 36cfd1f70601ad25a7f5302f866cbbdcda11afc3f6aef8b9687b73af1a18cbd0
MD5 f76bbaed996bcc16acca8ecb6edd6317
BLAKE2b-256 83556296d3f120f9049b0178705a40c47799ffe85b0b78c62ab50d5e4b775c4b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.50.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 d8656ca4c2b7555333688f01ff90dec15c1efbe749f8a0d44d4b86ef8485caee
MD5 251465f87fadda73bb691e54f24750c4
BLAKE2b-256 f772f64e38a12da0768665831828a7c9bce9cd7af011b48c667fc77c2a560668

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.50.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 8edcfe2f20ff28b7d2c728a80fc51a5e9c98e09968ee9b71fcd602cdb43c865b
MD5 1b26d39125963f926939c8518c10fa79
BLAKE2b-256 22c1fca209c4620e1071ee89e4e1598aba6c0d502be4d0842e799624ed186734

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.50.0-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6a5e8ea51d80bff545593fac04f025d5e4b3cabdd41bfda30a372f0f55b2db3b
MD5 aa5ffa1c5e0a9bd4e50d21e061f0d9d4
BLAKE2b-256 9fc5ceb6c92775c2d3c071df11481e230a1ef7f3c8a2ba19527bfd6cef36c4be

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.50.0-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 6bc9c414739cb8c1f25e20b999c696fece1da9845ab891c3f295770a939e35d1
MD5 0209d479774d45b971c5fae909a0aac1
BLAKE2b-256 7a5312c41f71d24c2ba91f92e3f5a87198d0bd6094b474c83dee1bc53c3db53d

See more details on using hashes here.

File details

Details for the file zen_engine-0.50.0-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for zen_engine-0.50.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 1a2eee1be552c2b4b8387d9214f9917e93954fbc6b38851cc8af231b68b23ebb
MD5 0ee276dff3051e48b9ce137503c7bed4
BLAKE2b-256 0a24e65a0c9de19bfe7783b1448a53b6f4715bbc0f73f63650313941bfd9eb2b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.50.0-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1e228dfbfe5f75f118b38f208ebe15bc7c09f4604a8d68b8137311bb88dae315
MD5 8f622cebc28a03503b872bfe351ec920
BLAKE2b-256 e229558d0a0972926c6af9d5d5f205563ecebc6498e00e00ba07b5ff01d0fa36

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.50.0-cp39-cp39-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 99c372a614966d5917a244cb13483c41d49b1f4754d676b04a1f7b8dc26c02e8
MD5 f2423a71c7b86b170da24fe78664283d
BLAKE2b-256 4317ebdb6d1d2bb3f3c683d1f3847b8bb74890c3433ae9d91a4a99b096038035

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.50.0-cp38-cp38-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7d4c6a6ee026cacd7ff88f2e844ae37c03782e5ae66fb674e2d8462b2d6adcee
MD5 bae28cc5f80ea7c67c38565c1e60ffdc
BLAKE2b-256 52de48491b5e02b7b968ecdda8fa5222bd5fb510e92f17411ae00a13b4734582

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.50.0-cp38-cp38-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 6cebb952f7a14148aa05403c7eb4dcd209ffe55d766323d45ab2fa7bf6c17103
MD5 0d7dd8957ab48b3976f0b61a56a4f652
BLAKE2b-256 012e9b18d2faa20bf1248dd28c1df830c7acf38f3f2e875c51608fef5636623e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.50.0-cp37-cp37m-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e82fb0201c2b947727ca81b82a405a0867f70895c8c0af51466387e9c3a40d6f
MD5 a30fd51a40f23817848c4d114edff0f9
BLAKE2b-256 f56b780d4652bfd53d77b1a31405487ec96fb4d561b1cdd05325a46f6c9067c7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.50.0-cp37-cp37m-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 5e6aa13160b41613be5b6d972ba4ec83a0e0b122f332a740d523d0cc880826b3
MD5 c23ceb922d70bfed5ba1f0b99389b25c
BLAKE2b-256 bad8ea7577dc7fdc7e071a4788735302cf0b84161434fad8d503a4e37099ff2f

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