Skip to main content

dagex - Python Edition

A pure Rust DAG executor with Python bindings for building and executing complex computational workflows.

🚀 Quick Start

pip install dagex

📖 Overview

dagex provides a powerful yet simple API for building directed acyclic graphs (DAGs) of computational tasks. Key features:

  • Automatic dependency resolution based on data flow
  • Parallel execution of independent nodes
  • Branching for creating independent subgraphs
  • Variants for parameter sweeps and A/B testing
  • Mermaid diagrams for visualizing your pipeline

Python Parallel Execution & the GIL

Python's Global Interpreter Lock (GIL) means that pure Python computations cannot achieve true parallelism. However, dagex enables true parallel execution when your node functions perform operations that release the GIL, such as:

  • I/O operations: File reads/writes, network calls, database queries
  • NumPy/SciPy operations: Most numerical computations in these libraries release the GIL
  • C extensions: Custom C/Rust extensions that release the GIL
  • Sleep/wait operations: Simulating blocking operations

The examples in this package use time.sleep() to demonstrate parallelization benefits, as sleep operations release the GIL and allow other threads to run concurrently.

🎯 Basic Example

import dagex

def generate(_inputs):
    return {"n": 7}

def double(inputs):
    v = inputs.get("x", 0)
    return {"y": v * 2}

# Build graph
g = dagex.Graph()
g.add(generate, label="Source", inputs=None, outputs=[("n", "x")])
g.add(double, label="Double", inputs=[("x", "x")], outputs=[("y", "out")])

# Execute
dag = g.build()
print(dag.to_mermaid())  # Visualize
context = dag.execute(parallel=False)
print('Result:', context.get('out'))  # Result: 14

📚 Examples

All examples can be run directly:

python3 examples/py/01_minimal_pipeline.py
python3 examples/py/02_parallel_vs_sequential.py
python3 examples/py/03_branch_and_merge.py
python3 examples/py/04_variants_sweep.py
python3 examples/py/05_output_access.py
python3 examples/py/06_graphdata_large_payload_arc_or_shared_data.py

Example 01: Minimal Pipeline

The simplest possible DAG: generator → transformer → aggregator.

Description: Shows a basic 3-node pipeline where each node depends on the previous one. Demonstrates the fundamental dataflow concept.

Syntax:

import dagex

graph = dagex.Graph()

# Add nodes to the pipeline
graph.add(
    generate,                    # Python callable
    label="Generator",
    inputs=None,                 # No inputs (source node)
    outputs=[("number", "x")]    # Output mapping: impl → broadcast
)

graph.add(
    double,
    label="Doubler",
    inputs=[("x", "x")],         # Input mapping: broadcast → impl
    outputs=[("result", "y")]
)

# Build and execute
dag = graph.build()
context = dag.execute(parallel=False)  # Sequential
context = dag.execute(parallel=True)   # Parallel

Mermaid Diagram:

graph TD
0["Generator"]
1["Doubler"]
2["AddFive"]
0 -->|x → x| 1
1 -->|y → y| 2

Performance (Sequential):

⏱️  Runtime: 302.202ms
💾 Memory: Current: 0.05 KB, Peak: 0.05 KB

Performance (Parallel):

⏱️  Runtime: 304.032ms
💾 Memory: Current: 0.07 KB, Peak: 0.07 KB

Output:

Sequential execution:
Final output: 25
Time: 302.202ms
Parallel execution:
Final output: 25
Time: 304.032ms
✅ Pipeline completed successfully!
(Started with 10, doubled to 20, added 5 = 25)

Example 02: Parallel vs Sequential Execution

Demonstrates the power of parallel execution for independent tasks.

Description: Shows three independent tasks (A, B, C) that each simulate I/O-bound work. When executed sequentially, tasks run one after another. When executed in parallel, independent tasks run simultaneously, demonstrating significant speedup.

Syntax:

import dagex

# Add independent tasks
graph.add(task_a, label="TaskA", inputs=[("input", "input")], outputs=[("result_a", "a")])
graph.add(task_b, label="TaskB", inputs=[("input", "input")], outputs=[("result_b", "b")])
graph.add(task_c, label="TaskC", inputs=[("input", "input")], outputs=[("result_c", "c")])

