ggtracker/sc2reader

Unable to parse alphastar replays

StoicLoofah opened this issue · 5 comments

Bumped into this error

  File "/home/kevin/sc2reader/sc2reader/factories/sc2factory.py", line 85, in load_replay
    return self.load(Replay, source, options, **new_options)
  File "/home/kevin/sc2reader/sc2reader/factories/sc2factory.py", line 143, in load
    return self._load(cls, resource, filename=filename, options=options)
  File "/home/kevin/sc2reader/sc2reader/factories/sc2factory.py", line 152, in _load
    obj = cls(resource, filename=filename, factory=self, **options)
  File "/home/kevin/sc2reader/sc2reader/resources.py", line 302, in __init__
    self.load_all_details()
  File "/home/kevin/sc2reader/sc2reader/resources.py", line 446, in load_all_details
    self.load_details()
  File "/home/kevin/sc2reader/sc2reader/resources.py", line 435, in load_details
    self.length.seconds / GAME_SPEED_FACTOR[self.expansion][self.speed]
KeyError: ''

on this replay. I got the same error on other replays, though I'm not sure it applies to all of them. The entire replay pack is at https://deepmind.com/research/open-source/alphastar-resources

Insert the line assert self.expansion and self.speed, "{}, {}".format(self.expansion, self.speed) just above line 432 and let us know which one is the empty string.

Right, good question. The speed was empty: in my 2 minutes of debugging, this line wasn't getting run

self.speed = self.attributes[16]["Game Speed"]

@cclauss running your suggested assertion gives me

Gives me Traceback (most recent call last):

  File "/usr/local/lib/python3.7/site-packages/sc2reader/resources.py", line 432, in load_details
    assert self.expansion and self.speed, "{}, {}".format(self.expansion, self.speed) 
AssertionError: LotV, 

The reason is due to load_attribute_events doing nothing, due to:

if "replay.attributes.events" in self.raw_data:

evaluating to false.

Traceback (most recent call last):
  File "alphastar_analysis.py", line 9, in <module>
    engine=sc2reader.engine.GameEngine(plugins=[ContextLoader(), APMTracker(), SelectionTracker()]))
  File "/usr/local/lib/python3.7/site-packages/sc2reader/factories/sc2factory.py", line 85, in load_replay
    return self.load(Replay, source, options, **new_options)
  File "/usr/local/lib/python3.7/site-packages/sc2reader/factories/sc2factory.py", line 143, in load
    return self._load(cls, resource, filename=filename, options=options)
  File "/usr/local/lib/python3.7/site-packages/sc2reader/factories/sc2factory.py", line 152, in _load
    obj = cls(resource, filename=filename, factory=self, **options)
  File "/usr/local/lib/python3.7/site-packages/sc2reader/resources.py", line 346, in __init__
    engine.run(self)
  File "/usr/local/lib/python3.7/site-packages/sc2reader/engine/engine.py", line 178, in run
    for new_event in event_handler(event, replay) or []:
  File "/usr/local/lib/python3.7/site-packages/sc2reader/engine/plugins/context.py", line 93, in handleUpdateTargetUnitCommandEvent
    if event.player.pid in self.last_target_ability_event:
AttributeError: 'NoneType' object has no attribute 'pid'

Workaround unfortunately just moves the error. My best guess is that when they were modified for anonymization, they also inadvertently broke the ability for sc2reader to read it without significant changes.

Same error as #61