Example #1
0
 def updateTargetsView(self, analyzer):
     totalDamage = sum([v['damage'] for v in analyzer.entityBreakdown.values()])
     totalDamageTaken = sum([v['damageTaken'] for v in analyzer.entityBreakdown.values()])
     totalHealing = sum([v['healing'] for v in analyzer.entityBreakdown.values()])
     totalHealingReceived = sum([v['healingReceived'] for v in analyzer.entityBreakdown.values()])
     totalThreatReceived = sum([v['threatReceived'] for v in analyzer.entityBreakdown.values()])
     rows = []
     itemMap = []
     for entity, info in analyzer.entityBreakdown.iteritems():
         if not entity.name:
             continue
         damage = info['damage']
         damageTaken = info['damageTaken']
         healing = info['healing']
         healingReceived = info['healingReceived']
         threatReceived = info['threatReceived']
         rows.append([
            entity.name,
            locale.format("%d", damage, grouping=True) +
               " (%.2f%%)"%(util.div(damage, totalDamage) * 100),
            locale.format("%d", damageTaken, grouping=True) +
               " (%.2f%%)"%(util.div(damage, totalDamageTaken) * 100),
            locale.format("%d", healing, grouping=True) +
               " (%.2f%%)"%(util.div(healing, totalHealing) * 100),
            locale.format("%d", healingReceived, grouping=True) +
               " (%.2f%%)"%(util.div(healing, totalHealingReceived) * 100),
            locale.format("%d", threatReceived, grouping=True) +
               " (%.2f%%)"%(util.div(threatReceived, totalThreatReceived) * 100),
         ])
         itemMap.append([entity.name, damage, damageTaken, healing,
            healingReceived, threatReceived])
     self.targetsView.setRows(rows, itemMap)
Example #2
0
	def onMotion(self, evt):
		old_offset = self.offset_pos
		#fix for windows focus policy ( after treeCtrl grabs focus it wont let it back )
		self.SetFocus()
		if not self.moving:
			return
		
		#if not self.moving_proved:
		#	self.pushMotionEvent(evt)
		#	return

		curPos = evt.GetPosition()
		dx,dy = util.div(util.sub(self.prevPos, curPos), float(self.cell_size))
		
		if dx != 0 or dy != 0:
			x,y=self.offset_pos
			x+=dx
			y+=dy
			self.offset_pos=(x,y)
			#self.Refresh()
			self.prevPos = curPos
		
		self.shift(util.mul(util.sub(old_offset, self.offset_pos), self.cell_size))
		#self.update()
		self.Refresh()
		self.Update()
Example #3
0
    def onAnalyzerTick(self, analyzer):
        self.beginBatch()
        self.clearList()

        index = 0
        raidTotalDamageTaken = 0
        for player in raid.playerData:
            raidTotalDamageTaken += player['totalDamageTaken']

        for player in sorted(raid.playerData,
                             key=lambda x: x['totalDamageTaken'],
                             reverse=True):
            if player['totalDamageTaken'] == 0:
                continue

            percent = util.div(player['totalDamageTaken'],
                               raidTotalDamageTaken)

            color = self.getForegroundColor()
            if player['name'] == analyzer.parser.me.rawName:
                color = config.getColor("overlayListSelfColor")

            self.addRow([
                player['name'][1:],
                locale.format("%d", player['totalDamageTaken'], grouping=True),
                percent
            ], color)

            index += 1
        self.endBatch()
        self.panel.Layout()
