cfclient 2025.2__py3-none-any.whl → 2025.9__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.

Potentially problematic release.


This version of cfclient might be problematic. Click here for more details.

@@ -31,7 +31,6 @@ import cfclient
31
31
  from PyQt6 import QtWidgets
32
32
  from PyQt6 import uic
33
33
  from PyQt6.QtCore import QVariant, Qt, QAbstractTableModel, pyqtSignal
34
- from cflib.localization import LighthouseBsGeoEstimator
35
34
  from cflib.localization import LighthouseSweepAngleAverageReader
36
35
  from cflib.crazyflie.mem import LighthouseBsGeometry
37
36
  from cfclient.ui.wizards.lighthouse_geo_bs_estimation_wizard import LighthouseBasestationGeometryWizard
@@ -138,13 +137,6 @@ class LighthouseBsGeometryDialog(QtWidgets.QWidget, basestation_geometry_widget_
138
137
  self._lighthouse_tab = lighthouse_tab
139
138
 
140
139
  self._estimate_geometry_button.clicked.connect(self._estimate_geometry_button_clicked)
141
- self._simple_estimator = LighthouseBsGeoEstimator()
142
- self._estimate_geometry_simple_button.clicked.connect(self._estimate_geometry_simple_button_clicked)
143
- try:
144
- if not self._simple_estimator.is_available():
145
- self._estimate_geometry_simple_button.setEnabled(False)
146
- except Exception as e:
147
- print(e)
148
140
 
149
141
  self._write_to_cf_button.clicked.connect(self._write_to_cf_button_clicked)
150
142
 
@@ -205,10 +197,6 @@ class LighthouseBsGeometryDialog(QtWidgets.QWidget, basestation_geometry_widget_
205
197
  self._base_station_geometry_wizard.show()
206
198
  self.hide()
207
199
 
208
- def _estimate_geometry_simple_button_clicked(self):
209
- self._sweep_angle_reader.start_angle_collection()
210
- self._update_ui()
211
-
212
200
  def _write_to_cf_button_clicked(self):
213
201
  if len(self._newly_estimated_geometry) > 0:
214
202
  self._lighthouse_tab.write_and_store_geometry(self._newly_estimated_geometry)
@@ -41,13 +41,6 @@
41
41
  </property>
42
42
  </spacer>
43
43
  </item>
44
- <item>
45
- <widget class="QPushButton" name="_estimate_geometry_simple_button">
46
- <property name="text">
47
- <string>Estimate Geometry Simple</string>
48
- </property>
49
- </widget>
50
- </item>
51
44
  </layout>
52
45
  </item>
53
46
  <item>
cfclient/ui/main.py CHANGED
@@ -683,8 +683,8 @@ class MainUI(QtWidgets.QMainWindow, main_window_class):
683
683
  if e.errno == 13: # Permission denied
684
684
  link = "<a href='https://www.bitcraze.io/documentation/repository/crazyflie-lib-python/master/installation/usb_permissions/'>Install USB Permissions</a>" # noqa
685
685
  msg = QMessageBox()
686
- msg.setIcon(QMessageBox.Information)
687
- msg.setTextFormat(Qt.RichText)
686
+ msg.setIcon(QMessageBox.Icon.Information)
687
+ msg.setTextFormat(Qt.TextFormat.RichText)
688
688
  msg.setText("Could not access Crazyradio")
689
689
  msg.setInformativeText(link)
690
690
  msg.setWindowTitle("Crazyradio permissions")
@@ -446,7 +446,7 @@ class FlightTab(TabToolbox, flight_tab_class):
446
446
  # To prevent conflicting commands from the controller and the flight panel
447
447
  if JoystickReader().available_devices():
448
448
  self.commanderBox.setToolTip(
449
- 'Cant use both an controller and Command Based Flight'
449
+ 'Cannot use both a controller and Command Based Flight'
450
450
  )
451
451
  self.commanderBox.setEnabled(False)
452
452
  return
@@ -99,7 +99,7 @@ class LogTab(TabToolbox, param_tab_class):
99
99
  log_groups = cfclient.log_param_doc['logs'][group]
100
100
  log_variable = log_groups['variables'][param]
101
101
  item.setData(4, Qt.ItemDataRole.DisplayRole, log_variable['short_desc'])
102
- except: # noqa
102
+ except (KeyError, TypeError, AttributeError):
103
103
  pass
104
104
 
105
105
  groupItem.addChild(item)
@@ -112,5 +112,5 @@ class LogTab(TabToolbox, param_tab_class):
112
112
  label = QtWidgets.QLabel(log_groups['desc'])
113
113
  label.setWordWrap(True)
114
114
  self.logTree.setItemWidget(groupItem, 4, label)
115
- except: # noqa
115
+ except (KeyError, TypeError, AttributeError):
116
116
  pass
@@ -398,7 +398,7 @@ class ParamTab(TabToolbox, param_tab_class):
398
398
 
399
399
  self.paramDetailsDescription.setWordWrap(True)
400
400
  self.paramDetailsDescription.setText(desc.replace('\n', ''))
401
- except: # noqa
401
+ except (KeyError, TypeError, AttributeError):
402
402
  self.paramDetailsDescription.setText('')
403
403
 
404
404
  complete = f'{group}.{param}'
@@ -453,7 +453,7 @@ class JoystickReader(object):
453
453
  vx = data.roll
454
454
  vy = data.pitch
455
455
  vz = data.thrust
456
- yawrate = data.yaw
456
+ yawrate = -data.yaw
457
457
  # The odd use of vx and vy is to map forward on the
458
458
  # physical joystick to positive X-axis
459
459
  self.assisted_input_updated.call(vy, -vx, vz, yawrate)
@@ -473,7 +473,7 @@ class JoystickReader(object):
473
473
  if self._target_height < MIN_HOVER_HEIGHT:
474
474
  self._target_height = MIN_HOVER_HEIGHT
475
475
 
476
- yawrate = data.yaw
476
+ yawrate = -data.yaw
477
477
  # The odd use of vx and vy is to map forward on the
478
478
  # physical joystick to positive X-axis
479
479
  self.hover_input_updated.call(vy, -vx, yawrate,
@@ -499,7 +499,7 @@ class JoystickReader(object):
499
499
  and data.assistedControl:
500
500
  roll = data.roll + self.trim_roll
501
501
  pitch = data.pitch + self.trim_pitch
502
- yawrate = data.yaw
502
+ yawrate = -data.yaw
503
503
  # Scale thrust to a value between -1.0 to 1.0
504
504
  vz = (data.thrust - 32767) / 32767.0
505
505
  # Integrate velocity setpoint
cfclient/version.py CHANGED
@@ -1,16 +1,34 @@
1
- # file generated by setuptools_scm
1
+ # file generated by setuptools-scm
2
2
  # don't change, don't track in version control
3
+
4
+ __all__ = [
5
+ "__version__",
6
+ "__version_tuple__",
7
+ "version",
8
+ "version_tuple",
9
+ "__commit_id__",
10
+ "commit_id",
11
+ ]
12
+
3
13
  TYPE_CHECKING = False
4
14
  if TYPE_CHECKING:
5
- from typing import Tuple, Union
15
+ from typing import Tuple
16
+ from typing import Union
17
+
6
18
  VERSION_TUPLE = Tuple[Union[int, str], ...]
19
+ COMMIT_ID = Union[str, None]
7
20
  else:
8
21
  VERSION_TUPLE = object
22
+ COMMIT_ID = object
9
23
 
10
24
  version: str
11
25
  __version__: str
12
26
  __version_tuple__: VERSION_TUPLE
13
27
  version_tuple: VERSION_TUPLE
28
+ commit_id: COMMIT_ID
29
+ __commit_id__: COMMIT_ID
30
+
31
+ __version__ = version = '2025.9'
32
+ __version_tuple__ = version_tuple = (2025, 9)
14
33
 
15
- __version__ = version = '2025.2'
16
- __version_tuple__ = version_tuple = (2025, 2)
34
+ __commit_id__ = commit_id = None
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: cfclient
3
- Version: 2025.2
3
+ Version: 2025.9
4
4
  Summary: Crazyflie PC client
5
5
  Author-email: Bitcraze and contributors <contact@bitcraze.io>
6
6
  License: GPLv2+
@@ -28,14 +28,14 @@ Classifier: Programming Language :: Python :: 3.13
28
28
  Requires-Python: >=3.10
29
29
  Description-Content-Type: text/markdown
30
30
  License-File: LICENSE.txt
31
- Requires-Dist: cflib>=0.1.28
31
+ Requires-Dist: cflib~=0.1.29
32
32
  Requires-Dist: setuptools
33
33
  Requires-Dist: appdirs~=1.4.0
34
34
  Requires-Dist: pyzmq~=26.0
35
35
  Requires-Dist: pyqtgraph~=0.13
36
36
  Requires-Dist: PyYAML~=6.0.1
37
- Requires-Dist: numpy~=1.26
38
- Requires-Dist: vispy~=0.14.3
37
+ Requires-Dist: numpy~=2.2
38
+ Requires-Dist: vispy~=0.15.2
39
39
  Requires-Dist: pyopengl~=3.1.7
40
40
  Requires-Dist: pyserial~=3.5
41
41
  Requires-Dist: PyQt6~=6.7.1
@@ -46,6 +46,7 @@ Provides-Extra: dev
46
46
  Requires-Dist: pre-commit; extra == "dev"
47
47
  Requires-Dist: cx_freeze==5.1.1; platform_system == "Windows" and extra == "dev"
48
48
  Requires-Dist: jinja2==2.10.3; platform_system == "Windows" and extra == "dev"
49
+ Dynamic: license-file
49
50
 
50
51
  # Crazyflie PC client [![CI](https://github.com/bitcraze/crazyflie-clients-python/workflows/CI/badge.svg)](https://github.com/bitcraze/crazyflie-clients-python/actions?query=workflow%3ACI) [![cfclient](https://snapcraft.io//cfclient/badge.svg)](https://snapcraft.io/cfclient)
51
52
 
@@ -1,7 +1,7 @@
1
- cfclient/__init__.py,sha256=uy7qq_kItCI64zKniCPT92VMQ9Fspb_Crwq4TtrvUDs,1952
1
+ cfclient/__init__.py,sha256=1-s1f5yEocDIsIQYUukuImVujGb0OANFKMQ-qOz_Iso,1986
2
2
  cfclient/gui.py,sha256=98OT0wTR_itVbiO_E6vjOkL2f0H9XUvjsCCCXQEuLRQ,6419
3
3
  cfclient/headless.py,sha256=Hgp81TLpvKyo00oAEn5nBW49BC4RNZEXcYNXDrLyJn8,6287
4
- cfclient/version.py,sha256=MIfwDhbvkw5NpuspecSqqMZA9Hkh2kpDbuorLH18INk,412
4
+ cfclient/version.py,sha256=lzyMr149SJA6gYM3u_MLV9WzORol180OekFdOZ4VAfI,705
5
5
  cfclient/configs/config.json,sha256=WT4ptz3q_3hoDASSLECniUErGIwTXLBfkEH97egdpJk,842
6
6
  cfclient/configs/input/Generic_OS_X.json,sha256=LwAYms0RC2gutp2v_b5QcsjAFYNsEO40AeS__2zn07Q,1057
7
7
  cfclient/configs/input/Joystick.json,sha256=4VrLEX6o2T5AogPZjFLNjaNx415fLwkrS8Htop7zSD0,2005
@@ -29,12 +29,12 @@ cfclient/configs/log/PID_tuning_components/Velocity_y.json,sha256=dgLf8_KYeJWJ-I
29
29
  cfclient/configs/log/PID_tuning_components/Velocity_z.json,sha256=4Ft9zscDrthqpgrTOlXZMP1NTO4FvjO5XiszQ5ejvCA,405
30
30
  cfclient/configs/log/PID_tuning_components/Yaw.json,sha256=hAypXUh8auOBvDHVN-NNYhNTJWpsxh3JZov7jLCidzQ,399
31
31
  cfclient/configs/log/PID_tuning_components/Yaw_rate.json,sha256=OviQ8oqp8zerQxNBawzSfnNnfugvcOWYVKUtkmNJwjw,397
32
- cfclient/resources/log_param_doc.json,sha256=0uemODAOo6ZwH4UpGUXK4tdMtIpCFd_FQoE0saXiL-U,134777
32
+ cfclient/resources/log_param_doc.json,sha256=_icuv483NjdW-FcalfhwoYGOclIsWT-GvkqCCuhcK1Y,134117
33
33
  cfclient/resources/map.html,sha256=pGwY2GW0F1rAtSImKbu-cFZyb6tJGwrDhkAgOZ98S68,360
34
34
  cfclient/resources/map.js,sha256=0KyyJ-5W5qnrlEgTsp_oHk7b3w8k9qoyX4XjhThOkrU,839
35
35
  cfclient/ui/__init__.py,sha256=8XHGfW8w3DnQGiL6R7GVob1KrKg4waKNzvSy79lRjMs,1342
36
36
  cfclient/ui/connectivity_manager.py,sha256=DdkHL48pBOI9lctc2peHqzQy7u7-sGZTVHYdmd2T3Sk,8275
37
- cfclient/ui/main.py,sha256=bF0R4jCVgbr2EmUXrFD5RhYnmicArRDYAGs7E9H0d88,36940
37
+ cfclient/ui/main.py,sha256=X5_alyqcBsvVTwiDLK2L09YdFdJNvj9qcrNaLSmUzTs,36956
38
38
  cfclient/ui/main.ui,sha256=Np1l54_f3EKsa8E8MtqqRcVYivsCBe2fCAx1Fpt_AYc,16092
39
39
  cfclient/ui/pluginhelper.py,sha256=dSq6sCz5TbESfdTPzRzLExHnIZeKdDyw3cuWSViXqL8,1590
40
40
  cfclient/ui/pose_logger.py,sha256=1vADKP4-iCj9avqcuPI_amtZg3IKeCVTX0zYao3HPCE,4041
@@ -52,8 +52,8 @@ cfclient/ui/dialogs/cf2config.py,sha256=2xYeTeTpK1h42HReInwfr06dvnXmSseiS8D_VDcT
52
52
  cfclient/ui/dialogs/cf2config.ui,sha256=gistq-KuUB6E7SMub6ElCG2u3XpUe6i-a19VHcYv7vg,5850
53
53
  cfclient/ui/dialogs/inputconfigdialogue.py,sha256=4yhPRTc2-l5yDu2VvavuQUEt629wEkJ3T38YexA3I4w,17922
54
54
  cfclient/ui/dialogs/inputconfigdialogue.ui,sha256=5zJ5-S639ctNiPvR_GlBHpbFayQahK4JuQ3ggbOlnSc,24426
55
- cfclient/ui/dialogs/lighthouse_bs_geometry_dialog.py,sha256=QP9zm4fK_IGzJtU81q5yc37JEAQ3In4u1bn-Gwy9X2E,8982
56
- cfclient/ui/dialogs/lighthouse_bs_geometry_dialog.ui,sha256=8Eu6eLYtu7CqlkIwU5GLF777oNe1SEgzBwsniVxaCXU,3094
55
+ cfclient/ui/dialogs/lighthouse_bs_geometry_dialog.py,sha256=RmmVv8GSVTDl__D_hn2sQXfz3VKi9zygJkJv54VikOM,8421
56
+ cfclient/ui/dialogs/lighthouse_bs_geometry_dialog.ui,sha256=KWISXmuFQBR3ogu2FCi_0-e36oJ2h4HefgdsnywECL0,2865
57
57
  cfclient/ui/dialogs/lighthouse_system_type_dialog.py,sha256=vff5me_1PMvVOVTv9WCw9X7wKY_G4XCWwKOusuRSrEE,2999
58
58
  cfclient/ui/dialogs/lighthouse_system_type_dialog.ui,sha256=0aWRgeXOGptg-gY4qn3OvFWg5To09Y9_V3Lbx3wOx4A,3279
59
59
  cfclient/ui/dialogs/logconfigdialogue.py,sha256=Qbtb4ISxTi-a3_GaYKRDm_dEK1XswctDbdffWoFf8Fk,22543
@@ -66,14 +66,14 @@ cfclient/ui/icons/icon-256.png,sha256=SrUxND4cRHSRC_0LCPHIzwYRo1r9ygR1aw_D0BRxfo
66
66
  cfclient/ui/tabs/ConsoleTab.py,sha256=IP8FB_ev4iq5Bp4FfH9PrIIcEk_vtfdgaD3LYCv4ytw,5191
67
67
  cfclient/ui/tabs/CrtpSharkToolbox.py,sha256=2TLhfunC7vqLBzl8Ld3sPPPrPbBvazfPU4UOV7woo24,4242
68
68
  cfclient/ui/tabs/ExampleTab.py,sha256=PQZVNV2Rn0hp_WyY0jOQmUJKvZNMJSwIM77JIJOfgQg,3736
69
- cfclient/ui/tabs/FlightTab.py,sha256=Z8gY1lvT6oUewSgK1jKbWuAyApbjWzLsYIQQTAzf23Q,36513
69
+ cfclient/ui/tabs/FlightTab.py,sha256=3H4viBwM6yMJLOEJ1R0YVfLTFMTCVOK6GsWpQqAEgcI,36514
70
70
  cfclient/ui/tabs/GpsTab.py,sha256=TZKoiSQomc-TSnQ4iXanMzmp4BnO07BGjbEFFmW0Tak,6118
71
71
  cfclient/ui/tabs/LEDTab.py,sha256=H0ujpD5XSejdGQf67eJppirJ3eeMLQzX7EZOKj7Vl3A,5767
72
72
  cfclient/ui/tabs/LogBlockDebugTab.py,sha256=mamAHKwrqifiXFu5zxROB2HCvxBuvh0A8Yjpf8Agczc,3892
73
73
  cfclient/ui/tabs/LogBlockTab.py,sha256=Iktp20J8Rzxoaf8grcSw1n14DSmH_X32tmCRH_nT-oc,12327
74
74
  cfclient/ui/tabs/LogClientTab.py,sha256=cEogxYAM0rkMHLbmJqp_6sNIIefqCGdZnbJZQXNpvEE,2630
75
- cfclient/ui/tabs/LogTab.py,sha256=vd3ybCP5w96z5S-AvhUvjhHMoL2UJ18fdvJ9MW7nBCc,4508
76
- cfclient/ui/tabs/ParamTab.py,sha256=is0cWJlxjJVBMP2HTZhtNDZA5X6svLwRs-nfpcezu9c,21583
75
+ cfclient/ui/tabs/LogTab.py,sha256=A1xj0xlW25QjrpdnRYzrKXChGitf4MAePA_XWd2dtTM,4568
76
+ cfclient/ui/tabs/ParamTab.py,sha256=_A90cI_HOFpmHm3v7bk1fj13fJIu4hjgYjwUUTVOlig,21613
77
77
  cfclient/ui/tabs/PlotTab.py,sha256=M9HRunURxqQHlLqCeQSZaz_lYl3HA-oK0Y2BGBT2b4w,9097
78
78
  cfclient/ui/tabs/TuningTab.py,sha256=iJHz0LehnfAb4iIPR_MMY5m-8iCtVhbAxm6_h_yobvc,13217
79
79
  cfclient/ui/tabs/__init__.py,sha256=n_1-TsSh2H5YaaTP9u54tqRx1qIq0_pV9fPsCkTo-fc,2052
@@ -118,7 +118,7 @@ cfclient/utils/singleton.py,sha256=yz-JMLr7F_rO6XpVn4VmGWt2c3vIascsZl0cUeoWqy0,1
118
118
  cfclient/utils/ui.py,sha256=85MeNFeFIjNE2PYn-rjtpfSaOEqFiyZPOZlEfEDS_yo,9687
119
119
  cfclient/utils/zmq_led_driver.py,sha256=IJA4Q-FiqVEJH9lOOnFOTp85ygt56FBt4fOajrZ6Y2k,3591
120
120
  cfclient/utils/zmq_param.py,sha256=Ok2XqQrv6Y7aalLePgd-bW_lbC1Y5QD7HDnGjjMjMNw,3936
121
- cfclient/utils/input/__init__.py,sha256=McaSSfoX-FRzeSrKoTg06_aoB5MIKh_bB3ZVFJH5kmE,22484
121
+ cfclient/utils/input/__init__.py,sha256=dGkzxKaf7INCUrjB2qOV63plxpPYvaO990TwLy2erFE,22487
122
122
  cfclient/utils/input/inputreaderinterface.py,sha256=4tNV7fdO6cSTgPEvAHlhR3QvY2t36nN5GzuCXx73wwo,9698
123
123
  cfclient/utils/input/inputinterfaces/__init__.py,sha256=kqBz9KEj6dgK8Wncr1i2xS2FzUgcY0OS7UOf3kwLi5A,3447
124
124
  cfclient/utils/input/inputinterfaces/leapmotion.py,sha256=-jPtWPCqqUisKfMLsgWgi11EszMPFbqu0tPXL0A5-aY,4780
@@ -131,15 +131,15 @@ cfclient/utils/input/mux/__init__.py,sha256=TXP6Fqnj3eCZ5jrpzDhCjTbdnLDjuHn5cYcF
131
131
  cfclient/utils/input/mux/nomux.py,sha256=HnQCoi-MqJvnOF3anyrlVMEWPJEBud_NYCoDFyJRC_o,1627
132
132
  cfclient/utils/input/mux/takeovermux.py,sha256=7aftcx7-Kv2m2Cgs-Fuvs8i6NtvtPICSjUNsD04NGmA,1771
133
133
  cfclient/utils/input/mux/takeoverselectivemux.py,sha256=nKX1mV331o37TrVT4FcsGdErFnzkyoxgSRj7rtBbZtI,2415
134
+ cfclient-2025.9.dist-info/licenses/LICENSE.txt,sha256=UMjaTs39CS8X5zNtH4UWpmDBTydaVVQSDG8j1N285mI,18415
134
135
  cfconfig/Makefile,sha256=O2IZLnrGtKPfUC_eT_OWpAU5d9ULNjfBUdLi6VfPcK0,1775
135
136
  cfconfig/configblock.py,sha256=aOzCnI-JJEyYI1-tJZMmzeB2p9bQL0M3fY9FZeNwQas,2901
136
137
  cfloader/__init__.py,sha256=Cg4mKk5YlQytgZ-LXifDwW1YmYUZpw4nXbk4OtJUMgE,6023
137
138
  cfloader/__main__.py,sha256=Ct5fO0RV6foPBMmTHpEASS6mZ-4roJKoXWL8lhuuda0,65
138
139
  cfzmq/__init__.py,sha256=ik4QKjZP9syOqpEjSnzv57u_VTa-Cb3QcpaeyVpL_gc,14025
139
140
  cfzmq/__main__.py,sha256=AoNwiCOwva0pyNZXMLRW5COKB6Fh3bPgQO-gE5hD_Cg,62
140
- cfclient-2025.2.dist-info/LICENSE.txt,sha256=UMjaTs39CS8X5zNtH4UWpmDBTydaVVQSDG8j1N285mI,18415
141
- cfclient-2025.2.dist-info/METADATA,sha256=hn6QZoIbrRfUgal8hN7cOotxCjlAhP6sQmhHvPWrheU,3337
142
- cfclient-2025.2.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
143
- cfclient-2025.2.dist-info/entry_points.txt,sha256=8_UbQo4eRlY2aks3MbiuNTTpaDvjVSsraMj_fVcrBtY,127
144
- cfclient-2025.2.dist-info/top_level.txt,sha256=kEMGlBZwPaeAdpoqXh5uBLBb0xaanO_wPW14T6BuJKs,33
145
- cfclient-2025.2.dist-info/RECORD,,
141
+ cfclient-2025.9.dist-info/METADATA,sha256=R8mH1-D8ymqP7H89lfZR2FMXVdbiLOD3ku63_JZcTT8,3358
142
+ cfclient-2025.9.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
143
+ cfclient-2025.9.dist-info/entry_points.txt,sha256=8_UbQo4eRlY2aks3MbiuNTTpaDvjVSsraMj_fVcrBtY,127
144
+ cfclient-2025.9.dist-info/top_level.txt,sha256=kEMGlBZwPaeAdpoqXh5uBLBb0xaanO_wPW14T6BuJKs,33
145
+ cfclient-2025.9.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.8.0)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5