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
sc2reader/sc2reader/resources.py
Line 374 in 7ca1594
@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:
sc2reader/sc2reader/resources.py
Line 366 in 7ca1594
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.