Example #4
0
    def adadelta(allparams,
                 nat_stepsize,
                 num_epochs,
                 seq_len,
                 num_seqs=None,
                 rho=0.95,
                 epsilon=1e-6,
                 num_samples=1,
                 permute=True):
        natparams, params = allparams[:1], allparams[1:]
        sum_gsq = zeros_like(params)  # accumulated sq. grads
        sum_usq = zeros_like(params)  # accumulated sq. updates
        accumulate = lambda a, b: add(scale(rho, a), scale(1 - rho, b))

        for epoch in xrange(num_epochs):
            vals = []
            batches, num_batches = split_into_batches(data, seq_len, num_seqs)
            for y in batches:
                val, grad = scale(
                    1. / num_datapoints,
                    val_and_grad(y, num_batches, num_samples, *allparams))
                natgrad, grad = grad[:1], grad[1:]
                sum_gsq = accumulate(sum_gsq, square(grad))
                diag_scaling = div(sqrt(add_scalar(epsilon, sum_usq)),
                                   sqrt(add_scalar(epsilon, sum_gsq)))
                update = mul(diag_scaling, grad)
                sum_usq = accumulate(sum_usq, square(update))

                natparams = add(natparams, scale(nat_stepsize, natgrad))
                params = add(params, update)
                allparams = concat(natparams, params)
                vals.append(val)

                if callback: callback(epoch, vals, natgrad, allparams)
        return allparams
Example #5
0
    def onAnalyzerTick(self, analyzer):
        self.beginBatch()
        self.clearList()

        index = 0
        raidTotalThreat = 0
        for player in raid.playerData:
            if player['totalThreat'] < 0:
                continue
            raidTotalThreat += player['totalThreat']

        for player in sorted(raid.playerData, key=lambda x:x['totalThreat'], reverse=True):
            if player['totalThreat'] == 0:
                continue

            percent = 0
            if player['totalThreat'] >  0:
                percent = util.div(player['totalThreat'], raidTotalThreat)

            color = self.getForegroundColor()
            if player['name'] == analyzer.parser.me.rawName:
                color = config.getColor("overlayListSelfColor")

            self.addRow([player['name'][1:], locale.format("%d", player['totalThreat'], grouping=True), percent], color)

            index += 1
        self.endBatch()
        self.panel.Layout()
Example #6
0
File: hps.py Project: TeamSWAP/swap
    def onAnalyzerTick(self, analyzer):
        self.beginBatch()
        self.clearList()

        index = 0
        raidTotalHealing = 0
        for player in raid.playerData:
            raidTotalHealing += player['totalHealing']

        for player in sorted(raid.playerData, key=lambda x:x['totalHealing'], reverse=True):
            if player['totalHealing'] == 0:
                continue
            if raidTotalHealing > 0:
                percent = "%.2f"%((float(player['totalHealing']) / float(raidTotalHealing)) * 100.0)
            else:
                percent = "%.2f"%0

            color = self.getForegroundColor()
            if player['name'] == analyzer.parser.me.rawName:
                color = config.getColor("overlayListSelfColor")

            hps = player['avgHps']
            percent = util.div(player['totalHealing'], raidTotalHealing)

            color = self.getForegroundColor()
            if player['name'] == analyzer.parser.me.rawName:
                color = config.getColor("overlayListSelfColor")

            self.addRow([player['name'][1:], locale.format("%.2f", hps, grouping=True), percent], color)

            index += 1
        self.endBatch()
        self.panel.Layout()
Example #7
0
 def perform_action(self, move):
     if move is None:
         self.game_ended = True
         return
     origin, destination = move
     figure = self.get_field(origin)
     if figure == 0 and destination[0] == self.board_size - 1:
         figure = 2
     if figure == 1 and destination[0] == 0:
         figure = 3
     self.add_figure(figure, destination)
     self.remove_figure(origin)
     if abs(move[0][0] - move[1][0]) == 2:
         self.pacifist_turns = 0
         half_destination = div(add(origin, destination), 2)
         self.remove_figure(half_destination)
         move_type, _ = self.get_viable_moves_from_field(destination)
         if move_type == 1:
             self.only_viable_field = destination
         else:
             self.only_viable_field = None
             self.player = 1 - self.player
     else:
         self.pacifist_turns += 1
         self.player = 1 - self.player
Example #8
0
	def centerAt(self, logicPos):
		#print 'before centering offset is %s %s'%(self.offset_pos, logicPos)
		if logicPos == (0,0):
			print traceback.format_exc()
		self.offset_pos = util.sub(logicPos, util.div(self.screen_size, 2))
		#print 'after centering offset is %s'%(self.offset_pos,)
		self.update()
