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.32.1.tar.gz (172.7 kB view details)

Uploaded Source

Built Distributions

zen_engine-0.32.1-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl (3.2 MB view details)

Uploaded PyPy manylinux: glibc 2.28+ x86-64

zen_engine-0.32.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl (3.2 MB view details)

Uploaded PyPy manylinux: glibc 2.28+ x86-64

zen_engine-0.32.1-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl (2.9 MB view details)

Uploaded PyPy manylinux: glibc 2.28+ ARM64

zen_engine-0.32.1-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl (3.2 MB view details)

Uploaded PyPy manylinux: glibc 2.28+ x86-64

zen_engine-0.32.1-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl (2.9 MB view details)

Uploaded PyPy manylinux: glibc 2.28+ ARM64

zen_engine-0.32.1-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl (3.2 MB view details)

Uploaded PyPy manylinux: glibc 2.28+ x86-64

zen_engine-0.32.1-pp37-pypy37_pp73-manylinux_2_28_aarch64.whl (3.0 MB view details)

Uploaded PyPy manylinux: glibc 2.28+ ARM64

zen_engine-0.32.1-cp312-none-win_amd64.whl (3.1 MB view details)

Uploaded CPython 3.12 Windows x86-64

zen_engine-0.32.1-cp312-cp312-manylinux_2_28_x86_64.whl (3.2 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.28+ x86-64

zen_engine-0.32.1-cp312-cp312-manylinux_2_28_aarch64.whl (2.9 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.28+ ARM64

zen_engine-0.32.1-cp312-cp312-macosx_11_0_arm64.whl (2.8 MB view details)

Uploaded CPython 3.12 macOS 11.0+ ARM64

zen_engine-0.32.1-cp312-cp312-macosx_10_12_x86_64.whl (3.0 MB view details)

Uploaded CPython 3.12 macOS 10.12+ x86-64

zen_engine-0.32.1-cp311-none-win_amd64.whl (3.2 MB view details)

Uploaded CPython 3.11 Windows x86-64

zen_engine-0.32.1-cp311-cp311-manylinux_2_28_x86_64.whl (3.2 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.28+ x86-64

zen_engine-0.32.1-cp311-cp311-manylinux_2_28_aarch64.whl (2.9 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.28+ ARM64

zen_engine-0.32.1-cp311-cp311-macosx_11_0_arm64.whl (2.8 MB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

zen_engine-0.32.1-cp311-cp311-macosx_10_12_x86_64.whl (3.0 MB view details)

Uploaded CPython 3.11 macOS 10.12+ x86-64

zen_engine-0.32.1-cp310-none-win_amd64.whl (3.2 MB view details)

Uploaded CPython 3.10 Windows x86-64

zen_engine-0.32.1-cp310-cp310-manylinux_2_28_x86_64.whl (3.2 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.28+ x86-64

zen_engine-0.32.1-cp310-cp310-manylinux_2_28_aarch64.whl (2.9 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.28+ ARM64

zen_engine-0.32.1-cp310-cp310-macosx_11_0_arm64.whl (2.8 MB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

zen_engine-0.32.1-cp310-cp310-macosx_10_12_x86_64.whl (3.0 MB view details)

Uploaded CPython 3.10 macOS 10.12+ x86-64

zen_engine-0.32.1-cp39-none-win_amd64.whl (3.2 MB view details)

Uploaded CPython 3.9 Windows x86-64

zen_engine-0.32.1-cp39-cp39-manylinux_2_28_x86_64.whl (3.2 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.28+ x86-64

zen_engine-0.32.1-cp39-cp39-manylinux_2_28_aarch64.whl (2.9 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.28+ ARM64

zen_engine-0.32.1-cp39-cp39-macosx_11_0_arm64.whl (2.8 MB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

zen_engine-0.32.1-cp39-cp39-macosx_10_12_x86_64.whl (3.0 MB view details)

Uploaded CPython 3.9 macOS 10.12+ x86-64

zen_engine-0.32.1-cp38-none-win_amd64.whl (3.2 MB view details)

Uploaded CPython 3.8 Windows x86-64

zen_engine-0.32.1-cp38-cp38-manylinux_2_28_x86_64.whl (3.2 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.28+ x86-64

zen_engine-0.32.1-cp38-cp38-manylinux_2_28_aarch64.whl (2.9 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.28+ ARM64

zen_engine-0.32.1-cp37-none-win_amd64.whl (3.2 MB view details)

Uploaded CPython 3.7 Windows x86-64

zen_engine-0.32.1-cp37-cp37m-manylinux_2_28_x86_64.whl (3.2 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.28+ x86-64

zen_engine-0.32.1-cp37-cp37m-manylinux_2_28_aarch64.whl (2.9 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.28+ ARM64

File details

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

File metadata

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

File hashes

Hashes for zen_engine-0.32.1.tar.gz
Algorithm Hash digest
SHA256 62166280e55a4035ca6ddebaf067955eb79c46a79be738cff076720f7e10555a
MD5 a7499f3d8d809479a4a3b7be3fd1f6f5
BLAKE2b-256 5a2667646b4ecc5d64eaa2144136729557f92fa313956e89048bf4004a3c9dc0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.32.1-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d7eee0c72453a375418da30b8d3c461a361f9a2fc097916c7ecf8fe76727cf5d
MD5 81f6e802d6617f693e596d6ca81ff318
BLAKE2b-256 680e08fbfc62932b0fddae9b0ccc4be2d5454caa17886bf0078169410ab266dc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.32.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1bcb6a8b446bd8d27b98b02f59119e597bb66229c815ae97e9b55235c030e79e
MD5 238a0aa9bd6fceb4f8c3fd34bc5233d7
BLAKE2b-256 6070f1df966e569c73713ad191e0a0ff62cfa46b4054bfedd135cab7f2d41bee

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.32.1-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 915fd7e693e5bbcd9333dc7eabdf5220fa8761659d2909c8ba7e90882a5a6aaf
MD5 5c165a48b3571369bec02619c886bdb1
BLAKE2b-256 83c595f86af2670c53faaa6c18493c3df444d6bc1e0edf5b50a6fe6801d37ebe

See more details on using hashes here.

File details

Details for the file zen_engine-0.32.1-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for zen_engine-0.32.1-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 bf4dd984aa3c4223b82733220bb385162079d0152b47db36fecd782410c18ee3
MD5 34876b5dc2873d8fb7b34ce870caf4fb
BLAKE2b-256 e5f9e09fc86de5eb15ffb2493290f80733fc327e6f81acbade74633bfc6c6707

See more details on using hashes here.

File details

Details for the file zen_engine-0.32.1-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for zen_engine-0.32.1-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 ace1d3e275c8f305dbaa7741b3f08d1f52712ca39ced96815ffb12491b677a86
MD5 ecd821eba4b370285efc4c5d99b101e7
BLAKE2b-256 838c5eb4558616dea8e3c49b154ea3443e081a881fa12cd45ef9037497e2e500

See more details on using hashes here.

File details

Details for the file zen_engine-0.32.1-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for zen_engine-0.32.1-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 888d21c06fe7301834a1f915ab58feb6aa0ca2d6fd8e0247b42f3c211b117363
MD5 07e2984bf6a821e002610be9611758d9
BLAKE2b-256 26ec72dcda993148dff3fdcf9cc4c3be3920b9761f73cdb968397ab840b73589

See more details on using hashes here.

File details

Details for the file zen_engine-0.32.1-pp37-pypy37_pp73-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for zen_engine-0.32.1-pp37-pypy37_pp73-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 c60d9fe00016db7bfd0a9cb082a6441a9c894f2479f5f1a7cb347fd140b5c663
MD5 ac73fd37a3cc2fd43289e90bcb717266
BLAKE2b-256 b7ebdd8e547c0b67ea5800e800db5f90e398a71a471c80de328d3cbd72087b96

See more details on using hashes here.

File details

Details for the file zen_engine-0.32.1-cp312-none-win_amd64.whl.

File metadata

File hashes

Hashes for zen_engine-0.32.1-cp312-none-win_amd64.whl
Algorithm Hash digest
SHA256 046d00ec6870823cb75f0bf9176df7b62d38a7aff07adbc722a4e9c6cac78748
MD5 a110aa487b61d0a4b7fda94568e48d6d
BLAKE2b-256 2f8e376b624373014b6c654a88177aedbeb8bd13c889fe9033e9b6ba9e3fcc3f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.32.1-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ff783d9f331296765165e0be770f46a8e91da054fc7a6d425103b5220ca43db4
MD5 18decacf8f5632371390b4a313d31957
BLAKE2b-256 85b3eaf143b2a73f3b3a6cf5e7449b40af0b31b49283965be9a9d6bcb2b10cf9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.32.1-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 398ff5b5b1360b0d5d473288dee8e86fd3aafff8c1e8aab55a4a32b650a6a850
MD5 f21e426286f3dbff585aa27c87cf0418
BLAKE2b-256 e149144e6d71f3ac64c669d17699774e55d6561d41b3be6d6497d793b28ada44

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.32.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 da6d23efbe5214c6233456b30d6a007fa5c2383f5e149915139703a4c7a494ad
MD5 4ffeb8c8d707cb8da0c1cda5e24204f6
BLAKE2b-256 d6a10b300e713d0a793df20d5fc87b66e8e2580c5aac5f383244f11145844957

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.32.1-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 b1f701c246fd7827c4bee828004724bac26436f5f192057d9a7f0df23ba20618
MD5 36292c3099352421ff06712f295a793c
BLAKE2b-256 898cae4688f27bbc352bb71737e186f9ef2c47626d4fd1dd536d54f4c7a0a6f1

See more details on using hashes here.

File details

Details for the file zen_engine-0.32.1-cp311-none-win_amd64.whl.

File metadata

File hashes

Hashes for zen_engine-0.32.1-cp311-none-win_amd64.whl
Algorithm Hash digest
SHA256 97970fcb5478d1afdffe341f72c814e5ca16a8fcf7d563433614fd802d8cbdf3
MD5 5ccbb665346b6d772fa1f645f3dc6270
BLAKE2b-256 c160fdd7c1b5f445ad6e58ded6fe64dd7c18fda1e6a1f67a80b831fbd478a362

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.32.1-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d289f12792982ad197bea9ab68d02ddd123d1b982bc36893a4a2aaadb2e5c805
MD5 e3b3bbeb9a413b7e9a815802894a2c56
BLAKE2b-256 60b3343066685980833786df54d20611ae157de105917569c64f4be3e743ea5b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.32.1-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 f6986516274009f674b9389f634725506daf72e59884f05a64accaa9755cea6e
MD5 322b6b7699cefe5326460d5e951c0ca5
BLAKE2b-256 8d2c33379998953cc1860b6d3704b267d476a8a54db098c8afd3d618bd95d3c8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.32.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6e4d020446fddead19202fec3f97fc9328f6bd57ef8538a19437425824d424c7
MD5 275b6aec7ecd4403adc909f068ab90bc
BLAKE2b-256 12bdb3942ad32785e50819a429d5f8ecd7fc9d52ef181490cc3e8c9053e99707

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.32.1-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 ce7fb3335960146b53cea19e30ef8bb1e3650838304b9b57fb2e49e878279fc6
MD5 7a90d90b2b6b4d434e7b5969067717ec
BLAKE2b-256 55da7b5513385a2a4ee0e3f179b17eedea2d7fca4eeec2e91d540c938888da31

See more details on using hashes here.

File details

Details for the file zen_engine-0.32.1-cp310-none-win_amd64.whl.

File metadata

File hashes

Hashes for zen_engine-0.32.1-cp310-none-win_amd64.whl
Algorithm Hash digest
SHA256 6e14d9006a93fa0b262bda93ef94a3a3cc18e88e8366a5cd2ccb2b357bc21644
MD5 ac59981a09372aacbefe9468179be809
BLAKE2b-256 a380ed465fc2052b943a21568d338c271c15b8b0aaacfbba61025c22e9f09575

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.32.1-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3f44a53aaa595c3e5f81b8edb1039ca68551d2d1182b111424c0fec6344846dc
MD5 b8c2eedc7f57fe9eecfc525e2f347f3c
BLAKE2b-256 437753fd46da452f622280ff66d477abdbbec6fbd0a3ba31caeb38c0c0fbb304

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.32.1-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 90b0da8436bc22376c3dd91ff7e57d1251fd546684ec663d43b7bde26ca99474
MD5 9dbfa0db0bac73858451ee835f6e6450
BLAKE2b-256 83848f8f9d69ac08578917bf8b1acf6176dd3a2376b9bea3458f742cbe6d0cd0

See more details on using hashes here.

File details

Details for the file zen_engine-0.32.1-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zen_engine-0.32.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 201fc8ec281a19c63f09eb99c0d71145bccdc8d8d88f31e812957d3ba31f72cd
MD5 653f1d97f7ced294809bed45488d727f
BLAKE2b-256 920961746a3dbc244e6450faa05bf64b3dc0ff458205a6f0bec7343d4a37752a

See more details on using hashes here.

File details

Details for the file zen_engine-0.32.1-cp310-cp310-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for zen_engine-0.32.1-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 2226cf18368a4e473a37e2d905ece09ff6deedf4b34da1bd2d01f96d9edff7a8
MD5 28089f9311e190226efa40f05808afa8
BLAKE2b-256 d094282800f2d6fb4c074d063ae8b48d422c8a37466aff50bc626a691f537231

See more details on using hashes here.

File details

Details for the file zen_engine-0.32.1-cp39-none-win_amd64.whl.

File metadata

File hashes

Hashes for zen_engine-0.32.1-cp39-none-win_amd64.whl
Algorithm Hash digest
SHA256 8250373782b874512e665733dd5945fdd157060183edee9dde11e20ce5c36765
MD5 bca629ebb513c8eb207d6e1ab471404d
BLAKE2b-256 5d11fb6c71fcdb17714451ba40141ba6dc2832551fc7bbd6f468c5a8c8d88d7a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.32.1-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f673a8a6aae69896f9008ca966a0e509f20e73107dadab5d9e26f12311b56dfc
MD5 ee56b1399da1d0e9f2053f1be83f7881
BLAKE2b-256 6a2d0d94814011fd9ee8c7bf5022d01b4ce06eba876c40f11d550d3c580f29b8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.32.1-cp39-cp39-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 cebf2f014856f18ef2af301ba405fbe7a965fefa7144921af0933678e9ade51d
MD5 81d80d265f892c4f4ac1f616f422d73f
BLAKE2b-256 85b7e1b8b9bc07b114137c4f5419f28d3e984ca1dd899b0b7ab23baa52f4c304

See more details on using hashes here.

File details

Details for the file zen_engine-0.32.1-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zen_engine-0.32.1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0b27acc80c25c4047e1d71a237b6a9bccfa77e8fc161c5299ebbce2619b56d0e
MD5 095d61206812fc3ac4550f127c919c94
BLAKE2b-256 604045a77cb624e9fd2e31ddaf1a2e9f6eaefbff0970e1f5e3eb8983100a07eb

See more details on using hashes here.

File details

Details for the file zen_engine-0.32.1-cp39-cp39-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for zen_engine-0.32.1-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 45f143607afd20b5c567d074184187a277c89f58656beeb55a783cb06f9daac1
MD5 97b16bfe9d79f70b5f17d6c86be415e5
BLAKE2b-256 da2fd1217422de3e0cd60991ef42b5f72431a4c64e683e6e0ca3c8df1560b402

See more details on using hashes here.

File details

Details for the file zen_engine-0.32.1-cp38-none-win_amd64.whl.

File metadata

File hashes

Hashes for zen_engine-0.32.1-cp38-none-win_amd64.whl
Algorithm Hash digest
SHA256 fa8b48cf8a702cda1875b37b544d0a15672dae10d70cafd4e06a1c1e54268fb6
MD5 5ad89c247ddbac2a642172df6ed8a72e
BLAKE2b-256 1c1acea20e9a2ebd4ec69b6c34ec434af2d55c0d18281ffbd9d33d7e05e3aef0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.32.1-cp38-cp38-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 840ba739606c54ef2473ad0deb2961ece24efdc0054f209ee1dfc323cc0c1903
MD5 01ecaa72df31e03a2d767a0a951abd92
BLAKE2b-256 e3f0c23ed63aec1d28018ff983903a00d2c5b182afcd1234e01b09312573fa83

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.32.1-cp38-cp38-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 18bcc29e920d614d0a75e56cb505e0df7668cd7357061018abb7b435dca786b0
MD5 7c210385a39fcdbf9076e53214453e1f
BLAKE2b-256 5c1c83530e642956a8e129c82d32df71a9d77db22fa7339a50a389eca4437b03

See more details on using hashes here.

File details

Details for the file zen_engine-0.32.1-cp37-none-win_amd64.whl.

File metadata

File hashes

Hashes for zen_engine-0.32.1-cp37-none-win_amd64.whl
Algorithm Hash digest
SHA256 cc8483919232b9988411b749bf4b0e218f7576294cea70771423f0d04eb3025b
MD5 3bc40b51676c487092297cccf28f34ec
BLAKE2b-256 f7a300f62cc9ddbf5bfb1b89f78925b3a49c4882b009fa7b8fe4cefffaffb022

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.32.1-cp37-cp37m-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 eba08124df250231239eed6fa3a1a20e86a9d00629504a672d654f7599c7ceeb
MD5 9430da22387edea70a1e5a165fac13f8
BLAKE2b-256 19af010f0c5cb9549cf32fa9a9d60b23a1c478ba746e72d31f9375900e67e780

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.32.1-cp37-cp37m-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 2fc2da40081953e77ed616d240101d3409eacc19112d2297a2d35cdbd47bdd7e
MD5 8c543bbef7942ab6df733424322378ed
BLAKE2b-256 2df145ef44a7d9866b7e31ce24ac7bc297662744c7c7bfa587c13ca0cfe45147

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page