wujihandpy 0.5.2__cp39-cp39-win_amd64.whl → 1.0.0__cp39-cp39-win_amd64.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 wujihandpy might be problematic. Click here for more details.
- wujihandpy/__init__.py +7 -7
- wujihandpy/{_core.pyi → _core/__init__.pyi} +118 -128
- wujihandpy/_core/filter.pyi +8 -0
- wujihandpy/_core.cp39-win_amd64.pyd +0 -0
- wujihandpy/_version.py +3 -3
- wujihandpy-1.0.0.dist-info/DELVEWHEEL +2 -0
- {wujihandpy-0.5.2.dist-info → wujihandpy-1.0.0.dist-info}/METADATA +29 -29
- wujihandpy-1.0.0.dist-info/RECORD +14 -0
- wujihandpy.libs/{.load-order-wujihandpy-0.5.2 → .load-order-wujihandpy-1.0.0} +2 -2
- wujihandpy.libs/{libusb-1.0-f227a173b895cb3e1548ee0bb7bb839c.dll → libusb-1.0-fcae749f9e5fd72ad41bbcc029d2e10a.dll} +0 -0
- wujihandpy-0.5.2.dist-info/DELVEWHEEL +0 -2
- wujihandpy-0.5.2.dist-info/RECORD +0 -13
- {wujihandpy-0.5.2.dist-info → wujihandpy-1.0.0.dist-info}/WHEEL +0 -0
- {wujihandpy-0.5.2.dist-info → wujihandpy-1.0.0.dist-info}/licenses/LICENSE +0 -0
wujihandpy/__init__.py
CHANGED
|
@@ -2,7 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
# start delvewheel patch
|
|
5
|
-
def
|
|
5
|
+
def _delvewheel_patch_1_11_2():
|
|
6
6
|
import ctypes
|
|
7
7
|
import os
|
|
8
8
|
import platform
|
|
@@ -13,10 +13,10 @@ def _delvewheel_patch_1_11_1():
|
|
|
13
13
|
if os.path.isdir(libs_dir):
|
|
14
14
|
os.add_dll_directory(libs_dir)
|
|
15
15
|
else:
|
|
16
|
-
load_order_filepath = os.path.join(libs_dir, '.load-order-wujihandpy-0.
|
|
16
|
+
load_order_filepath = os.path.join(libs_dir, '.load-order-wujihandpy-1.0.0')
|
|
17
17
|
if os.path.isfile(load_order_filepath):
|
|
18
18
|
import ctypes.wintypes
|
|
19
|
-
with open(os.path.join(libs_dir, '.load-order-wujihandpy-0.
|
|
19
|
+
with open(os.path.join(libs_dir, '.load-order-wujihandpy-1.0.0')) as file:
|
|
20
20
|
load_order = file.read().split()
|
|
21
21
|
kernel32 = ctypes.WinDLL('kernel32', use_last_error=True)
|
|
22
22
|
kernel32.LoadLibraryExW.restype = ctypes.wintypes.HMODULE
|
|
@@ -27,11 +27,11 @@ def _delvewheel_patch_1_11_1():
|
|
|
27
27
|
raise OSError('Error loading {}; {}'.format(lib, ctypes.FormatError(ctypes.get_last_error())))
|
|
28
28
|
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
del
|
|
30
|
+
_delvewheel_patch_1_11_2()
|
|
31
|
+
del _delvewheel_patch_1_11_2
|
|
32
32
|
# end delvewheel patch
|
|
33
33
|
|
|
34
|
-
from ._core import
|
|
34
|
+
from ._core import *
|
|
35
35
|
from ._version import __version__
|
|
36
36
|
|
|
37
|
-
__all__ = ["
|
|
37
|
+
__all__ = ["__version__", 'Hand', 'Finger', 'Joint', 'IController', 'filter']
|
|
@@ -2,8 +2,11 @@ from __future__ import annotations
|
|
|
2
2
|
import numpy
|
|
3
3
|
import numpy.typing
|
|
4
4
|
import typing
|
|
5
|
-
|
|
5
|
+
from . import filter
|
|
6
|
+
__all__: list[str] = ['Finger', 'Hand', 'IController', 'Joint', 'filter']
|
|
6
7
|
class Finger:
|
|
8
|
+
def get_joint_actual_position(self) -> numpy.typing.NDArray[numpy.float64]:
|
|
9
|
+
...
|
|
7
10
|
def get_joint_bus_voltage(self) -> numpy.typing.NDArray[numpy.float32]:
|
|
8
11
|
...
|
|
9
12
|
def get_joint_error_code(self) -> numpy.typing.NDArray[numpy.uint32]:
|
|
@@ -14,14 +17,18 @@ class Finger:
|
|
|
14
17
|
...
|
|
15
18
|
def get_joint_lower_limit(self) -> numpy.typing.NDArray[numpy.float64]:
|
|
16
19
|
...
|
|
17
|
-
def get_joint_position(self) -> numpy.typing.NDArray[numpy.float64]:
|
|
18
|
-
...
|
|
19
20
|
def get_joint_temperature(self) -> numpy.typing.NDArray[numpy.float32]:
|
|
20
21
|
...
|
|
21
22
|
def get_joint_upper_limit(self) -> numpy.typing.NDArray[numpy.float64]:
|
|
22
23
|
...
|
|
23
24
|
def joint(self, index: typing.SupportsInt) -> Joint:
|
|
24
25
|
...
|
|
26
|
+
def read_joint_actual_position(self) -> numpy.typing.NDArray[numpy.float64]:
|
|
27
|
+
...
|
|
28
|
+
async def read_joint_actual_position_async(self) -> numpy.typing.NDArray[numpy.float64]:
|
|
29
|
+
...
|
|
30
|
+
def read_joint_actual_position_unchecked(self) -> None:
|
|
31
|
+
...
|
|
25
32
|
def read_joint_bus_voltage(self) -> numpy.typing.NDArray[numpy.float32]:
|
|
26
33
|
...
|
|
27
34
|
async def read_joint_bus_voltage_async(self) -> numpy.typing.NDArray[numpy.float32]:
|
|
@@ -52,12 +59,6 @@ class Finger:
|
|
|
52
59
|
...
|
|
53
60
|
def read_joint_lower_limit_unchecked(self) -> None:
|
|
54
61
|
...
|
|
55
|
-
def read_joint_position(self) -> numpy.typing.NDArray[numpy.float64]:
|
|
56
|
-
...
|
|
57
|
-
async def read_joint_position_async(self) -> numpy.typing.NDArray[numpy.float64]:
|
|
58
|
-
...
|
|
59
|
-
def read_joint_position_unchecked(self) -> None:
|
|
60
|
-
...
|
|
61
62
|
def read_joint_temperature(self) -> numpy.typing.NDArray[numpy.float32]:
|
|
62
63
|
...
|
|
63
64
|
async def read_joint_temperature_async(self) -> numpy.typing.NDArray[numpy.float32]:
|
|
@@ -71,115 +72,115 @@ class Finger:
|
|
|
71
72
|
def read_joint_upper_limit_unchecked(self) -> None:
|
|
72
73
|
...
|
|
73
74
|
@typing.overload
|
|
74
|
-
def write_joint_control_mode(self, value:
|
|
75
|
+
def write_joint_control_mode(self, value: typing.SupportsInt) -> None:
|
|
75
76
|
...
|
|
76
77
|
@typing.overload
|
|
77
78
|
def write_joint_control_mode(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16]) -> None:
|
|
78
79
|
...
|
|
79
80
|
@typing.overload
|
|
80
|
-
async def write_joint_control_mode_async(self, value:
|
|
81
|
+
async def write_joint_control_mode_async(self, value: typing.SupportsInt) -> None:
|
|
81
82
|
...
|
|
82
83
|
@typing.overload
|
|
83
84
|
async def write_joint_control_mode_async(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16]) -> None:
|
|
84
85
|
...
|
|
85
86
|
@typing.overload
|
|
86
|
-
def write_joint_control_mode_unchecked(self, value:
|
|
87
|
+
def write_joint_control_mode_unchecked(self, value: typing.SupportsInt) -> None:
|
|
87
88
|
...
|
|
88
89
|
@typing.overload
|
|
89
90
|
def write_joint_control_mode_unchecked(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16]) -> None:
|
|
90
91
|
...
|
|
91
92
|
@typing.overload
|
|
92
|
-
def
|
|
93
|
+
def write_joint_current_limit(self, value: typing.SupportsInt) -> None:
|
|
93
94
|
...
|
|
94
95
|
@typing.overload
|
|
95
|
-
def
|
|
96
|
+
def write_joint_current_limit(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16]) -> None:
|
|
96
97
|
...
|
|
97
98
|
@typing.overload
|
|
98
|
-
async def
|
|
99
|
+
async def write_joint_current_limit_async(self, value: typing.SupportsInt) -> None:
|
|
99
100
|
...
|
|
100
101
|
@typing.overload
|
|
101
|
-
async def
|
|
102
|
+
async def write_joint_current_limit_async(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16]) -> None:
|
|
102
103
|
...
|
|
103
104
|
@typing.overload
|
|
104
|
-
def
|
|
105
|
+
def write_joint_current_limit_unchecked(self, value: typing.SupportsInt) -> None:
|
|
105
106
|
...
|
|
106
107
|
@typing.overload
|
|
107
|
-
def
|
|
108
|
+
def write_joint_current_limit_unchecked(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16]) -> None:
|
|
108
109
|
...
|
|
109
110
|
@typing.overload
|
|
110
|
-
def
|
|
111
|
+
def write_joint_enabled(self, value: bool) -> None:
|
|
111
112
|
...
|
|
112
113
|
@typing.overload
|
|
113
|
-
def
|
|
114
|
+
def write_joint_enabled(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.bool_]) -> None:
|
|
114
115
|
...
|
|
115
116
|
@typing.overload
|
|
116
|
-
async def
|
|
117
|
+
async def write_joint_enabled_async(self, value: bool) -> None:
|
|
117
118
|
...
|
|
118
119
|
@typing.overload
|
|
119
|
-
async def
|
|
120
|
+
async def write_joint_enabled_async(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.bool_]) -> None:
|
|
120
121
|
...
|
|
121
122
|
@typing.overload
|
|
122
|
-
def
|
|
123
|
+
def write_joint_enabled_unchecked(self, value: bool) -> None:
|
|
123
124
|
...
|
|
124
125
|
@typing.overload
|
|
125
|
-
def
|
|
126
|
+
def write_joint_enabled_unchecked(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.bool_]) -> None:
|
|
126
127
|
...
|
|
127
128
|
@typing.overload
|
|
128
|
-
def
|
|
129
|
+
def write_joint_reset_error(self, value: typing.SupportsInt) -> None:
|
|
129
130
|
...
|
|
130
131
|
@typing.overload
|
|
131
|
-
def
|
|
132
|
+
def write_joint_reset_error(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16]) -> None:
|
|
132
133
|
...
|
|
133
134
|
@typing.overload
|
|
134
|
-
async def
|
|
135
|
+
async def write_joint_reset_error_async(self, value: typing.SupportsInt) -> None:
|
|
135
136
|
...
|
|
136
137
|
@typing.overload
|
|
137
|
-
async def
|
|
138
|
+
async def write_joint_reset_error_async(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16]) -> None:
|
|
138
139
|
...
|
|
139
140
|
@typing.overload
|
|
140
|
-
def
|
|
141
|
+
def write_joint_reset_error_unchecked(self, value: typing.SupportsInt) -> None:
|
|
141
142
|
...
|
|
142
143
|
@typing.overload
|
|
143
|
-
def
|
|
144
|
+
def write_joint_reset_error_unchecked(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16]) -> None:
|
|
144
145
|
...
|
|
145
146
|
@typing.overload
|
|
146
|
-
def
|
|
147
|
+
def write_joint_sin_level(self, value: typing.SupportsInt) -> None:
|
|
147
148
|
...
|
|
148
149
|
@typing.overload
|
|
149
|
-
def
|
|
150
|
+
def write_joint_sin_level(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16]) -> None:
|
|
150
151
|
...
|
|
151
152
|
@typing.overload
|
|
152
|
-
async def
|
|
153
|
+
async def write_joint_sin_level_async(self, value: typing.SupportsInt) -> None:
|
|
153
154
|
...
|
|
154
155
|
@typing.overload
|
|
155
|
-
async def
|
|
156
|
+
async def write_joint_sin_level_async(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16]) -> None:
|
|
156
157
|
...
|
|
157
158
|
@typing.overload
|
|
158
|
-
def
|
|
159
|
+
def write_joint_sin_level_unchecked(self, value: typing.SupportsInt) -> None:
|
|
159
160
|
...
|
|
160
161
|
@typing.overload
|
|
161
|
-
def
|
|
162
|
+
def write_joint_sin_level_unchecked(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16]) -> None:
|
|
162
163
|
...
|
|
163
164
|
@typing.overload
|
|
164
|
-
def
|
|
165
|
+
def write_joint_target_position(self, value: typing.SupportsFloat) -> None:
|
|
165
166
|
...
|
|
166
167
|
@typing.overload
|
|
167
|
-
def
|
|
168
|
+
def write_joint_target_position(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.float64]) -> None:
|
|
168
169
|
...
|
|
169
170
|
@typing.overload
|
|
170
|
-
async def
|
|
171
|
+
async def write_joint_target_position_async(self, value: typing.SupportsFloat) -> None:
|
|
171
172
|
...
|
|
172
173
|
@typing.overload
|
|
173
|
-
async def
|
|
174
|
+
async def write_joint_target_position_async(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.float64]) -> None:
|
|
174
175
|
...
|
|
175
176
|
@typing.overload
|
|
176
|
-
def
|
|
177
|
+
def write_joint_target_position_unchecked(self, value: typing.SupportsFloat) -> None:
|
|
177
178
|
...
|
|
178
179
|
@typing.overload
|
|
179
|
-
def
|
|
180
|
+
def write_joint_target_position_unchecked(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.float64]) -> None:
|
|
180
181
|
...
|
|
181
182
|
class Hand:
|
|
182
|
-
def __init__(self, serial_number: str | None = None, usb_pid: typing.SupportsInt = -1, usb_vid: typing.SupportsInt = 1155, mask: typing.Annotated[numpy.typing.ArrayLike, numpy.
|
|
183
|
+
def __init__(self, serial_number: str | None = None, usb_pid: typing.SupportsInt = -1, usb_vid: typing.SupportsInt = 1155, mask: typing.Annotated[numpy.typing.ArrayLike, numpy.bool_] | None = None) -> None:
|
|
183
184
|
...
|
|
184
185
|
def finger(self, index: typing.SupportsInt) -> Finger:
|
|
185
186
|
...
|
|
@@ -191,6 +192,8 @@ class Hand:
|
|
|
191
192
|
...
|
|
192
193
|
def get_input_voltage(self) -> numpy.float32:
|
|
193
194
|
...
|
|
195
|
+
def get_joint_actual_position(self) -> numpy.typing.NDArray[numpy.float64]:
|
|
196
|
+
...
|
|
194
197
|
def get_joint_bus_voltage(self) -> numpy.typing.NDArray[numpy.float32]:
|
|
195
198
|
...
|
|
196
199
|
def get_joint_error_code(self) -> numpy.typing.NDArray[numpy.uint32]:
|
|
@@ -201,8 +204,6 @@ class Hand:
|
|
|
201
204
|
...
|
|
202
205
|
def get_joint_lower_limit(self) -> numpy.typing.NDArray[numpy.float64]:
|
|
203
206
|
...
|
|
204
|
-
def get_joint_position(self) -> numpy.typing.NDArray[numpy.float64]:
|
|
205
|
-
...
|
|
206
207
|
def get_joint_temperature(self) -> numpy.typing.NDArray[numpy.float32]:
|
|
207
208
|
...
|
|
208
209
|
def get_joint_upper_limit(self) -> numpy.typing.NDArray[numpy.float64]:
|
|
@@ -211,12 +212,6 @@ class Hand:
|
|
|
211
212
|
...
|
|
212
213
|
def get_temperature(self) -> numpy.float32:
|
|
213
214
|
...
|
|
214
|
-
@typing.overload
|
|
215
|
-
def pdo_write_unchecked(self, arg0: numpy.float64) -> None:
|
|
216
|
-
...
|
|
217
|
-
@typing.overload
|
|
218
|
-
def pdo_write_unchecked(self, arg0: typing.Annotated[numpy.typing.ArrayLike, numpy.float64]) -> None:
|
|
219
|
-
...
|
|
220
215
|
def read_firmware_date(self) -> numpy.uint32:
|
|
221
216
|
...
|
|
222
217
|
async def read_firmware_date_async(self) -> numpy.uint32:
|
|
@@ -241,6 +236,12 @@ class Hand:
|
|
|
241
236
|
...
|
|
242
237
|
def read_input_voltage_unchecked(self) -> None:
|
|
243
238
|
...
|
|
239
|
+
def read_joint_actual_position(self) -> numpy.typing.NDArray[numpy.float64]:
|
|
240
|
+
...
|
|
241
|
+
async def read_joint_actual_position_async(self) -> numpy.typing.NDArray[numpy.float64]:
|
|
242
|
+
...
|
|
243
|
+
def read_joint_actual_position_unchecked(self) -> None:
|
|
244
|
+
...
|
|
244
245
|
def read_joint_bus_voltage(self) -> numpy.typing.NDArray[numpy.float32]:
|
|
245
246
|
...
|
|
246
247
|
async def read_joint_bus_voltage_async(self) -> numpy.typing.NDArray[numpy.float32]:
|
|
@@ -271,12 +272,6 @@ class Hand:
|
|
|
271
272
|
...
|
|
272
273
|
def read_joint_lower_limit_unchecked(self) -> None:
|
|
273
274
|
...
|
|
274
|
-
def read_joint_position(self) -> numpy.typing.NDArray[numpy.float64]:
|
|
275
|
-
...
|
|
276
|
-
async def read_joint_position_async(self) -> numpy.typing.NDArray[numpy.float64]:
|
|
277
|
-
...
|
|
278
|
-
def read_joint_position_unchecked(self) -> None:
|
|
279
|
-
...
|
|
280
275
|
def read_joint_temperature(self) -> numpy.typing.NDArray[numpy.float32]:
|
|
281
276
|
...
|
|
282
277
|
async def read_joint_temperature_async(self) -> numpy.typing.NDArray[numpy.float32]:
|
|
@@ -301,133 +296,130 @@ class Hand:
|
|
|
301
296
|
...
|
|
302
297
|
def read_temperature_unchecked(self) -> None:
|
|
303
298
|
...
|
|
304
|
-
def
|
|
305
|
-
...
|
|
306
|
-
async def write_global_tpdo_id_async(self, value: numpy.uint16) -> None:
|
|
307
|
-
...
|
|
308
|
-
def write_global_tpdo_id_unchecked(self, value: numpy.uint16) -> None:
|
|
299
|
+
def realtime_controller(self, enable_upstream: bool, filter: filter.IFilter) -> IController:
|
|
309
300
|
...
|
|
310
301
|
@typing.overload
|
|
311
|
-
def write_joint_control_mode(self, value:
|
|
302
|
+
def write_joint_control_mode(self, value: typing.SupportsInt) -> None:
|
|
312
303
|
...
|
|
313
304
|
@typing.overload
|
|
314
305
|
def write_joint_control_mode(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16]) -> None:
|
|
315
306
|
...
|
|
316
307
|
@typing.overload
|
|
317
|
-
async def write_joint_control_mode_async(self, value:
|
|
308
|
+
async def write_joint_control_mode_async(self, value: typing.SupportsInt) -> None:
|
|
318
309
|
...
|
|
319
310
|
@typing.overload
|
|
320
311
|
async def write_joint_control_mode_async(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16]) -> None:
|
|
321
312
|
...
|
|
322
313
|
@typing.overload
|
|
323
|
-
def write_joint_control_mode_unchecked(self, value:
|
|
314
|
+
def write_joint_control_mode_unchecked(self, value: typing.SupportsInt) -> None:
|
|
324
315
|
...
|
|
325
316
|
@typing.overload
|
|
326
317
|
def write_joint_control_mode_unchecked(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16]) -> None:
|
|
327
318
|
...
|
|
328
319
|
@typing.overload
|
|
329
|
-
def
|
|
320
|
+
def write_joint_current_limit(self, value: typing.SupportsInt) -> None:
|
|
330
321
|
...
|
|
331
322
|
@typing.overload
|
|
332
|
-
def
|
|
323
|
+
def write_joint_current_limit(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16]) -> None:
|
|
333
324
|
...
|
|
334
325
|
@typing.overload
|
|
335
|
-
async def
|
|
326
|
+
async def write_joint_current_limit_async(self, value: typing.SupportsInt) -> None:
|
|
336
327
|
...
|
|
337
328
|
@typing.overload
|
|
338
|
-
async def
|
|
329
|
+
async def write_joint_current_limit_async(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16]) -> None:
|
|
339
330
|
...
|
|
340
331
|
@typing.overload
|
|
341
|
-
def
|
|
332
|
+
def write_joint_current_limit_unchecked(self, value: typing.SupportsInt) -> None:
|
|
342
333
|
...
|
|
343
334
|
@typing.overload
|
|
344
|
-
def
|
|
335
|
+
def write_joint_current_limit_unchecked(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16]) -> None:
|
|
345
336
|
...
|
|
346
337
|
@typing.overload
|
|
347
|
-
def
|
|
338
|
+
def write_joint_enabled(self, value: bool) -> None:
|
|
348
339
|
...
|
|
349
340
|
@typing.overload
|
|
350
|
-
def
|
|
341
|
+
def write_joint_enabled(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.bool_]) -> None:
|
|
351
342
|
...
|
|
352
343
|
@typing.overload
|
|
353
|
-
async def
|
|
344
|
+
async def write_joint_enabled_async(self, value: bool) -> None:
|
|
354
345
|
...
|
|
355
346
|
@typing.overload
|
|
356
|
-
async def
|
|
347
|
+
async def write_joint_enabled_async(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.bool_]) -> None:
|
|
357
348
|
...
|
|
358
349
|
@typing.overload
|
|
359
|
-
def
|
|
350
|
+
def write_joint_enabled_unchecked(self, value: bool) -> None:
|
|
360
351
|
...
|
|
361
352
|
@typing.overload
|
|
362
|
-
def
|
|
353
|
+
def write_joint_enabled_unchecked(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.bool_]) -> None:
|
|
363
354
|
...
|
|
364
355
|
@typing.overload
|
|
365
|
-
def
|
|
356
|
+
def write_joint_reset_error(self, value: typing.SupportsInt) -> None:
|
|
366
357
|
...
|
|
367
358
|
@typing.overload
|
|
368
|
-
def
|
|
359
|
+
def write_joint_reset_error(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16]) -> None:
|
|
369
360
|
...
|
|
370
361
|
@typing.overload
|
|
371
|
-
async def
|
|
362
|
+
async def write_joint_reset_error_async(self, value: typing.SupportsInt) -> None:
|
|
372
363
|
...
|
|
373
364
|
@typing.overload
|
|
374
|
-
async def
|
|
365
|
+
async def write_joint_reset_error_async(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16]) -> None:
|
|
375
366
|
...
|
|
376
367
|
@typing.overload
|
|
377
|
-
def
|
|
368
|
+
def write_joint_reset_error_unchecked(self, value: typing.SupportsInt) -> None:
|
|
378
369
|
...
|
|
379
370
|
@typing.overload
|
|
380
|
-
def
|
|
371
|
+
def write_joint_reset_error_unchecked(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16]) -> None:
|
|
381
372
|
...
|
|
382
373
|
@typing.overload
|
|
383
|
-
def
|
|
374
|
+
def write_joint_sin_level(self, value: typing.SupportsInt) -> None:
|
|
384
375
|
...
|
|
385
376
|
@typing.overload
|
|
386
|
-
def
|
|
377
|
+
def write_joint_sin_level(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16]) -> None:
|
|
387
378
|
...
|
|
388
379
|
@typing.overload
|
|
389
|
-
async def
|
|
380
|
+
async def write_joint_sin_level_async(self, value: typing.SupportsInt) -> None:
|
|
390
381
|
...
|
|
391
382
|
@typing.overload
|
|
392
|
-
async def
|
|
383
|
+
async def write_joint_sin_level_async(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16]) -> None:
|
|
393
384
|
...
|
|
394
385
|
@typing.overload
|
|
395
|
-
def
|
|
386
|
+
def write_joint_sin_level_unchecked(self, value: typing.SupportsInt) -> None:
|
|
396
387
|
...
|
|
397
388
|
@typing.overload
|
|
398
|
-
def
|
|
389
|
+
def write_joint_sin_level_unchecked(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16]) -> None:
|
|
399
390
|
...
|
|
400
391
|
@typing.overload
|
|
401
|
-
def
|
|
392
|
+
def write_joint_target_position(self, value: typing.SupportsFloat) -> None:
|
|
402
393
|
...
|
|
403
394
|
@typing.overload
|
|
404
|
-
def
|
|
395
|
+
def write_joint_target_position(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.float64]) -> None:
|
|
405
396
|
...
|
|
406
397
|
@typing.overload
|
|
407
|
-
async def
|
|
398
|
+
async def write_joint_target_position_async(self, value: typing.SupportsFloat) -> None:
|
|
408
399
|
...
|
|
409
400
|
@typing.overload
|
|
410
|
-
async def
|
|
401
|
+
async def write_joint_target_position_async(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.float64]) -> None:
|
|
411
402
|
...
|
|
412
403
|
@typing.overload
|
|
413
|
-
def
|
|
404
|
+
def write_joint_target_position_unchecked(self, value: typing.SupportsFloat) -> None:
|
|
414
405
|
...
|
|
415
406
|
@typing.overload
|
|
416
|
-
def
|
|
417
|
-
...
|
|
418
|
-
def write_pdo_enabled(self, value: numpy.uint8) -> None:
|
|
407
|
+
def write_joint_target_position_unchecked(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.float64]) -> None:
|
|
419
408
|
...
|
|
420
|
-
|
|
409
|
+
class IController:
|
|
410
|
+
def __enter__(self) -> IController:
|
|
421
411
|
...
|
|
422
|
-
def
|
|
412
|
+
def __exit__(self, arg0: typing.Any, arg1: typing.Any, arg2: typing.Any) -> None:
|
|
423
413
|
...
|
|
424
|
-
def
|
|
414
|
+
def close(self) -> None:
|
|
425
415
|
...
|
|
426
|
-
|
|
416
|
+
def get_joint_actual_position(self) -> numpy.typing.NDArray[numpy.float64]:
|
|
427
417
|
...
|
|
428
|
-
def
|
|
418
|
+
def set_joint_target_position(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.float64]) -> None:
|
|
429
419
|
...
|
|
430
420
|
class Joint:
|
|
421
|
+
def get_joint_actual_position(self) -> numpy.float64:
|
|
422
|
+
...
|
|
431
423
|
def get_joint_bus_voltage(self) -> numpy.float32:
|
|
432
424
|
...
|
|
433
425
|
def get_joint_error_code(self) -> numpy.uint32:
|
|
@@ -438,12 +430,16 @@ class Joint:
|
|
|
438
430
|
...
|
|
439
431
|
def get_joint_lower_limit(self) -> numpy.float64:
|
|
440
432
|
...
|
|
441
|
-
def get_joint_position(self) -> numpy.float64:
|
|
442
|
-
...
|
|
443
433
|
def get_joint_temperature(self) -> numpy.float32:
|
|
444
434
|
...
|
|
445
435
|
def get_joint_upper_limit(self) -> numpy.float64:
|
|
446
436
|
...
|
|
437
|
+
def read_joint_actual_position(self) -> numpy.float64:
|
|
438
|
+
...
|
|
439
|
+
async def read_joint_actual_position_async(self) -> numpy.float64:
|
|
440
|
+
...
|
|
441
|
+
def read_joint_actual_position_unchecked(self) -> None:
|
|
442
|
+
...
|
|
447
443
|
def read_joint_bus_voltage(self) -> numpy.float32:
|
|
448
444
|
...
|
|
449
445
|
async def read_joint_bus_voltage_async(self) -> numpy.float32:
|
|
@@ -474,12 +470,6 @@ class Joint:
|
|
|
474
470
|
...
|
|
475
471
|
def read_joint_lower_limit_unchecked(self) -> None:
|
|
476
472
|
...
|
|
477
|
-
def read_joint_position(self) -> numpy.float64:
|
|
478
|
-
...
|
|
479
|
-
async def read_joint_position_async(self) -> numpy.float64:
|
|
480
|
-
...
|
|
481
|
-
def read_joint_position_unchecked(self) -> None:
|
|
482
|
-
...
|
|
483
473
|
def read_joint_temperature(self) -> numpy.float32:
|
|
484
474
|
...
|
|
485
475
|
async def read_joint_temperature_async(self) -> numpy.float32:
|
|
@@ -492,39 +482,39 @@ class Joint:
|
|
|
492
482
|
...
|
|
493
483
|
def read_joint_upper_limit_unchecked(self) -> None:
|
|
494
484
|
...
|
|
495
|
-
def write_joint_control_mode(self, value:
|
|
485
|
+
def write_joint_control_mode(self, value: typing.SupportsInt) -> None:
|
|
496
486
|
...
|
|
497
|
-
async def write_joint_control_mode_async(self, value:
|
|
487
|
+
async def write_joint_control_mode_async(self, value: typing.SupportsInt) -> None:
|
|
498
488
|
...
|
|
499
|
-
def write_joint_control_mode_unchecked(self, value:
|
|
489
|
+
def write_joint_control_mode_unchecked(self, value: typing.SupportsInt) -> None:
|
|
500
490
|
...
|
|
501
|
-
def
|
|
491
|
+
def write_joint_current_limit(self, value: typing.SupportsInt) -> None:
|
|
502
492
|
...
|
|
503
|
-
async def
|
|
493
|
+
async def write_joint_current_limit_async(self, value: typing.SupportsInt) -> None:
|
|
504
494
|
...
|
|
505
|
-
def
|
|
495
|
+
def write_joint_current_limit_unchecked(self, value: typing.SupportsInt) -> None:
|
|
506
496
|
...
|
|
507
|
-
def
|
|
497
|
+
def write_joint_enabled(self, value: bool) -> None:
|
|
508
498
|
...
|
|
509
|
-
async def
|
|
499
|
+
async def write_joint_enabled_async(self, value: bool) -> None:
|
|
510
500
|
...
|
|
511
|
-
def
|
|
501
|
+
def write_joint_enabled_unchecked(self, value: bool) -> None:
|
|
512
502
|
...
|
|
513
|
-
def
|
|
503
|
+
def write_joint_reset_error(self, value: typing.SupportsInt) -> None:
|
|
514
504
|
...
|
|
515
|
-
async def
|
|
505
|
+
async def write_joint_reset_error_async(self, value: typing.SupportsInt) -> None:
|
|
516
506
|
...
|
|
517
|
-
def
|
|
507
|
+
def write_joint_reset_error_unchecked(self, value: typing.SupportsInt) -> None:
|
|
518
508
|
...
|
|
519
|
-
def
|
|
509
|
+
def write_joint_sin_level(self, value: typing.SupportsInt) -> None:
|
|
520
510
|
...
|
|
521
|
-
async def
|
|
511
|
+
async def write_joint_sin_level_async(self, value: typing.SupportsInt) -> None:
|
|
522
512
|
...
|
|
523
|
-
def
|
|
513
|
+
def write_joint_sin_level_unchecked(self, value: typing.SupportsInt) -> None:
|
|
524
514
|
...
|
|
525
|
-
def
|
|
515
|
+
def write_joint_target_position(self, value: typing.SupportsFloat) -> None:
|
|
526
516
|
...
|
|
527
|
-
async def
|
|
517
|
+
async def write_joint_target_position_async(self, value: typing.SupportsFloat) -> None:
|
|
528
518
|
...
|
|
529
|
-
def
|
|
519
|
+
def write_joint_target_position_unchecked(self, value: typing.SupportsFloat) -> None:
|
|
530
520
|
...
|
|
Binary file
|
wujihandpy/_version.py
CHANGED
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '0.
|
|
32
|
-
__version_tuple__ = version_tuple = (
|
|
31
|
+
__version__ = version = '1.0.0'
|
|
32
|
+
__version_tuple__ = version_tuple = (1, 0, 0)
|
|
33
33
|
|
|
34
|
-
__commit_id__ = commit_id = '
|
|
34
|
+
__commit_id__ = commit_id = 'g05d7911c2'
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
Version: 1.11.2
|
|
2
|
+
Arguments: ['C:\\Users\\runneradmin\\AppData\\Local\\Temp\\cibw-run-0xcdz1cp\\cp39-win_amd64\\build\\venv\\Scripts\\delvewheel', 'repair', '--add-path', 'C:/vcpkg/installed/x64-windows/bin', '-w', 'C:\\Users\\runneradmin\\AppData\\Local\\Temp\\cibw-run-0xcdz1cp\\cp39-win_amd64\\repaired_wheel', 'C:\\Users\\runneradmin\\AppData\\Local\\Temp\\cibw-run-0xcdz1cp\\cp39-win_amd64\\built_wheel\\wujihandpy-1.0.0-cp39-cp39-win_amd64.whl']
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: wujihandpy
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 1.0.0
|
|
4
4
|
Summary: Python bindings for WujiHandCpp
|
|
5
5
|
Author-Email: Zihan Qin <zihanqin2048@gmail.com>
|
|
6
6
|
Maintainer-Email: Wuji Technology <support@pan-motor.com>
|
|
@@ -117,8 +117,8 @@ hand = wujihandpy.Hand()
|
|
|
117
117
|
### 读数据
|
|
118
118
|
|
|
119
119
|
```python
|
|
120
|
-
def read_<dataname>(self) ->
|
|
121
|
-
def read_<dataname>(self) -> np.
|
|
120
|
+
def read_<dataname>(self) -> datatype
|
|
121
|
+
def read_<dataname>(self) -> np.ndarray[datatype] # For bulk-read
|
|
122
122
|
```
|
|
123
123
|
|
|
124
124
|
所有可使用的数据均定义在 `wujihandpy/_core.pyi` 中。
|
|
@@ -134,7 +134,7 @@ time = hand.read_system_time()
|
|
|
134
134
|
例如,读取第1个手指(食指),第0个关节的当前位置数据:
|
|
135
135
|
|
|
136
136
|
```python
|
|
137
|
-
position = hand.finger(1).joint(0).
|
|
137
|
+
position = hand.finger(1).joint(0).read_joint_actual_position()
|
|
138
138
|
```
|
|
139
139
|
|
|
140
140
|
关节角度为 `np.float64` 类型,单位为弧度,零点和正方向与 [URDF文件](https://github.com/Wuji-Technology-Co-Ltd/wujihand-urdf) 中定义的相同。
|
|
@@ -144,7 +144,7 @@ position = hand.finger(1).joint(0).read_joint_position()
|
|
|
144
144
|
例如,以下指令读取整手所有(20个)关节的当前位置数据:
|
|
145
145
|
|
|
146
146
|
```python
|
|
147
|
-
positions = hand.
|
|
147
|
+
positions = hand.read_joint_actual_position()
|
|
148
148
|
```
|
|
149
149
|
|
|
150
150
|
进行批量读时,函数返回包含所有数据的 `np.ndarray[np.float64]`:
|
|
@@ -165,21 +165,21 @@ positions = hand.read_joint_position()
|
|
|
165
165
|
写数据拥有类似的 API,但多了一个参数用于传递目标值:
|
|
166
166
|
|
|
167
167
|
```python
|
|
168
|
-
def write_<dataname>(self,
|
|
169
|
-
def write_<dataname>(self, np.
|
|
168
|
+
def write_<dataname>(self, datatype)
|
|
169
|
+
def write_<dataname>(self, np.ndarray[datatype]) # For bulk-write
|
|
170
170
|
```
|
|
171
171
|
|
|
172
172
|
例如,写入单个关节的目标位置数据:
|
|
173
173
|
|
|
174
174
|
```python
|
|
175
|
-
hand.finger(1).joint(0).
|
|
175
|
+
hand.finger(1).joint(0).write_joint_target_position(0.8)
|
|
176
176
|
```
|
|
177
177
|
|
|
178
178
|
各关节的合法角度范围可通过以下 API 获取:
|
|
179
179
|
|
|
180
180
|
```python
|
|
181
|
-
upper =
|
|
182
|
-
lower =
|
|
181
|
+
upper = < Hand / Finger / Joint >.read_joint_upper_limit()
|
|
182
|
+
lower = < Hand / Finger / Joint >.read_joint_lower_limit()
|
|
183
183
|
```
|
|
184
184
|
|
|
185
185
|
若写入的角度超出合法范围,会被自动限幅至最高/最低值。
|
|
@@ -187,13 +187,13 @@ lower = (Hand | Finger | Joint).read_joint_lower_limit()
|
|
|
187
187
|
**批量写**数据也是可行的,例如,批量为第一个手指写入目标位置数据:
|
|
188
188
|
|
|
189
189
|
```python
|
|
190
|
-
hand.finger(1).
|
|
190
|
+
hand.finger(1).write_joint_target_position(0.8)
|
|
191
191
|
```
|
|
192
192
|
|
|
193
193
|
如果每个关节的目标值不同,可以传入一个包含所有目标值的 `np.array`:
|
|
194
194
|
|
|
195
195
|
```python
|
|
196
|
-
hand.finger(1).
|
|
196
|
+
hand.finger(1).write_joint_target_position(
|
|
197
197
|
np.array(
|
|
198
198
|
# J1 J2 J3 J4
|
|
199
199
|
[0.8, 0.0, 0.8, 0.8],
|
|
@@ -209,10 +209,10 @@ hand.finger(1).write_joint_control_position(
|
|
|
209
209
|
读写函数均有对应的异步版本,函数名以 `_async` 作为后缀。
|
|
210
210
|
|
|
211
211
|
``` python
|
|
212
|
-
async def read_<dataname>_async(self) ->
|
|
213
|
-
async def read_<dataname>_async(self) -> np.
|
|
214
|
-
async def write_<dataname>_async(self,
|
|
215
|
-
async def write_<dataname>_async(self, np.
|
|
212
|
+
async def read_<dataname>_async(self) -> datatype
|
|
213
|
+
async def read_<dataname>_async(self) -> np.ndarray[datatype] # For bulk-read
|
|
214
|
+
async def write_<dataname>_async(self, datatype)
|
|
215
|
+
async def write_<dataname>_async(self, np.ndarray[datatype]) # For bulk-write
|
|
216
216
|
```
|
|
217
217
|
|
|
218
218
|
异步接口需 `await`;等待期间不阻塞线程/事件循环,返回时保证读/写已经成功。
|
|
@@ -224,8 +224,8 @@ async def write_<dataname>_async(self, np.array<datatype>) # For bulk-write
|
|
|
224
224
|
```python
|
|
225
225
|
def read_<dataname>_unchecked(self) -> None
|
|
226
226
|
def read_<dataname>_unchecked(self) -> None # For bulk-read
|
|
227
|
-
def write_<dataname>_unchecked(self,
|
|
228
|
-
def write_<dataname>_unchecked(self, np.
|
|
227
|
+
def write_<dataname>_unchecked(self, datatype)
|
|
228
|
+
def write_<dataname>_unchecked(self, np.ndarray[datatype]) # For bulk-write
|
|
229
229
|
```
|
|
230
230
|
|
|
231
231
|
Unchecked 函数总是立即返回,不会阻塞,通常用于对实时性要求较高的场景。
|
|
@@ -235,27 +235,25 @@ Unchecked 函数总是立即返回,不会阻塞,通常用于对实时性要
|
|
|
235
235
|
如果希望获取以往读/写的结果,可以使用 `get` 系列函数:
|
|
236
236
|
|
|
237
237
|
```python
|
|
238
|
-
def get_<dataname>(self) ->
|
|
239
|
-
def get_<dataname>(self) -> np.
|
|
238
|
+
def get_<dataname>(self) -> datatype
|
|
239
|
+
def get_<dataname>(self) -> np.ndarray[datatype] # For bulk-read
|
|
240
240
|
```
|
|
241
241
|
|
|
242
242
|
`get` 系列函数同样不会阻塞,它总是立即返回最近一次读取到的数据,无论该数据来自 `read`、`async-read` 还是 `read-unchecked`。
|
|
243
243
|
|
|
244
244
|
如果尚未请求过该数据,或请求尚未成功,`get` 函数的返回值是未定义的(通常为0)。
|
|
245
245
|
|
|
246
|
-
###
|
|
246
|
+
### 实时控制
|
|
247
247
|
|
|
248
|
-
|
|
248
|
+
默认的读/写方式均带有缓冲池,积攒一段时间数据后才进行传输,最高读/写频率无法超过 100Hz。
|
|
249
249
|
|
|
250
|
-
|
|
250
|
+
对于需要流畅控制关节位置的场景,需使用 realtime_controller。
|
|
251
251
|
|
|
252
|
-
|
|
253
|
-
hand.pdo_write_unchecked(np.float64(0.8))
|
|
254
|
-
# 或按 5x4 结构批量发送:
|
|
255
|
-
# hand.pdo_write_unchecked(np.array([...], dtype=np.float64))
|
|
256
|
-
```
|
|
252
|
+
具体的控制示例可见 [example](example) 目录:
|
|
257
253
|
|
|
258
|
-
|
|
254
|
+
单向写:[realtime.py](example/4.realtime.py)
|
|
255
|
+
|
|
256
|
+
双向读/写:[realtime_duplex.py](example/5.realtime_duplex.py)
|
|
259
257
|
|
|
260
258
|
## 性能与优化
|
|
261
259
|
|
|
@@ -263,6 +261,8 @@ WujihandPy 在充分保证易用性的同时,尽可能优化了性能与效率
|
|
|
263
261
|
|
|
264
262
|
我们强烈建议优先使用批量读/写以最大限度地发挥性能。
|
|
265
263
|
|
|
264
|
+
对于需要流畅控制关节位置的场景,请务必使用 realtime_controller。
|
|
265
|
+
|
|
266
266
|
## 许可证
|
|
267
267
|
|
|
268
268
|
本项目采用 MIT 许可证,详情见 [LICENSE](LICENSE) 文件。
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
wujihandpy/_core.cp39-win_amd64.pyd,sha256=Mb7GbFCAd-L5bqxDkmXQ6DKdzq-MdyCZzmjL3wG5xFw,498688
|
|
2
|
+
wujihandpy/_version.py,sha256=XU2B0PQMT4sDJu2ptWqHSvUNE14luu_OmGG_oZIMuAs,746
|
|
3
|
+
wujihandpy/__init__.py,sha256=GSWX12QR6hZrMFb0OBzx6Lw_vpW7NnCGLkstMHrjc_A,1749
|
|
4
|
+
wujihandpy/_core/filter.pyi,sha256=bhf3_lTgyf0BeVhp4TqUw0nJgoE0f-kyzw7vJrt67nI,235
|
|
5
|
+
wujihandpy/_core/__init__.pyi,sha256=F94Z31a3PLpQsXHFmqpaQQSfefSfvvNh3eP5gDxftqo,22394
|
|
6
|
+
wujihandpy-1.0.0.dist-info/DELVEWHEEL,sha256=szY5aofKHRohviKAtuZ4TdHY-3IyFizUK7NpXG2IrE0,450
|
|
7
|
+
wujihandpy-1.0.0.dist-info/METADATA,sha256=32D_JDjINxLq14gSc9Q9qqAUpkOeJcAgYGmJDuIom0I,8029
|
|
8
|
+
wujihandpy-1.0.0.dist-info/RECORD,,
|
|
9
|
+
wujihandpy-1.0.0.dist-info/WHEEL,sha256=9tsL4JT94eZPTkcS3bNng2riasYJMxXndrO9CxUfJHs,104
|
|
10
|
+
wujihandpy-1.0.0.dist-info/licenses/LICENSE,sha256=aWRV7TIHNfIAV58Abtu5ubNfqOHUeANdqg_QXb99nto,1093
|
|
11
|
+
wujihandpy.libs/.load-order-wujihandpy-1.0.0,sha256=A8OTr2SYebJucMBWi6rfvm6hoprY6SsETDYSylOGjoo,152
|
|
12
|
+
wujihandpy.libs/libusb-1.0-fcae749f9e5fd72ad41bbcc029d2e10a.dll,sha256=_K50n55f1yrUG7zAKdLhCqCeWP2bp2qvH831bsQU13c,158208
|
|
13
|
+
wujihandpy.libs/msvcp140-a4c2229bdc2a2a630acdc095b4d86008.dll,sha256=pMIim9wqKmMKzcCVtNhgCOXD47x3cxdDVPPaT1vrnN4,575056
|
|
14
|
+
wujihandpy.libs/msvcp140_atomic_wait-eb238a7437cff8f49c01cc67fd035163.dll,sha256=aR3icdyYE_-F-pRwzFoq8K2INB8tg4IhD8HFdLrgehc,29696
|
|
Binary file
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
Version: 1.11.1
|
|
2
|
-
Arguments: ['C:\\Users\\runneradmin\\AppData\\Local\\Temp\\cibw-run-mggnxvto\\cp39-win_amd64\\build\\venv\\Scripts\\delvewheel', 'repair', '--add-path', 'C:/vcpkg/installed/x64-windows/bin', '-w', 'C:\\Users\\runneradmin\\AppData\\Local\\Temp\\cibw-run-mggnxvto\\cp39-win_amd64\\repaired_wheel', 'C:\\Users\\runneradmin\\AppData\\Local\\Temp\\cibw-run-mggnxvto\\cp39-win_amd64\\built_wheel\\wujihandpy-0.5.2-cp39-cp39-win_amd64.whl']
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
wujihandpy/_core.cp39-win_amd64.pyd,sha256=JpYtpmxMl2lwQDrQprh-xPyUYpsai44Sl-sTdyXy5IU,470016
|
|
2
|
-
wujihandpy/_core.pyi,sha256=AYPn5is8_03XWTOCmk8us0-r7vkY8_fAWcbuuFYK0A0,22597
|
|
3
|
-
wujihandpy/_version.py,sha256=QJ6Wh_ZvwZjLkcwjPJmDkeMxkPTIZUbXCYfZQyGTcfo,746
|
|
4
|
-
wujihandpy/__init__.py,sha256=PfpNPJUVsrXVVrothgvd6O4Y9xf9PCDubRZ9dZfi16w,1762
|
|
5
|
-
wujihandpy-0.5.2.dist-info/DELVEWHEEL,sha256=F5vgpfE404oYQjiEsvJzwc_IV_Y-P4wkTgAAoKEAlNI,450
|
|
6
|
-
wujihandpy-0.5.2.dist-info/METADATA,sha256=Dr7rJvg4kjdvLm29x7BTT_onQsin4QFWwX8FpBwqWEM,8037
|
|
7
|
-
wujihandpy-0.5.2.dist-info/RECORD,,
|
|
8
|
-
wujihandpy-0.5.2.dist-info/WHEEL,sha256=9tsL4JT94eZPTkcS3bNng2riasYJMxXndrO9CxUfJHs,104
|
|
9
|
-
wujihandpy-0.5.2.dist-info/licenses/LICENSE,sha256=aWRV7TIHNfIAV58Abtu5ubNfqOHUeANdqg_QXb99nto,1093
|
|
10
|
-
wujihandpy.libs/.load-order-wujihandpy-0.5.2,sha256=OoItWJLf4tsiYZ1Ltgvft1r7rTQQYsGRTCQLLA1dj2k,152
|
|
11
|
-
wujihandpy.libs/libusb-1.0-f227a173b895cb3e1548ee0bb7bb839c.dll,sha256=8iehc7iVyz4VSO4Lt7uDnGV2T_aHfg4cO-VWnMYSxm4,158208
|
|
12
|
-
wujihandpy.libs/msvcp140-a4c2229bdc2a2a630acdc095b4d86008.dll,sha256=pMIim9wqKmMKzcCVtNhgCOXD47x3cxdDVPPaT1vrnN4,575056
|
|
13
|
-
wujihandpy.libs/msvcp140_atomic_wait-eb238a7437cff8f49c01cc67fd035163.dll,sha256=aR3icdyYE_-F-pRwzFoq8K2INB8tg4IhD8HFdLrgehc,29696
|
|
File without changes
|
|
File without changes
|