Example #9
0
	def onLeftUp(self, evt):
		self.moving = False
		self.update()
		
		#if self.moving_proved:
		#	return
			
		pos = util.add(self.offset_pos, util.div(evt.GetPosition(), float(self.cell_size)))
		wx.PostEvent(self.GetParent(), event.SelectObject(attr1=(int(round(pos[0])), int(round(pos[1]))), attr2=None))
Example #10
0
    def onAnalyzerTick(self, analyzer):
        enrageTime = config.get("customEnrageTime")
        if not enrageTime:
            self.bar.SetValue(0)
            self.bar.SetLabel("")
            return

        enrageTime = float(enrageTime)

        self.bar.SetValue(1.0 - util.div(analyzer.combatDuration, enrageTime))
        self.bar.SetLabel(util.formatDuration(enrageTime - analyzer.combatDuration))
Example #11
0
	def onScroll(self, evt):

		pos = evt.GetPosition()
		logicPos = util.div(pos, float(self.cell_size))

		diff = 1 if evt.GetWheelRotation()>0 else -1
		self.cell_size += diff
		if self.cell_size < 1:
			self.cell_size = 1
		elif self.cell_size > 40:
			self.cell_size = 40

		self.calcScreenSize()
		
		#make sure mouse is pointing on the centre  of the scroll area ( just move the pos so that this _is_ the center )
		newScreenPos = util.mul(logicPos, self.cell_size)
		newScreenDiff = util.sub(newScreenPos, pos)
		newLogicDiff = util.div(newScreenDiff, self.cell_size)
		self.offset_pos = util.add(self.offset_pos, newLogicDiff)

		self.update()
Example #12
0
 def updateAbilityView(self, analyzer):
     totalDamage = sum([v['damage'] for v in analyzer.abilityBreakdown.values()])
     totalHealing = sum([v['healing'] for v in analyzer.abilityBreakdown.values()])
     totalThreat = sum([v['threat'] for v in analyzer.abilityBreakdown.values()])
     rows = []
     itemMap = []
     for ability, info in analyzer.abilityBreakdown.iteritems():
         damage = info['damage']
         healing = info['healing']
         threat = info['threat']
         rows.append([
            ability,
            locale.format("%d", damage, grouping=True) +
               " (%.2f%%)"%(util.div(damage, totalDamage) * 100),
            locale.format("%d", healing, grouping=True) +
               " (%.2f%%)"%(util.div(healing, totalHealing) * 100),
            locale.format("%d", threat, grouping=True) +
               " (%.2f%%)"%(util.div(threat, totalThreat) * 100)
         ])
         itemMap.append([ability, damage, healing, threat])
     self.abilityView.setRows(rows, itemMap)
Example #13
0
    def onAnalyzerTick(self, analyzer):
        enrageTime = config.get("customEnrageTime")
        if not enrageTime:
            self.bar.SetValue(0)
            self.bar.SetLabel("")
            return

        enrageTime = float(enrageTime)

        self.bar.SetValue(1.0 - util.div(analyzer.combatDuration, enrageTime))
        self.bar.SetLabel(
            util.formatDuration(enrageTime - analyzer.combatDuration))
Example #14
0
    def adam(allparams,
             nat_stepsize,
             stepsize,
             num_epochs,
             seq_len,
             num_seqs=None,
             b1=0.9,
             b2=0.999,
             eps=1e-8,
             num_samples=1):
        natparams, params = allparams[:1], allparams[1:]
        m = zeros_like(params)
        v = zeros_like(params)
        i = 0
        accumulate = lambda rho, a, b: add(scale(1 - rho, a), scale(rho, b))

        for epoch in xrange(num_epochs):
            vals = []
            batches, num_batches = split_into_batches(data, seq_len, num_seqs)
            for y in batches:
                val, grad = scale(
                    1. / num_datapoints,
                    val_and_grad(y, num_batches, num_samples, *allparams))
                natgrad, grad = grad[:1], grad[1:]

                m = accumulate(b1, grad, m)  # first moment estimate
                v = accumulate(b2, square(grad), v)  # second moment estimate
                mhat = scale(1. / (1 - b1**(i + 1)), m)  # bias correction
                vhat = scale(1. / (1 - b2**(i + 1)), v)
                update = scale(stepsize, div(mhat, add_scalar(eps,
                                                              sqrt(vhat))))

                natparams = add(natparams, scale(nat_stepsize, natgrad))
                params = add(params, update)
                allparams = concat(natparams, params)
                vals.append(val)
                i += 1

                if callback: callback(epoch, vals, natgrad, allparams)

        return allparams
