Skip to main content

Emergent parallelism and execution branching from inside your functions

Project description

bifurcate 🔀

Emergent parallelism and execution branching from inside your functions.

Standard patterns force you to extract your logic and wrap it in for loops or complex task graphs just to run variations of a pipeline. bifurcate lets you branch the execution graph dynamically from inside the function itself.

Write your logic sequentially, as if it only runs once. Let the system magically map the permutations.

Usage

import bifurcate

@bifurcate.collect
def calculate_pricing(user_id):
    # 1. Standard execution starts normally
    base_price = database.get_price(user_id)

    # BRANCH POINT:
    # The system transparently branches the execution universe here.
    # The function will conceptually branch, returning a different
    # value to 'discount' for each path.
    discount = bifurcate.branch([0.0, 0.10, 0.20])

    # 2. This logic is evaluated cleanly for each distinct branch
    final_price = base_price * (1 - discount)

    print(f"Calculated: {final_price}")
    return final_price

# The decorator catches the parallel universes and aggregates the results
results = calculate_pricing("user_123")
# Output: [100.0, 90.0, 80.0]

Features

  • In-line Branching: No more for loops polluting your caller logic. Keep your domain functions completely isolated and focused on single-item math.
  • Zero-Boilerplate Permutations: Perfect for A/B testing, ML hyperparameter sweeps, or fallback strategies.
  • The List Monad for Python: Achieves mathematically pure map/flatMap operations using standard, highly-readable imperative Python syntax.

Installation

uv add bifurcate
# or
pip install bifurcate

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

bifurcate-1.0.3.tar.gz (2.5 kB view details)

Uploaded Source

Built Distribution

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

bifurcate-1.0.3-py3-none-any.whl (3.4 kB view details)

Uploaded Python 3

File details

Details for the file bifurcate-1.0.3.tar.gz.

File metadata

  • Download URL: bifurcate-1.0.3.tar.gz
  • Upload date:
  • Size: 2.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.3 {"installer":{"name":"uv","version":"0.11.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"CachyOS Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for bifurcate-1.0.3.tar.gz
Algorithm Hash digest
SHA256 2659f16bb02b0a10d504e2940b4cbb0c6a523c22c79d4d09759b5a9bc0ee8c7a
MD5 e2696905425e6e786f04f1e68f7419c9
BLAKE2b-256 e5c88123fcdd0fc7e43af1e7ae5e4870f452f6677dee189dda98faf080240b1c

See more details on using hashes here.

File details

Details for the file bifurcate-1.0.3-py3-none-any.whl.

File metadata

  • Download URL: bifurcate-1.0.3-py3-none-any.whl
  • Upload date:
  • Size: 3.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.3 {"installer":{"name":"uv","version":"0.11.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"CachyOS Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for bifurcate-1.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 a047ce219fe210cd1de61138a83b97c727ad8b02d4688331ddac26a8c029ccc2
MD5 798dfeeea280b070210d59acfd38e0e5
BLAKE2b-256 d1b1ef50e74ea2bf072afbb49dc99c21462280e689ceae50433a18e558c2046f

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