def testFilteredIn(self): a = sc_pb.ResponseObservation(observation=sc_pb.Observation( feature_layer_data=spatial_pb2.ObservationFeatureLayer( renders=spatial_pb2.FeatureLayers( height_map=common_pb2.ImageData( bits_per_pixel=32, size=common_pb2.Size2DI(x=4, y=4), data=np.array([[0, 0, 0, 0], [1, 0, 1, 0], [0, 0, 0, 1], [1, 1, 1, 1]], dtype=np.int32).tobytes()))))) b = sc_pb.ResponseObservation(observation=sc_pb.Observation( feature_layer_data=spatial_pb2.ObservationFeatureLayer( renders=spatial_pb2.FeatureLayers( height_map=common_pb2.ImageData( bits_per_pixel=32, size=common_pb2.Size2DI(x=4, y=4), data=np.array([[0, 0, 0, 0], [0, 1, 1, 0], [0, 0, 0, 1], [1, 1, 1, 0]], dtype=np.int32).tobytes()))))) result = image_differencer.image_differencer(path=proto_diff.ProtoPath( ("observation", "feature_layer_data", "renders", "height_map", "data")), proto_a=a, proto_b=b) self.assertEqual( result, "3 element(s) changed - [1][0]: 1 -> 0; [1][1]: 0 -> 1; [3][3]: 1 -> 0" )
def testRemovedField(self): a = sc_pb.ResponseObservation(observation=sc_pb.Observation( game_loop=1)) b = sc_pb.ResponseObservation(observation=sc_pb.Observation()) diff = proto_diff.compute_diff(a, b) self.assertIsNotNone(diff) self.assertLen(diff.removed, 1, diff) self.assertEqual(str(diff.removed[0]), "observation.game_loop") self.assertEqual(diff.removed, diff.all_diffs()) self.assertEqual(diff.report(), "Removed observation.game_loop.")
def testGetField(self): proto = sc_pb.ResponseObservation(observation=sc_pb.Observation( game_loop=1, alerts=[sc_pb.AlertError])) game_loop = proto_diff.ProtoPath(("observation", "game_loop")) alert = proto_diff.ProtoPath(("observation", "alerts", 0)) self.assertEqual(game_loop.get_field(proto), 1) self.assertEqual(alert.get_field(proto), sc_pb.AlertError) self.assertEqual( proto_diff.ProtoPath(game_loop.path[:-1]).get_field(proto), sc_pb.Observation(game_loop=1, alerts=[sc_pb.AlertError]))
def testTruncation(self): a = sc_pb.ResponseObservation(observation=sc_pb.Observation( game_loop=1, alerts=[sc_pb.AlertError, sc_pb.LarvaHatched])) b = sc_pb.ResponseObservation(observation=sc_pb.Observation( game_loop=2, alerts=[sc_pb.AlertError, sc_pb.MergeComplete])) diff = proto_diff.compute_diff(a, b) self.assertIsNotNone(diff) self.assertEqual( diff.report([_alert_formatter], truncate_to=9), "Changed observation.alerts[1]: LarvaH....\n" "Changed observation.game_loop: 1 -> 2.") self.assertEqual( diff.report([_alert_formatter], truncate_to=-1), "Changed observation.alerts[1]: ....\n" "Changed observation.game_loop: ... -> ....")
def testAddedFields(self): a = sc_pb.ResponseObservation(observation=sc_pb.Observation( alerts=[sc_pb.AlertError])) b = sc_pb.ResponseObservation(observation=sc_pb.Observation( alerts=[sc_pb.AlertError, sc_pb.MergeComplete]), player_result=[sc_pb.PlayerResult()]) diff = proto_diff.compute_diff(a, b) self.assertIsNotNone(diff) self.assertLen(diff.added, 2, diff) self.assertEqual(str(diff.added[0]), "observation.alerts[1]") self.assertEqual(str(diff.added[1]), "player_result") self.assertEqual(diff.added, diff.all_diffs()) self.assertEqual( diff.report(), "Added observation.alerts[1].\n" "Added player_result.")
def setUp(self): super(AvailableActionsTest, self).setUp() self.obs = text_format.Parse(observation_text_proto, sc_pb.Observation()) self.features = features.Features(feature_screen_width=84, feature_screen_height=80, feature_minimap_width=64, feature_minimap_height=67)
def testRemovedFields(self): a = sc_pb.ResponseObservation(observation=sc_pb.Observation( game_loop=1, score=score_pb2.Score(), alerts=[sc_pb.AlertError, sc_pb.MergeComplete])) b = sc_pb.ResponseObservation(observation=sc_pb.Observation( alerts=[sc_pb.AlertError])) diff = proto_diff.compute_diff(a, b) self.assertIsNotNone(diff) self.assertLen(diff.removed, 3, diff) self.assertEqual(str(diff.removed[0]), "observation.alerts[1]") self.assertEqual(str(diff.removed[1]), "observation.game_loop") self.assertEqual(str(diff.removed[2]), "observation.score") self.assertEqual(diff.removed, diff.all_diffs()) self.assertEqual( diff.report(), "Removed observation.alerts[1].\n" "Removed observation.game_loop.\n" "Removed observation.score.")
def testChangedFields(self): a = sc_pb.ResponseObservation(observation=sc_pb.Observation( game_loop=1, alerts=[sc_pb.AlertError, sc_pb.LarvaHatched])) b = sc_pb.ResponseObservation(observation=sc_pb.Observation( game_loop=2, alerts=[sc_pb.AlertError, sc_pb.MergeComplete])) diff = proto_diff.compute_diff(a, b) self.assertIsNotNone(diff) self.assertLen(diff.changed, 2, diff) self.assertEqual(str(diff.changed[0]), "observation.alerts[1]") self.assertEqual(str(diff.changed[1]), "observation.game_loop") self.assertEqual(diff.changed, diff.all_diffs()) self.assertEqual( diff.report(), "Changed observation.alerts[1]: 7 -> 8.\n" "Changed observation.game_loop: 1 -> 2.") self.assertEqual( diff.report([_alert_formatter]), "Changed observation.alerts[1]: LarvaHatched -> MergeComplete.\n" "Changed observation.game_loop: 1 -> 2.")
def setUp(self): super(AvailableActionsTest, self).setUp() self.obs = text_format.Parse(observation_text_proto, sc_pb.Observation()) self.features = features.Features(screen_size_px=(84, 80), minimap_size_px=(64, 67))
def setUp(self): super(AvailableActionsTest, self).setUp() self.obs = text_format.Parse(observation_text_proto, sc_pb.Observation()) self.hideSpecificActions(True)