def TIMDCalcDict(timd, calc): if (not calc.su.TIMCalculatedDataHasValues(timd.calculatedData)): timd.calculatedData = DataModel.CalculatedTeamInMatchData() team = calc.su.getTeamForNumber(timd.teamNumber) match = calc.su.getMatchForNumber(timd.matchNumber) c = timd.calculatedData c.numGearsPlacedAuto = calc.getTotalValueForValueDict( timd.gearsPlacedByLiftAuto) c.numGearsPlacedTele = calc.getTotalValueForValueDict( timd.gearsPlacedByLiftTele) c.avgKeyShotTime = calc.getAvgKeyShotTimeForTIMD(timd, 'Key') c.avgHopperShotTime = calc.getAvgKeyShotTimeForTIMD(timd, 'Hopper') c.numHighShotsTele = calc.weightFuelShotsForDataPoint( timd, match, 'teleopFuelHigh', timd.highShotTimesForBoilerTele) c.numHighShotsAuto = calc.weightFuelShotsForDataPoint( timd, match, 'autoFuelHigh', timd.highShotTimesForBoilerAuto) c.numLowShotsTele = calc.weightFuelShotsForDataPoint( timd, match, 'teleopFuelLow', timd.lowShotTimesForBoilerTele) c.numLowShotsAuto = calc.weightFuelShotsForDataPoint( timd, match, 'autoFuelLow', timd.lowShotTimesForBoilerAuto) c.liftoffAbility = calc.liftoffAbilityForTIMD(timd) c.wasDisfunctional = utils.convertFirebaseBoolean( timd.didStartDisabled + utils.convertFirebaseBoolean(timd.didBecomeIncapacitated)) c.disfunctionalPercentage = utils.convertFirebaseBoolean( timd.didStartDisabled) + 0.5 * utils.convertFirebaseBoolean( timd.didBecomeIncapacitated) c.numRPs = calc.RPsGainedFromMatchForAlliance( team.number in match.redAllianceTeamNumbers, match)
def scoutedScoreForMatchNum(self, match, allianceIsRed): allTIMDs = self.calculator.su.getTIMDsForMatch(match) allianceNumbers = self.calculator.su.getAllianceForMatch(match, allianceIsRed) allianceNumbers = map(lambda t: t.number, allianceNumbers) allianceTIMDs = [timd for timd in allTIMDs if timd.teamNumber in allianceNumbers] autoPts = self.calculator.getAutoPointsForMatchForAllianceIsRed(match, allianceIsRed) teleShotPts = 2 * sum([(timd.numLowShotsMadeTele or 0) for timd in allianceTIMDs]) + 5 * sum([(timd.numHighShotsMadeTele or 0) for timd in allianceTIMDs]) for timd in allianceTIMDs: s = timd.timesSuccessfulCrossedDefensesTele for key in self.calculator.defenseList: if not key in s: s[key] = 0 elif s[key] == None: s[key] = 0 else: s[key] = len(s[key]) allDefenseCrossings = utils.dictSum(allianceTIMDs[0].timesSuccessfulCrossedDefensesTele, utils.dictSum(allianceTIMDs[1].timesSuccessfulCrossedDefensesTele, allianceTIMDs[2].timesSuccessfulCrossedDefensesTele)) temp = {} for defense, crossings in allDefenseCrossings.items(): if crossings > 2: temp[defense] = 2 else: temp[defense] = crossings allDefenseCrossings = temp teleDefenseCrossPts = 5 * sum(allDefenseCrossings.values()) scalePts = 15 * sum([utils.convertFirebaseBoolean(timd.didScaleTele) for timd in allianceTIMDs]) challengePts = 5 * sum([utils.convertFirebaseBoolean(timd.didChallengeTele) for timd in allianceTIMDs]) return autoPts + teleShotPts + teleDefenseCrossPts + scalePts + challengePts
def commonValue(vals): if len(set(map(type, vals))) != 1: return if list(set(map(type, vals)))[0] == str: if (vals[0] == "true" or vals[0] == "false"): return bool( joinList( map(lambda v: int(utils.convertFirebaseBoolean(v)), vals))) else: return vals else: return joinList( map(lambda v: int(utils.convertFirebaseBoolean(v)), vals))
def run(self): if (not self.calculator.su.timdIsCompleted(self.timd)): print "TIMD is not complete for team " + str(self.timd.teamNumber) + " in match " + str(self.timd.matchNumber) self.calculatedTIMDsList.append(self.timd) else: print "Beginning first calculations for team " + str(self.timd.teamNumber) + " in match " + str(self.timd.matchNumber) team = self.calculator.su.getTeamForNumber(self.timd.teamNumber) match = self.calculator.su.getMatchForNumber(self.timd.matchNumber) self.calculator.matches = filter(lambda m: not self.calculator.su.teamInMatch(team, m) == (self.timd.matchNumber != m.number), self.calculator.comp.matches) self.calculator.TIMDs = filter(lambda t: t.matchNumber in [m.number for m in self.calculator.matches], self.calculator.comp.TIMDs) if not self.calculator.su.TIMCalculatedDataHasValues( self.timd.calculatedData): self.timd.calculatedData = DataModel.CalculatedTeamInMatchData() c = self.timd.calculatedData c.teleopShotAbility = self.calculator.getTIMDTeleopShotAbility(self.timd) c.highShotAccuracyTele = self.calculator.TIMDShotAccuracy(self.timd.numHighShotsMadeTele, self.timd.numHighShotsMissedTele) # Checked c.highShotAccuracyAuto = self.calculator.TIMDShotAccuracy(self.timd.numHighShotsMadeAuto, self.timd.numHighShotsMissedAuto) # Checked c.lowShotAccuracyTele = self.calculator.TIMDShotAccuracy(self.timd.numLowShotsMadeTele, self.timd.numLowShotsMissedTele) # Checked c.lowShotAccuracyAuto = self.calculator.TIMDShotAccuracy(self.timd.numLowShotsMadeAuto, self.timd.numLowShotsMissedAuto) # Checked c.siegeAbility = self.calculator.singleSiegeAbility(self.timd) c.autoAbility = self.calculator.autoAbility(self.timd) c.siegeConsistency = utils.convertFirebaseBoolean(self.timd.didChallengeTele) or utils.convertFirebaseBoolean(self.timd.didScaleTele) c.numRPs = self.calculator.RPsGainedFromMatchForTeam(team, match) c.numAutoPoints = self.calculator.autoAbility(self.timd) c.numScaleAndChallengePoints = c.siegeAbility # they are the same c.highShotsAttemptedTele = self.timd.numHighShotsMadeTele + self.timd.numHighShotsMissedTele c.lowShotsAttemptedTele = self.timd.numLowShotsMadeTele + self.timd.numLowShotsMissedTele c.numBallsIntakedOffMidlineAuto = len(self.timd.ballsIntakedAuto) if self.timd.ballsIntakedAuto != None else 0 c.numTimesSuccesfulCrossedDefensesAuto = self.calculator.numCrossingsForTIMD(self.timd, self.timd.timesSuccessfulCrossedDefensesAuto) c.numTimesFailedCrossedDefensesAuto = self.calculator.numCrossingsForTIMD(self.timd, self.timd.timesFailedCrossedDefensesAuto) c.numTimesSuccesfulCrossedDefensesTele = self.calculator.numCrossingsForTIMD(self.timd, self.timd.timesSuccessfulCrossedDefensesTele) c.numTimesFailedCrossedDefensesTele = self.calculator.numCrossingsForTIMD(self.timd, self.timd.timesFailedCrossedDefensesTele) c.crossingsForDefensePercentageAuto = utils.dictPercentage(c.numTimesSuccesfulCrossedDefensesAuto, c.numTimesFailedCrossedDefensesAuto) c.crossingsForDefensePercentageTele = utils.dictPercentage(c.numTimesSuccesfulCrossedDefensesTele, c.numTimesFailedCrossedDefensesTele) c.totalNumTimesCrossedDefensesAuto = self.calculator.totalCrossesInAutoForTIMD(self.timd) c.crossingTimeForDefenseAuto = self.calculator.valueCrossingsForTIMD(self.timd, self.timd.timesSuccessfulCrossedDefensesAuto) c.crossingTimeForDefenseTele = self.calculator.valueCrossingsForTIMD(self.timd, self.timd.timesSuccessfulCrossedDefensesTele) c.wasDisfunctional = utils.convertFirebaseBoolean(self.timd.didGetDisabled) or utils.convertFirebaseBoolean(self.timd.didGetIncapacitated) self.calculatedTIMDsList.append(self.timd)
def getFirstTeamCalcDataKeys(calc): sumCategoryADataPointDict = lambda team: utils.dictSum( team.calculatedData.avgNumTimesUnaffected, utils.dictSum(team.calculatedData.avgNumTimesBeached, team. calculatedData.avgNumTimesSlowed)) return { "avgTorque": lambda team: calc.getAverageForDataFunctionForTeam( team, lambda timd: timd.rankTorque), # Checked "avgSpeed": lambda team: calc.getAverageForDataFunctionForTeam( team, lambda timd: timd.rankSpeed), "avgAgility": lambda team: calc.getAverageForDataFunctionForTeam( team, lambda timd: timd.rankAgility), # Checked "avgDefense": lambda team: calc.getAverageForDataFunctionForTeam( team, lambda timd: timd.rankDefense), # Checked "avgBallControl": lambda team: calc.getAverageForDataFunctionForTeam( team, lambda timd: timd.rankBallControl), # Checked "avgDrivingAbility": lambda team: calc.drivingAbility(team), "disabledPercentage": lambda team: calc.getAverageForDataFunctionForTeam( team, lambda timd: utils.convertFirebaseBoolean(timd.didGetDisabled )), "incapacitatedPercentage": lambda team: calc.getAverageForDataFunctionForTeam( team, lambda timd: utils.convertFirebaseBoolean( timd.didGetIncapacitated)), "disfunctionalPercentage": lambda team: team.calculatedData.disabledPercentage + team. calculatedData.incapacitatedPercentage, # Auto "autoAbility": lambda team: calc.getAverageForDataFunctionForTeam( team, lambda timd: timd.calculatedData.autoAbility), "autoAbilityExcludeD": lambda team: calc.getAverageForDataFunctionForTeam( team, lambda timd: calc.autoAbility( calc.timdHasDefenseExclusion(timd, calc.defenseDictionary['d']) )), "autoAbilityExcludeLB": lambda team: calc.getAverageForDataFunctionForTeam( team, lambda timd: calc.autoAbility( calc.timdHasDefenseExclusion(timd, calc.defenseDictionary['e']) )), "avgHighShotsAuto": lambda team: calc.getAverageForDataFunctionForTeam( team, lambda timd: timd.numHighShotsMadeAuto), # Checked "avgLowShotsAuto": lambda team: calc.getAverageForDataFunctionForTeam( team, lambda timd: timd.numLowShotsMadeAuto), # Checked "reachPercentage": lambda team: calc.getAverageForDataFunctionForTeam( team, lambda timd: utils.convertFirebaseBoolean(timd.didReachAuto) ), "highShotAccuracyAuto": lambda team: calc.getAverageForDataFunctionForTeam( team, lambda timd: calc.TIMDShotAccuracy( timd.numHighShotsMadeAuto, timd.numHighShotsMissedAuto) ), # Checked "lowShotAccuracyAuto": lambda team: calc.getAverageForDataFunctionForTeam( team, lambda timd: calc.TIMDShotAccuracy( timd.numLowShotsMadeAuto, timd.numLowShotsMissedAuto) ), # Checked "avgMidlineBallsIntakedAuto": lambda team: calc.getAverageForDataFunctionForTeam( team, lambda timd: timd.calculatedData. numBallsIntakedOffMidlineAuto), "sdMidlineBallsIntakedAuto": lambda team: calc.getStandardDeviationForDataFunctionForTeam( team, lambda timd: timd.calculatedData. numBallsIntakedOffMidlineAuto), "sdHighShotsAuto": lambda team: calc.getStandardDeviationForDataFunctionForTeam( team, lambda timd: timd.numHighShotsMadeAuto), # Checked "sdLowShotsAuto": lambda team: calc.getStandardDeviationForDataFunctionForTeam( team, lambda timd: timd.numLowShotsMadeAuto), # Checked "sdBallsKnockedOffMidlineAuto": lambda team: calc.getStandardDeviationForDataFunctionForTeam( team, lambda timd: timd.numBallsKnockedOffMidlineAuto), #Tele "scalePercentage": lambda team: calc.getAverageForDataFunctionForTeam( team, lambda timd: int( utils.convertFirebaseBoolean(timd.didScaleTele))), "challengePercentage": lambda team: calc.getAverageForDataFunctionForTeam( team, lambda timd: int( utils.convertFirebaseBoolean(timd.didChallengeTele))), "avgGroundIntakes": lambda team: calc.getAverageForDataFunctionForTeam( team, lambda timd: timd.numGroundIntakesTele), # Checked "avgBallsKnockedOffMidlineAuto": lambda team: calc.getAverageForDataFunctionForTeam( team, lambda timd: timd.numBallsKnockedOffMidlineAuto), # Checked "avgShotsBlocked": lambda team: calc.getAverageForDataFunctionForTeam( team, lambda timd: timd.numShotsBlockedTele), # Checked "avgHighShotsTele": lambda team: calc.getAverageForDataFunctionForTeam( team, lambda timd: timd.numHighShotsMadeTele), # Checked "avgLowShotsTele": lambda team: calc.getAverageForDataFunctionForTeam( team, lambda timd: timd.numLowShotsMadeTele), # Checked "highShotAccuracyTele": lambda team: calc.getAverageForDataFunctionForTeam( team, lambda timd: calc.TIMDShotAccuracy( timd.numHighShotsMadeTele, timd.numHighShotsMissedTele) ), # Checked "lowShotAccuracyTele": lambda team: calc.getAverageForDataFunctionForTeam( team, lambda timd: calc.TIMDShotAccuracy( timd.numLowShotsMadeTele, timd.numLowShotsMissedTele)), "teleopShotAbility": lambda team: calc.getAverageForDataFunctionForTeam( team, lambda timd: timd.calculatedData.teleopShotAbility ), # Checked "siegeConsistency": lambda team: calc.getAverageForDataFunctionForTeam( team, lambda timd: utils.convertFirebaseBoolean( timd.didChallengeTele) or utils.convertFirebaseBoolean( timd.didScaleTele)), # Checked "siegeAbility": lambda team: calc.getAverageForDataFunctionForTeam( team, lambda timd: timd.calculatedData.siegeAbility), # Checked "sdHighShotsTele": lambda team: calc.getStandardDeviationForDataFunctionForTeam( team, lambda timd: timd.numHighShotsMadeTele), # Checked "sdLowShotsTele": lambda team: calc.getStandardDeviationForDataFunctionForTeam( team, lambda timd: timd.numLowShotsMadeTele), # Checked "sdGroundIntakes": lambda team: calc.getStandardDeviationForDataFunctionForTeam( team, lambda timd: timd.numGroundIntakesTele), # Checked "sdShotsBlocked": lambda team: calc.getStandardDeviationForDataFunctionForTeam( team, lambda timd: timd.numShotsBlockedTele), # Checked "sdTeleopShotAbility": lambda team: calc.getStandardDeviationForDataFunctionForTeam( team, lambda timd: timd.calculatedData.teleopShotAbility), "sdSiegeAbility": lambda team: calc.getStandardDeviationForDataFunctionForTeam( team, lambda timd: timd.calculatedData.siegeAbility), "sdAutoAbility": lambda team: calc.getStandardDeviationForDataFunctionForTeam( team, lambda timd: timd.calculatedData.autoAbility), "numScaleAndChallengePoints": lambda team: calc.numScaleAndChallengePointsForTeam(team), # Checked "breachPercentage": lambda team: calc.getAverageForDataFunctionForTeam( team, lambda timd: utils. convertFirebaseBoolean(lambda team: calc.teamDidBreachInMatch( team, lambda team: calc.su.getMatchForNumber(timd.matchNumber)) )), "avgHighShotsAttemptedTele": lambda team: calc.getAverageForDataFunctionForTeam( team, lambda timd: timd.calculatedData.highShotsAttemptedTele), "avgLowShotsAttemptedTele": lambda team: calc.getAverageForDataFunctionForTeam( team, lambda timd: timd.calculatedData.lowShotsAttemptedTele), "twoBallAutoTriedPercentage": lambda team: calc.twoBallAutoTriedPercentage(team), "twoBallAutoAccuracy": lambda team: calc.twoBallAutoAccuracy(team), "avgNumTimesBeached": lambda team: calc.categoryAAverageDictForDataFunction( team, lambda timd: timd.numTimesBeached), "avgNumTimesSlowed": { "pc": lambda team: calc.avgNumTimesSlowed(team, "pc"), "cdf": lambda team: calc.avgNumTimesSlowed(team, "cdf") }, "avgNumTimesUnaffected": lambda team: calc.categoryAAverageDictForDataFunction( team, lambda timd: timd.numTimesUnaffected), "beachedPercentage": lambda team: utils.dictQuotient(team.calculatedData.avgNumTimesBeached, sumCategoryADataPointDict(team)), "slowedPercentage": lambda team: utils.dictQuotient(team.calculatedData.avgNumTimesSlowed, sumCategoryADataPointDict(team)), "unaffectedPercentage": lambda team: utils.dictQuotient( team.calculatedData.avgNumTimesUnaffected, sumCategoryADataPointDict(team)), "avgNumTimesCrossedDefensesAuto": lambda team: calc.getAverageForDataFunctionForTeam( team, lambda tm: tm.calculatedData.totalNumTimesCrossedDefensesAuto ), "defenses": [ lambda team: calc.setDefenseValuesForTeam( team, team.calculatedData. avgSuccessfulTimesCrossedDefensesTele, lambda tm: tm. timesSuccessfulCrossedDefensesTele, lambda x: np.mean(x) if x != None and len(x) > 0 else 0, lambda y: len(y) if y != None else 0), lambda team: calc.setDefenseValuesForTeam( team, team.calculatedData. avgSuccessfulTimesCrossedDefensesAuto, lambda tm: tm. timesSuccessfulCrossedDefensesAuto, lambda x: np.mean(x) if x != None and len(x) > 0 else 0, lambda y: len(y) if y != None else 0), lambda team: calc.setDefenseValuesForTeam( team, team.calculatedData.avgFailedTimesCrossedDefensesTele, lambda tm: tm.timesFailedCrossedDefensesTele, lambda x: np. mean(x) if x != None and len(x) > 0 else 0, lambda y: len(y) if y != None else 0), lambda team: calc.setDefenseValuesForTeam( team, team.calculatedData.avgFailedTimesCrossedDefensesAuto, lambda tm: tm.timesFailedCrossedDefensesAuto, lambda x: np. mean(x) if x != None and len(x) > 0 else 0, lambda y: len(y) if y != None else 0), lambda team: calc.setDefenseValuesForTeam( team, team.calculatedData.avgTimeForDefenseCrossTele, lambda tm: tm.timesSuccessfulCrossedDefensesTele, lambda x: np.mean(x) if x != None and len(x) > 0 else 0, lambda y: np.mean(y) if y != None and len(y) > 0 else 0), lambda team: calc.setDefenseValuesForTeam( team, team.calculatedData.avgTimeForDefenseCrossAuto, lambda tm: tm.timesSuccessfulCrossedDefensesAuto, lambda x: np.mean(x) if x != None and len(x) > 0 else 0, lambda y: np.mean(y) if y != None and len(y) > 0 else 0), lambda team: calc.setDefenseValuesForTeam( team, team.calculatedData.sdSuccessfulDefenseCrossesAuto, lambda tm: tm.timesSuccessfulCrossedDefensesAuto, lambda x: utils.rms(x) if x != None and len(x) > 0 else 0, lambda y: len(y) if y != None else 0), lambda team: calc.setDefenseValuesForTeam( team, team.calculatedData.sdSuccessfulDefenseCrossesTele, lambda tm: tm.ti, mesSuccessfulCrossedDefensesTele, lambda x: utils.rms(x) if x != None and len(x) > 0 else 0, lambda y: len(y) if y != None else 0), lambda team: calc.setDefenseValuesForTeam( team, team.calculatedData.sdFailedDefenseCrossesAuto, lambda tm: tm.timesFailedCrossedDefensesAuto, lambda x: utils.rms(x) if x != None and len(x) > 0 else 0, lambda y: len(y) if y != None else 0), lambda team: calc.setDefenseValuesForTeam( team, team.calculatedData.sdFailedDefenseCrossesTele, lambda tm: tm.timesFailedCrossedDefensesTele, lambda x: utils.rms(x) if x != None and len(x) > 0 else 0, lambda y: len(y) if y != None else 0) ] }