Entity: CDO 20 78 null * ps0 double 3 false false false Operation: P CDO double k int m int query true result = StatFunc.comb(sectors[k].n,m) * ( sectors[k].nocontagion(m) + Integer.Sum(1,m - 1,i,sectors[k].contagion(i,m)) ) Operation: PCond CDO double k int m int query true ( m >= 1 => result = P(k,m) / ( 1 - ( ( 1 - sectors[k].p )->pow(sectors[k].n) ) ) ) & ( m < 1 => result = 0 ) Operation: maxfails CDO int k int s int query true ( sectors[k].n <= ( s / sectors[k].L ) => result = sectors[k].n ) & ( sectors[k].n > ( s / sectors[k].L ) => result = s / sectors[k].L ) Operation: PS CDO double s int query cached true ( s < 0 => result = 0 ) & ( s = 0 => result = ps0 ) & ( s > 0 => result = Integer.Sum(1,sectors.size,k,VS(k,s)) / s ) Operation: VS CDO double k int s int query true result = Integer.Sum(1,maxfails(k,s),mk,( sectors[k].mu * mk * sectors[k].L * PCond(k,mk) * PS(s - mk * sectors[k].L) )) Operation: PLim CDO double s int query true ( s <= 0 => result = 1 ) & ( s > 0 => result = 1 - Integer.Sum(1,s - 1,k,PS(k)) ) Entity: Sector 349 49 null * name String 3 false false false n int 3 false false false p double 3 false false false q double 3 false false false L int 3 false false false mu double 3 false false false Operation: nocontagion Sector double m int query cached true result = ( ( 1 - p )->pow(n - m) ) * ( p->pow(m) ) * ( ( 1 - q )->pow(m * ( n - m )) ) Operation: contagion Sector double i int m int query true result = ( ( 1 - p )->pow(n - i) ) * ( p->pow(i) ) * ( ( 1 - q )->pow(i * ( n - m )) ) * ( ( 1 - ( ( 1 - q )->pow(i) ) )->pow(m - i) ) * StatFunc.comb(m,i) Entity: StatFunc 615 29 null * Operation: comb StatFunc int n int m int query static n >= m & m >= 0 ( n - m < m => result = Integer.Prd(m + 1,n,i,i) / Integer.Prd(1,n - m,j,j) ) & ( n - m >= m => result = Integer.Prd(n - m + 1,n,i,i) / Integer.Prd(1,m,j,j) ) Entity: Borrower 682 84 null * name String 3 false false false L int 3 false false false Entity: BorrowerInSector 684 237 null * omega double 3 false false false theta double 3 false false false Association: CDO Sector 1 173 108 343 184 0 sectors null ordered Association: Sector BorrowerInSector 1 544 78 690 234 0 sectorborrowers null Association: BorrowerInSector Borrower 0 789 235 785 145 1 borrower null GeneralUseCase: calculateRisk false Constraint: s : sectors true s.mu = 1 - ( ( 1 - s.p )->pow(s.n) ) CDO calculateRisk false Constraint: null true ps0 = -sectors.mu.sum->exp() CDO calculateRisk false Constraint: null true Integer.subrange(0,40)->forAll( s | PLim(s)->display() ) CDO calculateRisk false GeneralUseCase: deriveSectorLoss false Constraint: null true L = sectorborrowers->collect(borrower.L * omega * theta)->sum()->round() Sector deriveSectorLoss false