nc-gcode-interpreter 0.1.7__tar.gz → 0.1.8__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 (63) hide show
  1. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/.github/workflows/build-and-release.yml +2 -1
  2. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/Cargo.lock +1 -1
  3. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/Cargo.toml +1 -1
  4. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/Development.md +1 -1
  5. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/PKG-INFO +4 -2
  6. nc_gcode_interpreter-0.1.8/examples/function_calls.csv +3 -0
  7. nc_gcode_interpreter-0.1.8/examples/function_calls.mpf +2 -0
  8. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/ggroups/generate_pest.py +1 -1
  9. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/pyproject.toml +12 -8
  10. nc_gcode_interpreter-0.1.8/python/nc_gcode_interpreter/__init__.py +127 -0
  11. nc_gcode_interpreter-0.1.8/python/nc_gcode_interpreter/_internal.pyi +41 -0
  12. nc_gcode_interpreter-0.1.8/python/nc_gcode_interpreter/py.typed +0 -0
  13. nc_gcode_interpreter-0.1.8/python/tests/test_g_groups.py +23 -0
  14. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/src/lib.rs +1 -1
  15. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/uv.lock +107 -67
  16. nc_gcode_interpreter-0.1.7/Example.MPF +0 -14
  17. nc_gcode_interpreter-0.1.7/python/nc_gcode_interpreter/__init__.py +0 -33
  18. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/.gitignore +0 -0
  19. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/CONTRIBUTING.md +0 -0
  20. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/LICENSE +0 -0
  21. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/README.md +0 -0
  22. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/TODO.md +0 -0
  23. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/examples/arrays.csv +0 -0
  24. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/examples/arrays.mpf +0 -0
  25. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/examples/basic_math.csv +0 -0
  26. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/examples/basic_math.mpf +0 -0
  27. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/examples/custom_vars.csv +0 -0
  28. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/examples/custom_vars.mpf +0 -0
  29. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/examples/defaults.csv +0 -0
  30. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/examples/defaults.mpf +0 -0
  31. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/examples/for_loop.csv +0 -0
  32. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/examples/for_loop.mpf +0 -0
  33. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/examples/if_statement.csv +0 -0
  34. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/examples/if_statement.mpf +0 -0
  35. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/examples/increment.csv +0 -0
  36. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/examples/increment.mpf +0 -0
  37. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/examples/loop.csv +0 -0
  38. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/examples/loop.mpf +0 -0
  39. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/examples/multiple_m_codes.csv +0 -0
  40. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/examples/multiple_m_codes.mpf +0 -0
  41. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/examples/simple.csv +0 -0
  42. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/examples/simple.mpf +0 -0
  43. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/examples/tool.csv +0 -0
  44. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/examples/tool.mpf +0 -0
  45. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/examples/trans.csv +0 -0
  46. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/examples/trans.mpf +0 -0
  47. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/examples/variables.csv +0 -0
  48. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/examples/variables.mpf +0 -0
  49. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/ggroups/generate_modal_ggroups.py +0 -0
  50. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/ggroups/ggroups.pest +0 -0
  51. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/ggroups/modal_groups.rs +0 -0
  52. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/python/example/minimal.py +0 -0
  53. {nc_gcode_interpreter-0.1.7/ggroups → nc_gcode_interpreter-0.1.8/python/nc_gcode_interpreter}/ggroups.json +0 -0
  54. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/python/tests/test_expected_output.py +0 -0
  55. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/rustfmt.toml +0 -0
  56. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/src/errors.rs +0 -0
  57. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/src/grammar.pest +0 -0
  58. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/src/interpret_rules.rs +0 -0
  59. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/src/interpreter.rs +0 -0
  60. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/src/main.rs +0 -0
  61. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/src/modal_groups.rs +0 -0
  62. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/src/state.rs +0 -0
  63. {nc_gcode_interpreter-0.1.7 → nc_gcode_interpreter-0.1.8}/src/types.rs +0 -0
@@ -89,7 +89,8 @@ jobs:
89
89
  pip install "${WHL_FILE}[test]"
90
90
  - name: Run tests with pytest
91
91
  run: pytest
92
-
92
+ - name: Type checking with mypy
93
+ run: mypy python
93
94
  linux:
94
95
  if: startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch'
95
96
  needs: [lint, test]
