pymammotion 0.4.10__py3-none-any.whl → 0.4.11b1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -118,7 +118,7 @@ class HashList(DataClassORJSONMixin):
118
118
  hashlist for all our hashIDs for verification
119
119
  """
120
120
 
121
- root_hash_list: RootHashList = field(default_factory=RootHashList)
121
+ root_hash_lists: list[RootHashList] = field(default_factory=list)
122
122
  area: dict = field(default_factory=dict) # type 0
123
123
  path: dict = field(default_factory=dict) # type 2
124
124
  obstacle: dict = field(default_factory=dict) # type 1
@@ -135,37 +135,51 @@ class HashList(DataClassORJSONMixin):
135
135
 
136
136
  @property
137
137
  def hashlist(self) -> list[int]:
138
- if len(self.root_hash_list.data) == 0:
138
+ if not self.root_hash_lists:
139
139
  return []
140
- return [i for obj in self.root_hash_list.data for i in obj.data_couple]
140
+ # Combine data_couple from all RootHashLists
141
+ return [i for root_list in self.root_hash_lists for obj in root_list.data for i in obj.data_couple]
141
142
 
142
143
  @property
143
144
  def missing_hashlist(self) -> list[int]:
144
145
  """Return missing hashlist."""
146
+ all_hash_ids = set(self.area.keys()).union(
147
+ self.path.keys(), self.obstacle.keys(), self.dump.keys(), self.svg.keys()
148
+ )
145
149
  return [
146
150
  i
147
- for obj in self.root_hash_list.data
151
+ for root_list in self.root_hash_lists
152
+ for obj in root_list.data
148
153
  for i in obj.data_couple
149
- if f"{i}"
150
- not in set(self.area.keys()).union(
151
- self.path.keys(), self.obstacle.keys(), self.dump.keys(), self.svg.keys()
152
- )
154
+ if f"{i}" not in all_hash_ids
153
155
  ]
154
156
 
155
157
  def update_root_hash_list(self, hash_list: NavGetHashListData) -> None:
156
- self.root_hash_list.total_frame = hash_list.total_frame
158
+ target_root_list = next((rhl for rhl in self.root_hash_lists if rhl.total_frame == hash_list.total_frame), None)
157
159
 
158
- for index, obj in enumerate(self.root_hash_list.data):
160
+ if target_root_list is None:
161
+ # Create new RootHashList if none exists for this total_frame
162
+ new_root_list = RootHashList(total_frame=hash_list.total_frame, data=[hash_list])
163
+ self.root_hash_lists.append(new_root_list)
164
+ return
165
+
166
+ for index, obj in enumerate(target_root_list.data):
159
167
  if obj.current_frame == hash_list.current_frame:
160
168
  # Replace the item if current_frame matches
161
- self.root_hash_list.data[index] = hash_list
169
+ target_root_list.data[index] = hash_list
162
170
  return
163
171
 
164
172
  # If no match was found, append the new item
165
- self.root_hash_list.data.append(hash_list)
173
+ target_root_list.data.append(hash_list)
166
174
 
167
175
  def missing_hash_frame(self) -> list[int]:
168
- return self._find_missing_frames(self.root_hash_list)
176
+ """Returns a combined list of all missing frames across all RootHashLists."""
177
+ missing_frames = []
178
+ for root_list in self.root_hash_lists:
179
+ missing = self._find_missing_frames(root_list)
180
+ if missing:
181
+ missing_frames.extend(missing)
182
+ return missing_frames
169
183
 
170
184
  def missing_frame(self, hash_data: NavGetCommDataAck | SvgMessageAckT) -> list[int]:
171
185
  if hash_data.type == PathType.AREA:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: pymammotion
3
- Version: 0.4.10
3
+ Version: 0.4.11b1
4
4
  Summary:
5
5
  License: GPL-3.0
6
6
  Author: Michael Arthur
@@ -31,7 +31,7 @@ pymammotion/data/model/enums.py,sha256=EpKmO8yVUZyEnTY4yH0DMMVKYNQM42zpW1maUu0i3
31
31
  pymammotion/data/model/excute_boarder_params.py,sha256=9CpUqrygcle1C_1hDW-riLmm4map4ZbE842NXjcomEI,1394
32
32
  pymammotion/data/model/execute_boarder.py,sha256=9rd_h4fbcsXxgnLOd2rO2hWyD1abnTGc47QTEpp8DD0,1103
33
33
  pymammotion/data/model/generate_route_information.py,sha256=pgjqURwmEIzjCMbl4Z5JDDkfxyUAdry1KhPfyir3-mU,777
34
- pymammotion/data/model/hash_list.py,sha256=1mwL715Q-OizowBDDPk1n_mYDZgb7kz24cIfzKu0QUM,7892
34
+ pymammotion/data/model/hash_list.py,sha256=EKX-P8I2dp234GsMzZgi6afxX2xwgcYfk7kl8ezvf_g,8605
35
35
  pymammotion/data/model/location.py,sha256=PwmITejfI4pm7PI4rzqSuuHetwle6IJr_CV95435s2M,871
36
36
  pymammotion/data/model/mowing_modes.py,sha256=bBbRhDe-imZsXDR0TN0emQv6BiIkAlXJFb5isPEjgDk,1078
37
37
  pymammotion/data/model/plan.py,sha256=wGlcJT-w0EdbWK9jI838TCOm_MABFg7WoR664VB8RWg,2880
@@ -117,7 +117,7 @@ pymammotion/utility/map.py,sha256=GYscVMg2cX3IPlNpCBNHDW0S55yS1WGRf1iHnNZ7TfQ,22
117
117
  pymammotion/utility/movement.py,sha256=N75oAoAgFydqoaOedYIxGUHmuTCtPzAOtb-d_29tpfI,615
118
118
  pymammotion/utility/periodic.py,sha256=MbeSb9cfhxzYmdT_RiE0dZe3H9IfbQW_zSqhmSX2RUc,3321
119
119
  pymammotion/utility/rocker_util.py,sha256=6tX7sS87qoQC_tsxbx3NLL-HgS08wtzXiZkhDiz7uo0,7179
120
- pymammotion-0.4.10.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
121
- pymammotion-0.4.10.dist-info/METADATA,sha256=Cd1drp-O7IQPcZRlk7EV6fQfONwNW1xqRYjE2I2mYAE,3885
122
- pymammotion-0.4.10.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
123
- pymammotion-0.4.10.dist-info/RECORD,,
120
+ pymammotion-0.4.11b1.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
121
+ pymammotion-0.4.11b1.dist-info/METADATA,sha256=DofePhYsQPvJiHt2WhaVGMYn1ZiRD2voldlNeG5gxPY,3887
122
+ pymammotion-0.4.11b1.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
123
+ pymammotion-0.4.11b1.dist-info/RECORD,,