pixi-ros 0.3.0__tar.gz → 0.4.0__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 (51) hide show
  1. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/.github/workflows/ci.yml +1 -1
  2. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/PKG-INFO +83 -26
  3. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/README.md +81 -25
  4. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/pixi.lock +134 -1
  5. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/pixi.toml +2 -1
  6. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/pyproject.toml +2 -1
  7. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/src/pixi_ros/cli.py +42 -29
  8. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/src/pixi_ros/data/conda-forge.yaml +4 -0
  9. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/src/pixi_ros/init.py +324 -198
  10. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/src/pixi_ros/mappings.py +39 -30
  11. pixi_ros-0.4.0/src/pixi_ros/validator.py +245 -0
  12. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/tests/examples/ws1/pixi.toml +10 -11
  13. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/tests/examples/ws1/src/package-a/package.xml +2 -0
  14. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/tests/test_init.py +14 -2
  15. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/tests/test_mappings.py +54 -0
  16. pixi_ros-0.4.0/tests/test_validator.py +324 -0
  17. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/.gitattributes +0 -0
  18. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/.github/workflows/publish-pypi.yml +0 -0
  19. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/.gitignore +0 -0
  20. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/LICENSE +0 -0
  21. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/src/pixi_ros/__init__.py +0 -0
  22. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/src/pixi_ros/config.py +0 -0
  23. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/src/pixi_ros/data/README.md +0 -0
  24. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/src/pixi_ros/data/README_PIXI.md.template +0 -0
  25. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/src/pixi_ros/package_xml.py +0 -0
  26. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/src/pixi_ros/utils.py +0 -0
  27. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/src/pixi_ros/workspace.py +0 -0
  28. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/tests/examples/ws1/README_PIXI.md +0 -0
  29. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/tests/examples/ws1/pixi.lock +0 -0
  30. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/tests/examples/ws1/src/package-a/CMakeLists.txt +0 -0
  31. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/tests/examples/ws1/src/package-a/LICENSE +0 -0
  32. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/tests/examples/ws1/src/package-b/package-b/__init__.py +0 -0
  33. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/tests/examples/ws1/src/package-b/package.xml +0 -0
  34. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/tests/examples/ws1/src/package-b/setup.cfg +0 -0
  35. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/tests/examples/ws1/src/package-b/setup.py +0 -0
  36. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/tests/examples/ws1/src/package-b/test/test_copyright.py +0 -0
  37. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/tests/examples/ws1/src/package-b/test/test_flake8.py +0 -0
  38. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/tests/examples/ws1/src/package-b/test/test_pep257.py +0 -0
  39. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/tests/fixtures/mock_workspace/README.md +0 -0
  40. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/tests/fixtures/mock_workspace/src/legacy_pkg/package.xml +0 -0
  41. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/tests/fixtures/mock_workspace/src/my_cpp_pkg/CMakeLists.txt +0 -0
  42. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/tests/fixtures/mock_workspace/src/my_cpp_pkg/package.xml +0 -0
  43. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/tests/fixtures/mock_workspace/src/my_mixed_pkg/package.xml +0 -0
  44. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/tests/fixtures/mock_workspace/src/my_python_pkg/package.xml +0 -0
  45. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/tests/fixtures/mock_workspace/src/my_python_pkg/setup.py +0 -0
  46. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/tests/test_cli.py +0 -0
  47. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/tests/test_config.py +0 -0
  48. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/tests/test_gateway_availability.py +0 -0
  49. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/tests/test_package_xml.py +0 -0
  50. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/tests/test_utils.py +0 -0
  51. {pixi_ros-0.3.0 → pixi_ros-0.4.0}/tests/test_workspace.py +0 -0
@@ -15,7 +15,7 @@ jobs:
15
15
  - uses: prefix-dev/setup-pixi@82d477f15f3a381dbcc8adc1206ce643fe110fb7 # v0.9.3
16
16
 
17
17
  - name: Format
18
- run: pixi run format --check
18
+ run: pixi run fmt --check
19
19
  - name: Lint
20
20
  run: pixi run lint
21
21
  - name: Test
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pixi-ros
3
- Version: 0.3.0
3
+ Version: 0.4.0
4
4
  Summary: Pixi extension for ROS package management
5
5
  Project-URL: Homepage, https://github.com/ruben-arts/pixi-ros
6
6
  Project-URL: Repository, https://github.com/ruben-arts/pixi-ros
@@ -13,6 +13,7 @@ Requires-Dist: pathspec>=0.11.0
13
13
  Requires-Dist: py-rattler>=0.6.0
14
14
  Requires-Dist: pyyaml>=6.0
15
15
  Requires-Dist: rich>=13.0.0
16
+ Requires-Dist: rosdistro>=0.9.0
16
17
  Requires-Dist: tomlkit>=0.12.0
17
18
  Requires-Dist: typer>=0.12.0
18
19
  Description-Content-Type: text/markdown
@@ -63,10 +64,16 @@ pixi-ros init --distro humble
63
64
  This will:
64
65
  1. Discover all ROS packages in your workspace (by finding `package.xml` files)
65
66
  2. Read dependencies from each `package.xml`
66
- 3. Map ROS package names to conda packages
67
+ 3. **Validate and resolve** each dependency using the priority system:
68
+ - Skip workspace packages (built locally)
69
+ - Use custom mappings from YAML files
70
+ - Query ROS distro index for ROS packages
71
+ - Auto-detect packages on conda-forge
72
+ - Flag packages that can't be found
67
73
  4. Generate/update `pixi.toml` with proper channels and dependencies
