package Ġprocessing . transforms . matrix . solver Ċ Ċ import Ġbenchmark . Solver Ċ import Ġbenchmark . Solver Benchmark Result Ċ import Ġgit . Benchmark Result Ċ import Ġprocessing . Categor ical Option Ċ import Ġprocessing . Plot Option Ċ import Ġprocessing . Plot Type Ċ import Ġprocessing . transforms . Bar Chart Dataset Ċ import Ġprocessing . transforms . Invalid Plot Config Value Exception Ċ import Ġprocessing . transforms . Plot Configuration Ċ import Ġprocessing . transforms . Plot table Data Ċ import Ġprocessing . transforms . matrix . Matrix Options Ċ Ċ class ĠSolver Runtime Break down Ġ: ĠSolver Plot Transform () Ġ{ ĊĠĠĠ Ġoverride Ġval Ġnum Inputs Range Ġ= Ġ 1 .. 1 ĊĠĠĠ Ġoverride Ġval Ġplot table As Ġ= ĠlistOf ( Plot Type . Bar ) ĊĠĠĠ Ġoverride Ġval Ġname Ġ= Ġ" Runtime ĠBreak down " ĊĊĠĠĠ Ġprivate Ġval Ġcomponents Option Ġ= ĠCategor ical Option ( ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġ" components ", ĊĠĠĠĠĠĠĠ Ġoptions Ġ= ĠarrayOf (" apply ", Ġ" generate "), ĊĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" Which Ġcomponents Ġto Ġplot " ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġtotal Time Option Ġ= ĠCategor ical Option ( ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġ" total Time ", ĊĠĠĠĠĠĠĠ Ġoptions Ġ= ĠarrayOf (" sum Components ", Ġ" given Value "), ĊĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" Take Ġthe Ġtotal Ġtime Ġgiven Ġin Ġthe Ġbenchmark Ġor Ġthe Ġsum Ġof Ġall Ġruntime s " ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun Ġget Matrix Plot Options ( results : ĠList < Benchmark Result >): ĠList < Plot Option > Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠ ĠMatrix Options . matrix . real ize Option ( results . to Typed Array ()), ĊĠĠĠĠĠĠĠ Ġcomponents Option , ĊĠĠĠĠĠĠĠ Ġtotal Time Option , ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun Ġtransform Solver ( ĊĠĠĠĠĠĠĠ Ġbenchmark Results : ĠList < Solver Benchmark Result >, ĊĠĠĠĠĠĠĠ Ġconfig : ĠPlot Configuration , ĊĠĠĠ Ġ): ĠPlot table Data Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdatap oint Ġ= Ġbenchmark Results . first (). datap oints . find Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . name Ġ== Ġconfig . getC ategor ical Option ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMatrix Options . matrix ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠInvalid Plot Config Value Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . getC ategor ical Option ( Matrix Options . matrix ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMatrix Options . matrix . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġseries ByName : ĠMutable Map < String , ĠMutable List < Double >> Ġ= Ġmutable Map Of () ĊĠĠĠĠĠĠĠ Ġval Ġall Component Names Ġ= Ġdatap oint . sol vers . fold ( emptyList < String >()) Ġ{ Ġacc , Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġacc Ġ+ Ġe . get Components By Option ( config ). map Ġ{ Ġit . name Ġ} ĊĠĠĠĠĠĠĠ Ġ}. toSet (). toList () ĊĊĠĠĠĠĠĠĠ Ġval Ġlabels : ĠMutable List < String > Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġfor Ġ( solver Ġin Ġdatap oint . sol vers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! solver . completed ) Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlabels Ġ+= Ġsolver . name ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomponents Ġ= Ġsolver . get Components By Option ( config ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtotal Time Ġ= Ġsolver . getTotal Time By Option ( config ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( component Name Ġin Ġall Component Names ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġseries ByName . get Or Put ( component Name ) Ġ{ Ġmutable ListOf () Ġ} Ġ+= Ġcomponents . find Ġ{ Ġit . name Ġ== Ġcomponent Name Ġ} ?. runtime ?. div ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Time ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ?: Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠPlot table Data ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlabels Ġ= Ġlabels . to Typed Array (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdatasets Ġ= Ġseries ByName . map Ġ{ ĠBar Chart Dataset ( it . key , Ġit . value . to Typed Array ()) Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠSolver . get Components By Option ( config : ĠPlot Configuration ) Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( config . getC ategor ical Option ( components Option )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" apply " Ġ-> Ġthis . apply Components ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" generate " Ġ-> Ġthis . generate Components ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠInvalid Plot Config Value Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . getC ategor ical Option ( components Option ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomponents Option . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠSolver . getTotal Time By Option ( config : ĠPlot Configuration ) Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( config . getC ategor ical Option ( components Option )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" apply " Ġ-> Ġthis . get Apply Total Time By Option ( config ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" generate " Ġ-> Ġthis . get Generate Total Time By Option ( config ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠInvalid Plot Config Value Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . getC ategor ical Option ( components Option ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomponents Option . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠSolver . get Generate Total Time By Option ( config : ĠPlot Configuration ) Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( config . getC ategor ical Option ( total Time Option )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" sum Components " Ġ-> Ġthis . generate Components . sum Of Ġ{ Ġit . runtime Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" given Value " Ġ-> Ġthis . generate Total Time ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠInvalid Plot Config Value Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . getC ategor ical Option ( total Time Option ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Time Option . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠSolver . get Apply Total Time By Option ( config : ĠPlot Configuration ) Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( config . getC ategor ical Option ( total Time Option )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" sum Components " Ġ-> Ġthis . apply Components . sum Of Ġ{ Ġit . runtime Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" given Value " Ġ-> Ġthis . apply Total Time ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠInvalid Plot Config Value Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . getC ategor ical Option ( total Time Option ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Time Option . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