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)