# Build and execute
dag = graph.build()

# Sequential vs parallel
context_seq = dag.execute(parallel=False)
context_par = dag.execute(parallel=True, max_threads=4)

Mermaid Diagram:

graph TD
0["Source"]
1["TaskA"]
2["TaskB"]
3["TaskC"]
0 -->|input → input| 1
0 -->|input → input| 2
0 -->|input → input| 3

Performance (Sequential):

⏱️  Runtime: 453.869ms
💾 Memory: Current: 0.04 KB, Peak: 0.04 KB

Performance (Parallel):

⏱️  Runtime: 150.673ms
💾 Memory: Current: 0.25 KB, Peak: 1.16 KB

Output:

Sequential results:
TaskA: 110
TaskB: 120
TaskC: 130
Time: 453.869ms
Parallel results:
TaskA: 110
TaskB: 120
TaskC: 130
Time: 150.673ms
⚡ Speedup: 3.01x faster with parallel execution!

Example 03: Branch and Merge

Fan-out (branching) and fan-in (merging) patterns for complex workflows.

Description: Demonstrates creating independent branches that process data in parallel, then merging their outputs. Each branch contains its own subgraph that can have multiple nodes.

Syntax:

import dagex

# Create branches
branch_a = dagex.Graph()
branch_a.add(path_a_func, label="PathA (+10)", ...)
branch_a_id = graph.branch(branch_a)

branch_b = dagex.Graph()
branch_b.add(path_b_func, label="PathB (+20)", ...)
branch_b_id = graph.branch(branch_b)

# Merge branches
graph.merge(
    merge_func,
    label="Merge",
    branch_inputs=[
        (branch_a_id, "result", "from_a"),
        (branch_b_id, "result", "from_b"),
    ],
    outputs=[("combined", "final")]
)

Mermaid Diagram:

graph TD
0["Source"]
1["PathA (+10)"]
2["PathB (+20)"]
3["Combine"]
4["PathA (+10)"]
5["PathB (+20)"]
0 -->|x → x| 1
0 -->|x → x| 2
4 -->|a → a| 3
2 -->|b → b| 3
5 -->|b → b| 3
1 -->|a → a| 3
0 -->|x → x| 4
0 -->|x → x| 5
style 1 fill:#e1f5ff
style 2 fill:#e1f5ff

Performance (Sequential):

⏱️  Runtime: 602.807ms
💾 Memory: Current: 0.35 KB, Peak: 0.35 KB

Performance (Parallel):

⏱️  Runtime: 152.378ms
💾 Memory: Current: 0.62 KB, Peak: 1.37 KB

Output:

📊 Execution flow:
Source: 50
PathA: 50 + 10 = 60
PathB: 50 + 20 = 70
Combine: 60 + 70 = 130
Sequential execution:
Final output: 130
Time: 602.807ms
Parallel execution:
Final output: 130
Time: 152.378ms
✅ Branch and merge completed successfully!

Example 04: Variants (Parameter Sweep)

Run multiple variants in parallel—perfect for hyperparameter tuning or A/B testing.

Description: Demonstrates running multiple nodes with the same structure but different parameters. All variants execute at the same level in the DAG, enabling efficient parallel exploration of parameter spaces.

Syntax:

import dagex

# Create variant functions with different parameters
def make_multiplier(factor):
    def multiplier(inputs):
        value = inputs.get("x", 0)
        return {"result": value * factor}
    return multiplier

# Create multiple variants
factors = [2, 3, 5, 7]
variant_funcs = [make_multiplier(f) for f in factors]

# Add all variants at once
graph.variants(
    variant_funcs,
    label="Multiplier",
    inputs=[("x", "x")],
    outputs=[("result", "results")]
)

Mermaid Diagram:

graph TD
0["DataSource"]
1["Multiplier (v0)"]
2["Multiplier (v1)"]
3["Multiplier (v2)"]
4["Multiplier (v3)"]
0 -->|x → x| 1
0 -->|x → x| 2
0 -->|x → x| 3
0 -->|x → x| 4
style 1 fill:#e1f5ff
style 2 fill:#e1f5ff
style 3 fill:#e1f5ff
style 4 fill:#e1f5ff
style 1 fill:#ffe1e1
style 2 fill:#e1ffe1
style 3 fill:#ffe1ff
style 4 fill:#ffffe1