68
- 5. Check package availability and warn about missing packages
74
+ 5. Check package availability in conda channels for each platform
69
75
  6. Create helpful build/test/clean tasks
76
+ 7. Display detailed validation results with source information
70
77
 
71
78
  ### Install and Build
72
79
 
@@ -88,26 +95,66 @@ pixi shell
88
95
 
89
96
  ## How It Works
90
97
 
91
- ### Dependency Mapping
98
+ ### Dependency Mapping & Validation
92
99
 
93
- `pixi-ros` reads all dependency types from `package.xml` files.
94
- It then does a best effort mapping of ROS package names to conda packages.
100
+ `pixi-ros` reads all dependency types from `package.xml` files and intelligently resolves them to conda packages using a **priority-based validation system**.
95
101
 
96
- - **ROS packages**: `ros-{distro}-{package}` from robostack channels (e.g., `ros-humble-rclcpp`)
97
- - **System packages**: Mapped to conda-forge equivalents (e.g., `cmake`, `eigen`)
98
- - **Platform-specific packages**: Different mappings per platform (e.g., OpenGL → `libgl-devel` on Linux, X11 packages on macOS)
102
+ #### Validation Priority Order
103
+
104
+ When resolving a ROS package dependency, `pixi-ros` checks sources in this order:
105
+
106
+ 1. **Workspace packages** (local source) → Skipped, won't be added to dependencies
107
+ 2. **Mapping files** → Use custom conda package mappings from the embedded mapping.
108
+ 3. **ROS distribution** → Query the official ROS distro index for `ros-{distro}-{package}` packages
109
+ 4. **conda-forge** (auto-detection) → Search conda-forge for packages without ros-distro prefix
110
+ 5. **NOT FOUND** → Mark as unavailable and comment out in `pixi.toml`
111
+
112
+ #### Package Sources
113
+
114
+ The dependency tables show where each package comes from:
115
+
116
+ - **ROS {distro}**: Official ROS distribution packages from robostack (e.g., `ros-humble-rclcpp`)
117
+ - **Mapping**: Custom mappings from YAML files (e.g., `cmake` → `cmake`, `udev` → `libusb + libudev`)
118
+ - **conda-forge**: Auto-detected packages available directly on conda-forge
119
+ - **Workspace**: Local packages in your workspace (skipped from dependencies)
120
+ - **NOT FOUND**: Packages that couldn't be resolved (commented out in `pixi.toml`)
99
121
 
100
122
  The mapping rules are defined in YAML files (see `src/pixi_ros/data/conda-forge.yaml`) and can be customized by placing your own mapping files in `pixi-ros/*.yaml` or `~/.pixi-ros/*.yaml`.
101
123
 
102
- After the mapping, it validates package availability in the configured channels for each target platform. This starts a connection with `https://prefix.dev` to check if packages exist.
124
+ After dependency resolution, `pixi-ros` validates package availability in the configured channels for each target platform by connecting to `https://prefix.dev`.
125
+
126
+ ### Example Output
127
+
128
+ When you run `pixi-ros init --distro humble`, you'll see validation results:
103
129
 
104
- ### Example
130
+ ```
131
+ Found 2 package(s): my_package, other_package
132
+ Initializing ROS humble distribution validator...
133
+
134
+ ╭─────────────────── Package: my_package ───────────────────╮
135
+ │ ROS Dependency │ Type │ Conda Packages │ Source │
136
+ ├────────────────┼─────────┼─────────────────────────┼──────────────┤
137
+ │ rclcpp │ Build │ ros-humble-rclcpp │ ROS humble │
138
+ │ std_msgs │ Runtime │ ros-humble-std-msgs │ ROS humble │
139
+ │ cmake │ Build │ cmake │ Mapping │
140
+ │ eigen │ Build │ eigen │ conda-forge │
141
+ ╰────────────────┴─────────┴─────────────────────────┴──────────────╯
142
+
143
+ Validation Summary:
144
+ ✓ 2 workspace packages (skipped)
145
+ ✓ 1 packages from mappings
146
+ ✓ 5 packages from ROS humble distro
147
+ ✓ 1 packages from conda-forge (auto-detected)
148
+
149
+ Total external dependencies: 7
150
+ ```
105
151
 
106
152
  Given a `package.xml` with:
107
153
 
108
154
  ```xml
109
155
  <depend>rclcpp</depend>
110
156
  <build_depend>ament_cmake</build_depend>
157
+ <build_depend>cmake</build_depend>
111
158
  <exec_depend>std_msgs</exec_depend>
112
159
  ```
113
160
 
@@ -115,9 +162,21 @@ Given a `package.xml` with:
115
162
 
116
163
  ```toml
117
164
  [dependencies]
118
- ros-humble-ament-cmake = "*"
119
- ros-humble-rclcpp = "*"
120
- ros-humble-std-msgs = "*"
165
+ # Base ROS dependencies
166
+ ros-humble-ros-base = "*"
167
+ pkg-config = "*"
168
+ compilers = "*"
169
+ make = "*"
170
+ ninja = "*"
171
+
172
+ # Build tools
173
+ colcon-common-extensions = "*"
174
+
175
+ # Workspace dependencies
176
+ cmake = "*" # From mapping
177
+ ros-humble-ament-cmake = "*" # From ROS humble
178
+ ros-humble-rclcpp = "*" # From ROS humble
179
+ ros-humble-std-msgs = "*" # From ROS humble
121
180
  ```
