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)
Пример #2
0
	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
Пример #3
0
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))
Пример #4
0
    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)
        ]
    }