litearm-python 1.2.2__tar.gz → 1.2.4__tar.gz

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.
Files changed (72) hide show
  1. {litearm_python-1.2.2/src/litearm_python.egg-info → litearm_python-1.2.4}/PKG-INFO +32 -16
  2. {litearm_python-1.2.2 → litearm_python-1.2.4}/README.md +13 -14
  3. litearm_python-1.2.4/pyproject.toml +49 -0
  4. {litearm_python-1.2.2 → litearm_python-1.2.4}/src/litearm/__init__.py +1 -1
  5. {litearm_python-1.2.2 → litearm_python-1.2.4/src/litearm_python.egg-info}/PKG-INFO +32 -16
  6. {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_package_metadata.py +1 -3
  7. litearm_python-1.2.2/pyproject.toml +0 -27
  8. {litearm_python-1.2.2 → litearm_python-1.2.4}/LICENSE +0 -0
  9. {litearm_python-1.2.2 → litearm_python-1.2.4}/setup.cfg +0 -0
  10. {litearm_python-1.2.2 → litearm_python-1.2.4}/src/litearm/__main__.py +0 -0
  11. {litearm_python-1.2.2 → litearm_python-1.2.4}/src/litearm/_protocol.py +0 -0
  12. {litearm_python-1.2.2 → litearm_python-1.2.4}/src/litearm/_rot.py +0 -0
  13. {litearm_python-1.2.2 → litearm_python-1.2.4}/src/litearm/arm.py +0 -0
  14. {litearm_python-1.2.2 → litearm_python-1.2.4}/src/litearm/cart.py +0 -0
  15. {litearm_python-1.2.2 → litearm_python-1.2.4}/src/litearm/diagnostics.py +0 -0
  16. {litearm_python-1.2.2 → litearm_python-1.2.4}/src/litearm/errors.py +0 -0
  17. {litearm_python-1.2.2 → litearm_python-1.2.4}/src/litearm/log.py +0 -0
  18. {litearm_python-1.2.2 → litearm_python-1.2.4}/src/litearm/model.py +0 -0
  19. {litearm_python-1.2.2 → litearm_python-1.2.4}/src/litearm/params.py +0 -0
  20. {litearm_python-1.2.2 → litearm_python-1.2.4}/src/litearm/payload.py +0 -0
  21. {litearm_python-1.2.2 → litearm_python-1.2.4}/src/litearm/py.typed +0 -0
  22. {litearm_python-1.2.2 → litearm_python-1.2.4}/src/litearm/state.py +0 -0
  23. {litearm_python-1.2.2 → litearm_python-1.2.4}/src/litearm/testing.py +0 -0
  24. {litearm_python-1.2.2 → litearm_python-1.2.4}/src/litearm/tool.py +0 -0
  25. {litearm_python-1.2.2 → litearm_python-1.2.4}/src/litearm/transport.py +0 -0
  26. {litearm_python-1.2.2 → litearm_python-1.2.4}/src/litearm_python.egg-info/SOURCES.txt +0 -0
  27. {litearm_python-1.2.2 → litearm_python-1.2.4}/src/litearm_python.egg-info/dependency_links.txt +0 -0
  28. {litearm_python-1.2.2 → litearm_python-1.2.4}/src/litearm_python.egg-info/entry_points.txt +0 -0
  29. {litearm_python-1.2.2 → litearm_python-1.2.4}/src/litearm_python.egg-info/requires.txt +0 -0
  30. {litearm_python-1.2.2 → litearm_python-1.2.4}/src/litearm_python.egg-info/top_level.txt +0 -0
  31. {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_ack_echo.py +0 -0
  32. {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_arm_offline.py +0 -0
  33. {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_banner.py +0 -0
  34. {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_capability.py +0 -0
  35. {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_cart_errors.py +0 -0
  36. {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_cart_protocol.py +0 -0
  37. {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_cart_queue.py +0 -0
  38. {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_cart_wait.py +0 -0
  39. {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_cli.py +0 -0
  40. {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_dfu.py +0 -0
  41. {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_diagnostics.py +0 -0
  42. {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_doc_examples.py +0 -0
  43. {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_error_codes.py +0 -0
  44. {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_error_hierarchy.py +0 -0
  45. {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_ff_io.py +0 -0
  46. {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_fork_guard.py +0 -0
  47. {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_frame_ownership.py +0 -0
  48. {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_full_coverage.py +0 -0
  49. {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_home.py +0 -0
  50. {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_ik_bench.py +0 -0
  51. {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_license.py +0 -0
  52. {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_lifecycle.py +0 -0
  53. {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_live.py +0 -0
  54. {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_log.py +0 -0
  55. {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_model.py +0 -0
  56. {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_msg.py +0 -0
  57. {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_offline.py +0 -0
  58. {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_params.py +0 -0
  59. {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_payload.py +0 -0
  60. {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_protocol_crc.py +0 -0
  61. {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_protocol_sync.py +0 -0
  62. {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_public_api.py +0 -0
  63. {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_request_and_get.py +0 -0
  64. {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_silent_noops.py +0 -0
  65. {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_status_layout.py +0 -0
  66. {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_teardown.py +0 -0
  67. {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_tool_offset.py +0 -0
  68. {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_transport.py +0 -0
  69. {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_transport_injection.py +0 -0
  70. {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_transport_threadsafe.py +0 -0
  71. {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_zero_g.py +0 -0
  72. {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_zero_g_cart_guard.py +0 -0
@@ -1,8 +1,25 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: litearm-python
3
- Version: 1.2.2
3
+ Version: 1.2.4
4
4
  Summary: Python SDK for the LiteArm robotic arm
5
- License: Apache-2.0
5
+ Author: NEXFORM ROBOTICS
6
+ License-Expression: Apache-2.0
7
+ Project-URL: Repository, https://github.com/nexform-tech/litearm-python
8
+ Project-URL: Issues, https://github.com/nexform-tech/litearm-python/issues
9
+ Project-URL: Documentation, https://github.com/nexform-tech/litearm-python/blob/main/docs/DEVELOPER_GUIDE.md
10
+ Keywords: litearm,robotic-arm,robot-arm,robotics,serial,stm32,sdk
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: Operating System :: OS Independent
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3 :: Only
16
+ Classifier: Programming Language :: Python :: 3.9
17
+ Classifier: Programming Language :: Python :: 3.10
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Programming Language :: Python :: 3.13
21
+ Classifier: Topic :: Scientific/Engineering
22
+ Classifier: Typing :: Typed
6
23
  Requires-Python: >=3.9
7
24
  Description-Content-Type: text/markdown
8
25
  License-File: LICENSE
@@ -17,7 +34,7 @@ Python SDK for the LiteArm robotic arm: drive the arm from a PC over one USB ser
17
34
  straight to its firmware — no server or middleware in between. Trajectory planning, kinematics
18
35
  and dynamics are all carried by the firmware.
19
36
 
20
- > Full interface reference: [docs/DEVELOPER_GUIDE.md](docs/DEVELOPER_GUIDE.md).
37
+ > Full interface reference: [docs/DEVELOPER_GUIDE.md](https://github.com/nexform-tech/litearm-python/blob/main/docs/DEVELOPER_GUIDE.md).
21
38
 
22
39
  ## Features
23
40
 
@@ -41,13 +58,19 @@ and dynamics are all carried by the firmware.
41
58
  | Firmware | `Litearm1.5.0` or later |
42
59
  | Connection | USB CDC serial, VID:PID `1d50:606f` |
43
60
 
44
- From the repository root:
61
+ From PyPI:
45
62
 
46
63
  ```bash
47
- pip install -e .
64
+ pip install litearm-python
48
65
  python3 -c "import litearm; print(litearm.__version__)" # verify
49
66
  ```
50
67
 
68
+ Or install from a checkout:
69
+
70
+ ```bash
71
+ pip install -e .
72
+ ```
73
+
51
74
  Linux needs serial permissions — check what the device node itself says first:
52
75
 
53
76
  ```bash
@@ -225,7 +248,7 @@ payload is composited in as a point mass), so nothing on the PC side needs a dyn
225
248
  nothing new is pulled in as a dependency. The **baseline is not optional**: subtracting it is what
226
249
  cancels the arm's own model error — an absolute solve feeds that error straight into the answer.
227
250
  The probe's side effects and the acceptance thresholds are in §5.16 of
228
- [the developer guide](docs/DEVELOPER_GUIDE.md).
251
+ [the developer guide](https://github.com/nexform-tech/litearm-python/blob/main/docs/DEVELOPER_GUIDE.md).
229
252
 
230
253
  ### Life / safety
231
254
 
@@ -297,13 +320,6 @@ for s in r.samples()[:3]:
297
320
  print(arm.diag.kin_bench().value) # CAN link diagnostic counters
298
321
  ```
299
322
 
300
- ### License and activation
301
-
302
- An arm that has never been activated rejects `enable()` with `ERR{0x10,0x08}` and answers every
303
- other command normally, so it stays diagnosable. `arm.license()` reads the record — a bare
304
- `LicenseInfo`, not a `Msg`; `arm.activate()` submits a vendor-issued credential and needs
305
- `disable()` first. See [the developer guide §5.15](docs/DEVELOPER_GUIDE.md#515-license-and-activation).
306
-
307
323
  ### Persistence
308
324
 
309
325
  ```python
@@ -344,7 +360,7 @@ or add `~/.local/bin` to `PATH`.
344
360
 
345
361
  ## Things to watch out for
346
362
 
347
- Start with the [troubleshooting guide](TROUBLESHOOTING.md): it has ready-made commands for
363
+ Start with the [troubleshooting guide](https://github.com/nexform-tech/litearm-python/blob/main/TROUBLESHOOTING.md): it has ready-made commands for
348
364
  finding who holds the serial port, what to do about each `enable()` rejection code, and how to
349
365
  tell Cartesian failures apart.
350
366
 
@@ -452,7 +468,7 @@ the motor bus.
452
468
 
453
469
  ## Examples
454
470
 
455
- See [examples/README.md](examples/README.md):
471
+ See [examples/README.md](https://github.com/nexform-tech/litearm-python/blob/main/examples/README.md):
456
472
 
457
473
  - `01_hello.py` — handshake + firmware version + reading state
458
474
  - `02_movej.py` — joint motion
@@ -505,4 +521,4 @@ On Windows use `env.ps1` / `env.cmd` and `run_example.ps1` / `run_example.cmd`.
505
521
 
506
522
  ## License
507
523
 
508
- Apache License 2.0 — see [LICENSE](LICENSE).
524
+ Apache License 2.0 — see [LICENSE](https://github.com/nexform-tech/litearm-python/blob/main/LICENSE).
@@ -4,7 +4,7 @@ Python SDK for the LiteArm robotic arm: drive the arm from a PC over one USB ser
4
4
  straight to its firmware — no server or middleware in between. Trajectory planning, kinematics
5
5
  and dynamics are all carried by the firmware.
6
6
 
7
- > Full interface reference: [docs/DEVELOPER_GUIDE.md](docs/DEVELOPER_GUIDE.md).
7
+ > Full interface reference: [docs/DEVELOPER_GUIDE.md](https://github.com/nexform-tech/litearm-python/blob/main/docs/DEVELOPER_GUIDE.md).
8
8
 
9
9
  ## Features
10
10
 
@@ -28,13 +28,19 @@ and dynamics are all carried by the firmware.
28
28
  | Firmware | `Litearm1.5.0` or later |
29
29
  | Connection | USB CDC serial, VID:PID `1d50:606f` |
30
30
 
31
- From the repository root:
31
+ From PyPI:
32
32
 
33
33
  ```bash
34
- pip install -e .
34
+ pip install litearm-python
35
35
  python3 -c "import litearm; print(litearm.__version__)" # verify
36
36
  ```
37
37
 
38
+ Or install from a checkout:
39
+
40
+ ```bash
41
+ pip install -e .
42
+ ```
43
+
38
44
  Linux needs serial permissions — check what the device node itself says first:
39
45
 
40
46
  ```bash
@@ -212,7 +218,7 @@ payload is composited in as a point mass), so nothing on the PC side needs a dyn
212
218
  nothing new is pulled in as a dependency. The **baseline is not optional**: subtracting it is what
213
219
  cancels the arm's own model error — an absolute solve feeds that error straight into the answer.
214
220
  The probe's side effects and the acceptance thresholds are in §5.16 of
215
- [the developer guide](docs/DEVELOPER_GUIDE.md).
221
+ [the developer guide](https://github.com/nexform-tech/litearm-python/blob/main/docs/DEVELOPER_GUIDE.md).
216
222
 
217
223
  ### Life / safety
218
224
 
@@ -284,13 +290,6 @@ for s in r.samples()[:3]:
284
290
  print(arm.diag.kin_bench().value) # CAN link diagnostic counters
285
291
  ```
286
292
 
287
- ### License and activation
288
-
289
- An arm that has never been activated rejects `enable()` with `ERR{0x10,0x08}` and answers every
290
- other command normally, so it stays diagnosable. `arm.license()` reads the record — a bare
291
- `LicenseInfo`, not a `Msg`; `arm.activate()` submits a vendor-issued credential and needs
292
- `disable()` first. See [the developer guide §5.15](docs/DEVELOPER_GUIDE.md#515-license-and-activation).
293
-
294
293
  ### Persistence
295
294
 
296
295
  ```python
@@ -331,7 +330,7 @@ or add `~/.local/bin` to `PATH`.
331
330
 
332
331
  ## Things to watch out for
333
332
 
334
- Start with the [troubleshooting guide](TROUBLESHOOTING.md): it has ready-made commands for
333
+ Start with the [troubleshooting guide](https://github.com/nexform-tech/litearm-python/blob/main/TROUBLESHOOTING.md): it has ready-made commands for
335
334
  finding who holds the serial port, what to do about each `enable()` rejection code, and how to
336
335
  tell Cartesian failures apart.
337
336
 
@@ -439,7 +438,7 @@ the motor bus.
439
438
 
440
439
  ## Examples
441
440
 
442
- See [examples/README.md](examples/README.md):
441
+ See [examples/README.md](https://github.com/nexform-tech/litearm-python/blob/main/examples/README.md):
443
442
 
444
443
  - `01_hello.py` — handshake + firmware version + reading state
445
444
  - `02_movej.py` — joint motion
@@ -492,4 +491,4 @@ On Windows use `env.ps1` / `env.cmd` and `run_example.ps1` / `run_example.cmd`.
492
491
 
493
492
  ## License
494
493
 
495
- Apache License 2.0 — see [LICENSE](LICENSE).
494
+ Apache License 2.0 — see [LICENSE](https://github.com/nexform-tech/litearm-python/blob/main/LICENSE).
@@ -0,0 +1,49 @@
1
+ [build-system]
2
+ requires = ["setuptools>=77"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "litearm-python"
7
+ version = "1.2.4"
8
+ description = "Python SDK for the LiteArm robotic arm"
9
+ readme = "README.md"
10
+ requires-python = ">=3.9"
11
+ license = "Apache-2.0"
12
+ license-files = ["LICENSE"]
13
+ authors = [{ name = "NEXFORM ROBOTICS" }]
14
+ keywords = ["litearm", "robotic-arm", "robot-arm", "robotics", "serial", "stm32", "sdk"]
15
+ classifiers = [
16
+ "Development Status :: 4 - Beta",
17
+ "Intended Audience :: Developers",
18
+ "Operating System :: OS Independent",
19
+ "Programming Language :: Python :: 3",
20
+ "Programming Language :: Python :: 3 :: Only",
21
+ "Programming Language :: Python :: 3.9",
22
+ "Programming Language :: Python :: 3.10",
23
+ "Programming Language :: Python :: 3.11",
24
+ "Programming Language :: Python :: 3.12",
25
+ "Programming Language :: Python :: 3.13",
26
+ "Topic :: Scientific/Engineering",
27
+ "Typing :: Typed",
28
+ ]
29
+ dependencies = ["pyserial>=3.4"]
30
+
31
+ [project.optional-dependencies]
32
+ dev = ["pytest>=7"]
33
+
34
+ [project.urls]
35
+ Repository = "https://github.com/nexform-tech/litearm-python"
36
+ Issues = "https://github.com/nexform-tech/litearm-python/issues"
37
+ Documentation = "https://github.com/nexform-tech/litearm-python/blob/main/docs/DEVELOPER_GUIDE.md"
38
+
39
+ [project.scripts]
40
+ litearm-python = "litearm.arm:main"
41
+
42
+ [tool.pytest.ini_options]
43
+ testpaths = ["tests"]
44
+
45
+ [tool.setuptools.packages.find]
46
+ where = ["src"]
47
+
48
+ [tool.setuptools.package-data]
49
+ litearm = ["py.typed"]
@@ -92,7 +92,7 @@ from litearm.state import JointState, RobotState
92
92
  from litearm.tool import TcpOffset
93
93
  from litearm.transport import find_cdc_port
94
94
 
95
- __version__ = "1.2.2"
95
+ __version__ = "1.2.4"
96
96
 
97
97
  __all__ = [
98
98
  "Arm", "Msg", "LicenseInfo", "RobotState", "JointState", "find_cdc_port", "main",
@@ -1,8 +1,25 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: litearm-python
3
- Version: 1.2.2
3
+ Version: 1.2.4
4
4
  Summary: Python SDK for the LiteArm robotic arm
5
- License: Apache-2.0
5
+ Author: NEXFORM ROBOTICS
6
+ License-Expression: Apache-2.0
7
+ Project-URL: Repository, https://github.com/nexform-tech/litearm-python
8
+ Project-URL: Issues, https://github.com/nexform-tech/litearm-python/issues
9
+ Project-URL: Documentation, https://github.com/nexform-tech/litearm-python/blob/main/docs/DEVELOPER_GUIDE.md
10
+ Keywords: litearm,robotic-arm,robot-arm,robotics,serial,stm32,sdk
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: Operating System :: OS Independent
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3 :: Only
16
+ Classifier: Programming Language :: Python :: 3.9
17
+ Classifier: Programming Language :: Python :: 3.10
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Programming Language :: Python :: 3.13
21
+ Classifier: Topic :: Scientific/Engineering
22
+ Classifier: Typing :: Typed
6
23
  Requires-Python: >=3.9
7
24
  Description-Content-Type: text/markdown
8
25
  License-File: LICENSE
@@ -17,7 +34,7 @@ Python SDK for the LiteArm robotic arm: drive the arm from a PC over one USB ser
17
34
  straight to its firmware — no server or middleware in between. Trajectory planning, kinematics
18
35
  and dynamics are all carried by the firmware.
19
36
 
20
- > Full interface reference: [docs/DEVELOPER_GUIDE.md](docs/DEVELOPER_GUIDE.md).
37
+ > Full interface reference: [docs/DEVELOPER_GUIDE.md](https://github.com/nexform-tech/litearm-python/blob/main/docs/DEVELOPER_GUIDE.md).
21
38
 
22
39
  ## Features
23
40
 
@@ -41,13 +58,19 @@ and dynamics are all carried by the firmware.
41
58
  | Firmware | `Litearm1.5.0` or later |
42
59
  | Connection | USB CDC serial, VID:PID `1d50:606f` |
43
60
 
44
- From the repository root:
61
+ From PyPI:
45
62
 
46
63
  ```bash
47
- pip install -e .
64
+ pip install litearm-python
48
65
  python3 -c "import litearm; print(litearm.__version__)" # verify
49
66
  ```
50
67
 
68
+ Or install from a checkout:
69
+
70
+ ```bash
71
+ pip install -e .
72
+ ```
73
+
51
74
  Linux needs serial permissions — check what the device node itself says first:
52
75
 
53
76
  ```bash
@@ -225,7 +248,7 @@ payload is composited in as a point mass), so nothing on the PC side needs a dyn
225
248
  nothing new is pulled in as a dependency. The **baseline is not optional**: subtracting it is what
226
249
  cancels the arm's own model error — an absolute solve feeds that error straight into the answer.
227
250
  The probe's side effects and the acceptance thresholds are in §5.16 of
228
- [the developer guide](docs/DEVELOPER_GUIDE.md).
251
+ [the developer guide](https://github.com/nexform-tech/litearm-python/blob/main/docs/DEVELOPER_GUIDE.md).
229
252
 
230
253
  ### Life / safety
231
254
 
@@ -297,13 +320,6 @@ for s in r.samples()[:3]:
297
320
  print(arm.diag.kin_bench().value) # CAN link diagnostic counters
298
321
  ```
299
322
 
300
- ### License and activation
301
-
302
- An arm that has never been activated rejects `enable()` with `ERR{0x10,0x08}` and answers every
303
- other command normally, so it stays diagnosable. `arm.license()` reads the record — a bare
304
- `LicenseInfo`, not a `Msg`; `arm.activate()` submits a vendor-issued credential and needs
305
- `disable()` first. See [the developer guide §5.15](docs/DEVELOPER_GUIDE.md#515-license-and-activation).
306
-
307
323
  ### Persistence
308
324
 
309
325
  ```python
@@ -344,7 +360,7 @@ or add `~/.local/bin` to `PATH`.
344
360
 
345
361
  ## Things to watch out for
346
362
 
347
- Start with the [troubleshooting guide](TROUBLESHOOTING.md): it has ready-made commands for
363
+ Start with the [troubleshooting guide](https://github.com/nexform-tech/litearm-python/blob/main/TROUBLESHOOTING.md): it has ready-made commands for
348
364
  finding who holds the serial port, what to do about each `enable()` rejection code, and how to
349
365
  tell Cartesian failures apart.
350
366
 
@@ -452,7 +468,7 @@ the motor bus.
452
468
 
453
469
  ## Examples
454
470
 
455
- See [examples/README.md](examples/README.md):
471
+ See [examples/README.md](https://github.com/nexform-tech/litearm-python/blob/main/examples/README.md):
456
472
 
457
473
  - `01_hello.py` — handshake + firmware version + reading state
458
474
  - `02_movej.py` — joint motion
@@ -505,4 +521,4 @@ On Windows use `env.ps1` / `env.cmd` and `run_example.ps1` / `run_example.cmd`.
505
521
 
506
522
  ## License
507
523
 
508
- Apache License 2.0 — see [LICENSE](LICENSE).
524
+ Apache License 2.0 — see [LICENSE](https://github.com/nexform-tech/litearm-python/blob/main/LICENSE).
@@ -22,9 +22,7 @@ def _project_description() -> str:
22
22
 
23
23
  def _project_license() -> str:
24
24
  text = PYPROJECT.read_text(encoding="utf-8")
25
- match = re.search(
26
- r'^license\s*=\s*\{\s*text\s*=\s*"([^"]+)"\s*\}\s*$', text, re.MULTILINE
27
- )
25
+ match = re.search(r'^license\s*=\s*"([^"]+)"\s*$', text, re.MULTILINE)
28
26
  assert match is not None, "pyproject.toml has no [project].license"
29
27
  return match.group(1)
30
28
 
@@ -1,27 +0,0 @@
1
- [build-system]
2
- requires = ["setuptools>=61"]
3
- build-backend = "setuptools.build_meta"
4
-
5
- [project]
6
- name = "litearm-python"
7
- version = "1.2.2"
8
- description = "Python SDK for the LiteArm robotic arm"
9
- readme = "README.md"
10
- requires-python = ">=3.9"
11
- license = { text = "Apache-2.0" }
12
- dependencies = ["pyserial>=3.4"]
13
-
14
- [project.optional-dependencies]
15
- dev = ["pytest>=7"]
16
-
17
- [project.scripts]
18
- litearm-python = "litearm.arm:main"
19
-
20
- [tool.pytest.ini_options]
21
- testpaths = ["tests"]
22
-
23
- [tool.setuptools.packages.find]
24
- where = ["src"]
25
-
26
- [tool.setuptools.package-data]
27
- litearm = ["py.typed"]
File without changes
File without changes