Example #15
0
File: hps.py Project: TeamSWAP/swap
    def onAnalyzerTick(self, analyzer):
        self.beginBatch()
        self.clearList()

        index = 0
        raidTotalHealing = 0
        for player in raid.playerData:
            raidTotalHealing += player['totalHealing']

        for player in sorted(raid.playerData,
                             key=lambda x: x['totalHealing'],
                             reverse=True):
            if player['totalHealing'] == 0:
                continue
            if raidTotalHealing > 0:
                percent = "%.2f" % (
                    (float(player['totalHealing']) / float(raidTotalHealing)) *
                    100.0)
            else:
                percent = "%.2f" % 0

            color = self.getForegroundColor()
            if player['name'] == analyzer.parser.me.rawName:
                color = config.getColor("overlayListSelfColor")

            hps = player['avgHps']
            percent = util.div(player['totalHealing'], raidTotalHealing)

            color = self.getForegroundColor()
            if player['name'] == analyzer.parser.me.rawName:
                color = config.getColor("overlayListSelfColor")

            self.addRow([
                player['name'][1:],
                locale.format("%.2f", hps, grouping=True), percent
            ], color)

            index += 1
        self.endBatch()
        self.panel.Layout()
Example #16
0
def adam(gradfun, allparams, num_iters, step_size, b1=0.9, b2=0.999, eps=1e-8):
    natparams, params = allparams[:1], allparams[1:]
    m = zeros_like(params)
    v = zeros_like(params)
    i = 0
    accumulate = lambda rho, a, b: add(scale(1-rho, a), scale(rho, b))
 
    for i in xrange(num_iters):
        grad = gradfun(allparams, i)
        natgrad, grad = grad[:1], grad[1:]
 
        m = accumulate(b1, grad, m)          # first moment estimate
        v = accumulate(b2, square(grad), v)  # second moment estimate
        mhat = scale(1./(1 - b1**(i+1)), m)  # bias correction
        vhat = scale(1./(1 - b2**(i+1)), v)
        update = scale(step_size, div(mhat, add_scalar(eps, sqrt(vhat))))
 
        natparams = sub(natparams, scale(step_size, natgrad))
        params = sub(params, update)
        allparams = concat(natparams, params)
 
    return allparams
