@@ -554,38 +554,58 @@ class ProbabilisticLBH {
554554 @Test
555555 fun testMiniKTAPI () {
556556 val cfg = miniktcfgapi
557+ val timer = TimeSource .Monotonic .markNow()
557558
558559// val str = "fun f1 ( ) : Int = 1 ; f1 ( )"
559560// val str = "fun f1 ( x : Int , y : Int ) : Int = x + y ; f1 ( _ _ _ )"
560- val str = " fun f0 ( p1 : Float , p2 : Float ) : Int = ( if ( p1 == p2 ) { 1 } else { 1 } ) + 1"
561+ val str = " fun f0 ( p1 : Float , p2 : Float ) : Bool = ( if ( p1 == p2 ) { 1 } else { 1 } ) + 1"
561562
562- println (str.matches(cfg))
563- println (KotlinTypeChecker .typeChecks(str))
563+ println (" CFG recognizes: " + str.matches(cfg))
564+ println (" Kotlin recognizes: " + KotlinTypeChecker .typeChecks(str))
564565
565- val t = initiateSerialRepair(str.tokenizeByWhitespace(), cfg).take(10 ).toList()
566+ // val t = initiateSerialRepair(str.tokenizeByWhitespace(), cfg).take(10).toList()
567+ val t = repairWithSparseGRE(str.tokenizeByWhitespace(), cfg)!!
568+ .also {
569+ println (" GRE obtained in: ${timer.elapsedNow()} " )
570+ println (" Total words: ${it.toDFSM(cfg.tmLst).countWords()} " )
571+ }
572+ .toDFA(cfg.tmLst).apply {
573+ println (" Pre-minimization: ${states.size} states" )
574+ minimize()
575+ println (" DFA minimization in ${timer.elapsedNow()} with ${states.size} states" )
576+ }
577+ .decodeDFA(cfg.tmDict).take(1000 )
578+ .also { println (" Found ${it.size} words empirically" ) }
566579 assertTrue(t.isNotEmpty())
567- t.forEach {
580+ t.forEachIndexed { i, it ->
568581 assertTrue(KotlinTypeChecker .typeChecks(it), " Failed type check! $it " )
569- println (" ✔ " + levenshteinAlign(str, it).paintANSIColors())
582+ if (i < 10 ) println (" ✔ " + levenshteinAlign(str, it).paintANSIColors())
570583 }
571584
585+ println (" Repair finished in ${timer.elapsedNow()} " )
586+
572587 benchmarkMiniKt()
573588 }
574589
575590 fun benchmarkMiniKt () {
576591 val cfg = miniktcfgapi
577- val tempLen = 25
592+ val tempLen = 20
578593 val timer = TimeSource .Monotonic .markNow()
579594 var avgDelay = 0L
580595 var initDelay = 0L
581596 var avgDelayTimer = TimeSource .Monotonic .markNow()
582597 val samples = 1000
583- cfg.sampleSeq(List (tempLen) {" _" }).take(1000 ).forEachIndexed { i, pp -> /* println(pp);*/
598+ val pt = cfg.startGRE(List (tempLen) {" _" })!!
599+ println (" Parsed (_)^$tempLen in: ${timer.elapsedNow()} " )
600+ val dfsm = pt.toDFSM(cfg.tmLst)
601+ println (" |L_∩|: ${dfsm.countWords()} (in ${timer.elapsedNow()} )" )
602+ dfsm.sampleUniformly(cfg.tmLst).take(1000 ).onEachIndexed { i, pp ->
584603 if (i == 0 ) initDelay = timer.elapsedNow().inWholeMilliseconds
585604 avgDelay + = avgDelayTimer.elapsedNow().inWholeMilliseconds
586605 avgDelayTimer = TimeSource .Monotonic .markNow()
587- }
588- println (" Sampled length-$tempLen template from (${cfg.nonterminals.size} , ${cfg.tripleIntProds.size} )-CFG in ${initDelay} ms (TTFS), ${avgDelay / samples.toDouble()} (μDELAY)" )
606+ if (i < 10 ) println (pp)
607+ }.take(1000 ).toList().also { println (" Found ${it.size} words empirically" ) }
608+ println (" Sampled length-$tempLen template from (${cfg.nonterminals.size} , ${cfg.tripleIntProds.size} )-CFG in ${initDelay} ms (TTFS), ${avgDelay / samples.toDouble()} ms (μDELAY)" )
589609 }
590610
591611/*
@@ -607,45 +627,4 @@ class ProbabilisticLBH {
607627 }
608628 println (" Precision: ${precision / total.toDouble()} " )
609629 }
610- }
611-
612- // NAME . NAME ( STRING , class = STRING ) . NAME ( STRING , NAME = NAME . NAME ( STRING ) ) NEWLINE
613- // NAME . NAME ( STRING , class ** STRING ) . NAME ( STRING , NAME = NAME . NAME ( STRING ) ) NEWLINE
614- // NAME . NAME ( STRING , class = STRING ) . NAME ( STRING , NAME = NAME . NAME ( STRING ) ) NEWLINE
615- // NAME . NAME ( STRING , NAME = STRING ) . NAME ( STRING , NAME = NAME . NAME ( STRING ) ) NEWLINE
616- // NAME . NAME ( STRING , STRING = STRING ) . NAME ( STRING , NAME = NAME . NAME ( STRING ) ) NEWLINE
617- // NAME . NAME ( STRING , ) = STRING ) . NAME ( STRING , NAME = NAME . NAME ( STRING ) ) NEWLINE
618- // NAME . NAME ( STRING , NUMBER = STRING ) . NAME ( STRING , NAME = NAME . NAME ( STRING ) ) NEWLINE
619- // NAME . NAME ( STRING , class + STRING ) . NAME ( STRING , NAME = NAME . NAME ( STRING ) ) NEWLINE
620- // NAME . NAME ( STRING , ... = STRING ) . NAME ( STRING , NAME = NAME . NAME ( STRING ) ) NEWLINE
621- // NAME . NAME ( STRING , ) = ( ) . NAME ( STRING , NAME = NAME . NAME ( STRING ) ) NEWLINE
622- // NAME ( NAME ( STRING , ) = STRING ) . NAME ( STRING , NAME = NAME . NAME ( STRING ) ) NEWLINE
623- // NAME . NAME ( STRING , class * STRING ) . NAME ( STRING , NAME = NAME . NAME ( STRING ) ) NEWLINE
624- // NAME . NAME ( STRING , class - STRING ) . NAME ( STRING , NAME = NAME . NAME ( STRING ) ) NEWLINE
625- // NAME . NAME ( STRING , class not STRING ) . NAME ( STRING , NAME = NAME . NAME ( STRING ) ) NEWLINE
626- // NAME . NAME ( STRING , not + STRING ) . NAME ( STRING , NAME = NAME . NAME ( STRING ) ) NEWLINE
627- // NAME . NAME ( STRING , ) ( STRING ) . NAME ( STRING , NAME = NAME . NAME ( STRING ) ) NEWLINE
628- // NAME . NAME ( STRING , * + STRING ) . NAME ( STRING , NAME = NAME . NAME ( STRING ) ) NEWLINE
629- // NAME . NAME ( STRING ( ) = STRING ) . NAME ( STRING , NAME = NAME . NAME ( STRING ) ) NEWLINE
630- // NAME . NAME ( STRING , ** + STRING ) . NAME ( STRING , NAME = NAME . NAME ( STRING ) ) NEWLINE
631- // NAME . NAME ( STRING , * - STRING ) . NAME ( STRING , NAME = NAME . NAME ( STRING ) ) NEWLINE
632- // NAME . NAME ( STRING , ) = STRING ( ) . NAME ( STRING , NAME = NAME . NAME ( STRING ) ) NEWLINE
633- // NAME . NAME ( STRING , * not STRING ) . NAME ( STRING , NAME = NAME . NAME ( STRING ) ) NEWLINE
634- // NAME . NAME ( STRING , ( ) = STRING ) . NAME ( STRING , NAME = NAME . NAME ( STRING ) ) NEWLINE
635- // NAME . NAME ( STRING , + + STRING ) . NAME ( STRING , NAME = NAME . NAME ( STRING ) ) NEWLINE
636- // NAME . NAME ( STRING , ** - STRING ) . NAME ( STRING , NAME = NAME . NAME ( STRING ) ) NEWLINE
637- // NAME . NAME ( STRING , None = STRING ) . NAME ( STRING , NAME = NAME . NAME ( STRING ) ) NEWLINE
638- // NAME . NAME ( STRING , ** not STRING ) . NAME ( STRING , NAME = NAME . NAME ( STRING ) ) NEWLINE
639- // NAME . NAME ( STRING , - + STRING ) . NAME ( STRING , NAME = NAME . NAME ( STRING ) ) NEWLINE
640- // NAME . NAME ( STRING , + - STRING ) . NAME ( STRING , NAME = NAME . NAME ( STRING ) ) NEWLINE
641- // NAME . NAME ( STRING , True = STRING ) . NAME ( STRING , NAME = NAME . NAME ( STRING ) ) NEWLINE
642- // NAME . NAME ( STRING , not - STRING ) . NAME ( STRING , NAME = NAME . NAME ( STRING ) ) NEWLINE
643- // NAME . NAME ( STRING , ) = ( STRING ) . NAME ( STRING , NAME = NAME . NAME ( STRING ) ) NEWLINE
644- // NAME . NAME ( STRING , - - STRING ) . NAME ( STRING , NAME = NAME . NAME ( STRING ) ) NEWLINE
645- // NAME . NAME ( STRING , [ ] = STRING ) . NAME ( STRING , NAME = NAME . NAME ( STRING ) ) NEWLINE
646- // NAME . NAME ( STRING , { } = STRING ) . NAME ( STRING , NAME = NAME . NAME ( STRING ) ) NEWLINE
647- // NAME . NAME ( STRING , not not STRING ) . NAME ( STRING , NAME = NAME . NAME ( STRING ) ) NEWLINE
648- // NAME . NAME ( ( STRING , ) = STRING ) . NAME ( STRING , NAME = NAME . NAME ( STRING ) ) NEWLINE
649- // NAME . NAME ( [ STRING , ] = STRING ) . NAME ( STRING , NAME = NAME . NAME ( STRING ) ) NEWLINE
650- // NAME . NAME ( STRING , lambda : STRING ) . NAME ( STRING , NAME = NAME . NAME ( STRING ) ) NEWLINE
651- // NAME . NAME ( { STRING , } = STRING ) . NAME ( STRING , NAME = NAME . NAME ( STRING ) ) NEWLINE
630+ }
0 commit comments