Start analysis
This commit is contained in:
		
							
								
								
									
										35
									
								
								src/main/kotlin/me/msoucy/gbat/Analyze.kt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								src/main/kotlin/me/msoucy/gbat/Analyze.kt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
			
		||||
package me.msoucy.gbat
 | 
			
		||||
 | 
			
		||||
import java.io.File
 | 
			
		||||
 | 
			
		||||
import me.msoucy.gbat.models.KnowledgeModel
 | 
			
		||||
import me.msoucy.gbat.models.LineModel
 | 
			
		||||
import me.msoucy.gbat.models.RiskModel
 | 
			
		||||
 | 
			
		||||
private data class Condensation(val authors : List<String>, val knowledge : Double, val orphaned : Double, val atRisk : Double = 0.0) : Comparable<Condensation> {
 | 
			
		||||
    override operator fun compareTo(other : Condensation) : Int {
 | 
			
		||||
        return -1
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
private class Result(val repoRoot : File,
 | 
			
		||||
                     val projectRoot : File,
 | 
			
		||||
                     val fname : File,
 | 
			
		||||
                     val results : List<Pair<String, List<Condensation>>>)
 | 
			
		||||
 | 
			
		||||
private fun condenseAnalysis(repoRoot : File,
 | 
			
		||||
                             projectRoot : File,
 | 
			
		||||
                             fname : File,
 | 
			
		||||
                             lineModel : LineModel,
 | 
			
		||||
                             knowledgeModel : KnowledgeModel,
 | 
			
		||||
                             riskModel : RiskModel) : Result {
 | 
			
		||||
    val condensations = lineModel.get().mapIndexed { idx, line ->
 | 
			
		||||
        val knowledges = knowledgeModel.knowledgeSummary(idx + 1).map { (authors, knowledge) ->
 | 
			
		||||
            Condensation(authors,
 | 
			
		||||
                         knowledge,
 | 
			
		||||
                         if(authors.all(riskModel::isDeparted)) knowledge else 0.0,
 | 
			
		||||
                         riskModel.jointBusProb(authors) * knowledge)
 | 
			
		||||
        }.sorted()
 | 
			
		||||
        Pair(line, knowledges)
 | 
			
		||||
    }
 | 
			
		||||
    return Result(repoRoot, projectRoot, fname, condensations)
 | 
			
		||||
}
 | 
			
		||||
@@ -4,7 +4,7 @@ import java.io.File
 | 
			
		||||
import java.io.IOException
 | 
			
		||||
import java.util.concurrent.TimeUnit
 | 
			
		||||
 | 
			
		||||
fun <T> Iterable<T>.copyOf() = mutableListOf<T>().also { it.addAll(this) }
 | 
			
		||||
fun <T> Iterable<T>.copyOf() : List<T> = mutableListOf<T>().also { it.addAll(this) }
 | 
			
		||||
fun <T> Iterable<T>.mutableCopyOf() = mutableListOf<T>().also { it.addAll(this) }
 | 
			
		||||
 | 
			
		||||
fun List<String>.runCommand(workingDir: File): Pair<String?,String?> {
 | 
			
		||||
 
 | 
			
		||||
@@ -130,7 +130,7 @@ class KnowledgeModel(val db : Database, val constant : Double, val riskModel : R
 | 
			
		||||
                    newAuthors.add(author)
 | 
			
		||||
                }
 | 
			
		||||
                newAuthors = newAuthors.sorted().mutableCopyOf()
 | 
			
		||||
                val newKnowledgeId = if(riskModel.jointBusProbBelowThreshold(*newAuthors.toTypedArray())) {
 | 
			
		||||
                val newKnowledgeId = if(riskModel.jointBusProbBelowThreshold(newAuthors)) {
 | 
			
		||||
                    SAFE_KNOWLEDGE_ACCT_ID
 | 
			
		||||
                } else {
 | 
			
		||||
                    lookupOrCreateKnowledgeAcct(newAuthors)
 | 
			
		||||
 
 | 
			
		||||
@@ -25,11 +25,11 @@ class RiskModel(val threshold : Double,
 | 
			
		||||
 | 
			
		||||
    fun isDeparted(author : String) = author.trim() in departed
 | 
			
		||||
 | 
			
		||||
    fun jointBusProb(vararg authors : String) =
 | 
			
		||||
    fun jointBusProb(authors : List<String>) =
 | 
			
		||||
        authors.map { this[it] }.reduce { a, b -> a * b }
 | 
			
		||||
 | 
			
		||||
    fun jointBusProbBelowThreshold(vararg authors : String) =
 | 
			
		||||
        jointBusProb(*authors) <= threshold
 | 
			
		||||
    fun jointBusProbBelowThreshold(authors : List<String>) =
 | 
			
		||||
        jointBusProb(authors) <= threshold
 | 
			
		||||
    
 | 
			
		||||
    private fun parseBusRisks() {
 | 
			
		||||
        busRiskFile?.forEachLine { line ->
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user