Performance (Sequential):

⏱️  Runtime: 605.985ms
💾 Memory: Current: 0.05 KB, Peak: 0.05 KB

Performance (Parallel):

⏱️  Runtime: 153.865ms
💾 Memory: Current: 0.48 KB, Peak: 1.53 KB

Output:

📊 Base value: 10
Sequential execution:
Time: 605.985ms
Parallel execution:
Time: 153.865ms
Detailed variant outputs:
Variant 0 (×2): 20
Variant 1 (×3): 30
Variant 2 (×5): 50
Variant 3 (×7): 70
✅ All 4 variants executed successfully!

Example 05: Output Access

Access intermediate results and branch outputs, not just final values.

Description: Demonstrates how to access different levels of output: final context outputs, individual node outputs, and branch-specific outputs. Uses execute_detailed() instead of execute() to get comprehensive execution information.

Syntax:

import dagex

# Execute with detailed output
result = dag.execute_detailed(parallel=True, max_threads=4)

# Access different output levels:
# 1. Final context outputs
final_output = result.context.get("output")

# 2. Per-node outputs
for node_id, outputs in result.node_outputs.items():
    print(f"Node {node_id}: {len(outputs)} outputs")

# 3. Branch-specific outputs
for branch_id, outputs in result.branch_outputs.items():
    print(f"Branch {branch_id}: {outputs}")

Mermaid Diagram:

graph TD
0["Source"]
1["ProcessorA"]
2["ProcessorB"]
3["Combine"]
4["ProcessorA"]
5["ProcessorB"]
0 -->|input → input| 1
0 -->|input → input| 2
4 -->|a → a| 3
5 -->|b → b| 3
1 -->|a → a| 3
2 -->|b → b| 3
0 -->|input → input| 4
0 -->|input → input| 5
style 1 fill:#e1f5ff
style 2 fill:#e1f5ff

Performance (Sequential):

⏱️  Runtime: 603.634ms
💾 Memory: Current: 0.43 KB, Peak: 0.43 KB

Performance (Parallel):

⏱️  Runtime: 150.890ms
💾 Memory: Current: 0.70 KB, Peak: 1.55 KB

Output:

📊 Accessing outputs:
Sequential execution:
Time: 603.634ms
Parallel execution:
Time: 150.890ms
Final context outputs:
output: 351
Execution flow:
Source: 100
ProcessorA (branch A): 100 × 2 = 200
ProcessorB (branch B): 100 + 50 = 150
Combine: 200 + 150 + 1 = 351
✅ Successfully accessed outputs!

Example 06: Zero-Copy Data Sharing

Large data is automatically wrapped in Arc for efficient sharing without copying.

Description: Demonstrates efficient memory handling for large datasets. GraphData automatically wraps large vectors (int_vec, float_vec) in Arc, enabling multiple nodes to read the same data without duplication.

Syntax:

import dagex
import numpy as np

# Create large data
def create_large_data(_inputs):
    # Large numpy array - efficiently shared
    large_array = list(range(1_000_000))
    return {"large_data": large_array}

graph.add(create_large_data, label="CreateLargeData", ...)

# Multiple consumers access the same data - minimal copying
graph.add(consumer_a, label="ConsumerA", ...)
graph.add(consumer_b, label="ConsumerB", ...)
graph.add(consumer_c, label="ConsumerC", ...)

Mermaid Diagram:

graph TD
0["CreateLargeData"]
1["ConsumerA"]
2["ConsumerB"]
3["ConsumerC"]
0 -->|data → data| 1
0 -->|data → data| 2
0 -->|data → data| 3

Performance (Sequential):

⏱️  Runtime: 597.179ms
💾 Memory: Current: 39054.78 KB, Peak: 39062.48 KB

Performance (Parallel):

⏱️  Runtime: 542.189ms
💾 Memory: Current: 39054.81 KB, Peak: 39062.76 KB

Output:

📊 Consumer outputs (each processes different segments):
ConsumerA (first 1000):  sum = 499500
ConsumerB (next 1000):   sum = 1499500
ConsumerC (next 1000):   sum = 2499500
Sequential execution:
Time: 597.179ms
Parallel execution:
Time: 542.189ms
✅ Reference-based data sharing successful!
Memory benefit: Data shared by reference, not copied

