model_clo_insight.clo_external_data_contracts module

This module serves as the location for all of the external model object classes used to communicate with Rest APIs or Excel.

class AgencyRecovery(seniority=None, rec_rate=None, **kwargs)

Bases: object

Used to store non-DBRSM rating agency recovery assumptions (by seniority only, no country tiering)

rec_rate: float = None

other agency’s recovery rate assumption for this seniority level (estimated from historical analysis)

seniority: str = None

seniority level (sr secured, cov-lite, second lien)

class CFMatrixMetaData(tranche=None, is_retranche=None, dbrs_rtg=None, libor_curve=None, def_pattern=None, **kwargs)

Bases: object

Table row that represents the inputs to a Proprietary Cashflow Engine BDR scenario

dbrs_rtg: str = None

DBRSM rating stress level

def_pattern: str = None

default timing curve

is_retranche: int = None

not used

libor_curve: int = None

interest rate curve

tranche: str = None

which tranche the BDR is computed on

class CFNamedRangeRow(named_range=None, row=None, col=None, **kwargs)

Bases: object

Table row representing the Excel named ranges that are controlled by Proprietary Cashflow Engine’s dynamic runner

col: int = None

column of the named range

named_range: str = None

Excel named range

row: int = None

row of the named range

class CFRepline(name=None, dbrs_tier=None, par=None, percent=None, cpn_type_int=None, daycount=None, spread=None, coupon=None, rec_lag=None, **kwargs)

Bases: object

Data structure for a cash flow analysis repline (representative group of collateral loans)

coupon: float = None

fixed coupon

cpn_type_int: float = None

fixed vs float

daycount: str = None

30/360 for fixed and act/360 for float

dbrs_tier: int = None

DBRSM country tier (effects recovery rate and lag)

name: str = None

name of the repline

par: float = None

aggregate par amount

percent: float = None

this repline’s percentage of the total collateral

rec_lag: int = None

recovery lag (expressed as number of deal payment periods)

spread: float = None

floating spread

class CFReplineTradingPct(dbrs_tier=None, cpn_type_int=None, daycount=None, rec_lag=None, name=None, s_1=None, s_2=None, s_3=None, **kwargs)

Bases: object

Data structure used for storing the information about each seniority/tier combination used in the trading scenario analysis

cpn_type_int: float = None

fixed vs float

daycount: str = None

daycount value

dbrs_tier: int = None

DBRSM country tier

name: str = None

unique identifier

rec_lag: int = None

Recovery lag based on country tier

s_1: float = None

percentage allocation in seniority regime 1 (all senior secured only)

s_2: float = None

percentage allocation in seniority regime 2 (max cov-lite)

s_3: float = None

percentage allocation in seniority regime 3 (max cov-lite & max second lien)

class CLOConcLimitException(num=None, pct=None, **kwargs)

Bases: object

Represents a concentration limitation exception (used for obligor and industry)

num: int

number of exceptions allowed at this level

pct: float

concentration limitation level for a set number of exceptions

class CLOFee(floating=None, fixed=None, **kwargs)

Bases: object

Represents a fee due by the CLO

fixed: float

fixed component of the fee

floating: float

floating component of the fee

class CLOPoolRow(obligor=None, security=None, ind_dbrsm=None, country=None, seniority=None, is_cov_lite=None, is_defaulted=None, cpn_type=None, cpn=None, spd=None, libor_floor=None, dt_maturity=None, rtg_mdy=None, rtg_sp=None, rtg_fitch=None, rtg_dbrs=None, rtg_dbrs_ce=None, rec_rate_mdy=None, rec_rate_sp=None, rtg_watch_mdy=None, rtg_watch_sp=None, rtg_watch_fitch=None, rtg_watch_dbrs=None, par=None, unfunded=None, ind_code_dbrsm=None, **kwargs)

Bases: object

Represents a single row for the Indicative Portfolio

country: str = None

DBRSM country code. Set at the obligor level (first occurrence)

cpn: float = None

Fixed coupon. Used in repline construction

cpn_type: str = None

Fixed vs floating. Used in repline construction

dt_maturity: datetime.datetime = None

Legal maturity date for the security

ind_code_dbrsm: int = None

DBRSM industry code. Set at the obligor level (first occurrence)

ind_dbrsm: str = None

DBRSM industry name. Set at the obligor level (first occurrence)

is_cov_lite: str = None

True if loan is a cov-lite loan (e.g. lack of maintenence covenants). Drives recovery assumptions.

is_defaulted: str = None

True if loan is defaulted loan. Exclude defaults from asset default simulations, and included from repline builder for Proprietary Cashflow Engine

libor_floor: float = None

LIBOR floor (if applicable). Currently not used in the analysis

obligor: str = None

unique obligor ID. Obligors with the same string ID share the same random vars in the simulation

par: float = None

Par amount of the security

rec_rate_mdy: float = None

Moody’s recovery rate. Determined by difference in corp family vs facility rating

rec_rate_sp: float = None

S&P recovery rate (not recovery rating!).

rtg_dbrs: str = None

DBRSM credit rating. Set at the obligor level (first occurrence)

rtg_dbrs_ce: str = None

DBRSM credit estimate. Set at the obligor level (first occurrence)

rtg_fitch: str = None

Fitch Issuer credit rating. Set at the obligor level (first occurrence)

rtg_mdy: str = None

Moodys obligor default probability or corporate family credit rating. Set at the obligor level (first occurrence)

rtg_sp: str = None

S&P Issuer credit rating. Set at the obligor level (first occurrence)

rtg_watch_dbrs: str = None

DBRSM credit watch. Set at the obligor level (first occurrence)

rtg_watch_fitch: str = None

Fitch credit watch. Set at the obligor level (first occurrence)

rtg_watch_mdy: str = None

S&P credit watch. Set at the obligor level (first occurrence)

rtg_watch_sp: str = None

Moodys credit watch. Set at the obligor level (first occurrence)

security: str = None

unique security ID. Two line items with same obligor ID should have different security ID

seniority: str = None

Seniority level (e.g. senior secured vs second lien). Set at the security level

spd: float = None

Floating spread. Used in repline construction and WAS calculation

unfunded: float = None

remaining undrawn amount (if revolver or delayed draw loan)

class CLOTranche(name=None, bond_group=None, par=None, unfunded=None, assumed_draw=None, cpn_type=None, cpn=None, spd=None, rtg_sp=None, rtg_mdy=None, rtg_fitch=None, rtg_dbrs=None, oc_test=None, ic_test=None, rvst_oc_test=None, **kwargs)

Bases: object

Represents a tranche of a CLO’s capital structure

assumed_draw: float = None

amount to assume is drawn when running the analysis

bond_group: int = None

integer representing the paydown order under the note payment sequence

cpn: float = None

fixed coupon

cpn_type: str = None

fixed vs floating

ic_test: float = None

Interest coverage test associated with this tranche’s bond group

name: str = None

name of the tranche

oc_test: float = None

Overcollateralization test associated with this tranche’s bond group

par: float = None

par amount

rtg_dbrs: str = None

DBRSM rating (proposed)

rtg_fitch: str = None

Fitch rating

rtg_mdy: str = None

Moody’s rating

rtg_sp: str = None

S&P rating

rvst_oc_test: float = None

Reinvestment overcollateralization test associated with this tranche’s bond group

spd: float = None