@@ -724,7 +724,7 @@ dependencies = [
724
724
 
725
725
  [[package]]
726
726
  name = "nc-gcode-interpreter"
727
- version = "0.1.7"
727
+ version = "0.1.8"
728
728
  dependencies = [
729
729
  "clap",
730
730
  "csv",
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "nc-gcode-interpreter"
3
- version = "0.1.7"
3
+ version = "0.1.8"
4
4
  edition = "2021"
5
5
 
6
6
  [lib]
@@ -42,5 +42,5 @@ rm **/*.csv && cargo build --release && find examples -name "*.mpf" -type f -pri
42
42
  ## python test
43
43
 
44
44
  ```bash
45
- maturin develop --release && pytest
45
+ maturin develop --release --uv && pytest
46
46
  ```
@@ -1,8 +1,9 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: nc-gcode-interpreter
3
- Version: 0.1.7
3
+ Version: 0.1.8
4
4
  Classifier: Programming Language :: Rust
5
5
  Classifier: Programming Language :: Python :: Implementation :: CPython
6
+ Classifier: Programming Language :: Python :: 3.11
6
7
  Classifier: Programming Language :: Python :: 3.12
7
8
  Classifier: License :: OSI Approved :: MIT License
8
9
  Classifier: Operating System :: OS Independent
@@ -11,10 +12,11 @@ Requires-Dist: maturin >=1.7.4
11
12
  Requires-Dist: polars >=1.9.0
12
13
  Requires-Dist: jupyter >=1.1.1 ; extra == 'dev'
13
14
  Requires-Dist: pytest >=8.3.3 ; extra == 'test'
15
+ Requires-Dist: mypy ; extra == 'test'
14
16
  Provides-Extra: dev
15
17
  Provides-Extra: test
16
18
  License-File: LICENSE
17
- Summary: A interpreter for NC (Numerical Control) code
19
+ Summary: A interpreter for NC (Numerical Control) GCode
18
20
  Author-email: CEAD Group <software@ceadgroup.com>
19
21
  Requires-Python: >=3.11
20
22
  Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
@@ -0,0 +1,3 @@
1
+ X,function_call,gg01_motion
2
+ ,SETAL(12345),
3
+ 1.000,,G1
@@ -0,0 +1,2 @@
1
+ SETAL(12345)
2
+ G1 X1
@@ -2,7 +2,7 @@
2
2
  from pathlib import Path
3
3
  import json
4
4
 
5
- json_file = Path(__file__).parent / "ggroups.json"
5
+ json_file = Path(__file__).parent.parent / "python/nc_gcode_interpreter/ggroups.json"
6
6
  with open(json_file, "r") as file:
7
7
  g_groups = json.load(file)
8
8
  # %%
@@ -1,16 +1,17 @@
1
1
  [build-system]
2
- requires = ["maturin>=1.0,<2.0"]
2
+ requires = ["maturin>=1.7,<2.0"]
3
3
  build-backend = "maturin"
4
4
 
5
5
  [project]
6
6
  name = "nc-gcode-interpreter"
7
7
  dynamic = ["version"]
8
- description = "A interpreter for NC (Numerical Control) code"
8
+ description = "A interpreter for NC (Numerical Control) GCode"
9
9
  authors = [{ name = "CEAD Group", email = "software@ceadgroup.com" }]
10
10
  requires-python = ">=3.11"
11
11
  classifiers = [
12
12
  "Programming Language :: Rust",
13
13
  "Programming Language :: Python :: Implementation :: CPython",
14
+ "Programming Language :: Python :: 3.11",
14
15
  "Programming Language :: Python :: 3.12",
15
16
  "License :: OSI Approved :: MIT License",
16
17
  "Operating System :: OS Independent",
@@ -26,14 +27,17 @@ dev = [
26
27
  "jupyter>=1.1.1"
27
28
  ]
28
29
  test = [
29
- "pytest>=8.3.3"
30
+ "pytest>=8.3.3",
31
+ "mypy"
30
32
  ]
31
33
 
32
- [project.urls]
33
- Homepage = "https://github.com/CEAD-group/nc-gcode-interpreter"
34
- Repository = "https://github.com/CEAD-group/nc-gcode-interpreter.git"
35
- Documentation = "https://github.com/CEAD-group/nc-gcode-interpreter/blob/main/README.md"
36
-
37
34
  [tool.maturin]
38
35
  features = ["pyo3/extension-module"]
36
+ module-name = "nc_gcode_interpreter._internal"
39
37
  python-source = "python"
38
+ include = ["python/nc_gcode_interpreter/py.typed", "python/nc_gcode_interpreter/ggroups.json"]
39
+
40
+ [project.urls]
41
+ Homepage = "https://github.com/CEAD-group/nc-gcode-interpreter"
42
+ Repository = "https://github.com/CEAD-group/nc-gcode-interpreter.git"
43
+ Documentation = "https://github.com/CEAD-group/nc-gcode-interpreter/blob/main/README.md"
@@ -0,0 +1,127 @@
1
+ from typing import Protocol
2
+ import polars as pl
3
+ from ._internal import nc_to_dataframe as _nc_to_dataframe
4
+ from ._internal import __doc__ # noqa: F401
5
+ import json
6
+ from pathlib import Path
7
+ from typing import TypedDict, TypeVar, Any, Type, Callable, Generic
8
+
9
+
10
+ # Define TextFileLike Protocol
11
+ class TextFileLike(Protocol):
12
+ def read(self) -> str: ...
13
+
14
+
15
+ __all__ = ["nc_to_dataframe"]
16
+
17
+
18
+ def nc_to_dataframe(
19
+ input: "TextFileLike | str",
20
+ initial_state: "TextFileLike | str | None" = None,
21
+ axis_identifiers: "list[str] | None" = None,
22
+ extra_axes: "list[str] | None" = None,
23
+ iteration_limit: int = 10000,
24
+ disable_forward_fill: bool = False,
25
+ ) -> tuple[pl.DataFrame, dict]:
26
+ """
27
+ Convert G-code to a DataFrame representation along with the state information.
28
+
29
+ Parameters:
30
+ -----------
31
+ input: TextFileLike | str
32
+ The G-code input as a string or a file-like object.
33
+ initial_state: TextFileLike | str | None
34
+ An optional initial state string or a file-like object.
35
+ axis_identifiers: list[str] | None
36
+ A list of axis identifiers.
37
+ extra_axes: list[str] | None
38
+ A list of extra axes to be included.
39
+ iteration_limit: int
40
+ The maximum number of iterations to process.
41
+ disable_forward_fill: bool
42
+ Whether to disable forward-filling of values.
43
+
44
+ Returns:
45
+ --------
46
+ tuple[pl.DataFrame, dict]
47
+ A tuple containing the resulting DataFrame and a nested dictionary representing the state.
48
+ """
49
+ if input is None:
50
+ raise ValueError("input cannot be None")
51
+ if not isinstance(input, str):
52
+ input = input.read()
53
+ if initial_state is not None and not isinstance(initial_state, str):
54
+ initial_state = initial_state.read()
55
+
56
+ df, state = _nc_to_dataframe(
57
+ input,
58
+ initial_state,
59
+ axis_identifiers,
60
+ extra_axes,
61
+ iteration_limit,
62
+ disable_forward_fill,
63
+ )
64
+ return df, state
65
+
66
+
67
+ _T = TypeVar("_T")
68
+
69
+
70
+ class _classproperty(Generic[_T]):
71
+ def __init__(self, fget: Callable[[Any], _T]) -> None:
72
+ self.fget = fget
73
+
74
+ def __get__(self, instance: Any, owner: Type[Any]) -> _T:
75
+ return self.fget(owner)
76
+
77
+
78
+ class _GGroupEntry(TypedDict):
79
+ id: str
80
+ nr: int
81
+ description: str
82
+
83
+
84
+ class _GGroup(TypedDict):
85
+ nr: int
86
+ title: str
87
+ effectiveness: str
88
+ short_name: str
89
+ entries: list[_GGroupEntry]
90
+
91
+
92
+ class GGroups:
93
+ _g_groups: list[_GGroup] | None = None
94
+ _g_group_short_names: set[str] | None = None
95
+ _g_groups_by_short_name: dict[str, _GGroup] | None = None
96
+
97
+ @_classproperty
98
+ def g_groups(cls) -> list[_GGroup]:
99
+ if cls._g_groups is None:
100
+ cls._load_data()
101
+ assert cls._g_groups is not None
102
+ return cls._g_groups
103
+
104
+ @classmethod
105
+ def _load_data(cls) -> None:
106
+ json_file = Path(__file__).parent / "ggroups.json"
107
+ with open(json_file, "r") as file:
108
+ g_groups = json.load(file)
109
+ cls._g_groups = g_groups
110
+ cls._g_group_short_names = {group["short_name"] for group in g_groups}
111
+ cls._g_groups_by_short_name = {
112
+ group["short_name"]: group for group in g_groups
113
+ }
114
+
115
+ @classmethod
116
+ def is_g_group(cls, name: str) -> bool:
117
+ if cls._g_group_short_names is None:
118
+ cls._load_data()
119
+ assert cls._g_group_short_names is not None
120
+ return name in cls._g_group_short_names
121
+
122
+ @classmethod
123
+ def is_modal_g_group(cls, name: str) -> bool:
124
+ if cls._g_groups_by_short_name is None:
125
+ cls._load_data()
126
+ assert cls._g_groups_by_short_name is not None
127
+ return cls._g_groups_by_short_name[name]["effectiveness"] == "modal"
@@ -0,0 +1,41 @@
1
+ from typing import Optional, List, Dict, Tuple
2
+ import polars as pl
3
+
4
+ # Define the type hint for the `nc_to_dataframe` function
5
+ def nc_to_dataframe(
6
+ input: str,
7
+ initial_state: Optional[str] = None,
8
+ axis_identifiers: Optional[List[str]] = None,
9
+ extra_axes: Optional[List[str]] = None,
10
+ iteration_limit: int = 10000,
11
+ disable_forward_fill: bool = False,
12
+ ) -> Tuple[pl.DataFrame, Dict[str, Dict[str, float]]]:
13
+ """
14
+ Convert G-code to a DataFrame representation along with the state information.
15
+
16
+ Parameters:
17
+ -----------
18
+ input: str
19
+ The G-code input as a string.
20
+ initial_state: Optional[str]
21
+ An optional initial state string.
22
+ axis_identifiers: Optional[List[str]]
23
+ A list of axis identifiers.
24
+ extra_axes: Optional[List[str]]
25
+ A list of extra axes to be included.
26
+ iteration_limit: int
27
+ The maximum number of iterations to process.
28
+ disable_forward_fill: bool
29
+ Whether to disable forward-filling of values.
30
+
31
+ Returns:
32
+ --------
33
+ Tuple[pl.DataFrame, Dict[str, Dict[str, float]]]
34
+ A tuple containing the resulting DataFrame and a nested dictionary representing the state.
35
+ """
36
+ ...
37
+
38
+ # Module definition for nc_gcode_interpreter
39
+ # Since this is an auto-generated module, the binding name corresponds to the compiled Rust module.
40
+
41
+ __all__ = ["nc_to_dataframe"]
@@ -0,0 +1,23 @@
1
+ from nc_gcode_interpreter import GGroups
2
+
3
+
4
+ def test_g_groups_class() -> None:
5
+ g = GGroups
6
+ assert g.is_g_group("gg01_motion")
7
+ assert not g.is_g_group("G1")
8
+
9
+
10
+ def test_g_groups_instance() -> None:
11
+ g = GGroups()
12
+ assert g.is_g_group("gg01_motion")
13
+ assert not g.is_g_group("G1")
14
+
15
+
16
+ def test_g_groups_access_class() -> None:
17
+ g: list = GGroups.g_groups
18
+ assert isinstance(g, list)
19
+
20
+
21
+ def test_g_groups_access_instance() -> None:
22
+ g: list = GGroups().g_groups
23
+ assert isinstance(g, list)
@@ -42,7 +42,7 @@ fn nc_to_dataframe(
42
42
  }
43
43
 
44
44
  /// Define the Python module
45
- #[pymodule]
45
+ #[pymodule(name = "_internal")]
46
46
  fn nc_gcode_interpreter(_py: Python<'_>, m: &Bound<'_, PyModule>) -> PyResult<()> {
47
47
  m.add_function(wrap_pyfunction!(nc_to_dataframe, m)?)?;
48
48
  Ok(())
@@ -739,50 +739,50 @@ wheels = [
739
739
 
740
740
  [[package]]
741
741
  name = "markupsafe"
742
- version = "3.0.1"
743
- source = { registry = "https://pypi.org/simple" }
744
- sdist = { url = "https://files.pythonhosted.org/packages/b4/d2/38ff920762f2247c3af5cbbbbc40756f575d9692d381d7c520f45deb9b8f/markupsafe-3.0.1.tar.gz", hash = "sha256:3e683ee4f5d0fa2dde4db77ed8dd8a876686e3fc417655c2ece9a90576905344", size = 20249 }
745
- wheels = [
746
- { url = "https://files.pythonhosted.org/packages/ce/af/2f5d88a7fc7226bd34c6e15f6061246ad8cff979da9f19d11bdd0addd8e2/MarkupSafe-3.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:26627785a54a947f6d7336ce5963569b5d75614619e75193bdb4e06e21d447ad", size = 14387 },
747
- { url = "https://files.pythonhosted.org/packages/8d/43/fd588ef5d192308c5e05974bac659bf6ae29c202b7ea2c4194bcf01eacee/MarkupSafe-3.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b954093679d5750495725ea6f88409946d69cfb25ea7b4c846eef5044194f583", size = 12410 },
748
- { url = "https://files.pythonhosted.org/packages/58/26/78f161d602fb03804118905e5faacafc0ec592bbad71aaee62537529813a/MarkupSafe-3.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:973a371a55ce9ed333a3a0f8e0bcfae9e0d637711534bcb11e130af2ab9334e7", size = 24006 },
749
- { url = "https://files.pythonhosted.org/packages/ae/1d/7d5ec8bcfd9c2db235d720fa51d818b7e2abc45250ce5f53dd6cb60409ca/MarkupSafe-3.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:244dbe463d5fb6d7ce161301a03a6fe744dac9072328ba9fc82289238582697b", size = 23303 },
750
- { url = "https://files.pythonhosted.org/packages/26/ce/703ca3b03a709e3bd1fbffa407789e56b9fa664456538092617dd665fc1d/MarkupSafe-3.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d98e66a24497637dd31ccab090b34392dddb1f2f811c4b4cd80c230205c074a3", size = 23205 },
751
- { url = "https://files.pythonhosted.org/packages/88/60/40be0493decabc2344b12d3a709fd6ccdd15a5ebaee1e8d878315d107ad3/MarkupSafe-3.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ad91738f14eb8da0ff82f2acd0098b6257621410dcbd4df20aaa5b4233d75a50", size = 23684 },
752
- { url = "https://files.pythonhosted.org/packages/6d/f8/8fd52a66e8f62a9add62b4a0b5a3ab4092027437f2ef027f812d94ae91cf/MarkupSafe-3.0.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:7044312a928a66a4c2a22644147bc61a199c1709712069a344a3fb5cfcf16915", size = 23472 },
753
- { url = "https://files.pythonhosted.org/packages/d4/0b/998b17b9e06ea45ad1646fea586f1b83d02dfdb14d47dd2fd81fba5a08c9/MarkupSafe-3.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a4792d3b3a6dfafefdf8e937f14906a51bd27025a36f4b188728a73382231d91", size = 23388 },
754
- { url = "https://files.pythonhosted.org/packages/5a/57/b6b7aa23b2e26d68d601718f8ce3161fbdaf967b31752c7dec52bef828c9/MarkupSafe-3.0.1-cp311-cp311-win32.whl", hash = "sha256:fa7d686ed9883f3d664d39d5a8e74d3c5f63e603c2e3ff0abcba23eac6542635", size = 15106 },
755
- { url = "https://files.pythonhosted.org/packages/fc/b5/20cb1d714596acb553c810009c8004c809823947da63e13c19a7decfcb6c/MarkupSafe-3.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:9ba25a71ebf05b9bb0e2ae99f8bc08a07ee8e98c612175087112656ca0f5c8bf", size = 15542 },
756
- { url = "https://files.pythonhosted.org/packages/45/6d/72ed58d42a12bd9fc288dbff6dd8d03ea973a232ac0538d7f88d105b5251/MarkupSafe-3.0.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:8ae369e84466aa70f3154ee23c1451fda10a8ee1b63923ce76667e3077f2b0c4", size = 14322 },
757
- { url = "https://files.pythonhosted.org/packages/86/f5/241238f89cdd6461ac9f521af8389f9a48fab97e4f315c69e9e0d52bc919/MarkupSafe-3.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40f1e10d51c92859765522cbd79c5c8989f40f0419614bcdc5015e7b6bf97fc5", size = 12380 },
758
- { url = "https://files.pythonhosted.org/packages/27/94/79751928bca5841416d8ca02e22198672e021d5c7120338e2a6e3771f8fc/MarkupSafe-3.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a4cb365cb49b750bdb60b846b0c0bc49ed62e59a76635095a179d440540c346", size = 24099 },
759
- { url = "https://files.pythonhosted.org/packages/10/6e/1b8070bbfc467429c7983cd5ffd4ec57e1d501763d974c7caaa0a9a79f4c/MarkupSafe-3.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee3941769bd2522fe39222206f6dd97ae83c442a94c90f2b7a25d847d40f4729", size = 23249 },
760
- { url = "https://files.pythonhosted.org/packages/66/50/9389ae6cdff78d7481a2a2641830b5eb1d1f62177550e73355a810a889c9/MarkupSafe-3.0.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62fada2c942702ef8952754abfc1a9f7658a4d5460fabe95ac7ec2cbe0d02abc", size = 23149 },
761
- { url = "https://files.pythonhosted.org/packages/16/02/5dddff5366fde47133186efb847fa88bddef85914bbe623e25cfeccb3517/MarkupSafe-3.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4c2d64fdba74ad16138300815cfdc6ab2f4647e23ced81f59e940d7d4a1469d9", size = 23864 },
762
- { url = "https://files.pythonhosted.org/packages/f3/f1/700ee6655561cfda986e03f7afc309e3738918551afa7dedd99225586227/MarkupSafe-3.0.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:fb532dd9900381d2e8f48172ddc5a59db4c445a11b9fab40b3b786da40d3b56b", size = 23440 },
763
- { url = "https://files.pythonhosted.org/packages/fb/3e/d26623ac7f16709823b4c80e0b4a1c9196eeb46182a6c1d47b5e0c8434f4/MarkupSafe-3.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0f84af7e813784feb4d5e4ff7db633aba6c8ca64a833f61d8e4eade234ef0c38", size = 23610 },
764
- { url = "https://files.pythonhosted.org/packages/51/04/1f8da0810c39cb9fcff96b6baed62272c97065e9cf11471965a161439e20/MarkupSafe-3.0.1-cp312-cp312-win32.whl", hash = "sha256:cbf445eb5628981a80f54087f9acdbf84f9b7d862756110d172993b9a5ae81aa", size = 15113 },
765
- { url = "https://files.pythonhosted.org/packages/eb/24/a36dc37365bdd358b1e583cc40475593e36ab02cb7da6b3d0b9c05b0da7a/MarkupSafe-3.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:a10860e00ded1dd0a65b83e717af28845bb7bd16d8ace40fe5531491de76b79f", size = 15611 },
766
- { url = "https://files.pythonhosted.org/packages/b1/60/4572a8aa1beccbc24b133aa0670781a5d2697f4fa3fecf0a87b46383174b/MarkupSafe-3.0.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e81c52638315ff4ac1b533d427f50bc0afc746deb949210bc85f05d4f15fd772", size = 14325 },
767
- { url = "https://files.pythonhosted.org/packages/38/42/849915b99a765ec104bfd07ee933de5fc9c58fa9570efa7db81717f495d8/MarkupSafe-3.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:312387403cd40699ab91d50735ea7a507b788091c416dd007eac54434aee51da", size = 12373 },
768
- { url = "https://files.pythonhosted.org/packages/ef/82/4caaebd963c6d60b28e4445f38841d24f8b49bc10594a09956c9d73bfc08/MarkupSafe-3.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ae99f31f47d849758a687102afdd05bd3d3ff7dbab0a8f1587981b58a76152a", size = 24059 },
769
- { url = "https://files.pythonhosted.org/packages/20/15/6b319be2f79fcfa3173f479d69f4e950b5c9b642db4f22cf73ae5ade745f/MarkupSafe-3.0.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c97ff7fedf56d86bae92fa0a646ce1a0ec7509a7578e1ed238731ba13aabcd1c", size = 23211 },
770
- { url = "https://files.pythonhosted.org/packages/9d/3f/8963bdf4962feb2154475acb7dc350f04217b5e0be7763a39b432291e229/MarkupSafe-3.0.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a7420ceda262dbb4b8d839a4ec63d61c261e4e77677ed7c66c99f4e7cb5030dd", size = 23095 },
771
- { url = "https://files.pythonhosted.org/packages/af/93/f770bc70953d32de0c6ce4bcb76271512123a1ead91aaef625a020c5bfaf/MarkupSafe-3.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:45d42d132cff577c92bfba536aefcfea7e26efb975bd455db4e6602f5c9f45e7", size = 23901 },
772
- { url = "https://files.pythonhosted.org/packages/11/92/1e5a33aa0a1190161238628fb68eb1bc5e67b56a5c89f0636328704b463a/MarkupSafe-3.0.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4c8817557d0de9349109acb38b9dd570b03cc5014e8aabf1cbddc6e81005becd", size = 23463 },
773
- { url = "https://files.pythonhosted.org/packages/0d/fe/657efdfe385d2a3a701f2c4fcc9577c63c438aeefdd642d0d956c4ecd225/MarkupSafe-3.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6a54c43d3ec4cf2a39f4387ad044221c66a376e58c0d0e971d47c475ba79c6b5", size = 23569 },
774
- { url = "https://files.pythonhosted.org/packages/cf/24/587dea40304046ace60f846cedaebc0d33d967a3ce46c11395a10e7a78ba/MarkupSafe-3.0.1-cp313-cp313-win32.whl", hash = "sha256:c91b394f7601438ff79a4b93d16be92f216adb57d813a78be4446fe0f6bc2d8c", size = 15117 },
775
- { url = "https://files.pythonhosted.org/packages/32/8f/d8961d633f26a011b4fe054f3bfff52f673423b8c431553268741dfb089e/MarkupSafe-3.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:fe32482b37b4b00c7a52a07211b479653b7fe4f22b2e481b9a9b099d8a430f2f", size = 15613 },
776
- { url = "https://files.pythonhosted.org/packages/9e/93/d6367ffbcd0c5c371370767f768eaa32af60bc411245b8517e383c6a2b12/MarkupSafe-3.0.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:17b2aea42a7280db02ac644db1d634ad47dcc96faf38ab304fe26ba2680d359a", size = 14563 },
777
- { url = "https://files.pythonhosted.org/packages/4a/37/f813c3835747dec08fe19ac9b9eced01fdf93a4b3e626521675dc7f423a9/MarkupSafe-3.0.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:852dc840f6d7c985603e60b5deaae1d89c56cb038b577f6b5b8c808c97580f1d", size = 12505 },
778
- { url = "https://files.pythonhosted.org/packages/72/bf/800b4d1580298ca91ccd6c95915bbd147142dad1b8cf91d57b93b28670dd/MarkupSafe-3.0.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0778de17cff1acaeccc3ff30cd99a3fd5c50fc58ad3d6c0e0c4c58092b859396", size = 25358 },
779
- { url = "https://files.pythonhosted.org/packages/fd/78/26e209abc8f0a379f031f0acc151231974e5b153d7eda5759d17d8f329f2/MarkupSafe-3.0.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:800100d45176652ded796134277ecb13640c1a537cad3b8b53da45aa96330453", size = 23797 },
780
- { url = "https://files.pythonhosted.org/packages/09/e1/918496a9390891756efee818880e71c1bbaf587f4dc8ede3f3852357310a/MarkupSafe-3.0.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d06b24c686a34c86c8c1fba923181eae6b10565e4d80bdd7bc1c8e2f11247aa4", size = 23743 },
781
- { url = "https://files.pythonhosted.org/packages/cd/c6/26f576cd58d6c2decd9045e4e3f3c5dbc01ea6cb710916e7bbb6ebd95b6b/MarkupSafe-3.0.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:33d1c36b90e570ba7785dacd1faaf091203d9942bc036118fab8110a401eb1a8", size = 25076 },
782
- { url = "https://files.pythonhosted.org/packages/b5/fa/10b24fb3b0e15fe5389dc88ecc6226ede08297e0ba7130610efbe0cdfb27/MarkupSafe-3.0.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:beeebf760a9c1f4c07ef6a53465e8cfa776ea6a2021eda0d0417ec41043fe984", size = 24037 },
783
- { url = "https://files.pythonhosted.org/packages/c8/81/4b3f5537d9f6cc4f5c80d6c4b78af9a5247fd37b5aba95807b2cbc336b9a/MarkupSafe-3.0.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:bbde71a705f8e9e4c3e9e33db69341d040c827c7afa6789b14c6e16776074f5a", size = 24015 },
784
- { url = "https://files.pythonhosted.org/packages/5f/07/8e8dcecd53216c5e01a51e84c32a2bce166690ed19c184774b38cd41921d/MarkupSafe-3.0.1-cp313-cp313t-win32.whl", hash = "sha256:82b5dba6eb1bcc29cc305a18a3c5365d2af06ee71b123216416f7e20d2a84e5b", size = 15213 },
785
- { url = "https://files.pythonhosted.org/packages/0d/87/4c364e0f109eea2402079abecbe33fef4f347b551a11423d1f4e187ea497/MarkupSafe-3.0.1-cp313-cp313t-win_amd64.whl", hash = "sha256:730d86af59e0e43ce277bb83970530dd223bf7f2a838e086b50affa6ec5f9295", size = 15741 },
742
+ version = "3.0.2"
743
+ source = { registry = "https://pypi.org/simple" }
744
+ sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537 }
745
+ wheels = [
746
+ { url = "https://files.pythonhosted.org/packages/6b/28/bbf83e3f76936960b850435576dd5e67034e200469571be53f69174a2dfd/MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d", size = 14353 },
747
+ { url = "https://files.pythonhosted.org/packages/6c/30/316d194b093cde57d448a4c3209f22e3046c5bb2fb0820b118292b334be7/MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93", size = 12392 },
748
+ { url = "https://files.pythonhosted.org/packages/f2/96/9cdafba8445d3a53cae530aaf83c38ec64c4d5427d975c974084af5bc5d2/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832", size = 23984 },
749
+ { url = "https://files.pythonhosted.org/packages/f1/a4/aefb044a2cd8d7334c8a47d3fb2c9f328ac48cb349468cc31c20b539305f/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84", size = 23120 },
750
+ { url = "https://files.pythonhosted.org/packages/8d/21/5e4851379f88f3fad1de30361db501300d4f07bcad047d3cb0449fc51f8c/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca", size = 23032 },
751
+ { url = "https://files.pythonhosted.org/packages/00/7b/e92c64e079b2d0d7ddf69899c98842f3f9a60a1ae72657c89ce2655c999d/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798", size = 24057 },
752
+ { url = "https://files.pythonhosted.org/packages/f9/ac/46f960ca323037caa0a10662ef97d0a4728e890334fc156b9f9e52bcc4ca/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e", size = 23359 },
753
+ { url = "https://files.pythonhosted.org/packages/69/84/83439e16197337b8b14b6a5b9c2105fff81d42c2a7c5b58ac7b62ee2c3b1/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4", size = 23306 },
754
+ { url = "https://files.pythonhosted.org/packages/9a/34/a15aa69f01e2181ed8d2b685c0d2f6655d5cca2c4db0ddea775e631918cd/MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d", size = 15094 },
755
+ { url = "https://files.pythonhosted.org/packages/da/b8/3a3bd761922d416f3dc5d00bfbed11f66b1ab89a0c2b6e887240a30b0f6b/MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b", size = 15521 },
756
+ { url = "https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", size = 14274 },
757
+ { url = "https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", size = 12348 },
758
+ { url = "https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", size = 24149 },
759
+ { url = "https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", size = 23118 },
760
+ { url = "https://files.pythonhosted.org/packages/d5/da/f2eeb64c723f5e3777bc081da884b414671982008c47dcc1873d81f625b6/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", size = 22993 },
761
+ { url = "https://files.pythonhosted.org/packages/da/0e/1f32af846df486dce7c227fe0f2398dc7e2e51d4a370508281f3c1c5cddc/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", size = 24178 },
762
+ { url = "https://files.pythonhosted.org/packages/c4/f6/bb3ca0532de8086cbff5f06d137064c8410d10779c4c127e0e47d17c0b71/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", size = 23319 },
763
+ { url = "https://files.pythonhosted.org/packages/a2/82/8be4c96ffee03c5b4a034e60a31294daf481e12c7c43ab8e34a1453ee48b/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", size = 23352 },
764
+ { url = "https://files.pythonhosted.org/packages/51/ae/97827349d3fcffee7e184bdf7f41cd6b88d9919c80f0263ba7acd1bbcb18/MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", size = 15097 },
765
+ { url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", size = 15601 },
766
+ { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274 },
767
+ { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352 },
768
+ { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122 },
769
+ { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085 },
770
+ { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978 },
771
+ { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208 },
772
+ { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357 },
773
+ { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344 },
774
+ { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101 },
775
+ { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603 },
776
+ { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510 },
777
+ { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486 },
778
+ { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480 },
779
+ { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914 },
780
+ { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796 },
781
+ { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473 },
782
+ { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114 },
783
+ { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098 },
784
+ { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208 },
785
+ { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739 },
786
786
  ]
787
787
 
788
788
  [[package]]
@@ -826,6 +826,43 @@ wheels = [
826
826
  { url = "https://files.pythonhosted.org/packages/f0/74/c95adcdf032956d9ef6c89a9b8a5152bf73915f8c633f3e3d88d06bd699c/mistune-3.0.2-py3-none-any.whl", hash = "sha256:71481854c30fdbc938963d3605b72501f5c10a9320ecd412c121c163a1c7d205", size = 47958 },
827
827
  ]
828
828
 
829
+ [[package]]
830
+ name = "mypy"
831
+ version = "1.12.1"
832
+ source = { registry = "https://pypi.org/simple" }
833
+ dependencies = [
834
+ { name = "mypy-extensions" },
835
+ { name = "typing-extensions" },
836
+ ]
837
+ sdist = { url = "https://files.pythonhosted.org/packages/17/03/744330105a74dc004578f47ec27e1bf66b1dd5664ea444d18423e41343bd/mypy-1.12.1.tar.gz", hash = "sha256:f5b3936f7a6d0e8280c9bdef94c7ce4847f5cdfc258fbb2c29a8c1711e8bb96d", size = 3150767 }
838
+ wheels = [
839
+ { url = "https://files.pythonhosted.org/packages/18/0a/70de7c97a86cb85535077ab5cef1cbc4e2812fd2e9cc21d78eb561a6b80f/mypy-1.12.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1230048fec1380faf240be6385e709c8570604d2d27ec6ca7e573e3bc09c3735", size = 10940998 },
840
+ { url = "https://files.pythonhosted.org/packages/c0/97/9ed6d4834d7549936ab88533b302184fb568a0940c4000d2aaee6dc07112/mypy-1.12.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:02dcfe270c6ea13338210908f8cadc8d31af0f04cee8ca996438fe6a97b4ec66", size = 10108523 },
841
+ { url = "https://files.pythonhosted.org/packages/48/41/1686f37d09c915dfc5b683e20cc99dabac199900b5ca6d22747b99ddcb50/mypy-1.12.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a5a437c9102a6a252d9e3a63edc191a3aed5f2fcb786d614722ee3f4472e33f6", size = 12505553 },
842
+ { url = "https://files.pythonhosted.org/packages/8d/2b/2dbcaa7e97b23f27ced77493256ee878f4a140ac750e198630ff1b9b60c6/mypy-1.12.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:186e0c8346efc027ee1f9acf5ca734425fc4f7dc2b60144f0fbe27cc19dc7931", size = 12988634 },
843
+ { url = "https://files.pythonhosted.org/packages/54/55/710d082e91a2ccaea21214229b11f9215a9d22446f949491b5457655e82b/mypy-1.12.1-cp311-cp311-win_amd64.whl", hash = "sha256:673ba1140a478b50e6d265c03391702fa11a5c5aff3f54d69a62a48da32cb811", size = 9630747 },
844
+ { url = "https://files.pythonhosted.org/packages/8a/74/b9e0e4f06e951e277058f878302faa154d282ca11274c59fe08353f52949/mypy-1.12.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:9fb83a7be97c498176fb7486cafbb81decccaef1ac339d837c377b0ce3743a7f", size = 11079902 },
845
+ { url = "https://files.pythonhosted.org/packages/9f/62/fcad290769db3eb0de265094cef5c94d6075c70bc1e42b67eee4ca192dcc/mypy-1.12.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:389e307e333879c571029d5b93932cf838b811d3f5395ed1ad05086b52148fb0", size = 10072373 },
846
+ { url = "https://files.pythonhosted.org/packages/cb/27/9ac78349c2952e4446288ec1174675ab9e0160ed18c2cb1154fa456c54e8/mypy-1.12.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:94b2048a95a21f7a9ebc9fbd075a4fcd310410d078aa0228dbbad7f71335e042", size = 12589779 },
847
+ { url = "https://files.pythonhosted.org/packages/7c/4a/58cebd122cf1cba95680ac51303fbeb508392413ca64e3e711aa7d4877aa/mypy-1.12.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ee5932370ccf7ebf83f79d1c157a5929d7ea36313027b0d70a488493dc1b179", size = 13044459 },
848
+ { url = "https://files.pythonhosted.org/packages/5b/c7/672935e2a3f9bcc07b1b870395a653f665657bef3cdaa504ad99f56eadf0/mypy-1.12.1-cp312-cp312-win_amd64.whl", hash = "sha256:19bf51f87a295e7ab2894f1d8167622b063492d754e69c3c2fed6563268cb42a", size = 9731919 },
849
+ { url = "https://files.pythonhosted.org/packages/bb/b0/092be5094840a401940c95224f63bb2a8f09bce9251ac1df180ec523830c/mypy-1.12.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d34167d43613ffb1d6c6cdc0cc043bb106cac0aa5d6a4171f77ab92a3c758bcc", size = 11068611 },
850
+ { url = "https://files.pythonhosted.org/packages/9a/86/f20f53b8f062876c39602243d7a59b5cabd6b24315d8de511d607fa4de6a/mypy-1.12.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:427878aa54f2e2c5d8db31fa9010c599ed9f994b3b49e64ae9cd9990c40bd635", size = 10068036 },
851
+ { url = "https://files.pythonhosted.org/packages/84/c7/1dbd6575785522da1d4c1ac2c419505fcf23bee74811880cac447a4a77ab/mypy-1.12.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5fcde63ea2c9f69d6be859a1e6dd35955e87fa81de95bc240143cf00de1f7f81", size = 12585671 },
852
+ { url = "https://files.pythonhosted.org/packages/46/8a/f6ae18b446eb2bccce54c4bd94065bcfe417d6c67021dcc032bf1e720aff/mypy-1.12.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:d54d840f6c052929f4a3d2aab2066af0f45a020b085fe0e40d4583db52aab4e4", size = 13036083 },
853
+ { url = "https://files.pythonhosted.org/packages/59/e6/fc65fde3dc7156fce8d49ba21c7b1f5d866ad50467bf196ca94a7f6d2c9e/mypy-1.12.1-cp313-cp313-win_amd64.whl", hash = "sha256:20db6eb1ca3d1de8ece00033b12f793f1ea9da767334b7e8c626a4872090cf02", size = 9735467 },
854
+ { url = "https://files.pythonhosted.org/packages/84/6b/1db9de4e0764778251fb2d64cb7455cf6db75dc99c9f72c8b7e74b6a8a17/mypy-1.12.1-py3-none-any.whl", hash = "sha256:ce561a09e3bb9863ab77edf29ae3a50e65685ad74bba1431278185b7e5d5486e", size = 2646060 },
855
+ ]
856
+
857
+ [[package]]
858
+ name = "mypy-extensions"
859
+ version = "1.0.0"
860
+ source = { registry = "https://pypi.org/simple" }
861
+ sdist = { url = "https://files.pythonhosted.org/packages/98/a4/1ab47638b92648243faf97a5aeb6ea83059cc3624972ab6b8d2316078d3f/mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782", size = 4433 }
862
+ wheels = [
863
+ { url = "https://files.pythonhosted.org/packages/2a/e2/5d3f6ada4297caebe1a2add3b126fe800c96f56dbe5d1988a2cbe0b267aa/mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d", size = 4695 },
864
+ ]
865
+
829
866
  [[package]]
830
867
  name = "nbclient"
831
868
  version = "0.10.0"
@@ -884,7 +921,7 @@ wheels = [
884
921
 
885
922
  [[package]]
886
923
  name = "nc-gcode-interpreter"
887
- version = "0.1.6"
924
+ version = "0.0.0.dev0"
888
925
  source = { editable = "." }
889
926
  dependencies = [
890
927
  { name = "maturin" },
@@ -896,6 +933,7 @@ dev = [
896
933
  { name = "jupyter" },
897
934
  ]
898
935
  test = [
936
+ { name = "mypy" },
899
937
  { name = "pytest" },
900
938
  ]
901
939
 
@@ -903,6 +941,7 @@ test = [
903
941
  requires-dist = [
904
942
  { name = "jupyter", marker = "extra == 'dev'", specifier = ">=1.1.1" },
905
943
  { name = "maturin", specifier = ">=1.7.4" },
944
+ { name = "mypy", marker = "extra == 'test'" },
906
945
  { name = "polars", specifier = ">=1.9.0" },
907
946
  { name = "pytest", marker = "extra == 'test'", specifier = ">=8.3.3" },
908
947
  ]
@@ -1012,15 +1051,15 @@ wheels = [
1012
1051
 
1013
1052
  [[package]]
1014
1053
  name = "polars"
1015
- version = "1.9.0"
1054
+ version = "1.10.0"
1016
1055
  source = { registry = "https://pypi.org/simple" }
1017
- sdist = { url = "https://files.pythonhosted.org/packages/53/09/c2fb0b231d551e0c8e68097d08577712bdff1ba91346cda8228e769602f5/polars-1.9.0.tar.gz", hash = "sha256:8e1206ef876f61c1d50a81e102611ea92ee34631cb135b46ad314bfefd3cb122", size = 4027431 }
1056
+ sdist = { url = "https://files.pythonhosted.org/packages/eb/dc/0bf6d62da6cf6fa5712e573334766484109c411a5e07bf779bdd3f2f07d2/polars-1.10.0.tar.gz", hash = "sha256:855b0fffbe4fbb1c89b4f9b4b6cc724b337f946a9ba50829eb22b8a36483b3c3", size = 4059116 }
1018
1057
  wheels = [
1019
- { url = "https://files.pythonhosted.org/packages/64/cc/3d0292048d8f9045a03510aeecda2e6ed9df451ae8853274946ff841f98b/polars-1.9.0-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:a471d2ce96f6fa5dd0ef16bcdb227f3dbe3af8acb776ca52f9e64ef40c7489a0", size = 31870933 },
1020
- { url = "https://files.pythonhosted.org/packages/ee/be/15af97f4d8b775630da16a8bf0141507d9c0ae5f2637b9a27ed337b3b1ba/polars-1.9.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:94b12d731cd200d2c50b13fc070d6353f708e632bca6529c5a72aa6a69e5285d", size = 28171055 },
1021
- { url = "https://files.pythonhosted.org/packages/bb/57/b286b317f061d8f17bab4726a27e7b185fbf3d3db65cf689074256ea34a9/polars-1.9.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f85f132732aa63c6f3b502b0fdfc3ba9f0b78cc6330059b5a2d6f9fd78508acb", size = 33063367 },
1022
- { url = "https://files.pythonhosted.org/packages/e5/25/bf5d43dcb538bf6573b15f3d5995a52be61b8fbce0cd737e72c4d25eef88/polars-1.9.0-cp38-abi3-manylinux_2_24_aarch64.whl", hash = "sha256:f753c8941a3b3249d59262d68a856714a96a7d4e16977aefbb196be0c192e151", size = 29764698 },
1023
- { url = "https://files.pythonhosted.org/packages/a6/cf/f9170a3ac20e0efb9d3c1cdacc677e35b711ffd5ec48a6d5f3da7b7d8663/polars-1.9.0-cp38-abi3-win_amd64.whl", hash = "sha256:95de07066cd797dd940fa2783708a7bef93c827a57be0f4dfad3575a6144212b", size = 32819142 },
1058
+ { url = "https://files.pythonhosted.org/packages/c6/4c/f4f626732ae966795c34b30345d7fbee4097fc9d41fb09bb3ba2beaffbdf/polars-1.10.0-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:6334aee8897a56291ab3f31b436eff3a284abef39bd333258f6071c77e45b72f", size = 32024599 },
1059
+ { url = "https://files.pythonhosted.org/packages/29/bc/5edaae9e0c6c826225dc428f1b714a01e127a8373e493aa7d85d2b182521/polars-1.10.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:1ce12aed5440a531e449d7deb9e9b80851e919502853d6d0a884124ea0a0377e", size = 28220138 },
1060
+ { url = "https://files.pythonhosted.org/packages/28/da/79b54d20c59303864add504a01f927d23415579bdf0a054942bd00da69e3/polars-1.10.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:540051fe456f779b1510c173c3a614135193cf1b94812e11663f65c80dc4626d", size = 33205544 },
1061
+ { url = "https://files.pythonhosted.org/packages/fb/bf/03358a080fbd51262f54381c011183a281947e0d4e3c1049baad8204dedc/polars-1.10.0-cp39-abi3-manylinux_2_24_aarch64.whl", hash = "sha256:d00a5978137c8471c47ea162acfaf6769a21b72ab5515891f5f7aa038c3c5574", size = 29810880 },
1062
+ { url = "https://files.pythonhosted.org/packages/ed/e2/134a4c381f63e8498314f15d5f8db32bdd9ee40806aba34c3e270915a629/polars-1.10.0-cp39-abi3-win_amd64.whl", hash = "sha256:182e03bd3486490c980a59cbae0be53c0688f6f6f6a2bccc28e07cc1b7f8a4b5", size = 32868791 },
1024
1063
  ]
1025
1064
 
1026
1065
  [[package]]
@@ -1046,19 +1085,19 @@ wheels = [
1046
1085
 
1047
1086
  [[package]]
1048
1087
  name = "psutil"
1049
- version = "6.0.0"
1088
+ version = "6.1.0"
1050
1089
  source = { registry = "https://pypi.org/simple" }
1051
- sdist = { url = "https://files.pythonhosted.org/packages/18/c7/8c6872f7372eb6a6b2e4708b88419fb46b857f7a2e1892966b851cc79fc9/psutil-6.0.0.tar.gz", hash = "sha256:8faae4f310b6d969fa26ca0545338b21f73c6b15db7c4a8d934a5482faa818f2", size = 508067 }
1090
+ sdist = { url = "https://files.pythonhosted.org/packages/26/10/2a30b13c61e7cf937f4adf90710776b7918ed0a9c434e2c38224732af310/psutil-6.1.0.tar.gz", hash = "sha256:353815f59a7f64cdaca1c0307ee13558a0512f6db064e92fe833784f08539c7a", size = 508565 }
1052
1091
  wheels = [
1053
- { url = "https://files.pythonhosted.org/packages/c5/66/78c9c3020f573c58101dc43a44f6855d01bbbd747e24da2f0c4491200ea3/psutil-6.0.0-cp27-none-win32.whl", hash = "sha256:02b69001f44cc73c1c5279d02b30a817e339ceb258ad75997325e0e6169d8b35", size = 249766 },
1054
- { url = "https://files.pythonhosted.org/packages/e1/3f/2403aa9558bea4d3854b0e5e567bc3dd8e9fbc1fc4453c0aa9aafeb75467/psutil-6.0.0-cp27-none-win_amd64.whl", hash = "sha256:21f1fb635deccd510f69f485b87433460a603919b45e2a324ad65b0cc74f8fb1", size = 253024 },
1055
- { url = "https://files.pythonhosted.org/packages/0b/37/f8da2fbd29690b3557cca414c1949f92162981920699cd62095a984983bf/psutil-6.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:c588a7e9b1173b6e866756dde596fd4cad94f9399daf99ad8c3258b3cb2b47a0", size = 250961 },
1056
- { url = "https://files.pythonhosted.org/packages/35/56/72f86175e81c656a01c4401cd3b1c923f891b31fbcebe98985894176d7c9/psutil-6.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ed2440ada7ef7d0d608f20ad89a04ec47d2d3ab7190896cd62ca5fc4fe08bf0", size = 287478 },
1057
- { url = "https://files.pythonhosted.org/packages/19/74/f59e7e0d392bc1070e9a70e2f9190d652487ac115bb16e2eff6b22ad1d24/psutil-6.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fd9a97c8e94059b0ef54a7d4baf13b405011176c3b6ff257c247cae0d560ecd", size = 290455 },
1058
- { url = "https://files.pythonhosted.org/packages/cd/5f/60038e277ff0a9cc8f0c9ea3d0c5eb6ee1d2470ea3f9389d776432888e47/psutil-6.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2e8d0054fc88153ca0544f5c4d554d42e33df2e009c4ff42284ac9ebdef4132", size = 292046 },
1059
- { url = "https://files.pythonhosted.org/packages/8b/20/2ff69ad9c35c3df1858ac4e094f20bd2374d33c8643cf41da8fd7cdcb78b/psutil-6.0.0-cp37-abi3-win32.whl", hash = "sha256:a495580d6bae27291324fe60cea0b5a7c23fa36a7cd35035a16d93bdcf076b9d", size = 253560 },
1060
- { url = "https://files.pythonhosted.org/packages/73/44/561092313ae925f3acfaace6f9ddc4f6a9c748704317bad9c8c8f8a36a79/psutil-6.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:33ea5e1c975250a720b3a6609c490db40dae5d83a4eb315170c4fe0d8b1f34b3", size = 257399 },
1061
- { url = "https://files.pythonhosted.org/packages/7c/06/63872a64c312a24fb9b4af123ee7007a306617da63ff13bcc1432386ead7/psutil-6.0.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:ffe7fc9b6b36beadc8c322f84e1caff51e8703b88eee1da46d1e3a6ae11b4fd0", size = 251988 },
1092
+ { url = "https://files.pythonhosted.org/packages/da/2b/f4dea5d993d9cd22ad958eea828a41d5d225556123d372f02547c29c4f97/psutil-6.1.0-cp27-none-win32.whl", hash = "sha256:9118f27452b70bb1d9ab3198c1f626c2499384935aaf55388211ad982611407e", size = 246648 },
1093
+ { url = "https://files.pythonhosted.org/packages/9f/14/4aa97a7f2e0ac33a050d990ab31686d651ae4ef8c86661fef067f00437b9/psutil-6.1.0-cp27-none-win_amd64.whl", hash = "sha256:a8506f6119cff7015678e2bce904a4da21025cc70ad283a53b099e7620061d85", size = 249905 },
1094
+ { url = "https://files.pythonhosted.org/packages/01/9e/8be43078a171381953cfee33c07c0d628594b5dbfc5157847b85022c2c1b/psutil-6.1.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:6e2dcd475ce8b80522e51d923d10c7871e45f20918e027ab682f94f1c6351688", size = 247762 },
1095
+ { url = "https://files.pythonhosted.org/packages/1d/cb/313e80644ea407f04f6602a9e23096540d9dc1878755f3952ea8d3d104be/psutil-6.1.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:0895b8414afafc526712c498bd9de2b063deaac4021a3b3c34566283464aff8e", size = 248777 },
1096
+ { url = "https://files.pythonhosted.org/packages/65/8e/bcbe2025c587b5d703369b6a75b65d41d1367553da6e3f788aff91eaf5bd/psutil-6.1.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9dcbfce5d89f1d1f2546a2090f4fcf87c7f669d1d90aacb7d7582addece9fb38", size = 284259 },
1097
+ { url = "https://files.pythonhosted.org/packages/58/4d/8245e6f76a93c98aab285a43ea71ff1b171bcd90c9d238bf81f7021fb233/psutil-6.1.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:498c6979f9c6637ebc3a73b3f87f9eb1ec24e1ce53a7c5173b8508981614a90b", size = 287255 },
1098
+ { url = "https://files.pythonhosted.org/packages/27/c2/d034856ac47e3b3cdfa9720d0e113902e615f4190d5d1bdb8df4b2015fb2/psutil-6.1.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d905186d647b16755a800e7263d43df08b790d709d575105d419f8b6ef65423a", size = 288804 },
1099
+ { url = "https://files.pythonhosted.org/packages/ea/55/5389ed243c878725feffc0d6a3bc5ef6764312b6fc7c081faaa2cfa7ef37/psutil-6.1.0-cp37-abi3-win32.whl", hash = "sha256:1ad45a1f5d0b608253b11508f80940985d1d0c8f6111b5cb637533a0e6ddc13e", size = 250386 },
1100
+ { url = "https://files.pythonhosted.org/packages/11/91/87fa6f060e649b1e1a7b19a4f5869709fbf750b7c8c262ee776ec32f3028/psutil-6.1.0-cp37-abi3-win_amd64.whl", hash = "sha256:a8fb3752b491d246034fa4d279ff076501588ce8cbcdbb62c32fd7a377d996be", size = 254228 },
1062
1101
  ]
1063
1102
 
1064
1103
  [[package]]
@@ -1151,12 +1190,13 @@ wheels = [
1151
1190
 
1152
1191
  [[package]]
1153
1192
  name = "pywinpty"
1154
- version = "2.0.13"
1193
+ version = "2.0.14"
1155
1194
  source = { registry = "https://pypi.org/simple" }
1156
- sdist = { url = "https://files.pythonhosted.org/packages/33/d9/93956af389ab7d4ef2f558b1cc6c5cb48885d254ac882f212964c30a1e4f/pywinpty-2.0.13.tar.gz", hash = "sha256:c34e32351a3313ddd0d7da23d27f835c860d32fe4ac814d372a3ea9594f41dde", size = 28240 }
1195
+ sdist = { url = "https://files.pythonhosted.org/packages/f1/82/90f8750423cba4b9b6c842df227609fb60704482d7abf6dd47e2babc055a/pywinpty-2.0.14.tar.gz", hash = "sha256:18bd9529e4a5daf2d9719aa17788ba6013e594ae94c5a0c27e83df3278b0660e", size = 27769 }
1157
1196
  wheels = [
1158
- { url = "https://files.pythonhosted.org/packages/02/f0/2004a0c907eb74155b6fafa5801931d9e15d55905db6811f146cc2d145cd/pywinpty-2.0.13-cp311-none-win_amd64.whl", hash = "sha256:b96fb14698db1284db84ca38c79f15b4cfdc3172065b5137383910567591fa99", size = 1399007 },
1159
- { url = "https://files.pythonhosted.org/packages/49/37/c0dcb1dca094af3605dd22c0528839a65bc4e1e78bb91eb12841d18fa3f1/pywinpty-2.0.13-cp312-none-win_amd64.whl", hash = "sha256:2fd876b82ca750bb1333236ce98488c1be96b08f4f7647cfdf4129dfad83c2d4", size = 1399803 },
1197
+ { url = "https://files.pythonhosted.org/packages/be/e2/af1a99c0432e4e58c9ac8e334ee191790ec9793d33559189b9d2069bdc1d/pywinpty-2.0.14-cp311-none-win_amd64.whl", hash = "sha256:cf2a43ac7065b3e0dc8510f8c1f13a75fb8fde805efa3b8cff7599a1ef497bc7", size = 1397223 },
1198
+ { url = "https://files.pythonhosted.org/packages/ad/79/759ae767a3b78d340446efd54dd1fe4f7dafa4fc7be96ed757e44bcdba54/pywinpty-2.0.14-cp312-none-win_amd64.whl", hash = "sha256:55dad362ef3e9408ade68fd173e4f9032b3ce08f68cfe7eacb2c263ea1179737", size = 1397207 },
1199
+ { url = "https://files.pythonhosted.org/packages/7d/34/b77b3c209bf2eaa6455390c8d5449241637f5957f41636a2204065d52bfa/pywinpty-2.0.14-cp313-none-win_amd64.whl", hash = "sha256:074fb988a56ec79ca90ed03a896d40707131897cefb8f76f926e3834227f2819", size = 1396698 },
1160
1200
  ]
1161
1201
 
1162
1202
  [[package]]
@@ -1,14 +0,0 @@
1
- DEF INT n_layers = 2, layer=1
2
- DEF REAL size = 100 ;size of the square
3
- DEF REAL layer_height = 4 ;size of the square
4
- TRANS Z = 0.5 ; move up all z coordinates by 0.5
5
- G1 F=1000; Set feed rate in millimeters per minute
6
- G1 X0 Y500 Z0 ; move to the starting point
7
- WHILE (layer <= n_layers)
8
- X=IC(size)
9
- Y=IC(size)
10
- X=IC(-size)
11
- Y=IC(-size) Z=IC(layer_height)
12
- layer = layer + 1
13
- ENDWHILE
14
- M31; end of program
@@ -1,33 +0,0 @@
1
- from .nc_gcode_interpreter import nc_to_dataframe as _nc_to_dataframe
2
- from .nc_gcode_interpreter import __doc__ # noqa: F401
3
-
4
- __all__ = ["nc_to_dataframe"]
5
-
6
-
7
- # nc_gcode_interpreter.pyi
8
- import polars as pl
9
- from typing import Protocol
10
-
11
-
12
- class TextFileLike(Protocol):
13
- def read(self) -> str: ...
14
-
15
-
16
- def nc_to_dataframe(
17
- input: TextFileLike | str,
18
- initial_state: TextFileLike | str | None = None,
19
- axis_identifiers: list[str] | None = None,
20
- extra_axes: list[str] | None = None,
21
- iteration_limit: int = 10000,
22
- ) -> tuple[pl.DataFrame, dict]:
23
- if input is None:
24
- raise ValueError("input cannot be None")
25
- if not isinstance(input, str):
26
- input = input.read()
27
- if initial_state is not None and not isinstance(initial_state, str):
28
- initial_state = initial_state.read()
29
-
30
- df, state = _nc_to_dataframe(
31
- input, initial_state, axis_identifiers, extra_axes, iteration_limit
32
- )
33
- return df, state