/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 ĠContributors Ġto Ġthe ĠThe ta Ġproject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġhu . b me . mit . theta . inter change . j ani . model Ċ Ċ import Ġcom . fasterxml . jackson . annotation . Json Format Ċ import Ġcom . fasterxml . jackson . annotation . JsonIgnore Properties Ċ import Ġcom . fasterxml . jackson . annotation . JsonInclude Ċ import Ġcom . fasterxml . jackson . annotation . JsonProperty Ċ import Ġcom . fasterxml . jackson . annotation . Json TypeName Ċ import Ġcom . fasterxml . jackson . annotation . JsonValue Ċ import Ġcom . fasterxml . jackson . databind . annotation . Json Deserialize Ċ import Ġhu . b me . mit . theta . inter change . j ani . model . json . False Value Filter Ċ import Ġhu . b me . mit . theta . inter change . j ani . model . json . J ani Json Multi Op Ċ import Ġhu . b me . mit . theta . inter change . j ani . model . json . State Predicate Conversion Predicate Ċ import Ġhu . b me . mit . theta . inter change . j ani . model . json . State Predicate Deserializer Ċ Ċ type alias ĠProperty Expression Ġ= ĠExpression Ċ Ċ @ Json TypeName (" filter ") Ċ data Ġclass ĠFilter Expression ( ĊĠĠĠ Ġ@ param : JsonProperty (" fun ") Ġ@ get : JsonProperty (" fun ") Ġval Ġfunction : ĠFilter , ĊĠĠĠ Ġval Ġvalues : ĠProperty Expression , ĊĠĠĠ Ġval Ġstates : ĠProperty Expression Ċ ) Ġ: ĠProperty Expression Ċ Ċ enum Ġclass ĠFilter (@ get : JsonValue Ġval Ġfunction Name : ĠString ) Ġ{ ĊĠĠĠ ĠMIN (" min "), ĊĠĠĠ ĠMAX (" max "), ĊĠĠĠ ĠSUM (" sum "), ĊĠĠĠ ĠAV G (" avg "), ĊĠĠĠ ĠCOUNT (" count "), ĊĠĠĠ ĠFOR ALL (" âĪ Ģ "), ĊĠĠĠ ĠEXISTS (" âĪ ĥ "), ĊĠĠĠ ĠARG MIN (" arg min "), ĊĠĠĠ ĠARG MAX (" argmax "), ĊĠĠĠ ĠVALUES (" values "); ĊĊĠĠĠ Ġfun Ġof ( values : ĠProperty Expression , Ġstates : ĠProperty Expression ): ĠFilter Expression Ġ= ĊĠĠĠĠĠĠĠ ĠFilter Expression ( this , Ġvalues , Ġstates ) Ċ } Ċ Ċ @ J ani Json Multi Op Ċ data Ġclass ĠUnary Property Expression ( val Ġop : ĠUnary Property Op Like , Ġval Ġexp : ĠProperty Expression ) Ġ: ĠProperty Expression Ċ Ċ enum Ġclass ĠEx tre me Value Ġ{ ĊĠĠĠ ĠMIN , ĊĠĠĠ ĠMAX Ċ } Ċ Ċ enum Ġclass ĠProb ability Op ( val Ġextreme Value : ĠEx tre me Value ) Ġ: ĠUnary Property Op Like Ġ{ ĊĠĠĠ ĠMIN ( Ext reme Value . MIN ), ĊĠĠĠ ĠMAX ( Ext reme Value . MAX ); ĊĊĠĠĠ Ġoverride Ġval Ġop Name : ĠString Ġ= Ġ" P ${ name . toLowerCase () }" Ċ } Ċ Ċ enum Ġclass ĠPath Quant ifier ( override Ġval Ġop Name : ĠString ) Ġ: ĠUnary Property Op Like Ġ{ ĊĠĠĠ ĠFOR ALL (" âĪ Ģ "), ĊĠĠĠ ĠEXISTS (" âĪ ĥ ") Ċ } Ċ Ċ enum Ġclass ĠExpect ation Op ( val Ġextreme Value : ĠEx tre me Value ) Ġ: ĠNamed Op Like Ġ{ ĊĠĠĠ ĠMIN ( Ext reme Value . MIN ), ĊĠĠĠ ĠMAX ( Ext reme Value . MAX ); ĊĊĠĠĠ Ġoverride Ġval Ġop Name : ĠString Ġ= Ġ" E ${ name . toLowerCase () }" ĊĊĠĠĠ Ġ@ Suppress (" Long Parameter List ") ĊĠĠĠ Ġfun Ġof ( ĊĠĠĠĠĠĠĠ Ġexp : ĠExpression , ĊĠĠĠĠĠĠĠ Ġaccum ulate : ĠSet < Reward Accum ulation > Ġ= Ġempty Set (), ĊĠĠĠĠĠĠĠ Ġreach : ĠProperty Expression ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġstep Instant : ĠExpression ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġtime Instant : ĠExpression ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġreward Inst ants : ĠList < Reward Instant > Ġ= Ġempty List () ĊĠĠĠ Ġ): ĠExpect ation Ġ= ĠExpect ation ( ĊĠĠĠĠĠĠĠ Ġthis , Ġexp , Ġaccum ulate , Ġreach , Ġstep Instant , Ġtime Instant , Ġreward Inst ants ĊĠĠĠ Ġ) Ċ } Ċ Ċ @ J ani Json Multi Op Ċ data Ġclass ĠExpect ation ( ĊĠĠĠ Ġval Ġop : ĠExpect ation Op , ĊĠĠĠ Ġval Ġexp : ĠExpression , ĊĠĠĠ Ġval Ġaccum ulate : ĠSet < Reward Accum ulation >, ĊĠĠĠ Ġval Ġreach : ĠProperty Expression ?, ĊĠĠĠ Ġval Ġstep Instant : ĠExpression ?, ĊĠĠĠ Ġval Ġtime Instant : ĠExpression ?, ĊĠĠĠ Ġval Ġreward Inst ants : ĠList < Reward Instant > Ċ ) Ġ: ĠProperty Expression Ċ Ċ data Ġclass ĠRew ard Instant ( ĊĠĠĠ Ġval Ġexp : ĠExpression , ĊĠĠĠ Ġval Ġaccum ulate : ĠSet < Reward Accum ulation >, ĊĠĠĠ Ġval Ġinstant : ĠExpression Ċ ) Ċ Ċ enum Ġclass ĠRew ard Accum ulation Ġ{ ĊĠĠĠ Ġ@ JsonProperty (" steps ") ĊĠĠĠ ĠSTE PS , ĊĊĠĠĠ Ġ@ JsonProperty (" time ") ĊĠĠĠ ĠTIME , ĊĊĠĠĠ Ġ@ JsonProperty (" exit ") ĊĠĠĠ Ġ@ J ani Extension ( Model Feature . STATE _ EXIT _ RE WAR DS ) ĊĠĠĠ ĠEXIT ; Ċ } Ċ Ċ enum Ġclass ĠSte ady State Op ( val Ġextreme Value : ĠEx tre me Value ) Ġ: ĠUnary Property Op Like Ġ{ ĊĠĠĠ ĠMIN ( Ext reme Value . MIN ), ĊĠĠĠ ĠMAX ( Ext reme Value . MAX ); ĊĊĠĠĠ Ġoverride Ġval Ġop Name : ĠString Ġ= Ġ" S ${ name . toLowerCase () }" Ċ } Ċ Ċ interface ĠPath Expression Ġ: ĠProperty Expression Ġ{ ĊĠĠĠ Ġval Ġstep Bounds : ĠProperty Interval ? ĊĠĠĠ Ġval Ġtime Bounds : ĠProperty Interval ? ĊĠĠĠ Ġval Ġreward Bounds : ĠList < Reward Bound > Ċ } Ċ Ċ data Ġclass ĠRew ard Bound ( val Ġexp : ĠExpression , Ġval Ġaccum ulate : ĠSet < Reward Accum ulation >, Ġval Ġbounds : ĠProperty Interval ) Ċ Ċ data Ġclass ĠProperty Interval ( ĊĠĠĠ Ġval Ġlower : ĠExpression ? Ġ= Ġnull , ĊĠĠĠ Ġ@ get : JsonInclude ( JsonInclude . Include . CUSTOM , Ġvalue Filter Ġ= ĠFalse Value Filter :: class ) ĊĠĠĠ Ġval Ġlower Exclusive : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġval Ġupper : ĠExpression ? Ġ= Ġnull , ĊĠĠĠ Ġ@ get : JsonInclude ( JsonInclude . Include . CUSTOM , Ġvalue Filter Ġ= ĠFalse Value Filter :: class ) ĊĠĠĠ Ġval Ġupper Exclusive : ĠBoolean Ġ= Ġfalse Ċ ) Ċ Ċ enum Ġclass ĠBinary Path Op Ġ: ĠBinary Path Op Like Ġ{ ĊĠĠĠ ĠU , ĠW ; ĊĊĠĠĠ Ġoverride Ġval Ġop Name : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġname Ċ } Ċ Ċ @ J ani Json Multi Op Ċ data Ġclass ĠBinary Path Expression ( ĊĠĠĠ Ġval Ġop : ĠBinary Path Op Like , ĊĠĠĠ Ġval Ġleft : ĠProperty Expression , ĊĠĠĠ Ġval Ġright : ĠProperty Expression , ĊĠĠĠ Ġoverride Ġval Ġstep Bounds : ĠProperty Interval ? Ġ= Ġnull , ĊĠĠĠ Ġoverride Ġval Ġtime Bounds : ĠProperty Interval ? Ġ= Ġnull , ĊĠĠĠ Ġoverride Ġval Ġreward Bounds : ĠList < Reward Bound > Ġ= Ġempty List () Ċ ) Ġ: ĠPath Expression Ċ Ċ @ J ani Json Multi Op ( predicate Ġ= ĠState Predicate Conversion Predicate :: class ) Ċ @ Json Format ( shape Ġ= ĠJson Format . Shape . OBJECT ) Ċ // ĠThe Ġdeclaring - class Ġproperty Ġshows Ġup Ġsp ur iously Ġat Ġserialization Ġunless Ġit Ġis Ġignored . Ċ @ JsonIgnore Properties (" decl aring - class ") Ċ @ Json Deserialize ( using Ġ= ĠState Predicate Deserializer :: class ) Ċ enum Ġclass ĠState Predicate ( ĊĠĠĠ Ġ@ get : JsonProperty ( Expression . OP _ PROPERTY _ NAME ) Ġval Ġpredicate Name : ĠString Ċ ) Ġ: ĠExpression Ġ{ ĊĠĠĠ ĠINITIAL (" initial "), ĊĠĠĠ ĠDE AD LOCK (" dead lock "), ĊĠĠĠ ĠTIME LOCK (" time lock "); ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġnames To Pred icates Map Ġ= Ġvalues (). map Ġ{ Ġit . predicate Name Ġto Ġit Ġ}. toMap () ĊĊĠĠĠĠĠĠĠ Ġfun Ġis State Predicate ( predicate Name : ĠString ): ĠBoolean Ġ= Ġnames To Pred icates Map . containsKey ( predicate Name ) ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġfrom Predicate Name ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ JsonProperty ( Expression . OP _ PROPERTY _ NAME ) Ġpredicate Name : ĠString ĊĠĠĠĠĠĠĠ Ġ): ĠState Predicate Ġ= Ġnames To Pred icates Map [ predicate Name ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" Unknown Ġstate Ġpredicate : Ġ$ predicate Name ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ enum Ġclass ĠDerived Binary Path Op Ġ: ĠBinary Path Op Like Ġ{ ĊĠĠĠ ĠR ; ĊĊĠĠĠ Ġoverride Ġval Ġop Name : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġname Ċ } Ċ Ċ @ J ani Extension ( Model Feature . DER IVED _ OPER ATORS ) Ċ enum Ġclass ĠUnary Path Op Ġ{ ĊĠĠĠ ĠF , ĠG ; ĊĊĠĠĠ Ġfun Ġof ( ĊĠĠĠĠĠĠĠ Ġexp : ĠProperty Expression , ĊĠĠĠĠĠĠĠ Ġstep Bounds : ĠProperty Interval ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġtime Bounds : ĠProperty Interval ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġreward Bounds : ĠList < Reward Bound > Ġ= Ġempty List () ĊĠĠĠ Ġ): ĠUnary Path Expression Ġ= ĠUnary Path Expression ( this , Ġexp , Ġstep Bounds , Ġtime Bounds , Ġreward Bounds ) Ċ } Ċ Ċ @ J ani Json Multi Op Ċ @ J ani Extension ( Model Feature . DER IVED _ OPER ATORS ) Ċ data Ġclass ĠUnary Path Expression ( ĊĠĠĠ Ġval Ġop : ĠUnary Path Op , ĊĠĠĠ Ġval Ġexp : ĠProperty Expression , ĊĠĠĠ Ġoverride Ġval Ġstep Bounds : ĠProperty Interval ? Ġ= Ġnull , ĊĠĠĠ Ġoverride Ġval Ġtime Bounds : ĠProperty Interval ? Ġ= Ġnull , ĊĠĠĠ Ġoverride Ġval Ġreward Bounds : ĠList < Reward Bound > Ġ= Ġempty List () Ċ ) Ġ: ĠPath Expression Ċ