← Files Public Equity InvestingARCHIVED FILE

tests/test_portfolio_risk_management_sizing_credit_boundary.py

1.64 KB · Oct 5, 2026 · 12:04 UTC

↓ Download file

"""Portfolio risk sizing-helper guardrails for credit instruments."""

from __future__ import annotations

import sys
import unittest
from pathlib import Path

ROOT = Path(__file__).resolve().parents[1]
SCRIPT_DIR = ROOT / "skills" / "portfolio-risk-management" / "scripts"
sys.path.insert(0, str(SCRIPT_DIR))

from position_sizing_core import sizing_rows  # noqa: E402


class PortfolioRiskSizingCreditBoundaryTests(unittest.TestCase):
    def test_credit_like_instrument_type_routes_to_credit_markets(self) -> None:
        data = {
            "portfolio": {"nav": 100000000, "max_loss_bps_nav": 50},
            "position": {
                "security": "ACME 2029 Notes",
                "instrument_type": "bond",
                "direction": "long",
                "entry_price": 95,
                "downside_price": 80,
            },
        }

        with self.assertRaisesRegex(ValueError, "Use Credit Markets"):
            sizing_rows(data)

    def test_equity_instrument_still_sizes(self) -> None:
        data = {
            "portfolio": {"nav": 100000000, "max_loss_bps_nav": 50},
            "position": {
                "security": "ACME common stock",
                "instrument_type": "common equity",
                "direction": "long",
                "entry_price": 100,
                "downside_price": 80,
                "confidence": "high",
            },
        }

        rows, summary = sizing_rows(data)

        self.assertTrue(rows)
        self.assertGreater(summary["recommended_size_pct_nav"], 0)
        self.assertNotEqual("insufficient data", summary["raw_binding_constraint"])


if __name__ == "__main__":
    unittest.main()

SHA-256: df412fed667b6b42ecc102235ec6fe12169e3adf70ee246063eac7210e19b92f