(self, skip=False)
| 3320 | self.update() |
| 3321 | |
| 3322 | def update(self, skip=False): |
| 3323 | if mode.started or mode.session_number == 0 or skip: |
| 3324 | self.label.text = '' |
| 3325 | return |
| 3326 | |
| 3327 | poss_mods = ['position1', 'position2', 'position3', 'position4', |
| 3328 | 'vis1', 'vis2', 'vis3', 'vis4', 'color', 'visvis', |
| 3329 | 'visaudio', 'audiovis', 'image', 'audio', |
| 3330 | 'audio2', 'arithmetic'] # arithmetic must be last so it's easy to exclude |
| 3331 | |
| 3332 | rights = dict([(mod, 0) for mod in poss_mods]) |
| 3333 | wrongs = dict([(mod, 0) for mod in poss_mods]) |
| 3334 | category_percents = dict([(mod, 0) for mod in poss_mods]) |
| 3335 | |
| 3336 | mods = mode.modalities[mode.mode] |
| 3337 | data = stats.session |
| 3338 | |
| 3339 | for mod in mods: |
| 3340 | for x in range(mode.back, len(data['position1'])): |
| 3341 | |
| 3342 | if mode.flags[mode.mode]['crab'] == 1: |
| 3343 | back = 1 + 2*(x % mode.back) |
| 3344 | else: |
| 3345 | back = mode.back |
| 3346 | if cfg.VARIABLE_NBACK: |
| 3347 | back = mode.variable_list[x - back] |
| 3348 | |
| 3349 | # data is a dictionary of lists. |
| 3350 | if mod in ['position1', 'position2', 'position3', 'position4', |
| 3351 | 'vis1', 'vis2', 'vis3', 'vis4', 'audio', 'audio2', 'color', 'image']: |
| 3352 | rights[mod] += int((data[mod][x] == data[mod][x-back]) and data[mod+'_input'][x]) |
| 3353 | wrongs[mod] += int((data[mod][x] == data[mod][x-back]) ^ data[mod+'_input'][x]) # ^ is XOR |
| 3354 | if cfg.JAEGGI_SCORING: |
| 3355 | rights[mod] += int(data[mod][x] != data[mod][x-back] and not data[mod+'_input'][x]) |
| 3356 | |
| 3357 | if mod in ['visvis', 'visaudio', 'audiovis']: |
| 3358 | modnow = mod.startswith('vis') and 'vis' or 'audio' # these are the python<2.5 compatible versions |
| 3359 | modthn = mod.endswith('vis') and 'vis' or 'audio' # of 'vis' if mod.startswith('vis') else 'audio' |
| 3360 | rights[mod] += int((data[modnow][x] == data[modthn][x-back]) and data[mod+'_input'][x]) |
| 3361 | wrongs[mod] += int((data[modnow][x] == data[modthn][x-back]) ^ data[mod+'_input'][x]) |
| 3362 | if cfg.JAEGGI_SCORING: |
| 3363 | rights[mod] += int(data[modnow][x] != data[modthn][x-back] and not data[mod+'_input'][x]) |
| 3364 | |
| 3365 | if mod in ['arithmetic']: |
| 3366 | ops = {'add':'+', 'subtract':'-', 'multiply':'*', 'divide':'/'} |
| 3367 | answer = eval("Decimal(data['numbers'][x-back]) %s Decimal(data['numbers'][x])" % ops[data['operation'][x]]) |
| 3368 | rights[mod] += int(answer == Decimal(data[mod+'_input'][x])) # data[...][x] is only Decimal if op == / |
| 3369 | wrongs[mod] += int(answer != Decimal(data[mod+'_input'][x])) |
| 3370 | |
| 3371 | str_list = [] |
| 3372 | if not CLINICAL_MODE: |
| 3373 | str_list += [_('Correct-Errors: ')] |
| 3374 | sep = ' ' |
| 3375 | keys = dict([(mod, cfg['KEY_%s' % mod.upper()]) for mod in poss_mods[:-1]]) # exclude 'arithmetic' |
| 3376 | |
| 3377 | for mod in poss_mods[:-1]: # exclude 'arithmetic' |
| 3378 | if mod in mods: |
| 3379 | keytext = key.symbol_string(keys[mod]) |
no test coverage detected