oasislmf.pytools.fm.portfolio_complexity ======================================== .. py:module:: oasislmf.pytools.fm.portfolio_complexity Functions --------- .. autoapisummary:: oasislmf.pytools.fm.portfolio_complexity.compute_portfolio_complexity oasislmf.pytools.fm.portfolio_complexity.format_complexity_report Module Contents --------------- .. py:function:: compute_portfolio_complexity(static_path) Compute portfolio complexity metrics from Oasis static files. Works for GUL-only, IL, and IL+RI portfolios. **GUL-only** (no account file): only ``portfolio_dimensions`` and the ``gul_work_units`` complexity score are populated. **IL** (account file present): additionally populates ``il`` with the FM structure, profile complexity, and output count for the insured-loss layer. **RI** (reinsurance files present): additionally populates ``ri`` with per-layer FM metrics and a total RI FM work-unit count. The two key per-event cost proxies in ``complexity_scores`` are: * ``gul_work_units = num_items`` * ``fm_work_units = il_fm_work_units + ri_fm_work_units`` where ``il_fm_work_units = total_il_nodes × il_layers`` and ``ri_fm_work_units = Σ(total_ri_nodes_layer_k × ri_layers_k)`` Multiplying by the number of model events gives a per-dimension full-run cost proxy. Parameters ---------- static_path : str Directory containing the Oasis static files. For IL this is the directory with ``fm_programme.bin`` etc. RI layer subdirectories are discovered automatically via ``ri_layers.json``. Returns ------- dict .. py:function:: format_complexity_report(metrics) Return a human-readable text summary of portfolio complexity metrics. Parameters ---------- metrics : dict As returned by :func:`compute_portfolio_complexity`. Returns ------- str