package Ġsh mp . lang . generator Ċ Ċ import Ġsh mp . lang . generator . util . Data Consistency Exception Ċ import Ġsh mp . lang . language . category . value . Abstract Category Value Ċ import Ġsh mp . lang . language . category .* Ċ import Ġsh mp . lang . language . category . value . Category Value Ċ import Ġsh mp . lang . language . category . par adig m . S ourced Category Ċ import Ġsh mp . lang . language . lex is . Speech Part Ċ import Ġsh mp . random . singleton . chance Of ĊĊ Ċ class ĠCategory Generator Ġ{ ĊĠĠĠ Ġinternal Ġfun Ġrandom Categories (): ĠList < Supp lement ed Category > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdefaults Ġ= Ġmutable ListOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrandom Category ({ Ġl : ĠList < Person Value >, Ġs , Ġss Ġ-> ĠPerson ( l , Ġs , Ġss ) Ġ}, ĠPerson Random Supp lement s ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrandom Category ({ Ġl : ĠList < In clus ivity Value >, Ġs , Ġss Ġ-> ĠIn clus ivity ( l , Ġs , Ġss ) Ġ}, ĠIn clus ivity Random Supp lement s ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrandom Category ({ Ġl : ĠList < Def init eness Value >, Ġs , Ġss Ġ-> ĠDef init eness ( l , Ġs , Ġss ) Ġ}, ĠDef init eness Random Supp lement s ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrandom Category ({ Ġl : ĠList < No un Class Value >, Ġs , Ġss Ġ-> ĠNo un Class ( l , Ġs , Ġss ) Ġ}, ĠNo un Class Random Supp lement s ()), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrandom Category ({ Ġl : ĠList < Anim osity Value >, Ġs , Ġss Ġ-> ĠAnim osity ( l , Ġs , Ġss ) Ġ}, ĠAnim osity Random Supp lement s ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrandom Category ({ Ġl : ĠList < Number Value >, Ġs , Ġss Ġ-> ĠNumber ( l , Ġs , Ġss ) Ġ}, ĠNumber Random Supp lement s ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrandom Category ({ Ġl : ĠList < Tense Value >, Ġs , Ġss Ġ-> ĠT ense ( l , Ġs , Ġss ) Ġ}, ĠT ense Random Supp lement s ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrandom Category ({ Ġl : ĠList < Neg ation Value >, Ġs , Ġss Ġ-> ĠNeg ation ( l , Ġs , Ġss ) Ġ}, ĠNeg ation Random Supp lement s ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrandom Category ({ Ġl : ĠList < De ix is Value >, Ġs , Ġss Ġ-> ĠDe ix is ( l , Ġs , Ġss ) Ġ}, ĠDe ix is Random Supp lement s ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcase Category Ġ= Ġrandom Category ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġl : ĠList < Case Value >, Ġs , Ġss Ġ-> ĠCase ( l , Ġs , Ġss ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCase Random Supp lement s () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġdefaults Ġ+= Ġcase Category ĊĊĠĠĠĠĠĠĠ Ġval Ġabsent Sc enarios Ġ= Ġcase Category . first . all Possible Values ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit Ġ! in Ġcase Category . first . actual Values Ġ&& Ġit Ġin Ġnon Core Cases Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( abs ent Sc enarios . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalues Ġ= Ġabsent Sc enarios ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠAbstract Category Value ( it . semantics Core , Ġad position Name , Ġit . alias ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġall Possible Values Ġ= Ġcase Category . first . all Possible Values ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠAbstract Category Value ( it . semantics Core , Ġad position Name , Ġit . alias ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toSet () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaffected Speech Parts And Sources Ġ= Ġrandom Affected Speech Parts ( Ad position Random Supp lement s ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġad position Category Ġ= ĠAbstract Change Category ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalues , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Possible Values , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaffected Speech Parts And Sources , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Of (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġad position Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefaults Ġ+= Ġad position Category Ġto ĠAd position Random Supp lement s ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġdefaults ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< E : ĠCategory Value > Ġrandom Category ( ĊĠĠĠĠĠĠĠ Ġconstructor : Ġ( List < E >, ĠSet < PS peech Part >, ĠSet < Speech Part >) Ġ-> ĠCategory , ĊĠĠĠĠĠĠĠ Ġsupp lement s : ĠCategory Random Supp lement s ĊĠĠĠ Ġ): ĠSup p lement ed Category Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpresent Elements Ġ= Ġsupp lement s . random Real ization () ĊĠĠĠĠĠĠĠ Ġval Ġaffected Speech Parts And Sources Ġ= Ġrandom Affected Speech Parts ( supp lement s ) ĊĠĠĠĠĠĠĠ Ġval Ġaffected Speech Parts Ġ= Ġaffected Speech Parts And Sources . map Ġ{ Ġit . speech Part Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġstatic Speech Parts Ġ= Ġsupp lement s . random Static Speech Parts () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit Ġin Ġaffected Speech Parts Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toSet () ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġconstructor ( present Elements Ġas ĠList < E >, Ġaffected Speech Parts And Sources , Ġstatic Speech Parts ) Ġto Ġsupp lement s ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠData Consistency Exception (" Wrong Ġsupp lement s Ġwith Ġname Ġ${ supp lement s . java Class . name }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrandom Affected Speech Parts ( supp lement s : ĠCategory Random Supp lement s ): ĠSet < PS peech Part > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmax Ġ= ĠSpeech Part . values () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġsupp lement s . speech Part Prob abilities ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . probability Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. max OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠData Consistency Exception (" No ĠSpeech Part Ġexists ") ĊĊĠĠĠĠĠĠĠ Ġreturn ĠSpeech Part . values (). flatMap Ġ{ Ġspeech Part Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupp lement s . speech Part Prob abilities ( speech Part ). map NotNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprobability Ġ= Ġit . probability Ġ/ Ġmax ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprobability . chance Of < Source Template > Ġ{ Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. map Ġ{ ĠPS peech Part ( speech Part , Ġit . source ) Ġ} ĊĠĠĠĠĠĠĠ Ġ}. toSet () ĊĠĠĠ Ġ} Ċ } Ċ Ċ type alias ĠSup p lement ed Category Ġ= ĠPair < Category , ĠCategory Random Supp lement s > Ċ type alias ĠSup p lement ed S ourced Category Ġ= ĠPair < S ourced Category , ĠCategory Random Supp lement s > Ċ