def __init__()

in utils.py [0:0]


    def __init__(self):
        featurizer = _ext.CoarseConvFeaturizerUnitTypes()
        self.tc_to_feats = featurizer.typemapper

        self.feats_to_tc = [self.tc_to_feats.index(i) for i in range(117)] + [None]
        self.offset = featurizer.feature_size

        self.our_bldgs_inds = [e for e in filter(lambda x: x<117, self.tc_to_feats[106:])]
        self.our_units_inds = [e for e in filter(lambda x: x<117, self.tc_to_feats[:106])]
        self.nmy_bldgs_inds = [e + self.offset for e in self.our_bldgs_inds]
        self.nmy_units_inds = [e + self.offset for e in self.our_units_inds]
        cut = Constants.unittypes
        req = defaultdict(dict)
        req[cut.Terran_Marine][cut.Terran_Barracks] = 1
        req[cut.Terran_Ghost][cut.Terran_Academy] = 1
        req[cut.Terran_Ghost][cut.Terran_Covert_Ops] = 1
        req[cut.Terran_Goliath][cut.Terran_Armory] = 1
        req[cut.Terran_Machine_Shop][cut.Terran_Factory] = 1
        req[cut.Terran_Siege_Tank_Tank_Mode][cut.Terran_Machine_Shop] = 1
        req[cut.Terran_Vulture][cut.Terran_Factory] = 1
        req[cut.Terran_Wraith][cut.Terran_Starport] = 1
        req[cut.Terran_Control_Tower][cut.Terran_Starport] = 1
        req[cut.Terran_Science_Vessel][cut.Terran_Control_Tower] = 1
        req[cut.Terran_Science_Vessel][cut.Terran_Science_Facility] = 1
        req[cut.Terran_Dropship][cut.Terran_Control_Tower] = 1
        req[cut.Terran_Battlecruiser][cut.Terran_Control_Tower] = 1
        req[cut.Terran_Battlecruiser][cut.Terran_Physics_Lab] = 1
        req[cut.Terran_Physics_Lab][cut.Terran_Science_Facility] = 1
        req[cut.Terran_Covert_Ops][cut.Terran_Science_Facility] = 1
        req[cut.Terran_Siege_Tank_Siege_Mode][cut.Terran_Machine_Shop] = 1
        req[cut.Terran_Firebat][cut.Terran_Academy] = 1
        req[cut.Terran_Medic][cut.Terran_Academy] = 1
        req[cut.Zerg_Zergling][cut.Zerg_Spawning_Pool] = 1
        req[cut.Zerg_Hydralisk][cut.Zerg_Hydralisk_Den] = 1
        req[cut.Zerg_Lurker][cut.Zerg_Hydralisk_Den] = 1
        req[cut.Zerg_Lurker_Egg][cut.Zerg_Hydralisk_Den] = 1
        req[cut.Zerg_Ultralisk][cut.Zerg_Ultralisk_Cavern] = 1
        req[cut.Zerg_Mutalisk][cut.Zerg_Spire] = 1
        req[cut.Zerg_Guardian][cut.Zerg_Greater_Spire] = 1
        req[cut.Zerg_Queen][cut.Zerg_Queens_Nest] = 1
        req[cut.Zerg_Defiler][cut.Zerg_Defiler_Mound] = 1
        req[cut.Zerg_Scourge][cut.Zerg_Spire] = 1
        req[cut.Terran_Valkyrie][cut.Terran_Control_Tower] = 1
        req[cut.Terran_Valkyrie][cut.Terran_Armory] = 1
        req[cut.Zerg_Cocoon][cut.Zerg_Greater_Spire] = 1
        req[cut.Protoss_Dark_Templar][cut.Protoss_Templar_Archives] = 1
        req[cut.Zerg_Devourer][cut.Zerg_Greater_Spire] = 1
        req[cut.Protoss_Zealot][cut.Protoss_Gateway] = 1
        req[cut.Protoss_Dragoon][cut.Protoss_Cybernetics_Core] = 1
        req[cut.Protoss_High_Templar][cut.Protoss_Templar_Archives] = 1
        req[cut.Protoss_Archon][cut.Protoss_Templar_Archives] = 1
        req[cut.Protoss_Dark_Archon][cut.Protoss_Templar_Archives] = 1
        req[cut.Protoss_Arbiter][cut.Protoss_Arbiter_Tribunal] = 1
        req[cut.Protoss_Carrier][cut.Protoss_Fleet_Beacon] = 1
        req[cut.Protoss_Reaver][cut.Protoss_Robotics_Support_Bay] = 1
        req[cut.Protoss_Observer][cut.Protoss_Observatory] = 1
        req[cut.Protoss_Shuttle][cut.Protoss_Robotics_Facility] = 1
        req[cut.Protoss_Scout][cut.Protoss_Stargate] = 1
        req[cut.Protoss_Corsair][cut.Protoss_Stargate] = 1
        req[cut.Terran_Comsat_Station][cut.Terran_Academy] = 1
        req[cut.Terran_Nuclear_Silo][cut.Terran_Science_Facility] = 1
        req[cut.Terran_Nuclear_Silo][cut.Terran_Covert_Ops] = 1
        req[cut.Terran_Barracks][cut.Terran_Command_Center] = 1
        req[cut.Terran_Academy][cut.Terran_Barracks] = 1
        req[cut.Terran_Factory][cut.Terran_Barracks] = 1
        req[cut.Terran_Starport][cut.Terran_Factory] = 1
        req[cut.Terran_Science_Facility][cut.Terran_Starport] = 1
        req[cut.Terran_Engineering_Bay][cut.Terran_Command_Center] = 1
        req[cut.Terran_Armory][cut.Terran_Factory] = 1
        req[cut.Terran_Missile_Turret][cut.Terran_Engineering_Bay] = 1
        req[cut.Terran_Bunker][cut.Terran_Barracks] = 1
        req[cut.Zerg_Lair][cut.Zerg_Spawning_Pool] = 1
        req[cut.Zerg_Hive][cut.Zerg_Queens_Nest] = 1
        req[cut.Zerg_Nydus_Canal][cut.Zerg_Hive] = 1
        req[cut.Zerg_Hydralisk_Den][cut.Zerg_Spawning_Pool] = 1
        req[cut.Zerg_Defiler_Mound][cut.Zerg_Hive] = 1
        req[cut.Zerg_Queens_Nest][cut.Zerg_Lair] = 1
        req[cut.Zerg_Evolution_Chamber][cut.Zerg_Hatchery] = 1
        req[cut.Zerg_Ultralisk_Cavern][cut.Zerg_Hive] = 1
        req[cut.Zerg_Spire][cut.Zerg_Lair] = 1
        req[cut.Zerg_Greater_Spire][cut.Zerg_Hive] = 1
        req[cut.Zerg_Spawning_Pool][cut.Zerg_Hatchery] = 1
        req[cut.Zerg_Spore_Colony][cut.Zerg_Evolution_Chamber] = 1
        req[cut.Zerg_Sunken_Colony][cut.Zerg_Spawning_Pool] = 1
        req[cut.Protoss_Robotics_Facility][cut.Protoss_Cybernetics_Core] = 1
        req[cut.Protoss_Observatory][cut.Protoss_Robotics_Facility] = 1
        req[cut.Protoss_Gateway][cut.Protoss_Nexus] = 1
        req[cut.Protoss_Photon_Cannon][cut.Protoss_Forge] = 1
        req[cut.Protoss_Citadel_of_Adun][cut.Protoss_Cybernetics_Core] = 1
        req[cut.Protoss_Cybernetics_Core][cut.Protoss_Gateway] = 1
        req[cut.Protoss_Templar_Archives][cut.Protoss_Citadel_of_Adun] = 1
        req[cut.Protoss_Forge][cut.Protoss_Nexus] = 1
        req[cut.Protoss_Stargate][cut.Protoss_Cybernetics_Core] = 1
        req[cut.Protoss_Fleet_Beacon][cut.Protoss_Stargate] = 1
        req[cut.Protoss_Arbiter_Tribunal][cut.Protoss_Templar_Archives] = 1
        req[cut.Protoss_Arbiter_Tribunal][cut.Protoss_Stargate] = 1
        req[cut.Protoss_Robotics_Support_Bay][cut.Protoss_Robotics_Facility] = 1
        req[cut.Protoss_Shield_Battery][cut.Protoss_Gateway] = 1
        n_feats_ut = len(self.feats_to_tc)
        self.obs_to_hidden = np.eye(n_feats_ut, dtype='bool')
        for unittype, requirements in req.items():
            for requirement in requirements.keys():
                #print("{}: {} requires {}: {}".format(unittype, cut._dict[unittype], requirement, cut._dict[requirement]))
                #print("{}: {} requires {}: {}".format(self.tc_to_feats[unittype], self.feats_to_string(self.tc_to_feats[unittype]), self.tc_to_feats[requirement], self.feats_to_string(self.tc_to_feats[requirement])))
                self.obs_to_hidden[self.tc_to_feats[unittype]][self.tc_to_feats[requirement]] = True
        for depth in range(8):  # max depth build trees?
            for ut in range(n_feats_ut):
                self.obs_to_hidden[ut] = np.max(self.obs_to_hidden[self.obs_to_hidden[ut]], axis=0)