🔧 Python API

Building a Graph

import dagex

# Create graph
graph = dagex.Graph()

# Add a node
graph.add(
    function,                       # Python callable
    label="NodeLabel",              # Optional label
    inputs=[("broadcast", "impl")], # Input mapping
    outputs=[("impl", "broadcast")] # Output mapping
)

# Create branches
branch_graph = dagex.Graph()
# ... add nodes to branch_graph ...
branch_id = graph.branch(branch_graph)

# Merge branches
graph.merge(
    merge_function,
    label="Merge",
    branch_inputs=[
        (branch_id_a, "out_a", "in_a"),
        (branch_id_b, "out_b", "in_b")
    ],
    outputs=[("result", "final")]
)

# Add variants
graph.variants(
    [func1, func2, func3],
    label="Variants",
    inputs=[("input", "x")],
    outputs=[("output", "results")]
)

# Build and execute
dag = graph.build()
context = dag.execute(parallel=False)
context = dag.execute(parallel=True, max_threads=4)

Data Types

Python values are automatically converted to GraphData:

# Return Python dictionaries from node functions
def my_node(inputs):
    value = inputs.get("x", 0)  # Access inputs
    return {
        "int_val": 42,
        "float_val": 3.14,
        "str_val": "hello",
        "list_val": [1, 2, 3],
        "nested": {"a": 1, "b": 2}
    }

Execution

# Simple execution
context = dag.execute(parallel=False)  # Sequential
context = dag.execute(parallel=True, max_threads=4)  # Parallel

# Access results
result = context.get("output_name")

# Detailed execution
result = dag.execute_detailed(parallel=True, max_threads=4)
final_context = result.context
node_outputs = result.node_outputs
branch_outputs = result.branch_outputs

📄 License

MIT License

🔗 Links

Download files

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

Source Distribution

dagex-2026.22.tar.gz (104.8 kB view details)

Uploaded Source

Built Distributions

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

dagex-2026.22-cp312-none-win_amd64.whl (373.6 kB view details)

Uploaded CPython 3.12Windows x86-64