floating spread

unfunded: float = None

undrawn amount (for revolvers and delayed draws)

class CLOTrancheOutputStep1(name=None, bond_group=None, par=None, rtg_dbrs=None, par_subordination=None, **kwargs)

Bases: object

Represents a tranche row in the tranche-related input for step 2

bond_group: int = None

integer representing the paydown order under the note payment sequence

name: str = None

name of the tranche

par: float = None

par amount

par_subordination: float = None

par subordination for this tranche (computed based on collateral par and total par of tranches senior to this tranche

rtg_dbrs: str = None

DBRSM rating (proposed)

class CLOTrancheOutputStep2(name=None, bond_group=None, par=None, rtg_dbrs=None, par_subordination=None, davinci_tranche_name=None, exp_maturity=None, BDR=None, default_hurdle=None, cushion=None, result=None, **kwargs)

Bases: object

Represents a tranche row in the tranche-related output of step 2

BDR: float = None

break even default rate (output from Proprietary Cashflow Engine)

bond_group: int = None

integer representing the paydown order under the note payment sequence

cushion: float = None

BDR - default hurdle

davinci_tranche_name: str = None

name of the tranche in Proprietary Cashflow Engine (used for lookups later)

default_hurdle: float = None

cumulative default hurdle rate from the predictive model simulation (lookup via propsosed DBRSM rating)

exp_maturity: float = None

expected bond maturity (output from Proprietary Cashflow Engine)

name: str = None

name of the tranche

par: float = None

par amount

par_subordination: float = None

par subordination for this tranche (computed based on collateral par and total par of tranches senior to this tranche

result: float = None

pass if cushion >= 0, fail if < 0

rtg_dbrs: str = None

DBRSM rating (proposed)

class CLOTrancheOutputStep5(name=None, davinci_tranche_name=None, bond_group=None, par=None, rtg_dbrs=None, par_subordination=None, bdr_min=None, hurdle_min=None, min=None, n_fail=None, min_loc=None, is_pass=None, **kwargs)

Bases: object

Represents a tranche row in the tranche-related output of step 5

Note: inheritance not used here due as it changes in order of the fields

bdr_min: float = None

BDR for the min cushion

bond_group: int = None

integer representing the paydown order under the note payment sequence

davinci_tranche_name: str = None

name of the tranche in Proprietary Cashflow Engine (used for lookups later)

hurdle_min: float = None

hurdle for the min cushion

is_pass: int = None

True if the tranche passes all scenarios

min: float = None

minimum cushion

min_loc: int = None

scenario number with the smallest cushion

n_fail: int = None

number of trading scenarios where cushion < 0

name: str = None

name of the tranche

par: float = None

par amount

par_subordination: float = None

par subordination for this tranche (computed based on collateral par and total par of tranches senior to this tranche

rtg_dbrs: str = None

DBRSM rating (proposed)

class CLOTransaction(dt_closing=None, dt_first_pay=None, dt_end_rvst=None, dt_non_call=None, dt_maturity=None, pmt_per_yr=None, rvst_target_par=None, total_capitalization=None, max_wal=None, max_warf=None, mdy_warr_floor=None, mdy_warr_cap=None, trading_scenario_mode=None, is_surv_mode=None, dt_last_pmt=None, libor_spot=None, max_wal_surv=None, princ_proceeds=None, ce_in_transit=None, fee_sr_admin=None, fee_sr_mgmt=None, fee_jr_mgmt=None, fee_incentive=None, cl_obligor=None, cl_industry=None, cl_cov_lite=None, cl_second_lien=None, cl_fixed=None, cl_long_dated=None, cl_dbrs_II=None, cl_dbrs_III=None, cl_dbrs_IV=None, cl_ex_obligor=None, cl_ex_industry=None, tranches=None, revolver_method=None, net_agg_exp_amt=None, perf_par_adj_amt=None, perf_par_adj_rationale=None, mdy_warr_cushion_floor=None, **kwargs)

Bases: object

Top level data structure that represents the transaction level data for a CLO

ce_in_transit: float = None

Credit Estimate in-transit value (used for obligors with missing CE)

cl_cov_lite: float = None

max cov-lite loans

Type

concentration limitation

cl_dbrs_II: float = None

max DBRSM Tier II countries

Type

concentration limitation

cl_dbrs_III: float = None

max DBRSM Tier III countries

Type

concentration limitation

cl_ex_industry: List[model_clo_insight.clo_external_data_contracts.CLOConcLimitException] = None

instances of CLOConcLimitException that represent the industry concentration limitations

cl_ex_obligor: List[model_clo_insight.clo_external_data_contracts.CLOConcLimitException] = None

instances of CLOConcLimitException that represent the obligor concentration limitations

cl_fixed: float = None

max fixed rate

Type

concentration limitation

cl_industry: float = None

max single obligor

Type

concentration limitation

cl_long_dated: float = None

max long dated

Type

concentration limitation

cl_obligor: float = None

max single obligor

Type

concentration limitation

cl_second_lien: float = None

max second lien loans

Type

concentration limitation

dt_closing: datetime.datetime = None

closing date

dt_end_rvst: datetime.datetime = None

end of the reinvestment period

dt_first_pay: datetime.datetime = None

first payment date

dt_last_pmt: datetime.datetime = None

last payment date (used to calculate remaining reinvestment period)

dt_maturity: datetime.datetime = None

legal maturity date

dt_non_call: datetime.datetime = None

end of the non-call period

fee_incentive: model_clo_insight.clo_external_data_contracts.CLOFee = None

instance of CLOFee - incentive fee

fee_jr_mgmt: model_clo_insight.clo_external_data_contracts.CLOFee = None

instance of CLOFee - junior management fee

fee_sr_admin: model_clo_insight.clo_external_data_contracts.CLOFee = None

instance of CLOFee - senior administrative fee

fee_sr_mgmt: model_clo_insight.clo_external_data_contracts.CLOFee = None

instance of CLOFee - senior management fee

is_surv_mode: str = None

surveillance mode (True for Surveillance, False for New Issue)

libor_spot: float = None

spot libor/sofr as of the closing date

max_wal: float = None

Maximum weighted average life (WAL) test

max_wal_surv: float = None

Maximum weighted average life (WAL) test as of surveillance date

max_warf: float = None

Maximum weighted average rating factor test (global constraint in addition to CDO monitor / collateral quality matrix)

mdy_warr_cap: float = None

Moody’s WARR cap for use in modifier matrix

mdy_warr_cushion_floor: float = None

Moody’s WARR Cushion floor

mdy_warr_floor: float = None

Moody’s WARR floor for use in modifier matrix

net_agg_exp_amt: float = None

Net Aggregate Exposure Amount (total unfunded collateral par - principal proceeds

perf_par_adj_amt: float = None

Analyst adjustment to performing par (+ or - depending on how the trustee calcs work)

perf_par_adj_rationale: str = None

Analyst comment on why they are using the perf par adjustment

pmt_per_yr: int = None

payments per year

princ_proceeds: float = None

pricipal proceeds (repline balances will be adjusted on pro-rata basis as principal proceeds are used for reinvestment purposes during reinvestment period)

revolver_method: int = None

1=use explicit funded vs unfunded in Indicative Portfolio, 2=use Net Aggregate Exposure Amount

rvst_target_par: float = None

Reinvestment Target Par (defined term in the docs, this is the par amount we model to)

total_capitalization: float = None

Optional for certain middle market CLOs where the concentration limitations are computed off this vs the actual par

trading_scenario_mode: float = None

mode 1 for continuous formula constraints, mode 2 for discrete matrix constraints, mode 3 for full DBRSM matrix

tranches: List[model_clo_insight.clo_external_data_contracts.CLOTranche] = None

instances of CLOTranche

class CorrelationMatrix(same_reg_same_ind=None, same_reg_diff_ind=None, diff_reg_same_ind=None, diff_reg_diff_ind=None, **kwargs)

Bases: object

correlation matrix dataclass contains 4 values based on a list of lists in Excel, values are taken out and made into 4 separate values

diff_reg_diff_ind: float = None

depricated in methodology, but functionality available in model

diff_reg_same_ind: float = None

depricated in methodology, but functionality available in model

same_reg_diff_ind: float = None

asset correlation between different industries

Type

float

same_reg_same_ind: float = None

asset correlation within industry

Type

float

class DBRSMatrixInputs(risk_score=None, dscore=None, advance_rate=None, tenor=None, pool_par=None, conc_limit_basis=None, was=None, warr=None, **kwargs)

Bases: object

Table row that represents a row in a DBRSM-style collateral quality matrix

advance_rate: float = None

advance rate if empty we need pool par

conc_limit_basis: float = None

conc limit basis use pool par if empty

dscore: float = None

min diversity score constraint

pool_par: float = None

pool par (varies for ramp-up CLOs)

risk_score: float = None

max DBRSM risk score constraint

tenor: float = None

modeling tenor

warr: float = None

min DBRSM WA recovery rate constraint

was: float = None

min WA spread constraint

class DaVinciResults(davinci_tranche_name=None, exp_maturity=None, BDR=None, **kwargs)

Bases: object

BDR: float = None

break even default rate (output from Proprietary Cashflow Engine)

davinci_tranche_name: str = None

name of the tranche in Proprietary Cashflow Engine (used for lookups later)

exp_maturity: float = None

expected bond maturity (output from Proprietary Cashflow Engine)

class DetailedDiagnosticRow

Bases: object

Table row that contains the diagnostic info from the predictive model simulation

class ForceRating(rtg=None, pct=None, **kwargs)

Bases: object

Tuple for storing forced rating assumptions for the hypo pool generator

pct: float = None

percentage to set prior to running the hypo pool solvers

rtg: str = None

rating level

class HypoException

Bases: object

Table row that contains the hypo exception results from step 4b

class InputStep1(deal=None, indicative_port=None, **kwargs)

Bases: object

Master data structure that represents the inputs to model_clo_insight.app.step_1_parse_pool()

deal: model_clo_insight.clo_external_data_contracts.CLOTransaction = None

instance of CLOTransaction that represents the transaction data

indicative_port: List[model_clo_insight.clo_external_data_contracts.CLOPoolRow] = None

instances of CLOPoolRow that represent the indicative portfolio

class InputStep2(amort_tail_choice_indicative=None, rvst_per_choice_indicative=None, tranche_data=None, davinci_results=None, modeling_portfolio=None, modeling_portfolio_asset_specific=None, amort_tail_comment_indicative=None, rvst_per_comment_indicative=None, **kwargs)

Bases: object

Master data structure that represents the inputs to model_clo_insight.app.step_2_run_indicative_pool()

amort_tail_choice_indicative: str = None

user choice for the amortization schedule lookup

amort_tail_comment_indicative: str = None

user comment for choice of amortization schedule

davinci_results: List[model_clo_insight.clo_external_data_contracts.DaVinciResults] = None

instances of DaVinciResults that represent the Proprietary Cashflow Engine results inputs (BDR, final maturity)

modeling_portfolio: List[model_clo_insight.clo_external_data_contracts.ModelPoolRow] = None

instances of ModelPoolRow that represent the modeling portfolio (e.g. ratings & industries mapped)

modeling_portfolio_asset_specific: List[model_clo_insight.clo_external_data_contracts.ModelPoolRowAssetSpecific] = None

modeling portoflio with asset specific input for ABS deals

rvst_per_choice_indicative: int = None

user choice for the number of periods in the cash flow modeling that covers the reinvestment period

rvst_per_comment_indicative: str = None

user comment for choice of number of periods in the cash flow modeling that covers the reinvestment period

tranche_data: List[model_clo_insight.clo_external_data_contracts.CLOTrancheOutputStep1] = None

instances of CLOTrancheOutputStep1 that represent the tranche data inputs (Par, DBRSM Rating and Par Subordination)

class InputStep3(hypo_diversity_mode=None, hypo_n_simple_ind=None, trading_scenario_hypo_mode_comment=None, trading_scenario_n_ind_comment=None, was_ind_port_choice=None, warf_ind_port_choice=None, dbrs_risk_score_ind_port_choice=None, dscore_ind_port_choice=None, was_high_choice=None, was_low_choice=None, was_low_comment=None, dscore_high_choice=None, dscore_low_choice=None, dscore_high_comment=None, dscore_low_comment=None, AAA_was_choice=None, AAA_was_comment=None, repline_trading_pct_choice=None, monitor_coef_bdr=None, monitor_coef_sdr=None, rec_rates_agency_choice=None, force_rtg_hi_choice=None, force_rtg_lo_choice=None, wal_monitor_choice=None, max_warf_drift_choice=None, deal_matrix_dbrs=None, deal_matrix_dbrs_warr_rtg=None, deal_matrix_moody_dscore=None, deal_matrix_moody_was=None, deal_matrix_moody_warf=None, deal_matrix_mod_moody_dscore=None, deal_matrix_mod_moody_was=None, deal_matrix_mod_moody_warf=None, repline_trading_pct_comment=None, rec_rates_agency_comment=None, monitor_coef_bdr_comment=None, monitor_coef_sdr_comment=None, force_rtg_hi_comment=None, force_rtg_lo_comment=None, wal_monitor_comment=None, max_warf_drift_comment=None, deal_matrix_dbrs_warr_rtg_comment=None, amort_tail_choice_matrix=None, rvst_per_choice_matrix=None, amort_tail_comment_matrix=None, rvst_per_comment_matrix=None, was_ind_port_comment=None, warf_ind_port_comment=None, dscore_ind_port_comment=None, **kwargs)

Bases: object

Master data structure that represents the inputs to model_clo_insight.app.step_3_build_trading_scenarios()

AAA_was_choice: List[float] = None

entire permitted WAS range as per the transaction documents. User chooses how granular to discretize

AAA_was_comment: List[str] = None

comment for AAA WAS choice

amort_tail_choice_matrix: float = None

user choice for the amortization schedule lookup

amort_tail_comment_matrix: str = None

user comments for change of amort tail years

dbrs_risk_score_ind_port_choice: float = None

WA DBRSM risk score of the indicative portfolio

dbrs_risk_score_ind_port_comment: str = None

WA DBRSM risk score of the indicative portfolio

deal_matrix_dbrs: List[model_clo_insight.clo_external_data_contracts.DBRSMatrixInputs] = None

instances of DBRSMatrixInputs that represent the transaction’s collateral quality matrix if structured to DBRS’s methodology (trading_scenario_mode = 3)

deal_matrix_dbrs_warr_rtg: str = None

for deals structured to DBRSM’s methodology (trading_scenario_mode = 3), the rating stress level that the WA recovery rate test was sized to

deal_matrix_dbrs_warr_rtg_comment: str = None

comment for which rtg was chosen

deal_matrix_mod_moody_dscore: List[int] = None

dscore values for discrete modifier matrix constraints

deal_matrix_mod_moody_warf: List[List[float]] = None

weighted average rating factor values for discrete modifier matrix constraints

deal_matrix_mod_moody_was: List[float] = None

weighted average spread values for discrete modifier matrix constraints

deal_matrix_moody_dscore: List[int] = None

dscore values for discrete matrix constraints

deal_matrix_moody_warf: List[List[float]] = None

weighted average rating factor values for discrete matrix constraints

deal_matrix_moody_was: List[float] = None

weighted average spread values for discrete matrix constraints

dscore_high_choice: int = None

trading scenario user choice for increase in diversity

dscore_high_comment: str = None

comment for dscore high choice

dscore_ind_port_choice: float = None

diversity score of the indicative portfolio

dscore_ind_port_comment: str = None

diversity score of the indicative portfolio

dscore_low_choice: int = None

trading scenario user choice for decrease in diversity

dscore_low_comment: str = None

comment for dscore low choice

force_rtg_hi_choice: model_clo_insight.clo_external_data_contracts.ForceRating = None

instance of ForceRating that represents the high rating category to be fixed prior to solving for the rating mixture

force_rtg_hi_comment: List[str] = None

comment for force rating high choice

force_rtg_lo_choice: model_clo_insight.clo_external_data_contracts.ForceRating = None

instance of ForceRating that represents the low rating category to be fixed prior to solving for the rating mixture

force_rtg_lo_comment: List[str] = None

comment for force rating low choice

hypo_diversity_mode: int = None

determines how the industries are allocated in the hypo pool generator. 1 = multiple of obligor base conc limit, 2 = repeating sequence of N industries

hypo_n_simple_ind: int = None

for hypo_diversity_mode_2, the N industries to repeat

max_warf_drift_choice: float = None

user choice absolute max WARF increase in the trading scenarions (e.g. regardless of monitor/matrix, WARF cannot increase by more than this)

max_warf_drift_comment: str = None

comment for max WARF drift choice

monitor_coef_bdr: List[float] = None

BDR coefficients for the CDO Monitor test. For new transactions, this is determined by analyzing comparable transactions

monitor_coef_bdr_comment: List[str] = None

comments for BDR choices

monitor_coef_sdr: List[float] = None

SDR coefficients for the CDO Monitor test. Typically this does not change deal to deal

monitor_coef_sdr_comment: List[str] = None

comments for SDR choices

rec_rates_agency_choice: List[model_clo_insight.clo_external_data_contracts.AgencyRecovery] = None

user choice for generic non-DBRSM rating agency recovery rate assumptions

rec_rates_agency_comment: List[str] = None

comments for recovery rates choices

repline_trading_pct_choice: List[model_clo_insight.clo_external_data_contracts.CFReplineTradingPct] = None

repline percentages user choice for the trading scenario recommendation

repline_trading_pct_comment: List[str] = None

comment for repline trading pct choice

rvst_per_choice_matrix: int = None

user choice for number of periods in the cash flow modeling that covers the reinvestment period

rvst_per_comment_matrix: str = None

user comments for change of rvst quarters

trading_scenario_hypo_mode_comment: str = None

comment for hypo mode choice

trading_scenario_n_ind_comment: str = None

comment for n ind choice

wal_monitor_choice: float = None

user choice WAL value for the monitor test only (seperate from other WAL/tenor assumptions)

wal_monitor_comment: str = None

comment for wal monitor choice

warf_ind_port_choice: float = None

WA rating factor of the indicative portfolio

warf_ind_port_comment: str = None

WA rating factor of the indicative portfolio

was_high_choice: float = None

not used

was_ind_port_choice: float = None

WA spread of the indicative portfolio

was_ind_port_comment: str = None

WA spread of the indicative portfolio

was_low_choice: float = None

trading scenario user choice for spread tightening

was_low_comment: str = None

comment for WAS low choice

class InputStep4a(repline_trading_pct_choice=None, rl_recoveries_trading=None, repline_trading_pct_choice_mode_3=None, scenarios=None, trading_scenario_is_on_choice=None, deal_matrix_dbrs=None, deal_matrix_dbrs_warr_rtg=None, deal_matrix_dbrs_cf_attributes=None, deal_matrix_dbrs_cf_levels=None, deal_matrix_dbrs_cf_values=None, wac=None, trading_scenario_is_on_comment=None, repline_trading_pct_mode3_comment=None, amort_tail_choice_matrix=None, **kwargs)

Bases: object

Master data structure that represents the inputs to model_clo_insight.app.step_4a_generate_cf_scenarios()

amort_tail_choice_matrix: float = None

user choice for the amortization schedule lookup

cl_cov_lite: float = None

max cov-lite loans

Type

concentration limitation

cl_second_lien: float = None

max second lien loans

Type

concentration limitation

deal_matrix_dbrs: List[model_clo_insight.clo_external_data_contracts.DBRSMatrixInputs] = None

instances of DBRSMatrixInputs that represent the transaction’s collateral quality matrix if structured to DBRS’s methodology (trading_scenario_mode = 3)

deal_matrix_dbrs_cf_attributes: List[str] = None

Cash Flow Dynamic Matrix attributes if available for MM deal (tranche Par or coverage Test)

deal_matrix_dbrs_cf_levels: List[int] = None

Cash Flow Dynamic Matrix attribute levels if available for MM deal (e.g. which tranche)

deal_matrix_dbrs_cf_values: List[float] = None

Cash Flow Dynamic Matrix data if available for MM deal

deal_matrix_dbrs_warr_rtg: str = None

for deals structured to DBRSM’s methodology (trading_scenario_mode = 3), the rating stress level that the WA recovery rate test was sized to

repline_trading_pct_choice: List[model_clo_insight.clo_external_data_contracts.CFReplineTradingPct] = None

repline percentages user choice for the trading scenario recommendation (modes 1 & 2)

repline_trading_pct_choice_mode_3: List[float] = None

repline percentages user choice for the trading scenario recommendation (mode 3)

repline_trading_pct_mode3_comment: List[str] = None

comment for mode 3 replines chosen

rl_recoveries_trading: List[model_clo_insight.clo_external_data_contracts.RatingVectorData] = None

instances of RatingVectorData that represent the recovery rate assumptions for the trading scenario replines

scenarios: List[model_clo_insight.clo_external_data_contracts.TradingScenarioRow] = None

instances of TradingScenarioRow that represent the trading scenarios generated by step 3

trading_scenario_is_on_choice: List[model_clo_insight.clo_external_data_contracts.TradingScenarioIsOnRow] = None

instances of TradingScenarioIsOnRow that represent the user’s choice if the scenario is active

trading_scenario_is_on_comment: List[str] = None

comment for trading scenario chosen

wac: float = None

weighted average coupon for generating scenario for fixed scenario

class InputStep4b(hypo_diversity_mode=None, hypo_n_simple_ind=None, amort_tail_choice_matrix=None, rvst_per_choice_matrix=None, repline_trading_pct_choice=None, tranche_results=None, monitor_coef_bdr=None, monitor_coef_sdr=None, force_rtg_hi_choice=None, force_rtg_lo_choice=None, scenarios=None, trading_scenario_is_on_choice=None, starting_period_choice=None, wal_monitor_choice=None, starting_period_comment=None, **kwargs)

Bases: object

Master data structure that represents the inputs to model_clo_insight.app.step_4b_run_trading_scenarios()

amort_tail_choice_matrix: float = None

user choice for the amortization schedule lookup

force_rtg_hi_choice: model_clo_insight.clo_external_data_contracts.ForceRating = None

instance of ForceRating that represents the high rating category to be fixed prior to solving for the rating mixture

force_rtg_lo_choice: model_clo_insight.clo_external_data_contracts.ForceRating = None

instance of ForceRating that represents the low rating category to be fixed prior to solving for the rating mixture

hypo_diversity_mode: int = None

determines how the industries are allocated in the hypo pool generator. 1 = multiple of obligor base conc limit, 2 = repeating sequence of N industries

hypo_n_simple_ind: int = None

for hypo_diversity_mode_2, the N industries to repeat

monitor_coef_bdr: List[float] = None

BDR coefficients for the CDO Monitor test. For new transactions, this is determined by analyzing comparable transactions

monitor_coef_sdr: List[float] = None

SDR coefficients for the CDO Monitor test. Typically this does not change deal to deal

reinvestment_periods_choice: int = None

user choice for number of periods in the cash flow modeling that covers the reinvestment period

repline_trading_pct_choice: List[model_clo_insight.clo_external_data_contracts.CFReplineTradingPct] = None

user choice for repline percentages recommended for the trading scenario recommendation

rvst_per_choice_matrix: int = None

user choice for forward start period in the simulation (e.g. reduce tenor in reinvestment period by this amount)

scenarios: List[model_clo_insight.clo_external_data_contracts.TradingScenarioRow] = None

instances of TradingScenarioRow that represent the trading scenarios generated from step 3

starting_period_choice: int = None

user choice for surveillance starting period in Proprietary Cashflow Engine for the trading scenarios

starting_period_comment: str = None

starting period comment

trading_scenario_is_on_choice: List[model_clo_insight.clo_external_data_contracts.TradingScenarioIsOnRow] = None

instances of TradingScenarioIsOnRow that represent the user’s choice if the scenario is active

tranche_results: List[model_clo_insight.clo_external_data_contracts.CLOTrancheOutputStep2] = None

instances of CLOTrancheOutputStep2 that represent the tranche data inputs from output_step_2

wal_monitor_choice: float = None

user choice WAL value for the monitor test only (seperate from other WAL/tenor assumptions)

class InputStep5(tranche_results=None, deal_matrix_dbrs=None, scenarios=None, trading_scenario_is_on_choice=None, default_hurdle_matrix=None, cf_meta_data=None, bdr_matrix=None, cf_scenario_data=None, cf_scenario_lookup=None, **kwargs)

Bases: object

bdr_matrix: List[List[float]] = None

matrix of break even default rates (BDRs) from Proprietary Cashflow Engine’s dynamic runner

cf_meta_data: List[model_clo_insight.clo_external_data_contracts.CFMatrixMetaData] = None

instances of CFMatrixMetaData that represent the Proprietary Cashflow Engine cash flow scenario meta data

cf_scenario_data: List[List[float]] = None

values for cash flow dynamic runner

cf_scenario_lookup: List[int] = None

lookup that maps each Trading Scenario row to the unique CF scenario

deal_matrix_dbrs: List[model_clo_insight.clo_external_data_contracts.DBRSMatrixInputs] = None

instances of DBRSMatrixInputs that represent the transaction’s collateral quality matrix if structured to DBRSM’s methodology (trading_scenario_mode = 3)

default_hurdle_matrix: List[List[float]] = None

matrix of cumulative default hurdle rates from the predictive model simulation

scenarios: List[model_clo_insight.clo_external_data_contracts.TradingScenarioRow] = None

instances of TradingScenarioRow that represent the trading scenarios generated from step 3

trading_scenario_is_on_choice: List[model_clo_insight.clo_external_data_contracts.TradingScenarioIsOnRow] = None

instances of TradingScenarioIsOnRow that represent the user’s choice if the scenario is active

tranche_results: List[model_clo_insight.clo_external_data_contracts.CLOTrancheOutputStep2] = None

instances of CLOTrancheOutputStep2 that represent the tranche data inputs (BDR, final maturity)

class JsonMetaData(guid=None, time_stamp=None, deal_name=None, run_type=None, run_name=None, user_name=None, davinci_ind_guid=None, davinci_ind_run_name=None, davinci_scenarios_guid=None, davinci_scenarios_run_name=None, davinci_scenarios_guid_supplemental=None, davinci_scenarios_run_name_supplemental=None, user_notes=None, model_version=None, **kwargs)

Bases: object

Contains the meta data to organize the json input/output files, and Proprietary Cashflow Engine run references

davinci_ind_guid: str = None

reference guid to the Proprietary Cashflow Engine run used for the indicative portfolio analysis

davinci_ind_run_name: str = None

reference run name to the Proprietary Cashflow Engine run used for the indicative portfolio analysis

davinci_scenarios_guid: str = None

reference guid to the Proprietary Cashflow Engine run used for the trading scenario matrix analysis

davinci_scenarios_guid_supplemental: List[str] = None

additional reference guids to the Proprietary Cashflow Engine run used for the trading scenario matrix analysis

davinci_scenarios_run_name: str = None

reference run name to the Proprietary Cashflow Engine run used for the trading scenario matrix analysis

davinci_scenarios_run_name_supplemental: List[str] = None

additional reference run names to the Proprietary Cashflow Engine run used for the trading scenario matrix analysis

deal_name: str = None

transaction name

guid: str = None

unique identifier

model_version: str = None

CLO Insight Model verion

run_name: str = None

run name

run_type: str = None
time_stamp: str = None

data and time stamp (set programatically)

user_name: str = None

the user’s Windows domain name; set programatically

user_notes: str = None

free text for the user to jot down any notes on the run

class MethodologyAssumptions(correl_matrix, recovery_lags_clo, n_cf_scens_per_tranche)

Bases: object

Represents the methodology assumptions

correl_matrix: List[List[float]]

correlation assumptions (inter/intra industry & region). Regional correlation assumptions imply no diversification benefit.

n_cf_scens_per_tranche: int

number of cash flow scenarios per tranche

recovery_lags_clo: Dict[int, int]

recovery lags by country tier, used in repline construction for cash flow modeling

class MethodologyParameters(correlation_matrix=None, recovery_lags=None, **kwargs)

Bases: object

Represents the methodology parameters that can be overriden

correlation_matrix: List[List[float]] = None

correlation assumptions (inter/intra industry & region). Regional correlation assumptions imply no diversification benefit.

recovery_lags: List[int] = None

recovery lags by country tier, used in repline construction for cash flow modeling

class ModelParameters(meth_assumptions, settings, recommended_vals, country_tier_tbl, recoveries_tbl, amort_tbl, amort_tbl_bullet, amort_tbl_eu, amort_tbl_half, trading_repline_tbl, agency_recoveries_tbl, scenario_shell_tbl, dbrsm_industry_tbl, performance_drift_table_dict)

Bases: object

Master data structure that contains all of the parameters necessary to run each step of the model

agency_recoveries_tbl: Dict[str, Dict]

recovery rate assumptions used by other rating agency constraints in modes 1 & 2

amort_tbl: Dict[str, Dict]

table of amortization schedules by WAL covenant tail

amort_tbl_bullet: Dict[str, Dict]

bullet version of the amortization schedules. Used for testing.

amort_tbl_eu: Dict[str, Dict]

EU table of amortization schedules by WAL covenant tail

amort_tbl_half: Dict[str, Dict]

half speed of US table of amortization schedules by WAL covenant tail

build_dataframes()
country_tier_tbl: Dict[str, Dict]

lookup table for countries and their respective DBRSM tier

dbrsm_industry_tbl: Dict[str, Dict]

general shell for DBRSM industry

meth_assumptions: model_clo_insight.clo_external_data_contracts.MethodologyAssumptions

methodology assumptions including correlation matrix, recovery lags

performance_drift_table_dict: Dict[str, Dict]

general shell for performance drift table

recommended_vals: model_clo_insight.clo_external_data_contracts.TradingScenarioRecommendedValues

recommended values for trading scenarios like dscore high and low, monitor wal, max warf drift

recoveries_tbl: Dict[str, Dict]

recovery assumptions by seniority, DBRSM tier, and rating stress

scenario_shell_tbl: Dict[str, Dict]

general shell for trading scenarios

settings: model_clo_insight.clo_external_data_contracts.ModelSettings

model settings like custom pd curves, amort curve choice

trading_repline_tbl: Dict[str, Dict]

general shell for trading replines

class ModelPoolRow(obligor=None, security=None, ind_code=None, numerical_rtg=None, par=None, **kwargs)

Bases: object

Table row for the modeling pool (post-step 1, and hypo pools)

ind_code: int = None

DBRSM industry code

numerical_rtg: float = None

DBRSM rating in integer form

obligor: str = None

unique obligor identifier

par: float = None

par amount for this security

security: str = None

unique security identifier

class ModelPoolRowAssetSpecific(obligor=None, security=None, ind_code=None, numerical_rtg=None, par=None, recovery_rate=None, tenor=None, custom_pd_curve=None, **kwargs)

Bases: object

Asset specific input for the modeling pool (post-step 1, and hypo pools)

custom_pd_curve: str = None

asset specific assigned custom pd curve

ind_code: int = None

DBRSM industry code

numerical_rtg: float = None

DBRSM rating in integer form

obligor: str = None

unique obligor identifier

par: float = None

par amount for this security

recovery_rate: float = None

asset specific recovery rate

security: str = None

unique security identifier

tenor: float = None

asset specific tenor

class ModelSettings(mc_seed=None, n_bins=None, n_trials=None, hypo_obligor_floor=None, hypo_industry_floor=None, monitor_solver_mode=None, monitor_cushion=None, monitor_rs_lower_bound=None, monitor_rs_upper_bound=None, ppy_is_off=None, amort_curve_choice=None, is_forward_start_AAA=None, is_stochastic_recoveries=None, is_asset_specific_rec=None, is_asset_specific_tenor=None, is_custom_pd=None, custom_pd_curves=None, cloam_setting=None, step4a_par_selection=None, **kwargs)

Bases: object

Represents the model settings

amort_curve_choice: str = None

either US, EU, Bullet, or US Half speed

cloam_setting: bool = None

sets whether we are running step 2 as a cloam model

custom_pd_curves: Dict[float, List] = None

Custom PD curves

hypo_industry_floor: float = None

floor for the base industry concentration limitation (during solver)

hypo_obligor_floor: float = None

floor for the base obligor concentration limitation (during solver)

is_asset_specific_rec: bool = None

if True, each asset will use specific recovery rate

is_asset_specific_tenor: bool = None

if True, each asset will use specific tenor for recovery and pd and computations

is_custom_pd: bool = None

sets whether or not there are custom pd curves to begin with

is_forward_start_AAA: bool = None

if True, forward start will be used for AAA, otherwise starting period will be 0

is_stochastic_recoveries: bool = None

if True, assume stochastic recoveries (no current functional use)

mc_seed: int = None

seed for random number generator

monitor_cushion: float = None

BDR - SDR. Typically this is set to zero

monitor_rs_lower_bound: float = None

lower bound for the max DBRSM risk score constraint when running the monitor solver

monitor_rs_upper_bound: float = None

upper bound for the max DBRSM risk score constraint when running the monitor solver

monitor_solver_mode: str = None

Expected portfolio default rate (EPDR) or WA Rating Factor (SP_WARF)

n_bins: int = None

number of bins for the default distribution histogram

n_trials: int = None

number of trials for the simulation

ppy_is_off: bool = None

if True, turn off prepays (used for testing the old methodology)

step4a_par_selection: str = None

for step 4a, decide to use pool par or conc limit basis

class OutputStep1(replines=None, rl_recoveries=None, rl_recoveries_trading=None, modeling_portfolio=None, tranche_data=None, was_high_recommend=None, was_low_recommend=None, dscore_high_recommend=None, dscore_low_recommend=None, AAA_was_recommend=None, repline_trading_pct_recommend=None, rec_rates_agency_recommend=None, force_rtg_hi_recommend=None, force_rtg_lo_recommend=None, amort_tail_recommend_indicative=None, rvst_per_recommend_indicative=None, amort_tail_recommend_matrix=None, rvst_per_recommend_matrix=None, prepay_start_recommend=None, wal_monitor_recommend=None, max_warf_drift_recommend=None, starting_period_recommend=None, pool_total_par=None, pool_perf_par=None, pool_def_par=None, dbrs_risk_score_ind_pool=None, warf_ind_port=None, WARF_mdy=None, dscore_ind_port=None, was_ind_port=None, wa_cpn=None, wa_life=None, wa_pd=None, total_tranche_draws=None, total_collat_px=None, davinci_prin_proceeds=None, strats_seniority=None, strats_cpn_type=None, strats_cov_lite=None, strats_country_tier=None, strats_country=None, strats_obligor=None, strats_industry=None, strats_dbrs_rating=None, **kwargs)

Bases: object

Master data structure that represents the outputs from model_clo_insight.app.step_1_parse_pool()

AAA_was_recommend: List[float] = None

entire permitted WAS range as per the transaction documents. User chooses how granular to discretize

WARF_mdy: float = None

indicative portfolio - WARF using Moodys ratings only

amort_tail_recommend_indicative: float = None

recommended value for the amortization schedule lookup

amort_tail_recommend_matrix: float = None

recommended value for the amortization schedule lookup

davinci_prin_proceeds: float = None

if deal out of reinvestment period, use for Proprietary Cashflow Engine starting period section

dbrs_risk_score_ind_pool: float = None

indicative portfolio - WA DBRSM Risk Score

dscore_high_recommend: int = None

trading scenario recommendation for increase in diversity

dscore_ind_port: float = None

indicative portfolio - WA diversity score

dscore_low_recommend: int = None

trading scenario recommendation for decrease in diversity

force_rtg_hi_recommend: model_clo_insight.clo_external_data_contracts.ForceRating = None

instance of ForceRating that represents the high rating category to be fixed prior to solving for the rating mixture

force_rtg_lo_recommend: model_clo_insight.clo_external_data_contracts.ForceRating = None

instance of ForceRating that represents the low rating category to be fixed prior to solving for the rating mixture

max_warf_drift_recommend: float = None

recommended absolute max WARF increase in the trading scenarions (e.g. regardless of monitor/matrix, WARF cannot increase by more than this)

modeling_portfolio: List[model_clo_insight.clo_external_data_contracts.ModelPoolRow] = None

instances of ModelPoolRow that represent the modeling portfolio (e.g. ratings & industries mapped)

pool_def_par: float = None

indicative portfolio - total defaulted par

pool_perf_par: float = None

indicative portfolio - total performing par

pool_total_par: float = None

indicative portfolio - total par

prepay_start_recommend: int = None

recommended periods in the cash flow modeling to start prepayments

rec_rates_agency_recommend: List[model_clo_insight.clo_external_data_contracts.AgencyRecovery] = None

recommended values for generic non-DBRS rating agency recovery rate assumptions

repline_trading_pct_recommend: List[model_clo_insight.clo_external_data_contracts.CFReplineTradingPct] = None

repline percentages recommended for the trading scenario recommendation

replines: List[model_clo_insight.clo_external_data_contracts.CFRepline] = None

instances of CFRepline that represent the cash flow replines

rl_recoveries: List[model_clo_insight.clo_external_data_contracts.RatingVectorData] = None

instances of RatingVectorData that represent the recovery rate assumptions for the indicative portfolio replines

rl_recoveries_trading: List[model_clo_insight.clo_external_data_contracts.RatingVectorData] = None

instances of RatingVectorData that represent the recovery rate assumptions for the trading scenario replines

rvst_per_recommend_indicative: int = None

recommended number of periods in the cash flow modeling that covers the reinvestment period

rvst_per_recommend_matrix: int = None

recommended number of periods in the cash flow modeling that covers the reinvestment period

starting_period_recommend: int = None

recommended surveillance starting period in Proprietary Cashflow Engine for the trading scenarios

strats_country: List[model_clo_insight.clo_external_data_contracts.PoolStratRow] = None

Pool Stratifications by country

strats_country_tier: List[model_clo_insight.clo_external_data_contracts.PoolStratRow] = None

Pool Stratifications by country tier

strats_cov_lite: List[model_clo_insight.clo_external_data_contracts.PoolStratRow] = None

Pool Stratifications by cov lite

strats_cpn_type: List[model_clo_insight.clo_external_data_contracts.PoolStratRow] = None

Pool Stratifications by cpn type

strats_dbrs_rating: List[model_clo_insight.clo_external_data_contracts.PoolStratRow] = None

Pool stratifications by DBRSM rating (credit estimate vs rating)

strats_industry: List[model_clo_insight.clo_external_data_contracts.PoolStratRow] = None

Pool Stratifications by industry

strats_obligor: List[model_clo_insight.clo_external_data_contracts.PoolStratRow] = None

Pool Stratifications by obligor

strats_seniority: List[model_clo_insight.clo_external_data_contracts.PoolStratRow] = None

Pool Stratifications by seniority

total_collat_px: float = None

total amount of new collateral purchased under the modeling logic

total_tranche_draws: float = None

total amount of $ from undrawn tranches that the analyst assumed drawn

tranche_data: List[model_clo_insight.clo_external_data_contracts.CLOTrancheOutputStep1] = None

instances of CLOTrancheOutputStep1 that represent the capital structure of the CLO

wa_cpn: float = None

indicative portfolio - WA fixed coupon

wa_life: float = None

indicative portfolio - WA life

wa_pd: float = None

indicative portfolio - WA default probability (lookup from the DBRSM IDT)

wal_monitor_recommend: float = None

recommended WAL value for the monitor test only (seperate from other WAL/tenor assumptions)

warf_ind_port: float = None

indicative portfolio - WARF using DBRSM-equivalent rating (e.g. avg of 2)

was_high_recommend: float = None

not used

was_ind_port: float = None

indicative portfolio - WA floating spread

was_low_recommend: float = None

trading scenario recommendation for spread tightening

class OutputStep2(time_elapsed=None, pool_expected_EAD=None, implied_correlation=None, moments=None, default_hurdle_rates=None, cutpoint_tenors=None, tranche_results=None, **kwargs)

Bases: object

Master data structure that represents the inputs to model_clo_insight.app.step_2_run_indicative_pool()

cutpoint_tenors: List[float] = None

tenor assumptions used for the IDT percentiling (expected tranche maturities)

default_hurdle_rates: List[float] = None

result of the predictice model - rating-based cumulative default rate hurdles

implied_correlation: float = None

implied correlation metric (Vasicek correlation that produces the same variance as the monte carlo)

moments: List[float] = None

statistical moments (mean, variance, skewness, kurtosis)

pool_expected_EAD: float = None

expected exposure-at-default (EAD)

time_elapsed: float = None

time in seconds to run the monte carlo simulation

tranche_results: List[model_clo_insight.clo_external_data_contracts.CLOTrancheOutputStep2] = None

tranche summary result table

class OutputStep3(scenarios=None, scenario_hypo_results=None, **kwargs)

Bases: object

Master data structure that represents the outputs to model_clo_insight.app.step_3_build_trading_scenarios()

scenario_hypo_results: List[model_clo_insight.clo_external_data_contracts.TradingScenarioHypoResultRow] = None

instances of TradingScenarioHypoResultRow that represent the results of the hypo pool generator for each TradingScenarioRow

scenarios: List[model_clo_insight.clo_external_data_contracts.TradingScenarioRow] = None

instances of TradingScenarioRow that represent the trading scenarios generated by step 3

class OutputStep4a(cf_named_range=None, cf_scenario_lookup=None, cf_scenario_data=None, is_on_category=None, **kwargs)

Bases: object

Master data structure that represents the outputs to model_clo_insight.app.step_4a_generate_cf_scenarios()

cf_named_range: List[model_clo_insight.clo_external_data_contracts.CFNamedRangeRow] = None

lookup key for cash flow modeling - Excel named ranges for dynamic runner

cf_scenario_data: List[List[float]] = None

values for cash flow dynamic runner

cf_scenario_lookup: List[int] = None

lookup that maps each Trading Scenario row to the unique CF scenario

is_on_category: List[str] = None

shows category of is on choices for each scenario

class OutputStep4b(hypo_exception_results=None, hypo_exception_headers=None, default_hurdle_matrix=None, pooling_diagnostics=None, **kwargs)

Bases: object

default_hurdle_matrix: List[List[float]] = None

matrix of cumulative default hurdle rates from the predictive model simulation

hypo_exception_headers: List[str] = None

headers of matrix for conc lim exceptions

hypo_exception_results: List[model_clo_insight.clo_external_data_contracts.HypoException] = None

matrix of the realized concentration limitation exceptions from the hypo pool generator

pooling_diagnostics: List[model_clo_insight.clo_external_data_contracts.PoolingDiagnosticRow] = None

instances of PoolingDiagnosticRow that represent the diagnostics from the simulation

class OutputStep5(tranche_summary_results=None, detailed_diagnostics_bdr=None, detailed_diagnostics_hurdle=None, detailed_diagnostics_cushion=None, bdr_headers=None, hurdle_headers=None, cushion_headers=None, **kwargs)

Bases: object

bdr_headers: List[str] = None

BDR headers

cushion_headers: List[str] = None

cushion headers

detailed_diagnostics_bdr: List[model_clo_insight.clo_external_data_contracts.DetailedDiagnosticRow] = None

prints out bdr for each scenario

detailed_diagnostics_cushion: List[model_clo_insight.clo_external_data_contracts.DetailedDiagnosticRow] = None

prints out cushions for each scenario

detailed_diagnostics_hurdle: List[model_clo_insight.clo_external_data_contracts.DetailedDiagnosticRow] = None

prints out hurdle rates for each scenario

hurdle_headers: List[str] = None

hurdle headers

tranche_summary_results: List[model_clo_insight.clo_external_data_contracts.CLOTrancheOutputStep5] = None

instances of CLOTrancheOutputStep5 that represent the final tranche summary analysis across all the trading scenarios

class PoolStratRow(Name=None, Count=None, Par=None, Percent=None, **kwargs)

Bases: object

Table row that contains the pool strats outputs from step 1

Count: int = None

count of name type in indicative portfolio

Name: str = None

value being calculated, ie seniority, country etc

Par: float = None

total par of name type in indicative portfolio

Percent: float = None

percent of name type in indicative portfolio

class PoolingDiagnosticRow(time_elapsed=None, max_risk_score=None, dscore=None, pool_expected_ead=None, implied_correl=None, moment_1=None, moment_2=None, moment_3=None, moment_4=None, AAA_wal=None, AA_wal=None, A_wal=None, BBB_wal=None, BB_wal=None, B_wal=None, **kwargs)

Bases: object

Table row that contains the diagnostic info from the predictive model simulation

AAA_wal: float = None

effective weighted average life for AAA

AA_wal: float = None

effective weighted average life for AA

A_wal: float = None

effective weighted average life for A

BBB_wal: float = None

effective weighted average life for BBB

BB_wal: float = None

effective weighted average life for BB

B_wal: float = None

effective weighted average life for B

dscore: float = None

dscore from scenarios generated

implied_correl: float = None

implied correlation metric (Vasicek correlation that produces the same variance as the monte carlo)

max_risk_score: float = None

max risk score from scenarios generated

moment_1: float = None

EX - mean

moment_2: float = None

EX^2 - variance

moment_3: float = None

EX^3 - skewness

moment_4: float = None

EX^4 - kurtosis

pool_expected_ead: float = None

expected exposure-at-default (EAD)

time_elapsed: float = None

time (in seconds) that the simulation took

class RatingVectorData(AAA=None, AAH=None, AA=None, AAL=None, AH=None, A=None, AL=None, BBBH=None, BBB=None, BBBL=None, BBH=None, BB=None, BBL=None, BH=None, B=None, BL=None, CCCH=None, CCC=None, CCCL=None)

Bases: object

Used to store vectors of rating-based assumptions (e.g. recovery rates) or model outputs (e.g. default hurdle rates)

A: float = None

rating based assumption for A

AA: float = None

rating based assumption for AA

AAA: float = None

rating based assumption for AAA

AAH: float = None

rating based assumption for AAH

AAL: float = None

rating based assumption for AAL

AH: float = None

rating based assumption for AH

AL: float = None

rating based assumption for AL

B: float = None

rating based assumption for B

BB: float = None

rating based assumption for BB

BBB: float = None

rating based assumption for BBB

BBBH: float = None

rating based assumption for BBBH

BBBL: float = None

rating based assumption for BBBL

BBH: float = None

rating based assumption for BBH

BBL: float = None

rating based assumption for BBL

BH: float = None

rating based assumption for BH

BL: float = None

rating based assumption for BL

CCC: float = None

rating based assumption for CCC

CCCH: float = None

rating based assumption for CCCH

CCCL: float = None

rating based assumption for CCCL

class RecoveryLags(tier1=None, tier2=None, tier3=None, **kwargs)

Bases: object

list that shows overriden recovery lags

tier1: float = None

Recovery Lag for Tier 1

tier2: float = None

Recovery Lag for Tier 2

tier3: float = None

Recovery Lag for Tier 3

class TradingScenarioHypoResultRow(credit_result=None, bdr=None, adj_bdr=None, sdr=None, monitor_cushion=None, risk_score=None, warf=None, credit_dispersion=None, dscore=None, ob_base=None, ind_base=None, n_assets=None, diversity_result=None, **kwargs)

Bases: object

Table row for the results of the hypo pool solver

adj_bdr: float = None

CDO Monitor result adjusted for par loss/gain (as per the logic in the transaction documents)

bdr: float = None

CDO Monitor BDR result

credit_dispersion: float = None

weighted variance of the loan PDs

credit_result: int = None

True if a rating mixture was found that satisfies the constraints

diversity_result: str = None

detailed message of how the pool was solved

dscore: int = None

realized diversity score

ind_base: float = None
monitor_cushion: float = None

adj_bdr - sdr

n_assets: int = None

realized number of assets

ob_base: float = None

realized base obligor concentration limitation

risk_score: float = None

realized WA DBRSM risk score

sdr: float = None

CDO Monitor SDR result

warf: float = None

realized WARF

class TradingScenarioIsOnRow(is_AAA=None, is_AA_BBB=None, is_BB_CCC=None, **kwargs)

Bases: object

Table row for the users selection of which trading scenarios to turn on

is_AAA: bool = None

run the scenario for AAA rating stress

is_AA_BBB: bool = None

run the scenario for investment grade rating stress

is_BB_CCC: bool = None

run the scenario for sub-investment grade rating stress

class TradingScenarioRecommendedValues(relative_was_drift, dscore_high, dscore_low, max_warf_drift, monitor_wal, trading_scenario_start_period, AAA_was_recommend)

Bases: object

Contains the recommended values for the trading scenarios

AAA_was_recommend: List[float]

entire permitted WAS range as per the transaction documents. User chooses how granular to discretize

dscore_high: int

level of diversity score constraint in the increase divesrity scenario

dscore_low: int

level of diversity score constraint in the decrease divesrity scenario

max_warf_drift: float

maximum increase in WARF in the Max Risky scenarios

monitor_wal: float

weighted average life used in the Monitor calculations

relative_was_drift: float

relative % decline in the WAS (starting from current WAS)

trading_scenario_start_period: int

the period to assume the pro-forma trading scenarios start

class TradingScenarioRow(scenario=None, spread_selection=None, credit_selection=None, pool_par=None, conc_limit_basis=None, was=None, dscore=None, seniority=None, warr=None, max_risk_score=None, amort_tail=None, is_AAA=None, is_AA_BBB=None, is_BB_CCC=None, **kwargs)

Bases: object

Table row for a trading scenario

amort_tail: float = None

modeling amort tail years

conc_limit_basis: float = None

conc limit basis

credit_selection: str = None

as of close, max risky

Type

WA credit risk

dscore: int = None

diversity score

is_AAA: int = None

run the scenario for AAA rating stress

is_AA_BBB: int = None

run the scenario for investment grade rating stress

is_BB_CCC: int = None

run the scenario for sub-investment grade rating stress

max_risk_score: float = None

WA credit risk

pool_par: float = None

pool par (varies for ramp-up CLOs)

scenario: int = None

id (1 to n)

seniority: int = None

seniority regime (1,2 or 3), used for modes 1 & 2

spread_selection: str = None

as of close, tighten, full range

Type

WAS

warr: float = None

WA recovery rate, used for mode 3

was: float = None

WA spread (WAS)