122
181
 
123
182
  ### Version Constraints
@@ -155,13 +214,6 @@ eigen = ">=3.3.0,<4.0.0"
155
214
  boost = "==1.2.3"
156
215
  ```
157
216
 
158
- ## Supported ROS Distributions
159
-
160
- - ROS 2 Humble: https://prefix.dev/robostack-humble
161
- - ROS 2 Iron: https://prefix.dev/robostack-iron
162
- - ROS 2 Jazzy: https://prefix.dev/robostack-jazzy
163
- - ROS 2 Rolling: https://prefix.dev/robostack-rolling
164
-
165
217
  ## Command Reference
166
218
 
167
219
  ### `pixi-ros init`
@@ -183,6 +235,7 @@ pixi-ros init
183
235
  **What it does:**
184
236
  - Scans workspace for `package.xml` files
185
237
  - Reads all dependency types (build, exec, test) and version constraints
238
+ - **Validates dependencies** using the priority-based system (workspace → mapping → ROS distro → conda-forge)
186
239
  - Maps ROS dependencies to conda packages for each platform
187
240
  - Applies version constraints from package.xml to pixi.toml dependencies
188
241
  - Configures robostack channels
@@ -190,6 +243,7 @@ pixi-ros init
190
243
  - Creates build tasks using colcon
191
244
  - Generates helpful `README_PIXI.md`
192
245
  - Sets up platform-specific dependencies in `pixi.toml`
246
+ - **Displays validation results** showing where each dependency was found
193
247
 
194
248
  **Running multiple times:**
195
249
  The command is idempotent - you can run it multiple times to update dependencies as your workspace changes.
@@ -297,12 +351,15 @@ workspace/
297
351
 
298
352
  ### Package Not Found
299
353
 
300
- If pixi-ros marks packages as "NOT FOUND":
354
+ If pixi-ros marks packages as "NOT FOUND" (shown in red in the validation output):
355
+
356
+ 1. **Check the ROS distro**: Verify the package exists in robostack: https://prefix.dev/channels/robostack-{distro}
357
+ 2. **Check for typos**: Review your `package.xml` for spelling errors
358
+ 3. **Check conda-forge**: Some packages may be available directly on conda-forge without the `ros-distro-` prefix
359
+ 4. **Create a mapping**: Add a custom mapping in `pixi-ros/*.yaml` if the package has a different conda name
360
+ 5. **Add to workspace**: Consider including the package source in your workspace instead of depending on it
301
361
 
302
- 1. Check if the package exists in robostack: https://prefix.dev/channels/robostack-{distro}
303
- 2. Check for typos in `package.xml`
304
- 3. Some packages may have different names - check mapping files
305
- 4. Consider adding the package to your workspace instead of depending on it
362
+ The validation table shows exactly where each dependency was checked, making it easier to diagnose issues.
306
363
 
307
364
  ### Different Package Names
308
365
 
@@ -44,10 +44,16 @@ pixi-ros init --distro humble
44
44
  This will:
45
45
  1. Discover all ROS packages in your workspace (by finding `package.xml` files)
46
46
  2. Read dependencies from each `package.xml`
47
- 3. Map ROS package names to conda packages
47
+ 3. **Validate and resolve** each dependency using the priority system:
48
+ - Skip workspace packages (built locally)
49
+ - Use custom mappings from YAML files
50
+ - Query ROS distro index for ROS packages
51
+ - Auto-detect packages on conda-forge
52
+ - Flag packages that can't be found
48
53
  4. Generate/update `pixi.toml` with proper channels and dependencies
49
- 5. Check package availability and warn about missing packages
54
+ 5. Check package availability in conda channels for each platform
50
55
  6. Create helpful build/test/clean tasks
56
+ 7. Display detailed validation results with source information
51
57
 
52
58
  ### Install and Build
53
59
 
@@ -69,26 +75,66 @@ pixi shell
69
75
 
70
76
  ## How It Works
71
77
 
72
- ### Dependency Mapping
78
+ ### Dependency Mapping & Validation
73
79
 
74
- `pixi-ros` reads all dependency types from `package.xml` files.
75
- It then does a best effort mapping of ROS package names to conda packages.
80
+ `pixi-ros` reads all dependency types from `package.xml` files and intelligently resolves them to conda packages using a **priority-based validation system**.
76
81
 
77
- - **ROS packages**: `ros-{distro}-{package}` from robostack channels (e.g., `ros-humble-rclcpp`)
78
- - **System packages**: Mapped to conda-forge equivalents (e.g., `cmake`, `eigen`)
79
- - **Platform-specific packages**: Different mappings per platform (e.g., OpenGL → `libgl-devel` on Linux, X11 packages on macOS)
82
+ #### Validation Priority Order
83
+
84
+ When resolving a ROS package dependency, `pixi-ros` checks sources in this order:
85
+
86
+ 1. **Workspace packages** (local source) → Skipped, won't be added to dependencies
87
+ 2. **Mapping files** → Use custom conda package mappings from the embedded mapping.
88
+ 3. **ROS distribution** → Query the official ROS distro index for `ros-{distro}-{package}` packages
89
+ 4. **conda-forge** (auto-detection) → Search conda-forge for packages without ros-distro prefix
90
+ 5. **NOT FOUND** → Mark as unavailable and comment out in `pixi.toml`
91
+
92
+ #### Package Sources
93
+
94
+ The dependency tables show where each package comes from:
95
+
96
+ - **ROS {distro}**: Official ROS distribution packages from robostack (e.g., `ros-humble-rclcpp`)
97
+ - **Mapping**: Custom mappings from YAML files (e.g., `cmake` → `cmake`, `udev` → `libusb + libudev`)
98
+ - **conda-forge**: Auto-detected packages available directly on conda-forge
99
+ - **Workspace**: Local packages in your workspace (skipped from dependencies)
100
+ - **NOT FOUND**: Packages that couldn't be resolved (commented out in `pixi.toml`)
80
101
 
81
102
  The mapping rules are defined in YAML files (see `src/pixi_ros/data/conda-forge.yaml`) and can be customized by placing your own mapping files in `pixi-ros/*.yaml` or `~/.pixi-ros/*.yaml`.
82
103
 
83
- After the mapping, it validates package availability in the configured channels for each target platform. This starts a connection with `https://prefix.dev` to check if packages exist.
104
+ After dependency resolution, `pixi-ros` validates package availability in the configured channels for each target platform by connecting to `https://prefix.dev`.
105
+
106
+ ### Example Output
107
+
108
+ When you run `pixi-ros init --distro humble`, you'll see validation results:
84
109
 
85
- ### Example
110
+ ```
111
+ Found 2 package(s): my_package, other_package
112
+ Initializing ROS humble distribution validator...
113
+
114
+ ╭─────────────────── Package: my_package ───────────────────╮
115
+ │ ROS Dependency │ Type │ Conda Packages │ Source │
116
+ ├────────────────┼─────────┼─────────────────────────┼──────────────┤
117
+ │ rclcpp │ Build │ ros-humble-rclcpp │ ROS humble │
118
+ │ std_msgs │ Runtime │ ros-humble-std-msgs │ ROS humble │
119
+ │ cmake │ Build │ cmake │ Mapping │
120
+ │ eigen │ Build │ eigen │ conda-forge │
121
+ ╰────────────────┴─────────┴─────────────────────────┴──────────────╯
122
+
123
+ Validation Summary:
124
+ ✓ 2 workspace packages (skipped)
125
+ ✓ 1 packages from mappings
126
+ ✓ 5 packages from ROS humble distro
127
+ ✓ 1 packages from conda-forge (auto-detected)
128
+
129
+ Total external dependencies: 7
130
+ ```
86
131
 
87
132
  Given a `package.xml` with:
88
133
 
89
134
  ```xml
90
135
  <depend>rclcpp</depend>
91
136
  <build_depend>ament_cmake</build_depend>
137
+ <build_depend>cmake</build_depend>
92
138
  <exec_depend>std_msgs</exec_depend>
93
139
  ```
94
140
 
@@ -96,9 +142,21 @@ Given a `package.xml` with:
96
142
 
97
143
  ```toml
98
144
  [dependencies]
99
- ros-humble-ament-cmake = "*"
100
- ros-humble-rclcpp = "*"
101
- ros-humble-std-msgs = "*"
145
+ # Base ROS dependencies
146
+ ros-humble-ros-base = "*"
147
+ pkg-config = "*"
148
+ compilers = "*"
149
+ make = "*"
150
+ ninja = "*"
151
+
152
+ # Build tools
153
+ colcon-common-extensions = "*"
154
+
155
+ # Workspace dependencies
156
+ cmake = "*" # From mapping
157
+ ros-humble-ament-cmake = "*" # From ROS humble
158
+ ros-humble-rclcpp = "*" # From ROS humble
159
+ ros-humble-std-msgs = "*" # From ROS humble
102
160
  ```
103
161
 
104
162
  ### Version Constraints
@@ -136,13 +194,6 @@ eigen = ">=3.3.0,<4.0.0"
136
194
  boost = "==1.2.3"
137
195
  ```
138
196
 
139
- ## Supported ROS Distributions
140
-
141
- - ROS 2 Humble: https://prefix.dev/robostack-humble
142
- - ROS 2 Iron: https://prefix.dev/robostack-iron
143
- - ROS 2 Jazzy: https://prefix.dev/robostack-jazzy
144
- - ROS 2 Rolling: https://prefix.dev/robostack-rolling
145
-
146
197
  ## Command Reference
147
198
 
148
199
  ### `pixi-ros init`
@@ -164,6 +215,7 @@ pixi-ros init
164
215
  **What it does:**
165
216
  - Scans workspace for `package.xml` files
166
217
  - Reads all dependency types (build, exec, test) and version constraints
218
+ - **Validates dependencies** using the priority-based system (workspace → mapping → ROS distro → conda-forge)
167
219
  - Maps ROS dependencies to conda packages for each platform
168
220
  - Applies version constraints from package.xml to pixi.toml dependencies
169
221
  - Configures robostack channels
@@ -171,6 +223,7 @@ pixi-ros init
171
223
  - Creates build tasks using colcon
172
224
  - Generates helpful `README_PIXI.md`
173
225
  - Sets up platform-specific dependencies in `pixi.toml`
226
+ - **Displays validation results** showing where each dependency was found
174
227
 
175
228
  **Running multiple times:**
176
229
  The command is idempotent - you can run it multiple times to update dependencies as your workspace changes.
@@ -278,12 +331,15 @@ workspace/
278
331
 
279
332
  ### Package Not Found
280
333
 
281
- If pixi-ros marks packages as "NOT FOUND":
334
+ If pixi-ros marks packages as "NOT FOUND" (shown in red in the validation output):
335
+
336
+ 1. **Check the ROS distro**: Verify the package exists in robostack: https://prefix.dev/channels/robostack-{distro}
337
+ 2. **Check for typos**: Review your `package.xml` for spelling errors
338
+ 3. **Check conda-forge**: Some packages may be available directly on conda-forge without the `ros-distro-` prefix
339
+ 4. **Create a mapping**: Add a custom mapping in `pixi-ros/*.yaml` if the package has a different conda name
340
+ 5. **Add to workspace**: Consider including the package source in your workspace instead of depending on it
282
341
 
283
- 1. Check if the package exists in robostack: https://prefix.dev/channels/robostack-{distro}
284
- 2. Check for typos in `package.xml`
285
- 3. Some packages may have different names - check mapping files
286
- 4. Consider adding the package to your workspace instead of depending on it
342
+ The validation table shows exactly where each dependency was checked, making it easier to diagnose issues.
287
343
 
288
344
  ### Different Package Names
289
345
 
@@ -12,9 +12,12 @@ environments:
12
12
  - conda: https://prefix.dev/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda
13
13
  - conda: https://prefix.dev/conda-forge/linux-64/bzip2-1.0.8-hda65f42_8.conda
14
14
  - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda
15
+ - conda: https://prefix.dev/conda-forge/noarch/catkin_pkg-1.1.0-pyhd8ed1ab_0.conda
15
16
  - conda: https://prefix.dev/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda
16
17
  - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda
17
18
  - conda: https://prefix.dev/conda-forge/noarch/cpython-3.14.2-py314hd8ed1ab_101.conda
19
+ - conda: https://prefix.dev/conda-forge/noarch/distro-1.9.0-pyhd8ed1ab_1.conda
20
+ - conda: https://prefix.dev/conda-forge/noarch/docutils-0.22.4-pyhd8ed1ab_0.conda
18
21
  - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda
19
22
  - conda: https://prefix.dev/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda
20
23
  - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda
@@ -43,15 +46,21 @@ environments:
43
46
  - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda
44
47
  - conda: https://prefix.dev/conda-forge/linux-64/py-rattler-0.21.0-py310h70157a2_0.conda
45
48
  - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda
49
+ - conda: https://prefix.dev/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda
46
50
  - conda: https://prefix.dev/conda-forge/noarch/pytest-9.0.2-pyhcf101f3_0.conda
47
51
  - conda: https://prefix.dev/conda-forge/linux-64/python-3.14.2-h32b2ec7_101_cp314.conda
52
+ - conda: https://prefix.dev/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda
48
53
  - conda: https://prefix.dev/conda-forge/noarch/python-gil-3.14.2-h4df99d1_101.conda
49
54
  - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.14-8_cp314.conda
50
55
  - conda: https://prefix.dev/conda-forge/noarch/pyyaml-6.0.3-pyh7db6752_0.conda
51
56
  - conda: https://prefix.dev/conda-forge/linux-64/readline-8.3-h853b02a_0.conda
52
57
  - conda: https://prefix.dev/conda-forge/noarch/rich-14.3.1-pyhcf101f3_0.conda
58
+ - conda: https://prefix.dev/conda-forge/noarch/rosdistro-1.0.1-pyhd8ed1ab_0.conda
59
+ - conda: https://prefix.dev/conda-forge/noarch/rospkg-1.6.1-pyhd8ed1ab_0.conda
53
60
  - conda: https://prefix.dev/conda-forge/linux-64/ruff-0.14.14-h40fa522_1.conda
61
+ - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.10.2-pyh332efcf_0.conda
54
62
  - conda: https://prefix.dev/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_2.conda
63
+ - conda: https://prefix.dev/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda
55
64
  - conda: https://prefix.dev/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda
56
65
  - conda: https://prefix.dev/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda
57
66
  - conda: https://prefix.dev/conda-forge/noarch/tomlkit-0.14.0-pyha770c72_0.conda
@@ -67,9 +76,12 @@ environments:
67
76
  - conda: https://prefix.dev/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda
68
77
  - conda: https://prefix.dev/conda-forge/osx-64/bzip2-1.0.8-h500dc9f_8.conda
69
78
  - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda
79
+ - conda: https://prefix.dev/conda-forge/noarch/catkin_pkg-1.1.0-pyhd8ed1ab_0.conda
70
80
  - conda: https://prefix.dev/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda
71
81
  - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda
72
82
  - conda: https://prefix.dev/conda-forge/noarch/cpython-3.14.2-py314hd8ed1ab_101.conda
83
+ - conda: https://prefix.dev/conda-forge/noarch/distro-1.9.0-pyhd8ed1ab_1.conda
84
+ - conda: https://prefix.dev/conda-forge/noarch/docutils-0.22.4-pyhd8ed1ab_0.conda
73
85
  - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda
74
86
  - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda
75
87
  - conda: https://prefix.dev/conda-forge/osx-64/libexpat-2.7.3-heffb93a_0.conda
@@ -92,15 +104,21 @@ environments:
92
104
  - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda
93
105
  - conda: https://prefix.dev/conda-forge/osx-64/py-rattler-0.21.0-py310hd1493e5_0.conda
94
106
  - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda
107
+ - conda: https://prefix.dev/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda
95
108
  - conda: https://prefix.dev/conda-forge/noarch/pytest-9.0.2-pyhcf101f3_0.conda
96
109
  - conda: https://prefix.dev/conda-forge/osx-64/python-3.14.2-hf88997e_101_cp314.conda
110
+ - conda: https://prefix.dev/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda
97
111
  - conda: https://prefix.dev/conda-forge/noarch/python-gil-3.14.2-h4df99d1_101.conda
98
112
  - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.14-8_cp314.conda
99
113
  - conda: https://prefix.dev/conda-forge/noarch/pyyaml-6.0.3-pyh7db6752_0.conda
100
114
  - conda: https://prefix.dev/conda-forge/osx-64/readline-8.3-h68b038d_0.conda
101
115
  - conda: https://prefix.dev/conda-forge/noarch/rich-14.3.1-pyhcf101f3_0.conda
116
+ - conda: https://prefix.dev/conda-forge/noarch/rosdistro-1.0.1-pyhd8ed1ab_0.conda
117
+ - conda: https://prefix.dev/conda-forge/noarch/rospkg-1.6.1-pyhd8ed1ab_0.conda
102
118
  - conda: https://prefix.dev/conda-forge/osx-64/ruff-0.14.14-h5930b28_1.conda
119
+ - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.10.2-pyh332efcf_0.conda
103
120
  - conda: https://prefix.dev/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_2.conda
121
+ - conda: https://prefix.dev/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda
104
122
  - conda: https://prefix.dev/conda-forge/osx-64/tk-8.6.13-h7142dee_3.conda
105
123
  - conda: https://prefix.dev/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda
106
124
  - conda: https://prefix.dev/conda-forge/noarch/tomlkit-0.14.0-pyha770c72_0.conda
@@ -116,9 +134,12 @@ environments:
116
134
  - conda: https://prefix.dev/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda
117
135
  - conda: https://prefix.dev/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_8.conda
118
136
  - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda
137
+ - conda: https://prefix.dev/conda-forge/noarch/catkin_pkg-1.1.0-pyhd8ed1ab_0.conda
119
138
  - conda: https://prefix.dev/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda
120
139
  - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda
121
140
  - conda: https://prefix.dev/conda-forge/noarch/cpython-3.14.2-py314hd8ed1ab_101.conda
141
+ - conda: https://prefix.dev/conda-forge/noarch/distro-1.9.0-pyhd8ed1ab_1.conda
142
+ - conda: https://prefix.dev/conda-forge/noarch/docutils-0.22.4-pyhd8ed1ab_0.conda
122
143
  - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda
123
144
  - conda: https://prefix.dev/conda-forge/osx-arm64/icu-78.2-h38cb7af_0.conda
124
145
  - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda
@@ -142,15 +163,21 @@ environments:
142
163
  - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda
143
164
  - conda: https://prefix.dev/conda-forge/osx-arm64/py-rattler-0.21.0-py310hcf6febd_0.conda
144
165
  - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda
166
+ - conda: https://prefix.dev/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda
145
167
  - conda: https://prefix.dev/conda-forge/noarch/pytest-9.0.2-pyhcf101f3_0.conda
146
168
  - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.14.2-h40d2674_101_cp314.conda
169
+ - conda: https://prefix.dev/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda
147
170
  - conda: https://prefix.dev/conda-forge/noarch/python-gil-3.14.2-h4df99d1_101.conda
148
171
  - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.14-8_cp314.conda
149
172
  - conda: https://prefix.dev/conda-forge/noarch/pyyaml-6.0.3-pyh7db6752_0.conda
150
173
  - conda: https://prefix.dev/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda
151
174
  - conda: https://prefix.dev/conda-forge/noarch/rich-14.3.1-pyhcf101f3_0.conda
175
+ - conda: https://prefix.dev/conda-forge/noarch/rosdistro-1.0.1-pyhd8ed1ab_0.conda
176
+ - conda: https://prefix.dev/conda-forge/noarch/rospkg-1.6.1-pyhd8ed1ab_0.conda
152
177
  - conda: https://prefix.dev/conda-forge/osx-arm64/ruff-0.14.14-h279115b_1.conda
178
+ - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.10.2-pyh332efcf_0.conda
153
179
  - conda: https://prefix.dev/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_2.conda
180
+ - conda: https://prefix.dev/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda
154
181
  - conda: https://prefix.dev/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda
155
182
  - conda: https://prefix.dev/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda
156
183
  - conda: https://prefix.dev/conda-forge/noarch/tomlkit-0.14.0-pyha770c72_0.conda
@@ -166,9 +193,12 @@ environments:
166
193
  - conda: https://prefix.dev/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda
167
194
  - conda: https://prefix.dev/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_8.conda
168
195
  - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-h4c7d964_0.conda
196
+ - conda: https://prefix.dev/conda-forge/noarch/catkin_pkg-1.1.0-pyhd8ed1ab_0.conda
169
197
  - conda: https://prefix.dev/conda-forge/noarch/click-8.3.1-pyha7b4d00_1.conda
170
198
  - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda
171
199
  - conda: https://prefix.dev/conda-forge/noarch/cpython-3.14.2-py314hd8ed1ab_101.conda
200
+ - conda: https://prefix.dev/conda-forge/noarch/distro-1.9.0-pyhd8ed1ab_1.conda
201
+ - conda: https://prefix.dev/conda-forge/noarch/docutils-0.22.4-pyhd8ed1ab_0.conda
172
202
  - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda
173
203
  - conda: https://prefix.dev/conda-forge/win-64/icu-78.2-h637d24d_0.conda
174
204
  - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda
@@ -191,14 +221,20 @@ environments:
191
221
  - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda
192
222
  - conda: https://prefix.dev/conda-forge/win-64/py-rattler-0.21.0-py310hb39080a_0.conda
193
223
  - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda
224
+ - conda: https://prefix.dev/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda
194
225
  - conda: https://prefix.dev/conda-forge/noarch/pytest-9.0.2-pyhcf101f3_0.conda
195
226
  - conda: https://prefix.dev/conda-forge/win-64/python-3.14.2-h4b44e0e_101_cp314.conda
227
+ - conda: https://prefix.dev/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda
196
228
  - conda: https://prefix.dev/conda-forge/noarch/python-gil-3.14.2-h4df99d1_101.conda
197
229
  - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.14-8_cp314.conda
198
230
  - conda: https://prefix.dev/conda-forge/noarch/pyyaml-6.0.3-pyh7db6752_0.conda
199
231
  - conda: https://prefix.dev/conda-forge/noarch/rich-14.3.1-pyhcf101f3_0.conda
232
+ - conda: https://prefix.dev/conda-forge/noarch/rosdistro-1.0.1-pyhd8ed1ab_0.conda
233
+ - conda: https://prefix.dev/conda-forge/noarch/rospkg-1.6.1-pyhd8ed1ab_0.conda
200
234
  - conda: https://prefix.dev/conda-forge/win-64/ruff-0.14.14-h213852a_1.conda
235
+ - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.10.2-pyh332efcf_0.conda
201
236
  - conda: https://prefix.dev/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_2.conda
237
+ - conda: https://prefix.dev/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda
202
238
  - conda: https://prefix.dev/conda-forge/win-64/tk-8.6.13-h6ed50ae_3.conda
203
239
  - conda: https://prefix.dev/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda
204
240
  - conda: https://prefix.dev/conda-forge/noarch/tomlkit-0.14.0-pyha770c72_0.conda
@@ -299,6 +335,20 @@ packages:
299
335
  license: ISC
300
336
  size: 146519
301
337
  timestamp: 1767500828366
338
+ - conda: https://prefix.dev/conda-forge/noarch/catkin_pkg-1.1.0-pyhd8ed1ab_0.conda
339
+ sha256: fe602164dc1920551e1452543e22338d55d8a879959f12598c9674cf295c6341
340
+ md5: 3e500faf80e42f26d422d849877d48c4
341
+ depends:
342
+ - docutils
343
+ - packaging
344
+ - pyparsing >=1.5.7
345
+ - python >=3.10
346
+ - python-dateutil
347
+ - setuptools
348
+ license: BSD-3-Clause
349
+ license_family: BSD
350
+ size: 54106
351
+ timestamp: 1757558592553
302
352
  - conda: https://prefix.dev/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda
303
353
  sha256: 38cfe1ee75b21a8361c8824f5544c3866f303af1762693a178266d7f198e8715
304
354
  md5: ea8a6c3256897cc31263de9f455e25d9
@@ -341,6 +391,23 @@ packages:
341
391
  license: Python-2.0
342
392
  size: 49613
343
393
  timestamp: 1769457358023
394
+ - conda: https://prefix.dev/conda-forge/noarch/distro-1.9.0-pyhd8ed1ab_1.conda
395
+ sha256: 5603c7d0321963bb9b4030eadabc3fd7ca6103a38475b4e0ed13ed6d97c86f4e
396
+ md5: 0a2014fd9860f8b1eaa0b1f3d3771a08
397
+ depends:
398
+ - python >=3.9
399
+ license: Apache-2.0
400
+ license_family: APACHE
401
+ size: 41773
402
+ timestamp: 1734729953882
403
+ - conda: https://prefix.dev/conda-forge/noarch/docutils-0.22.4-pyhd8ed1ab_0.conda
404
+ sha256: 0d605569a77350fb681f9ed8d357cc71649b59a304099dc9d09fbeec5e84a65e
405
+ md5: d6bd3cd217e62bbd7efe67ff224cd667
406
+ depends:
407
+ - python >=3.10
408
+ license: CC-PDDC AND BSD-3-Clause AND BSD-2-Clause AND ZPL-2.1
409
+ size: 438002
410
+ timestamp: 1766092633160
344
411
  - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda
345
412
  sha256: ee6cf346d017d954255bbcbdb424cddea4d14e4ed7e9813e429db1d795d01144
346
413
  md5: 8e662bd460bda79b1ea39194e3c4c9ab
@@ -1073,7 +1140,7 @@ packages:
1073
1140
  timestamp: 1769677743677
1074
1141
  - conda: .
1075
1142
  name: pixi-ros
1076
- version: 0.3.0
1143
+ version: 0.4.0
1077
1144
  build: pyh4616a5c_0
1078
1145
  subdir: noarch
1079
1146
  variants:
@@ -1088,6 +1155,7 @@ packages:
1088
1155
  - py-rattler >=0.6.0
1089
1156
  - pathspec >=0.11.0
1090
1157
  - rich >=13.0.0
1158
+ - rosdistro >=0.9.0
1091
1159
  license: MIT
1092
1160
  - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda
1093
1161
  sha256: e14aafa63efa0528ca99ba568eaf506eb55a0371d12e6250aaaa61718d2eb62e
@@ -1172,6 +1240,16 @@ packages:
1172
1240
  license_family: BSD
1173
1241
  size: 889287
1174
1242
  timestamp: 1750615908735
1243
+ - conda: https://prefix.dev/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda
1244
+ sha256: 417fba4783e528ee732afa82999300859b065dc59927344b4859c64aae7182de
1245
+ md5: 3687cc0b82a8b4c17e1f0eb7e47163d5
1246
+ depends:
1247
+ - python >=3.10
1248
+ - python
1249
+ license: MIT
1250
+ license_family: MIT
1251
+ size: 110893
1252
+ timestamp: 1769003998136
1175
1253
  - conda: https://prefix.dev/conda-forge/noarch/pytest-9.0.2-pyhcf101f3_0.conda
1176
1254
  sha256: 9e749fb465a8bedf0184d8b8996992a38de351f7c64e967031944978de03a520
1177
1255
  md5: 2b694bad8a50dc2f712f5368de866480
@@ -1290,6 +1368,17 @@ packages:
1290
1368
  size: 16629248
1291
1369
  timestamp: 1769457277306
1292
1370
  python_site_packages_path: Lib/site-packages
1371
+ - conda: https://prefix.dev/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda
1372
+ sha256: d6a17ece93bbd5139e02d2bd7dbfa80bee1a4261dced63f65f679121686bf664
1373
+ md5: 5b8d21249ff20967101ffa321cab24e8
1374
+ depends:
1375
+ - python >=3.9
1376
+ - six >=1.5
1377
+ - python
1378
+ license: Apache-2.0
1379
+ license_family: APACHE
1380
+ size: 233310
1381
+ timestamp: 1751104122689
1293
1382
  - conda: https://prefix.dev/conda-forge/noarch/python-gil-3.14.2-h4df99d1_101.conda
1294
1383
  sha256: ef9d512824e3d6e1d8d07236795b60b61f13f6f3dafcc93c4d9a87ed058f8928
1295
1384
  md5: 90fd30fc6dd044c0f79c7ef4e7e9fb16
@@ -1365,6 +1454,31 @@ packages:
1365
1454
  license_family: MIT
1366
1455
  size: 208244
1367
1456
  timestamp: 1769302653091
1457
+ - conda: https://prefix.dev/conda-forge/noarch/rosdistro-1.0.1-pyhd8ed1ab_0.conda
1458
+ sha256: bff3b2fe7afe35125669ffcb7d6153db78070a753e1e4ac3b3d8d198eb6d6982
1459
+ md5: b7ed380a9088b543e06a4f73985ed03a
1460
+ depends:
1461
+ - catkin_pkg
1462
+ - python >=3.9
1463
+ - pyyaml
1464
+ - rospkg
1465
+ - setuptools
1466
+ license: BSD-3-Clause
1467
+ license_family: BSD
1468
+ size: 47691
1469
+ timestamp: 1747826651335
1470
+ - conda: https://prefix.dev/conda-forge/noarch/rospkg-1.6.1-pyhd8ed1ab_0.conda
1471
+ sha256: 4d930bee9f6a6d0fb7e5c9bb644b2b168787e907014deb49a3e00c0552934447
1472
+ md5: d530f2ffe740578a5ece44b1004067cc
1473
+ depends:
1474
+ - catkin_pkg
1475
+ - distro
1476
+ - python >=3.10
1477
+ - pyyaml
1478
+ license: BSD-3-Clause
1479
+ license_family: BSD
1480
+ size: 31852
1481
+ timestamp: 1766125246079
1368
1482
  - conda: https://prefix.dev/conda-forge/linux-64/ruff-0.14.14-h40fa522_1.conda
1369
1483
  noarch: python
1370
1484
  sha256: 0c6c9825ff88195fd13936d63872213d6c88c1fe795d136881c0753c3037c5ff
@@ -1418,6 +1532,15 @@ packages:
1418
1532
  license_family: MIT
1419
1533
  size: 9568276
1420
1534
  timestamp: 1769521017574
1535
+ - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.10.2-pyh332efcf_0.conda
1536
+ sha256: f5fcb7854d2b7639a5b1aca41dd0f2d5a69a60bbc313e7f192e2dc385ca52f86
1537
+ md5: 7b446fcbb6779ee479debb4fd7453e6c
1538
+ depends:
1539
+ - python >=3.10
1540
+ license: MIT
1541
+ license_family: MIT
1542
+ size: 678888
1543
+ timestamp: 1769601206751
1421
1544
  - conda: https://prefix.dev/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_2.conda
1422
1545
  sha256: 1d6534df8e7924d9087bd388fbac5bd868c5bf8971c36885f9f016da0657d22b
1423
1546
  md5: 83ea3a2ddb7a75c1b09cea582aa4f106
@@ -1427,6 +1550,16 @@ packages:
1427
1550
  license_family: MIT
1428
1551
  size: 15018
1429
1552
  timestamp: 1762858315311
1553
+ - conda: https://prefix.dev/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda
1554
+ sha256: 458227f759d5e3fcec5d9b7acce54e10c9e1f4f4b7ec978f3bfd54ce4ee9853d
1555
+ md5: 3339e3b65d58accf4ca4fb8748ab16b3
1556
+ depends:
1557
+ - python >=3.9
1558
+ - python
1559
+ license: MIT
1560
+ license_family: MIT
1561
+ size: 18455
1562
+ timestamp: 1753199211006
1430
1563
  - conda: https://prefix.dev/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda
1431
1564
  sha256: cafeec44494f842ffeca27e9c8b0c27ed714f93ac77ddadc6aaf726b5554ebac
1432
1565
  md5: cffd3bdd58090148f4cfcd831f4b26ab