Example #17
0
    def analyzeFight(self, fight=-1, realtime=False):
        analysis = FightAnalysis()
        analysis.realtime = realtime

        sampleDamage = 0
        sampleHeal = 0
        buffs = []
        now = time.time()

        if self.parser.fights:
            if not isinstance(fight, Fight):
                fight = self.parser.fights[fight]
            events = fight.events
        else:
            events = []

        if events:
            analysis.combatStartTime = events[0].time
            analysis.combatEndTime = events[-1].time
            startWasRecent = events[0].recent

        for ev in events:
            if ev.actor == self.parser.me and (ev.type in (evt.DAMAGE, evt.HEAL)
                  or ev.threat):
                if not ev.abilityName in analysis.abilityBreakdown:
                    analysis.abilityBreakdown[ev.abilityName] = {'damage': 0, 'healing': 0,
                       'threat': 0}

            for entity in (ev.actor, ev.target):
                if entity not in analysis.entityBreakdown:
                    analysis.entityBreakdown[entity] = {'damage': 0, 'damageTaken': 0,
                        'healing': 0, 'healingReceived': 0, 'threatReceived': 0}

            # Damage Event
            if ev.type == evt.DAMAGE:
                # From Me
                if ev.actor == self.parser.me:
                    analysis.totalDamage += ev.damage
                    if ev.readTime > now - ROLLING_SAMPLE and ev.recent:
                        sampleDamage += ev.damage
                    analysis.abilityBreakdown[ev.abilityName]['damage'] += ev.damage

                # To Me
                if ev.type == evt.DAMAGE and ev.target == self.parser.me:
                    analysis.totalDamageTaken += ev.damage

                analysis.entityBreakdown[ev.actor]['damage'] += ev.damage
                analysis.entityBreakdown[ev.target]['damageTaken'] += ev.damage

            # Heal Event
            if ev.type == evt.HEAL:
                # From Me
                if ev.actor == self.parser.me:
                    analysis.totalHealing += ev.healing
                    if ev.readTime > now - ROLLING_SAMPLE and ev.recent:
                        sampleHeal += ev.healing
                    analysis.abilityBreakdown[ev.abilityName]['healing'] += ev.healing

                # To Me
                if ev.target == self.parser.me:
                    analysis.totalHealingReceived += ev.healing

                analysis.entityBreakdown[ev.actor]['healing'] += ev.healing
                analysis.entityBreakdown[ev.target]['healingReceived'] += ev.healing

            # Apply threat
            if ev.actor == self.parser.me and ev.threat:
                analysis.totalThreat += ev.threat
                analysis.abilityBreakdown[ev.abilityName]['threat'] += ev.threat

                analysis.entityBreakdown[ev.target]['threatReceived'] += ev.threat

            # Handle buffs
            if ev.type == evt.APPLY_BUFF:
                buffs.append(ev.actionType)
            elif ev.type == evt.REMOVE_BUFF:
                if ev.actionType in buffs:
                    buffs.remove(ev.actionType)

            eventTimeDelta = ev.time - ev.readTime

        analysis.combatDuration = analysis.combatEndTime - analysis.combatStartTime

        if len(events) > 0 and self.parser.inCombat and startWasRecent:
            combatNow = time.time() + eventTimeDelta
            analysis.combatDurationLinear = combatNow - analysis.combatStartTime
            if analysis.combatDurationLinear < 0:
                analysis.combatDurationLinear = analysis.combatDuration
        else:
            analysis.combatDurationLinear = analysis.combatDuration

        # Avg DPS calculation
        analysis.avgDps = util.div(analysis.totalDamage, analysis.combatDuration)
        analysis.avgHps = util.div(analysis.totalHealing, analysis.combatDuration)

        if realtime:
            # Rolling calculations
            analysis.dps = util.div(sampleDamage, min(analysis.combatDuration, ROLLING_SAMPLE))
            analysis.hps = util.div(sampleHeal, min(analysis.combatDuration, ROLLING_SAMPLE))

            # TFB HM Op-9 Colors
            if '2957991221395456' in buffs: # Blue
                analysis.tfbOrb = 1
            elif '2958167315054592' in buffs: # Orange
                analysis.tfbOrb = 2
            elif '2958188789891072' in buffs: # Purple
                analysis.tfbOrb = 3
            elif '2958193084858368' in buffs: # Yellow
                analysis.tfbOrb = 4

        return analysis
Example #18
0
	def screenPosToLogic(self, pos):
		return util.add(self.offset_pos, util.div(pos, self.cell_size))
