def bit_pack_encode(self, metadata) -> Iterator[Tuple[int, int]]: yield from bitpacking.pack_sorted_array_elements( sorted(self.can_change_from), sorted(self.possible_change_from), ) yield from bitpacking.pack_sorted_array_elements( sorted(self.can_change_to), sorted(self.possible_change_to), )
def bit_pack_encode(self, metadata) -> Iterator[Tuple[int, int]]: reference: MajorItemsConfiguration = metadata["reference"] name_to_item: Dict[str, MajorItem] = { item.name: item for item in self.items_state.keys() } modified_items = sorted(item.name for item, state in self.items_state.items() if state != reference.items_state[item]) yield from bitpacking.pack_sorted_array_elements( modified_items, sorted(name_to_item.keys())) for item_name in modified_items: item = name_to_item[item_name] yield from self.items_state[item].bit_pack_encode( item, reference=reference.items_state[item]) # default_items for category, default in self.default_items.items(): all_major = [ major for major in reference.items_state.keys() if major.item_category == category ] yield from bitpacking.pack_array_element(default, all_major) # random starting items yield from bitpacking.encode_big_int( self.minimum_random_starting_items) yield from bitpacking.encode_big_int( self.maximum_random_starting_items)
def bit_pack_encode(self, metadata) -> Iterator[Tuple[int, int]]: yield from self.randomization_mode.bit_pack_encode(metadata) if self.excluded_indices: yield from bitpacking.encode_bool(True) yield from bitpacking.pack_sorted_array_elements(self._sorted_indices, _ALL_INDICES) else: yield from bitpacking.encode_bool(False)
def test_sorted_array_elements_round_trip(elements, array): generator = bitpacking.pack_sorted_array_elements(elements, array) b = bitpacking._pack_encode_results(list(generator)) decoder = bitpacking.BitPackDecoder(b) decoded_elements = bitpacking.decode_sorted_array_elements(decoder, array) assert elements == decoded_elements
def bit_pack_encode(self, metadata) -> Iterator[Tuple[int, int]]: db = default_database.game_description_for(self.game) yield from self.randomization_mode.bit_pack_encode(metadata) if self.excluded_indices: yield from bitpacking.encode_bool(True) yield from bitpacking.pack_sorted_array_elements(self._sorted_indices, _all_indices(db)) else: yield from bitpacking.encode_bool(False)
def bit_pack_encode(self, metadata) -> Iterator[Tuple[int, int]]: reference: DockRandoConfiguration = metadata["reference"] yield from self.mode.bit_pack_encode(None) modified_types = sorted( dock_type for dock_type, type_state in self.types_state.items() if type_state != reference.types_state[dock_type]) yield from bitpacking.pack_sorted_array_elements( modified_types, sorted(self.weakness_database.dock_types)) for dock_type in modified_types: yield from self.types_state[dock_type].bit_pack_encode( {"reference": reference.types_state[dock_type]})
def bit_pack_encode(self, metadata) -> Iterator[Tuple[int, int]]: areas = self.areas_list(self.game) yield from bitpacking.pack_sorted_array_elements( list(self.locations), areas)
def test_sorted_array_elements_size(elements, array, expected_size): count = 0 for _, size in bitpacking.pack_sorted_array_elements( list(elements), list(array)): count += bitpacking._bits_for_number(size) assert count == expected_size