identifier fun identifier generateScalingPlot ( identifier logs : identifier List < identifier ParEpLog > , identifier graphs : identifier Array < identifier String > , identifier k : identifier Int , identifier allowedNumberOfCores : identifier Array < identifier Int > , identifier filename : identifier String , identifier aspect : ( identifier ParEpLog ) - > identifier Double ) { identifier println ( identifier string ) identifier val identifier filtered = identifier logs . identifier filter { identifier it . identifier graphName identifier in identifier graphs && identifier it . identifier numberOfCores identifier in identifier allowedNumberOfCores && identifier it . identifier k == identifier k } identifier val identifier runtimes = identifier filtered . identifier groupBy { identifier Pair ( identifier it . identifier graphName , identifier it . identifier numberOfCores ) } . identifier mapValues { ( identifier _ , identifier values ) - > identifier values . identifier map ( identifier aspect ) . identifier average ( ) } identifier File ( identifier filename ) . identifier bufferedWriter ( ) . identifier use { for ( identifier graph identifier in identifier graphs ) { for ( identifier numberOfCores identifier in identifier allowedNumberOfCores ) { identifier val identifier key = identifier Pair ( identifier graph , identifier numberOfCores ) identifier val identifier runtime = identifier runtimes [ identifier key ] if ( identifier runtime != null ) { identifier it . identifier write ( identifier string_string_string ) } else { identifier println ( identifier string ) } } } } } identifier fun identifier generateTwoPlots ( identifier db : identifier Db , identifier algorithms : identifier Array < identifier String > , identifier graphs : identifier Array < identifier String > , identifier ks : identifier Array < identifier Int > , identifier filename : identifier String , identifier aspect : ( identifier Log ) - > identifier Double ) { identifier println ( identifier string ) identifier val identifier filtered = identifier db . identifier filter { identifier it . identifier algorithm identifier in identifier algorithms && identifier it . identifier graphName identifier in identifier graphs && identifier it . identifier k identifier in identifier ks } identifier data class identifier Point ( identifier val identifier algorithm : identifier String , identifier val identifier x : identifier Int , identifier val identifier y : identifier Double ) identifier val identifier points = identifier ArrayList < identifier Point > ( ) identifier val identifier instanceNames = identifier graphs . identifier flatMap { identifier graph - > identifier ks . identifier map { identifier k - > identifier Pair ( identifier graph , identifier k ) } } . identifier sortedBy { ( identifier graph , identifier k ) - > identifier dimensions [ identifier graph ] ! ! [ identifier string ] ! ! } identifier var identifier x = integer literal 0 for ( ( identifier graph , identifier k ) identifier in identifier instanceNames ) { identifier val identifier instances = identifier filtered . identifier filter { identifier it . identifier graphName == identifier graph && identifier it . identifier k == identifier k } . identifier groupBy { identifier it . identifier algorithm } identifier val identifier values = identifier instances . identifier mapValues { ( identifier _ , identifier values ) - > identifier values . identifier map ( identifier aspect ) . identifier average ( ) } for ( identifier algorithm identifier in identifier algorithms ) { identifier points . identifier add ( identifier Point ( identifier algorithm , identifier x , identifier values [ identifier algorithm ] ! ! ) ) } ++ identifier x } identifier File ( identifier filename ) . identifier bufferedWriter ( ) . identifier use { for ( ( identifier algorithm , identifier x , identifier y ) identifier in identifier points ) { identifier it . identifier write ( identifier string ) identifier it . identifier newLine ( ) } } } identifier fun identifier generateSinglePlot ( identifier db : identifier Db , identifier algorithms : identifier Array < identifier String > , identifier graphs : identifier Array < identifier String > , identifier ks : identifier Array < identifier Int > , identifier filename : identifier String ) { identifier println ( identifier string ) identifier data class identifier Point ( identifier val identifier algorithm : identifier String , identifier val identifier x : identifier Double , identifier val identifier y : identifier Double ) identifier val identifier points = identifier ArrayList < identifier Point > ( ) identifier val identifier filtered = identifier db . identifier filter { identifier it . identifier algorithm identifier in identifier algorithms && identifier it . identifier graphName identifier in identifier graphs && identifier it . identifier k identifier in identifier ks } for ( identifier graph identifier in identifier graphs ) { for ( identifier k identifier in identifier ks ) { identifier val identifier instances = identifier filtered . identifier filter { identifier it . identifier graphName == identifier graph && identifier it . identifier k == identifier k } . identifier groupBy { identifier it . identifier algorithm } identifier val identifier cuts = identifier instances . identifier mapValues { ( identifier _ , identifier values ) - > identifier values . identifier map { identifier it . identifier vertexCut } . identifier average ( ) } identifier val identifier bestCut = identifier cuts . identifier map { ( identifier _ , identifier cut ) - > identifier cut } . identifier min ( ) identifier as identifier Double identifier val identifier runtimes = identifier instances . identifier mapValues { ( identifier _ , identifier values ) - > identifier values . identifier map { identifier it . identifier time } . identifier average ( ) } identifier val identifier bestRuntime = identifier runtimes . identifier map { ( identifier _ , identifier runtime ) - > identifier runtime } . identifier min ( ) identifier as identifier Double for ( identifier algorithm identifier in identifier algorithms ) { identifier val identifier cut = identifier cuts [ identifier algorithm ] if ( identifier cut == null ) { identifier println ( identifier string ) continue } identifier val identifier runtime = identifier runtimes [ identifier algorithm ] ! ! identifier points . identifier add ( identifier Point ( identifier algorithm , identifier runtime / identifier bestRuntime , integer literal 1 - ( identifier bestCut / identifier cut ) ) ) } } } identifier File ( identifier filename ) . identifier bufferedWriter ( ) . identifier use { for ( ( identifier algorithm , identifier x , identifier y ) identifier in identifier points ) { identifier it . identifier write ( identifier string ) identifier it . identifier newLine ( ) } } } identifier fun identifier generatePerformancePlot ( identifier db : identifier Db , identifier algorithms : identifier Array < identifier String > , identifier graphs : identifier Array < identifier String > , identifier ks : identifier Array < identifier Int > , identifier filename : identifier String , identifier aspect : ( identifier Log ) - > identifier Double ) { identifier println ( identifier string ) identifier val identifier performanceValues = identifier HashMap < identifier String , identifier MutableList < identifier Double >> ( ) . identifier apply { identifier algorithms . identifier forEach { this identifier apply [ identifier it ] = identifier ArrayList ( ) } } identifier val identifier filtered = identifier db . identifier filter { identifier it . identifier algorithm identifier in identifier algorithms && identifier it . identifier graphName identifier in identifier graphs && identifier it . identifier k identifier in identifier ks } for ( identifier graph identifier in identifier graphs ) { for ( identifier k identifier in identifier ks ) { identifier val identifier values = identifier filtered . identifier filter { identifier it . identifier graphName == identifier graph && identifier it . identifier k == identifier k } . identifier groupBy { identifier it . identifier algorithm } . identifier mapValues { ( identifier _ , identifier values ) - > identifier values . identifier map ( identifier aspect ) . identifier average ( ) } identifier val identifier best = identifier values . identifier map { ( identifier _ , identifier average ) - > identifier average } . identifier min ( ) if ( identifier best == null ) { identifier println ( identifier string ) continue } for ( identifier algorithm identifier in identifier algorithms ) { identifier val identifier value = identifier values [ identifier algorithm ] if ( identifier value != null ) { if ( identifier value == integer literal 0 . integer literal 0 ) { throw identifier Exception ( identifier string ) } identifier performanceValues [ identifier algorithm ] ! ! . identifier add ( integer literal 1 . integer literal 0 - identifier best / identifier value ) if ( identifier algorithm identifier in identifier arrayOf ( identifier string ) ) { identifier println ( identifier string ) } } else { identifier performanceValues [ identifier algorithm ] ! ! . identifier add ( integer literal 1 . integer literal 0 ) } } } } identifier performanceValues . identifier forEach { ( identifier _ , identifier values ) - > identifier values . identifier sortDescending ( ) } identifier File ( identifier filename ) . identifier bufferedWriter ( ) . identifier use { identifier writer - > for ( identifier algorithm identifier in identifier algorithms ) { identifier var identifier i = integer literal 1 identifier performanceValues [ identifier algorithm ] ? . identifier forEach { identifier writer . identifier write ( identifier string ) identifier writer . identifier newLine ( ) ++ identifier i } } } } class identifier PerformancePlotGenerator { private identifier val identifier records = identifier HashMap < identifier String , identifier ArrayList < identifier Double >> ( ) identifier fun identifier add ( identifier algorithm : identifier String , identifier performance : identifier Double ) = identifier records . identifier getOrPut ( identifier algorithm ) { identifier ArrayList ( ) } . identifier add ( identifier performance ) identifier fun identifier generate ( identifier writer : identifier Writer ) { identifier val ( identifier maxLengthAlgorithm , identifier maxLength ) = identifier records . identifier mapValues { ( identifier _ , identifier v ) - > identifier v . identifier size } . identifier maxBy { ( identifier _ , identifier v ) - > identifier v } ! ! identifier val ( identifier minLengthAlgorithm , identifier minLength ) = identifier records . identifier mapValues { ( identifier _ , identifier v ) - > identifier v . identifier size } . identifier minBy { ( identifier _ , identifier v ) - > identifier v } ! ! if ( identifier minLength != identifier maxLength ) { identifier println ( identifier string ) } for ( identifier i identifier in integer literal 0 identifier until identifier maxLength ) { identifier val identifier notNull = identifier records . identifier filter { ( identifier _ , identifier v ) - > identifier v . identifier size > identifier i } identifier val identifier best = identifier notNull . identifier map { ( identifier _ , identifier v ) - > identifier v [ identifier i ] } . identifier min ( ) ! ! identifier val identifier values = identifier notNull . identifier mapValues { ( identifier _ , identifier v ) - > integer literal 1 . integer literal 0 - identifier best / identifier v [ identifier i ] } identifier values . identifier forEach { ( identifier k , identifier v ) - > identifier records [ identifier k ] ? . identifier let { identifier it [ identifier i ] = identifier v } } } identifier records . identifier forEach { ( identifier _ , identifier v ) - > identifier v . identifier sort ( ) } for ( identifier i identifier in integer literal 0 identifier until identifier maxLength ) { identifier val identifier notNull = identifier records . identifier filter { ( identifier _ , identifier v ) - > identifier v . identifier size > identifier i } identifier val identifier values = identifier notNull . identifier mapValues { ( identifier _ , identifier v ) - > identifier v [ identifier i ] } identifier values . identifier forEach { ( identifier k , identifier v ) - > identifier writer . identifier write ( identifier string ) } } } } EOF