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.51.0.tar.gz (293.8 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.51.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl (5.1 MB view details)

Uploaded PyPymanylinux: glibc 2.28+ ARM64

zen_engine-0.51.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.51.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl (5.1 MB view details)

Uploaded PyPymanylinux: glibc 2.28+ ARM64

zen_engine-0.51.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.51.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl (5.1 MB view details)

Uploaded PyPymanylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.14tmanylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.14Windows x86-64

zen_engine-0.51.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.51.0-cp314-cp314-manylinux_2_28_aarch64.whl (5.1 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ ARM64

zen_engine-0.51.0-cp314-cp314-macosx_11_0_arm64.whl (4.8 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

zen_engine-0.51.0-cp314-cp314-macosx_10_12_x86_64.whl (5.1 MB view details)

Uploaded CPython 3.14macOS 10.12+ x86-64

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

Uploaded CPython 3.13tmanylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.13Windows x86-64

zen_engine-0.51.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.51.0-cp313-cp313-manylinux_2_28_aarch64.whl (5.1 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

zen_engine-0.51.0-cp313-cp313-macosx_11_0_arm64.whl (4.8 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

zen_engine-0.51.0-cp313-cp313-macosx_10_12_x86_64.whl (5.1 MB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

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

Uploaded CPython 3.12Windows x86-64

zen_engine-0.51.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.51.0-cp312-cp312-manylinux_2_28_aarch64.whl (5.1 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ ARM64

zen_engine-0.51.0-cp312-cp312-macosx_11_0_arm64.whl (4.8 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

zen_engine-0.51.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.51.0-cp311-cp311-win_amd64.whl (5.5 MB view details)

Uploaded CPython 3.11Windows x86-64

zen_engine-0.51.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.51.0-cp311-cp311-manylinux_2_28_aarch64.whl (5.1 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ ARM64

zen_engine-0.51.0-cp311-cp311-macosx_11_0_arm64.whl (4.8 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

zen_engine-0.51.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.51.0-cp310-cp310-win_amd64.whl (5.5 MB view details)

Uploaded CPython 3.10Windows x86-64

zen_engine-0.51.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.51.0-cp310-cp310-manylinux_2_28_aarch64.whl (5.1 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ ARM64

zen_engine-0.51.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.51.0-cp39-cp39-manylinux_2_28_aarch64.whl (5.1 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.28+ ARM64

zen_engine-0.51.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.51.0-cp38-cp38-manylinux_2_28_aarch64.whl (5.1 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.28+ ARM64

zen_engine-0.51.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.51.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.51.0.tar.gz.

File metadata

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

File hashes

Hashes for zen_engine-0.51.0.tar.gz
Algorithm Hash digest
SHA256 f593fd151ce953ebff414e13df6a57de53e5edd1f344dfa1b62af05b02512a9d
MD5 9cbd0eb664eb6f09b4637c52d98c499b
BLAKE2b-256 174a73e388bb369c3e4df02b354272a0e8f28ee3ce1683720e54e20192b22b9d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.51.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 577dc8608985d34a2097dfd2f95b16133a090e3ee81bc7a25ac8ea01430e33ad
MD5 8c6af98f44a60aaabf964ebec87b7ae5
BLAKE2b-256 437224daad572de14e0b85bae16b6bac0ea36577a6d963439445dd0a21d90adf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.51.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 33305b4b7d821b7be713520f4ac68b5a30292be0f8ab053512cc4f3e308bab4f
MD5 2fbfea38c5d33718f91359b8a37f0153
BLAKE2b-256 9947b73995bc947ef3ac2c040015e7411a87b6295d7f3af295e649944bc9d803

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.51.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 43f6bcdc9d99488da1b696ca3f9787a5f0d2f979ee13400152dac743770463f5
MD5 23beb266141dea65079293687afe6240
BLAKE2b-256 4c4235b1a94ab5f3092c06f039e697e0cf82dd9fc4bd8e9e8d9ea018d10fca8d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.51.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1da990494a03d2f5c232954fd6be716af9ce0e67827b441ac0e22737989d141a
MD5 e354d3ce43d68c34ea26194811eb63d6
BLAKE2b-256 0a934e6a1c66d8458ca62f51029f8ce7c526050afc72f2c7cdda4aa0c08ad61c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.51.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7ac954d4ff93d3fd89951208707df87c9323542f930625a29772d1633a9b26cc
MD5 c7d191febe6bbf699a735dbd1f6b3ff3
BLAKE2b-256 024b7d39c59571d576ee4d1af844e1c35104ea117b31cfa99f27f4794459905a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.51.0-cp314-cp314t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 749ba79ba43976260b3af7d62f27495f0b1e905bd25fac1405790fa2c55fffa2
MD5 47c443403a5a3e98d51c77d1fdda7ab9
BLAKE2b-256 bf8433a4bd91bec8dcd793bb1cafb01292ede924768d11de55b782498e09a54d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.51.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 4b8dcf61deb7d09a2f05bd433a7de57e546093413520b0763d07098616ab09d0
MD5 5dd4545f4aa18177243718f86587f338
BLAKE2b-256 cdafd9e80ee7fc72450e27d1d4cd24cfa99d11c855f5547a0bf462b245ee5f55

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.51.0-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 25c7ccf4ee2a915e1e9d153f88468ef5ebb94afb72ef9d7efdd9ce4cbaee1c7e
MD5 41311035e23438baa858dca0c8fee2a8
BLAKE2b-256 00732d33dc19de89981e78d2da990cdf8d1c4d4e76d2849e0c071c2f7066fb8c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.51.0-cp314-cp314-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 6ed3cff766114791f4d81866d63997d027eb97ca356efd3fffaa0b61ba65100d
MD5 c1ae82ad0ccd463bc8dcfbd66c116ebc
BLAKE2b-256 699ec799c7fa154655c51dd5812c364aeb8605957e1ab6745b172c2ec072d4a1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.51.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1d2a775f1a45acd50e5948c45f026350b3f4ac1d05e80b9eafc9ed4217d6e073
MD5 aacad2dc3be9c97bce08f22bbd55d0be
BLAKE2b-256 3e66cff595503210dd391a998c571724c3e61604f04bbd9183238b6f0f14752e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.51.0-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 39f47b99754f9f9375de4f48f39efc2fe5e58979e6b62c571f55d818095ebe0f
MD5 1d1c11af678e3a6c03aceba7ea4d4f3f
BLAKE2b-256 048f0314cfd4074e1d76772597de087ccc1ae12117e8541394ae88f8e93e4286

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.51.0-cp313-cp313t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 2189f58298b0fe332c6f0adfce428c610eeee8bb667361678940db87c0d81cc4
MD5 5896d66b9b0524ac0f6174ad8de7ac2c
BLAKE2b-256 d69c8d4c36201241081a848ff25363348bb51971a98bbf60e82bfcd336c55a67

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.51.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 fdf830b7f43250875402012c5ab434a71d5fd7de66958b1ae70c932e704fb7cc
MD5 6edeaea0a0ee4bf825e6816531c3e3b6
BLAKE2b-256 f7812ebe705156dad019451ac4f827b174f6ee4c2b44d72409855d1ca3b19c54

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.51.0-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b5ba944668878d8a414014a910d61c9e5ac87fab88acc996e2bdaa8924a8429c
MD5 8291310598c2876b4906acf0ac085289
BLAKE2b-256 ef06d809bc098e172b666dfb186a4b8dd2136a9b70737e4aea31bff3a3a3977d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.51.0-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 332542cf0045b6e1ee43e216547178de721a48139dfa88585f464ac47ae1fed4
MD5 52f008918cab09fe329738237fc0dca7
BLAKE2b-256 177d346a43e2687dd62e2724af20b908202dbb931a2bce90b2b1a35c45a0ea10

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.51.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 75498e8ab327ca1a9dde24504527f66f3f82dbbcbcaf9e99031af5296ec6d1e9
MD5 09a8ed4a48b275e5987907caad0cb99a
BLAKE2b-256 91dfab96a6da48b447747a5848727ad24f88720f394c2910ed793b326d97e832

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.51.0-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 58341eeaa00c667d53fa4c39eecdf6450af50ab02ff2eaf9aca58fa01c89c9eb
MD5 d75acd35e60de1b689b31097f68f42b0
BLAKE2b-256 98eea958b623a2060d0276b3c36d55d6e0bb0e95ea3c1e8f3c9c501d92092950

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.51.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 3f34cb33eb1cfd70b35b5f0951dd6d27f7a4c5b2ed1e8b018ac87477782f49be
MD5 332c2af82d97b8f5c45b32b83cf9f7bc
BLAKE2b-256 72af9eb110732da77560301590f687b00d6b8c97e2c39073963e003de2ed2366

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.51.0-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8fb3cb27050f28c0900d5fddff47aa93a4000e8f5e41247ec4272b3b3660f12e
MD5 7a3d371837cedcad6f1f37e14c15a02a
BLAKE2b-256 426721e07a4c6e264e47eb48d8ebac95aac5046dff5c408e252f6a5be276ea34

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.51.0-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d21a89ff3c756847b2c0f9b7208a2853b53fb98b1e656e052a2f4979b7220ac3
MD5 59c192244ccafc190f602568e0a10764
BLAKE2b-256 5a1062cada13bdaf08615c07c6d2fccc36dc48457288c360b1f145987b9d60c4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.51.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8a2af99b28e3311274370d4648625fef2f997438c6429d422168fba74050e5ec
MD5 4e1e537e1e7b0103a57ae1453c7dab5b
BLAKE2b-256 d097ce01a73fbdbead61635cf1151eba0ef10c7d72435be8a0a243627eccaef9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.51.0-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 08d7004bb4e0bbaefdd8707a73079ab549604f3dd5eafc99e67718f8768879e4
MD5 b40d8974a051febb564e3d6568906b78
BLAKE2b-256 dd643391e6d0a4a01243d4377065a77f1cbfd6a01ae2a693e494458dac63c08e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.51.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 eb5e41601e2d412ae689a3fd9ca26947a081bcab4b9f4505483c1d54090367c8
MD5 cac32e8b5f7647fe7252bb3e7c3b6ac3
BLAKE2b-256 8ed791313f3313b3fa7b8d377099e7d64faf43b54a128613417f578b26e1cdc1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.51.0-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 683ad827032cf3257013158fef1cff60dbba4568583c440f3d35ad8738e78eda
MD5 0551aa137b07d5c50e25a21048b3bb2f
BLAKE2b-256 5168ec3e2821d4e89cf21cac648340063e99af63067ed5009952ef9ffd9ba90b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.51.0-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b719bb36b1f34637485d3475499527cc6331536a4a15bf62e238301677722551
MD5 fb3bf040e5627c9c881a5751e19ad6e8
BLAKE2b-256 15494292f1b1191b38203aa079359ae2d8a828eeaba567940e24b3f217ee4743

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.51.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e776ed53e4711bf044b01c43983a5d74c2418af521adef0ebbec609e96a82f8e
MD5 c902f28a4be66fc7322288be07540b2d
BLAKE2b-256 2dcb8ce130115e79b4af2f6272407dbbbc0c1c8eee31ad07153ddb9a91edd048

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.51.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 fb2cdb667a41c98262f2d725f7fe7721832d00ce0f38a69714fa8ac42dc6bbb0
MD5 d726483cbd7bc6e24fac734348ab80e5
BLAKE2b-256 8c443978f3323f3a5f55132250c2739f88f1d8dfa0bd62911c844e8cfe7473e8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.51.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 5eb8b2a48562fc72b50fb9a85b8a7c98ea266ef652101e34261e553192a375c0
MD5 102e745d1656ce3b4c605ab5cc123307
BLAKE2b-256 4bc72d0a22e5070fc2c17a2d164b0996c4690a9d4aaa0edbe53ce3b102ebeae3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.51.0-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ba16fe33ace6542590da4d7cfcf22f1b472b5568558089586727bea7608fad92
MD5 005e584635ae5174d135c2e59c8c4d5b
BLAKE2b-256 7abd97cb1f84b52a1e69c34433cfe698dabf7b14fb3d6386038e17cd3c0c2798

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.51.0-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 9a12ef0dbbe51a06a2246653ed848eac296232fbf56017dd911adbfab7311c99
MD5 4e46157265cd3cbccf82429aae38277f
BLAKE2b-256 2fa9f5c67ffb21f78133e6f6d8fd1423073272c0a9ad86b59242812c0f440000

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.51.0-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b78e02427484dd2cbc4c07f48c3823d156ac9cefff3260cbef1cd82aa8142569
MD5 f0867116680edacc197fc88f65a3b1a3
BLAKE2b-256 510f2923e3e2916bc1139115a1ffb051997d8ecfcfca91178fe22a0f78a11387

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.51.0-cp39-cp39-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b8b3abec614c44179040f28166b15ae48c0a81201a072b659136d6c0ec5dc5a7
MD5 9b8feede99abf115c9fd94348c6e6e7d
BLAKE2b-256 30844ca1dbacc6286f12cbc24ab245f0dee843a408c35b892f6c1c46f687f950

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.51.0-cp38-cp38-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ea5560593c690e58153495103246e1725a348b566f1d8ed2e0bd230340450057
MD5 eb608c91835a3963876c362cd82f6346
BLAKE2b-256 2ff1ad444c895f6b4a1fa258437d647b20282195ef007bd03f01c95034dc1db8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.51.0-cp38-cp38-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 4a6f04c47c6e1555c236b7cce4fa3eb1ef30095daaa239cf89ff1572123b497c
MD5 aad52500c1ac8d69c182504aa14dd3e5
BLAKE2b-256 a649e9bbd66cf338e95baa96449df5e2c525ec2fa672b11a3a206022b5dae8ef

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.51.0-cp37-cp37m-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9f511b3c10cea1c64528708c9308dffdeda8ed398ccfec7ccb6d005f3c5671c1
MD5 4b49650bda3b1edefae7cd64f294f7b3
BLAKE2b-256 d4627f765e2ecd335884470d36c0ad415d121d395c020c8a205f97dc5b06a0ef

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zen_engine-0.51.0-cp37-cp37m-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 a4662995c556912bda3dd665ce798496061c8f77d327a7b1911436831a5476b3
MD5 4a9add5dbf85efa3c93f88dd721c7933
BLAKE2b-256 882b0063590078575d30c1fcc21f0b78017eee902e9a99d58b859a86b7cc7a65

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