Functional Weave
Code in Python

manufacturing.yield-scrap@1.0.0

impl/python.py

1,163 bytes · the Python implementation · view raw

Imports name this capability’s declared dependencies, which fune builds next to it in your project; each one links to its page.

from .manufacturing_yield_scrap_types import YieldPlan
from .math_round_div import round_div  ← from math.round-div ^1.0.0 · built alongside by fune

MAX_OUTPUT = (2**53 - 1) // 10000


def input_for_yield(required_output: int, yield_basis_points: int) -> YieldPlan:
    """Starts needed for a good output at a yield, rounded up in integers so an
    exact answer (95 at 95% is 100) never becomes 101 through a float.
    """
    if (
        isinstance(required_output, bool)
        or not isinstance(required_output, int)
        or required_output < 0
        or required_output > MAX_OUTPUT
    ):
        raise ValueError(
            "requiredOutput must be a whole number of units from 0 to %d, received %r" % (MAX_OUTPUT, required_output)
        )
    if (
        isinstance(yield_basis_points, bool)
        or not isinstance(yield_basis_points, int)
        or yield_basis_points < 1
        or yield_basis_points > 10000
    ):
        raise ValueError("yieldBasisPoints must be a whole number from 1 to 10000, received %r" % (yield_basis_points,))
    input_units = round_div(required_output * 10000, yield_basis_points, "up")
    return YieldPlan(input=input_units, scrap=input_units - required_output)