dagex-2026.22-cp312-cp312-manylinux_2_34_x86_64.whl (537.5 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ x86-64

dagex-2026.22-cp312-cp312-macosx_11_0_arm64.whl (410.9 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

dagex-2026.22-cp311-none-win_amd64.whl (373.1 kB view details)

Uploaded CPython 3.11Windows x86-64

dagex-2026.22-cp311-cp311-manylinux_2_34_x86_64.whl (537.8 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.34+ x86-64

dagex-2026.22-cp311-cp311-macosx_11_0_arm64.whl (411.0 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

dagex-2026.22-cp310-none-win_amd64.whl (373.1 kB view details)

Uploaded CPython 3.10Windows x86-64

dagex-2026.22-cp310-cp310-manylinux_2_34_x86_64.whl (537.8 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.34+ x86-64

dagex-2026.22-cp310-cp310-macosx_11_0_arm64.whl (411.0 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

dagex-2026.22-cp39-none-win_amd64.whl (373.4 kB view details)

Uploaded CPython 3.9Windows x86-64

dagex-2026.22-cp39-cp39-manylinux_2_34_x86_64.whl (538.2 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.34+ x86-64

dagex-2026.22-cp39-cp39-macosx_11_0_arm64.whl (411.1 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

dagex-2026.22-cp38-none-win_amd64.whl (373.0 kB view details)

Uploaded CPython 3.8Windows x86-64

dagex-2026.22-cp38-cp38-manylinux_2_34_x86_64.whl (537.5 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.34+ x86-64

dagex-2026.22-cp38-cp38-macosx_11_0_arm64.whl (411.3 kB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

File details

Details for the file dagex-2026.22.tar.gz.

File metadata

  • Download URL: dagex-2026.22.tar.gz
  • Upload date:
  • Size: 104.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.10.20

File hashes

Hashes for dagex-2026.22.tar.gz
Algorithm Hash digest
SHA256 95fb9b6831408186656baea8a12709318b58fdca4f0dd461a9e1ae836bc901ae
MD5 6ae480809996bb8e72e0ead47bb80356
BLAKE2b-256 dbdd37b6c78e7c68fd97880dc5a1e8b21f286e19ca5aa00be6f5b9515ebf529f

See more details on using hashes here.

File details

Details for the file dagex-2026.22-cp312-none-win_amd64.whl.

File metadata

  • Download URL: dagex-2026.22-cp312-none-win_amd64.whl
  • Upload date:
  • Size: 373.6 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.10.20

File hashes

Hashes for dagex-2026.22-cp312-none-win_amd64.whl
Algorithm Hash digest
SHA256 8e05812f76ed0b5e8df64715d1eb2eec8decf573143bf8cd954f18f321122478
MD5 031affda42d56f37e9c06704baa46794
BLAKE2b-256 711d733c608362885f3e552672db37b902445c20a08469a293f29ced6fe4d57d

See more details on using hashes here.

File details

Details for the file dagex-2026.22-cp312-cp312-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for dagex-2026.22-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 c1cce94c8fc81035bee0412b20783c2054f0e0cd897fa517e24b57f25038e509
MD5 921d2c82815b58aee0eab53f7920d8c5
BLAKE2b-256 0f954da1c86a9ff83aab1997a648e8d6c2b08855954c07df440b93fbe3ab93ee

See more details on using hashes here.

File details

Details for the file dagex-2026.22-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for dagex-2026.22-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b8cb6ab5c6200c2f3ffe25e8f1a6d346561068fa03c6fb8b00cd0e6f9ffb6d12
MD5 89939df96b814a4763be246c9e30ed46
BLAKE2b-256 5706932aa7d5d4663d536888a4402cd6e82aef4533e5d6456870c79dfd3f48f7

See more details on using hashes here.

File details

Details for the file dagex-2026.22-cp311-none-win_amd64.whl.

File metadata

  • Download URL: dagex-2026.22-cp311-none-win_amd64.whl
  • Upload date:
  • Size: 373.1 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.10.20

File hashes

Hashes for dagex-2026.22-cp311-none-win_amd64.whl
Algorithm Hash digest
SHA256 81db1ec0716116f3efed3ccd8dfef4825be0c4cb4593d6408b53084356785b5b
MD5 45c012657f708bb7fbd7e8e961d372a7
BLAKE2b-256 f3747a2a8eb01598c60e917b92450f9348c874fb8aa13333ca20b811539bbf43

See more details on using hashes here.

File details

Details for the file dagex-2026.22-cp311-cp311-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for dagex-2026.22-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 3de6a1deafaea0dd7c5291a1c876dac3092d8a02eb57a0c34f72c601aec7269a
MD5 02fbd445374f21386e415f003513c551
BLAKE2b-256 7b7481ec9ebf38e739c41545427839dc2922a4a52cc9313eda862f7296fcc80f

See more details on using hashes here.

File details

Details for the file dagex-2026.22-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for dagex-2026.22-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 38094fc342eb9bba5695d69b01b8d4c204a10c0ded3b2e6134b9a9b80a3721d1
MD5 f6108995567c0987b63d537c19e6efb9
BLAKE2b-256 2b87bf1ff51a7e3be2aa69108224dc4c5bd03708126dcf4dbbb498c1bbe55ea5

See more details on using hashes here.

File details

Details for the file dagex-2026.22-cp310-none-win_amd64.whl.

File metadata

  • Download URL: dagex-2026.22-cp310-none-win_amd64.whl
  • Upload date:
  • Size: 373.1 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.10.20

File hashes

Hashes for dagex-2026.22-cp310-none-win_amd64.whl
Algorithm Hash digest
SHA256 a71d679f12eeada778956bfc40f5e66c7ac513276819bd63cb044b826b803258
MD5 ec3c388247e20918f200fb679d1914fc
BLAKE2b-256 6bef585f7367277f232b7eded4886c98de6e6a9278e2d2292f62aee5474ee348

See more details on using hashes here.

File details

Details for the file dagex-2026.22-cp310-cp310-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for dagex-2026.22-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 224191d147f497f1e34ee7fdb2c071cbcabd06af308125440fb9756dcb8e5935
MD5 f12806b8cec0b560dd755f48b0168181
BLAKE2b-256 23c562d9cfdaee4feb641dbcc0120c1e77290aa4dec5a7cc4b0ae49fc43f1b32

See more details on using hashes here.

File details

Details for the file dagex-2026.22-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for dagex-2026.22-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b79e976f363839bd8d1a80db097f06dad658f89bee10569f7b9783527a521d0c
MD5 d58835a0b23c45faf3e874e1dd4cade3
BLAKE2b-256 65ef9fd4a8b25864e9d4289cf4a888e4f7b3ca48d55a09f0af9310cc1d5f5809

See more details on using hashes here.

File details

Details for the file dagex-2026.22-cp39-none-win_amd64.whl.

File metadata

  • Download URL: dagex-2026.22-cp39-none-win_amd64.whl
  • Upload date:
  • Size: 373.4 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.10.20

File hashes

Hashes for dagex-2026.22-cp39-none-win_amd64.whl
Algorithm Hash digest
SHA256 300017f922306a69f70fee3877a07355f97a42bc5c38c7c288f3373d9f40f4f0
MD5 1a72ca916080b3c10b28890834dc0b7c
BLAKE2b-256 ce595f7c3442c0bc4614c7e943a14c56d594d1fc05f8306c045b6513410a15c6

See more details on using hashes here.

File details

Details for the file dagex-2026.22-cp39-cp39-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for dagex-2026.22-cp39-cp39-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 eac15bc5b04e6bee9f91098357e6f1128540cb7927f59ddb2ec8fdd22efd5c8f
MD5 ac26dd377a0d9398e6397b209ee9bb61
BLAKE2b-256 58b784d165514e0edb15420c7e0f01ce2c9bdecbab3290b30a1627bcef69f155

See more details on using hashes here.

File details

Details for the file dagex-2026.22-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for dagex-2026.22-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0a6a5cb9b291d6e58d515c485ae8a8b27adaf7c8342e6bfda2ba3948ae51c5b6
MD5 fe8a7cfea50745ee7613daa2efce26a6
BLAKE2b-256 2e1af3281ac0445054c1228fe46a56d453f7c8e69338caee78a74ffbb771875f

See more details on using hashes here.

File details

Details for the file dagex-2026.22-cp38-none-win_amd64.whl.

File metadata

  • Download URL: dagex-2026.22-cp38-none-win_amd64.whl
  • Upload date:
  • Size: 373.0 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.10.20

File hashes

Hashes for dagex-2026.22-cp38-none-win_amd64.whl
Algorithm Hash digest
SHA256 4b7a68e2d2355451032653371455b8ea06ddd9539212e3a3e1136d9a9e4a62f2
MD5 5445206ac585775e758c7e592021b9c1
BLAKE2b-256 7989bb53e46ed06b4b02fcf69f51d9f268f0c4ca53c6b395da45886ee51de048

See more details on using hashes here.

File details

Details for the file dagex-2026.22-cp38-cp38-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for dagex-2026.22-cp38-cp38-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 06f778fbcceb75e31e60aeb80a95537023452ed46b43baa11fc56aac86286fed
MD5 e16aa86a604893f34fafe521d4fa832b
BLAKE2b-256 0072b9755f8a0c40be46bbdc03b38c493c2b49a5f8463fcffcf8dacb7493dea8

See more details on using hashes here.

File details

Details for the file dagex-2026.22-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for dagex-2026.22-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2efbb284fe02e2e191840f6a557a4624c47a970b4f1dd5ab0c963dc81cc3199d
MD5 82a6fc9bf85f412747d1c3f3b378520b
BLAKE2b-256 b86fcd3b05532b018bdb907e8eebdc071dbf31d4c6e2a4a24907127dd077f801

See more details on using hashes here.

Release history Release notifications | RSS feed

2026.23

16 files

This release

2026.22 This release

16 files

2026.21

16 files

2026.20

16 files

2026.19

16 files

2026.18

16 files

2026.17

16 files

2026.16

16 files

2026.15

16 files

2026.14

16 files

2026.13

16 files

2026.12

16 files

2026.11

16 files

2026.10

16 files

2026.9

16 files

2026.8

16 files

2026.7

16 files

2026.6

16 files

2026.5

16 files

2026.4

16 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page