HKUDS/Vibe-Trading · error · ValuationError

comps.equity_value_from_enterprise_value: enterprise_value m

Error message

comps.equity_value_from_enterprise_value: enterprise_value must be a finite number, got {enterprise_value!r}

What it means

equity_value_from_enterprise_value (EV -> equity direction) validates that the supplied enterprise_value is finite before subtracting the bridge delta, mirroring the market_cap check in the other direction.

Source

Thrown at agent/src/quantlib/valuation/comps.py:568

        MissingInputError: If `enterprise_value`, `total_debt` or
            `cash_and_equivalents` is absent.
        ValuationError: If `enterprise_value` or any supplied bridge line is
            not a finite number.
    """
    require_inputs(
        {
            "enterprise_value": enterprise_value,
            "total_debt": total_debt,
            "cash_and_equivalents": cash_and_equivalents,
        },
        ("enterprise_value", "total_debt", "cash_and_equivalents"),
        "comps.equity_value_from_enterprise_value",
    )
    delta, omitted = _bridge_delta(
        total_debt, cash_and_equivalents, minority_interest, preferred_stock, investments_in_associates
    )
    if not math.isfinite(enterprise_value):
        raise ValuationError(
            f"comps.equity_value_from_enterprise_value: enterprise_value must be a "
            f"finite number, got {enterprise_value!r}"
        )
    equity = float(enterprise_value) - delta
    return EVBridgeResult(
        direction="ev_to_equity",
        equity_value=equity,
        enterprise_value=float(enterprise_value),
        total_debt=float(total_debt),
        cash_and_equivalents=float(cash_and_equivalents),
        minority_interest=minority_interest,
        preferred_stock=preferred_stock,
        investments_in_associates=investments_in_associates,
        omitted_components=omitted,
    )


def _require_name(name: str, model: str) -> str:

View on GitHub (pinned to 80ffdda44c)

Solutions

  1. Check the EV value for finiteness before the call; if NaN, skip or handle the excluded peer.
  2. Trace upstream multiple/valuation code to see why EV is not finite.
  3. Wrap chained model calls with a finite-value assertion between steps.

Example fix

# before
equity = equity_value_from_enterprise_value(peer_ev, ...)  # peer_ev is nan

# after
if peer_ev is None or not math.isfinite(peer_ev):
    continue  # peer excluded from downstream use
Defensive patterns

Strategy: validation

Validate before calling

if enterprise_value is None or not math.isfinite(enterprise_value):
    continue  # excluded peer

Try / catch

except ValuationError as e:
    if 'enterprise_value must be a' in str(e):
        continue

Prevention

When it happens

Trigger: Calling equity_value_from_enterprise_value(enterprise_value=math.nan/inf), e.g. an EV read from a multiples model output that is NaN because a peer was excluded.

Common situations: Chaining models where an upstream step returned NaN (excluded peer) and the value is passed through without checking; spreadsheets importing blanks as NaN.

Related errors


AI-assisted analysis of HKUDS/Vibe-Trading@80ffdda44c (2026-08-28). Data as JSON: /api/errors/d73e8e5726b6ee66. Report an issue: GitHub.