Example #19
0
    def analyzeFight(self, fight=-1, realtime=False):
        analysis = FightAnalysis()
        analysis.realtime = realtime

        sampleDamage = 0
        sampleHeal = 0
        buffs = []
        now = time.time()

        if self.parser.fights:
            if not isinstance(fight, Fight):
                fight = self.parser.fights[fight]
            events = fight.events
        else:
            events = []

        if events:
            analysis.combatStartTime = events[0].time
            analysis.combatEndTime = events[-1].time
            startWasRecent = events[0].recent

        for ev in events:
            if ev.actor == self.parser.me and (
                    ev.type in (evt.DAMAGE, evt.HEAL) or ev.threat):
                if not ev.abilityName in analysis.abilityBreakdown:
                    analysis.abilityBreakdown[ev.abilityName] = {
                        'damage': 0,
                        'healing': 0,
                        'threat': 0
                    }

            for entity in (ev.actor, ev.target):
                if entity not in analysis.entityBreakdown:
                    analysis.entityBreakdown[entity] = {
                        'damage': 0,
                        'damageTaken': 0,
                        'healing': 0,
                        'healingReceived': 0,
                        'threatReceived': 0
                    }

            # Damage Event
            if ev.type == evt.DAMAGE:
                # From Me
                if ev.actor == self.parser.me:
                    analysis.totalDamage += ev.damage
                    if ev.readTime > now - ROLLING_SAMPLE and ev.recent:
                        sampleDamage += ev.damage
                    analysis.abilityBreakdown[
                        ev.abilityName]['damage'] += ev.damage

                # To Me
                if ev.type == evt.DAMAGE and ev.target == self.parser.me:
                    analysis.totalDamageTaken += ev.damage

                analysis.entityBreakdown[ev.actor]['damage'] += ev.damage
                analysis.entityBreakdown[ev.target]['damageTaken'] += ev.damage

            # Heal Event
            if ev.type == evt.HEAL:
                # From Me
                if ev.actor == self.parser.me:
                    analysis.totalHealing += ev.healing
                    if ev.readTime > now - ROLLING_SAMPLE and ev.recent:
                        sampleHeal += ev.healing
                    analysis.abilityBreakdown[
                        ev.abilityName]['healing'] += ev.healing

                # To Me
                if ev.target == self.parser.me:
                    analysis.totalHealingReceived += ev.healing

                analysis.entityBreakdown[ev.actor]['healing'] += ev.healing
                analysis.entityBreakdown[
                    ev.target]['healingReceived'] += ev.healing

            # Apply threat
            if ev.actor == self.parser.me and ev.threat:
                analysis.totalThreat += ev.threat
                analysis.abilityBreakdown[
                    ev.abilityName]['threat'] += ev.threat

                analysis.entityBreakdown[
                    ev.target]['threatReceived'] += ev.threat

            # Handle buffs
            if ev.type == evt.APPLY_BUFF:
                buffs.append(ev.actionType)
            elif ev.type == evt.REMOVE_BUFF:
                if ev.actionType in buffs:
                    buffs.remove(ev.actionType)

            eventTimeDelta = ev.time - ev.readTime

        analysis.combatDuration = analysis.combatEndTime - analysis.combatStartTime

        if len(events) > 0 and self.parser.inCombat and startWasRecent:
            combatNow = time.time() + eventTimeDelta
            analysis.combatDurationLinear = combatNow - analysis.combatStartTime
            if analysis.combatDurationLinear < 0:
                analysis.combatDurationLinear = analysis.combatDuration
        else:
            analysis.combatDurationLinear = analysis.combatDuration

        # Avg DPS calculation
        analysis.avgDps = util.div(analysis.totalDamage,
                                   analysis.combatDuration)
        analysis.avgHps = util.div(analysis.totalHealing,
                                   analysis.combatDuration)

        if realtime:
            # Rolling calculations
            analysis.dps = util.div(
                sampleDamage, min(analysis.combatDuration, ROLLING_SAMPLE))
            analysis.hps = util.div(
                sampleHeal, min(analysis.combatDuration, ROLLING_SAMPLE))

            # TFB HM Op-9 Colors
            if '2957991221395456' in buffs:  # Blue
                analysis.tfbOrb = 1
            elif '2958167315054592' in buffs:  # Orange
                analysis.tfbOrb = 2
            elif '2958188789891072' in buffs:  # Purple
                analysis.tfbOrb = 3
            elif '2958193084858368' in buffs:  # Yellow
                analysis.tfbOrb = 4

        return analysis
Example #20
0
	def rectFilter(self, rect):
		ps = self.screenPosToLogic(rect.GetPosition().Get())
		ps = util.sub(ps, (1,1))
		sz = util.div(rect.GetSize().Get(), self.cell_size)
		sz = util.add(sz, (1,1))
		return ['x>=%d AND y>=%d AND x<=%d AND y<=%d'%(ps[0], ps[1], ps[0]+sz[0], ps[1]+sz[1])]