robotpy-cscore 2023.4.3.0__cp39-cp39-win_amd64.whl → 2024.0.0b2.post1__cp39-cp39-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of robotpy-cscore might be problematic. Click here for more details.

cscore/cvnp/cvnp.cpp CHANGED
@@ -64,6 +64,20 @@ namespace cvnp
64
64
  };
65
65
  }
66
66
 
67
+ std::vector<std::size_t> determine_strides(const cv::Mat& m) {
68
+ if (m.channels() == 1) {
69
+ return {
70
+ static_cast<size_t>(m.step[0]), // row stride (in bytes)
71
+ static_cast<size_t>(m.step[1]) // column stride (in bytes)
72
+ };
73
+ }
74
+ return {
75
+ static_cast<size_t>(m.step[0]), // row stride (in bytes)
76
+ static_cast<size_t>(m.step[1]), // column stride (in bytes)
77
+ static_cast<size_t>(m.elemSize1()) // channel stride (in bytes)
78
+ };
79
+ }
80
+
67
81
  py::capsule make_capsule_mat(const cv::Mat& m)
68
82
  {
69
83
  return py::capsule(new cv::Mat(m)
@@ -74,22 +88,14 @@ namespace cvnp
74
88
 
75
89
  } // namespace detail
76
90
 
77
- pybind11::array mat_to_nparray(const cv::Mat& m, bool share_memory)
91
+ pybind11::array mat_to_nparray(const cv::Mat& m)
78
92
  {
79
- // note: empty mats aren't continuous
80
- if (!m.isContinuous() && !m.empty())
81
- throw std::invalid_argument("cvnp::mat_to_nparray / Only contiguous Mats supported / You can clone() your matrix to obtain a contiguous copy.");
82
- if (share_memory)
83
- return pybind11::array(detail::determine_np_dtype(m.depth())
84
- , detail::determine_shape(m)
85
- , m.data
86
- , detail::make_capsule_mat(m)
87
- );
88
- else
89
- return pybind11::array(detail::determine_np_dtype(m.depth())
90
- , detail::determine_shape(m)
91
- , m.data
92
- );
93
+ return pybind11::array(detail::determine_np_dtype(m.depth())
94
+ , detail::determine_shape(m)
95
+ , detail::determine_strides(m)
96
+ , m.data
97
+ , detail::make_capsule_mat(m)
98
+ );
93
99
  }
94
100
 
95
101
 
@@ -124,4 +130,36 @@ namespace cvnp
124
130
  return m;
125
131
  }
126
132
 
133
+ // this version tries to handles strides and submatrices
134
+ // this is WIP, currently broken, and not used
135
+ cv::Mat nparray_to_mat_with_strides_broken(pybind11::array& a)
136
+ {
137
+ int depth = detail::determine_cv_depth(a.dtype());
138
+ int type = detail::determine_cv_type(a, depth);
139
+ cv::Size size = detail::determine_cv_size(a);
140
+
141
+ auto buffer_info = a.request();
142
+
143
+ // Get the array strides (convert from pybind11::ssize_t to size_t)
144
+ std::vector<size_t> strides;
145
+ for (auto v : buffer_info.strides)
146
+ strides.push_back(static_cast<size_t>(v));
147
+
148
+ // Get the number of dimensions
149
+ int ndims = static_cast<int>(buffer_info.ndim);
150
+ //if ((ndims != 2) && (ndims != 3))
151
+ // throw std::invalid_argument("nparray_to_mat needs support only 2 or 3 dimension matrices");
152
+
153
+ // Convert the shape (sizes) to a vector of int
154
+ std::vector<int> sizes;
155
+ for (auto v : buffer_info.shape)
156
+ sizes.push_back(static_cast<int>(v));
157
+
158
+ // Create the cv::Mat with the specified strides (steps)
159
+ // We are calling this Mat constructor:
160
+ // Mat(const std::vector<int>& sizes, int type, void* data, const size_t* steps=0)
161
+ cv::Mat m(sizes, type, a.mutable_data(0), strides.data());
162
+ return m;
163
+ }
164
+
127
165
  } // namespace cvnp
cscore/cvnp/cvnp.h CHANGED
@@ -1,6 +1,5 @@
1
1
  #pragma once
2
2
  #include "cvnp/cvnp_synonyms.h"
3
- #include "cvnp/cvnp_shared_mat.h"
4
3
 
5
4
  #include <opencv2/core/core.hpp>
6
5
  #include <pybind11/numpy.h>
@@ -18,12 +17,15 @@ namespace cvnp
18
17
  //
19
18
  // Public interface
20
19
  //
21
- pybind11::array mat_to_nparray(const cv::Mat& m, bool share_memory);
20
+
21
+ // For cv::Mat (*with* shared memory)
22
+ pybind11::array mat_to_nparray(const cv::Mat& m);
22
23
  cv::Mat nparray_to_mat(pybind11::array& a);
23
24
 
24
- template<typename _Tp, int _rows, int _cols>
25
- pybind11::array matx_to_nparray(const cv::Matx<_Tp, _rows, _cols>& m, bool share_memory);
26
- template<typename _Tp, int _rows, int _cols>
25
+ // For cv::Matx (*without* shared memory)
26
+ template<typename _Tp, int _rows, int _cols>
27
+ pybind11::array matx_to_nparray(const cv::Matx<_Tp, _rows, _cols>& m);
28
+ template<typename _Tp, int _rows, int _cols>
27
29
  void nparray_to_matx(pybind11::array &a, cv::Matx<_Tp, _rows, _cols>& out_matrix);
28
30
 
29
31
 
@@ -42,21 +44,13 @@ namespace cvnp
42
44
  } // namespace detail
43
45
 
44
46
  template<typename _Tp, int _rows, int _cols>
45
- pybind11::array matx_to_nparray(const cv::Matx<_Tp, _rows, _cols>& m, bool share_memory)
47
+ pybind11::array matx_to_nparray(const cv::Matx<_Tp, _rows, _cols>& m)
46
48
  {
47
- if (share_memory)
48
- return pybind11::array(
49
- pybind11::dtype::of<_Tp>()
50
- , std::vector<std::size_t> {_rows, _cols}
51
- , m.val
52
- , detail::make_capsule_matx<_Tp, _rows, _cols>(m)
53
- );
54
- else
55
- return pybind11::array(
56
- pybind11::dtype::of<_Tp>()
57
- , std::vector<std::size_t> {_rows, _cols}
58
- , m.val
59
- );
49
+ return pybind11::array(
50
+ pybind11::dtype::of<_Tp>()
51
+ , std::vector<std::size_t> {_rows, _cols}
52
+ , m.val
53
+ );
60
54
  }
61
55
 
62
56
  template<typename _Tp, int _rows, int _cols>
@@ -84,18 +78,16 @@ namespace pybind11
84
78
  namespace detail
85
79
  {
86
80
  //
87
- // Cast between cvnp::Mat_shared and numpy.ndarray
81
+ // Cast between cv::Mat and numpy.ndarray
88
82
  // The cast between cv::Mat and numpy.ndarray works
89
83
  // - *with* shared memory when going from C++ to Python
90
84
  // - *with* shared memory when going from Python to C++
91
- // any modification to the Matrix size, type, and values is immediately
92
- // impacted on both sides.
93
- //
85
+ // any modification to the Matrix size, type, and values is immediately impacted on both sides.
94
86
  template<>
95
- struct type_caster<cvnp::Mat_shared>
87
+ struct type_caster<cv::Mat>
96
88
  {
97
89
  public:
98
- PYBIND11_TYPE_CASTER(cvnp::Mat_shared, _("numpy.ndarray"));
90
+ PYBIND11_TYPE_CASTER(cv::Mat, _("numpy.ndarray"));
99
91
 
100
92
  /**
101
93
  * Conversion part 1 (Python->C++):
@@ -104,12 +96,12 @@ namespace pybind11
104
96
  */
105
97
  bool load(handle src, bool)
106
98
  {
107
- if (!isinstance<array>(src)) {
99
+ if (!isinstance<array>(src))
108
100
  return false;
109
- }
101
+
110
102
  auto a = reinterpret_borrow<array>(src);
111
- auto new_mat = cv::Mat(cvnp::nparray_to_mat(a));
112
- value.Value = new_mat;
103
+ auto new_mat = cvnp::nparray_to_mat(a);
104
+ value = new_mat;
113
105
  return true;
114
106
  }
115
107
 
@@ -119,25 +111,25 @@ namespace pybind11
119
111
  * (for ``return_value_policy::reference_internal``) and are generally
120
112
  * ignored by implicit casters.
121
113
  */
122
- static handle cast(const cvnp::Mat_shared &m, return_value_policy, handle defval)
114
+ static handle cast(const cv::Mat &m, return_value_policy, handle defval)
123
115
  {
124
- auto a = cvnp::mat_to_nparray(m.Value, true);
116
+ auto a = cvnp::mat_to_nparray(m);
125
117
  return a.release();
126
118
  }
127
119
  };
128
120
 
129
-
130
121
  //
131
- // Cast between cv::Mat and numpy.ndarray
132
- // The cast between cv::Mat and numpy.ndarray works *without* shared memory.
133
- // - *without* shared memory when going from C++ to Python
122
+ // Cast between cv::Mat_ and numpy.ndarray
123
+ // The cast between cv::Mat_ and numpy.ndarray works
124
+ // - *with* shared memory when going from C++ to Python
134
125
  // - *with* shared memory when going from Python to C++
135
- //
136
- template<>
137
- struct type_caster<cv::Mat>
126
+ // any modification to the Matrix size, type, and values is immediately impacted on both sides.
127
+ template<typename _Tp>
128
+ struct type_caster<cv::Mat_<_Tp>>
138
129
  {
130
+ using MatTp = cv::Mat_<_Tp>;
139
131
  public:
140
- PYBIND11_TYPE_CASTER(cv::Mat, _("numpy.ndarray"));
132
+ PYBIND11_TYPE_CASTER(MatTp, _("numpy.ndarray"));
141
133
 
142
134
  /**
143
135
  * Conversion part 1 (Python->C++):
@@ -146,9 +138,9 @@ namespace pybind11
146
138
  */
147
139
  bool load(handle src, bool)
148
140
  {
149
- if (!isinstance<array>(src)) {
141
+ if (!isinstance<array>(src))
150
142
  return false;
151
- }
143
+
152
144
  auto a = reinterpret_borrow<array>(src);
153
145
  auto new_mat = cvnp::nparray_to_mat(a);
154
146
  value = new_mat;
@@ -161,87 +153,75 @@ namespace pybind11
161
153
  * (for ``return_value_policy::reference_internal``) and are generally
162
154
  * ignored by implicit casters.
163
155
  */
164
- static handle cast(const cv::Mat &m, return_value_policy, handle defval)
156
+ static handle cast(const MatTp &m, return_value_policy, handle defval)
165
157
  {
166
- auto a = cvnp::mat_to_nparray(m, false);
158
+ auto a = cvnp::mat_to_nparray(m);
167
159
  return a.release();
168
160
  }
169
161
  };
170
162
 
171
163
 
172
- //
173
- // Cast between cvnp::Matx_shared<_rows,_cols> (aka Matx33d, Matx21d, etc) + Vec<_rows> (aka Vec1d, Vec2f, etc) and numpy.ndarray
174
- // The cast between cvnp::Matx_shared, cvnp::Vec_shared and numpy.ndarray works *with* shared memory:
175
- // any modification to the Matrix size, type, and values is immediately
176
- // impacted on both sides.
177
- // - *with* shared memory when going from C++ to Python
178
- // - *with* shared memory when going from Python to C++
179
- //
164
+
165
+ // Cast between cv::Matx<_rows,_cols> (aka Matx33d, Matx21d, etc) and numpy.ndarray
166
+ // *without* shared memory.
180
167
  template<typename _Tp, int _rows, int _cols>
181
- struct type_caster<cvnp::Matx_shared<_Tp, _rows, _cols> >
168
+ struct type_caster<cv::Matx<_Tp, _rows, _cols> >
182
169
  {
183
- using Matshared_xxx = cvnp::Matx_shared<_Tp, _rows, _cols>;
170
+ using Matxxx = cv::Matx<_Tp, _rows, _cols>;
184
171
 
185
172
  public:
186
- PYBIND11_TYPE_CASTER(Matshared_xxx, _("numpy.ndarray"));
173
+ PYBIND11_TYPE_CASTER(Matxxx, _("numpy.ndarray"));
187
174
 
188
175
  // Conversion part 1 (Python->C++)
189
176
  bool load(handle src, bool)
190
177
  {
191
- if (!isinstance<array>(src)) {
178
+ if (!isinstance<array>(src))
192
179
  return false;
193
- }
194
180
 
195
181
  auto a = reinterpret_borrow<array>(src);
196
- cvnp::nparray_to_matx<_Tp, _rows, _cols>(a, value.Value);
182
+ cvnp::nparray_to_matx<_Tp, _rows, _cols>(a, value);
197
183
  return true;
198
184
  }
199
185
 
200
186
  // Conversion part 2 (C++ -> Python)
201
- static handle cast(const Matshared_xxx &m, return_value_policy, handle defval)
187
+ static handle cast(const Matxxx &m, return_value_policy, handle defval)
202
188
  {
203
- auto a = cvnp::matx_to_nparray<_Tp, _rows, _cols>(m.Value, true);
189
+ auto a = cvnp::matx_to_nparray<_Tp, _rows, _cols>(m);
204
190
  return a.release();
205
191
  }
206
192
  };
207
193
 
208
194
 
209
- //
210
- // Cast between cv::Matx<_rows,_cols> (aka Matx33d, Matx21d, etc) + Vec<_rows> (aka Vec1d, Vec2f, etc) and numpy.ndarray
211
- // The cast between cv::Matx, cv::Vec and numpy.ndarray works *without* shared memory.
212
- // - *without* shared memory when going from C++ to Python
213
- // - *with* shared memory when going from Python to C++
214
- //
215
- template<typename _Tp, int _rows, int _cols>
216
- struct type_caster<cv::Matx<_Tp, _rows, _cols> >
195
+ // Cast between cv::Vec<_rows> and numpy.ndarray
196
+ // *without* shared memory.
197
+ template<typename _Tp, int _rows>
198
+ struct type_caster<cv::Vec<_Tp, _rows> >
217
199
  {
218
- using Matxxx = cv::Matx<_Tp, _rows, _cols>;
200
+ using Vecxxx = cv::Vec<_Tp, _rows>;
219
201
 
220
202
  public:
221
- PYBIND11_TYPE_CASTER(Matxxx, _("numpy.ndarray"));
203
+ PYBIND11_TYPE_CASTER(Vecxxx, _("numpy.ndarray"));
222
204
 
223
205
  // Conversion part 1 (Python->C++)
224
206
  bool load(handle src, bool)
225
207
  {
226
- if (!isinstance<array>(src)) {
208
+ if (!isinstance<array>(src))
227
209
  return false;
228
- }
229
210
 
230
211
  auto a = reinterpret_borrow<array>(src);
231
- cvnp::nparray_to_matx<_Tp, _rows, _cols>(a, value);
212
+ cvnp::nparray_to_matx<_Tp, _rows, 1>(a, value);
232
213
  return true;
233
214
  }
234
215
 
235
216
  // Conversion part 2 (C++ -> Python)
236
- static handle cast(const Matxxx &m, return_value_policy, handle defval)
217
+ static handle cast(const Vecxxx &m, return_value_policy, handle defval)
237
218
  {
238
- auto a = cvnp::matx_to_nparray<_Tp, _rows, _cols>(m, false);
219
+ auto a = cvnp::matx_to_nparray<_Tp, _rows, 1>(m);
239
220
  return a.release();
240
221
  }
241
222
  };
242
223
 
243
224
 
244
-
245
225
  //
246
226
  // Cast between cv::Size and a simple python tuple.
247
227
  // No shared memory, you cannot modify the width or the height without
@@ -258,9 +238,8 @@ namespace pybind11
258
238
  // Conversion part 1 (Python->C++, i.e tuple -> Size)
259
239
  bool load(handle src, bool)
260
240
  {
261
- if (!isinstance<pybind11::tuple>(src)) {
241
+ if (!isinstance<pybind11::tuple>(src))
262
242
  return false;
263
- }
264
243
 
265
244
  auto tuple = pybind11::reinterpret_borrow<pybind11::tuple>(src);
266
245
  if (tuple.size() != 2)
@@ -299,9 +278,8 @@ namespace pybind11
299
278
  // Conversion part 1 (Python->C++)
300
279
  bool load(handle src, bool)
301
280
  {
302
- if (!isinstance<pybind11::tuple>(src)) {
281
+ if (!isinstance<pybind11::tuple>(src))
303
282
  return false;
304
- }
305
283
 
306
284
  auto tuple = pybind11::reinterpret_borrow<pybind11::tuple>(src);
307
285
  if (tuple.size() != 2)
@@ -324,7 +302,6 @@ namespace pybind11
324
302
  };
325
303
 
326
304
 
327
-
328
305
  //
329
306
  // Point3
330
307
  // No shared memory
@@ -340,9 +317,8 @@ namespace pybind11
340
317
  // Conversion part 1 (Python->C++)
341
318
  bool load(handle src, bool)
342
319
  {
343
- if (!isinstance<pybind11::tuple>(src)) {
320
+ if (!isinstance<pybind11::tuple>(src))
344
321
  return false;
345
- }
346
322
 
347
323
  auto tuple = pybind11::reinterpret_borrow<pybind11::tuple>(src);
348
324
  if (tuple.size() != 3)
@@ -365,6 +341,92 @@ namespace pybind11
365
341
  }
366
342
  };
367
343
 
344
+ //
345
+ // Scalar
346
+ // No shared memory
347
+ //
348
+ template<typename _Tp>
349
+ struct type_caster<cv::Scalar_<_Tp>>
350
+ {
351
+ using ScalarTp = cv::Scalar_<_Tp>;
352
+
353
+ public:
354
+ PYBIND11_TYPE_CASTER(ScalarTp , _("tuple"));
355
+
356
+ // Conversion part 1 (Python->C++)
357
+ bool load(handle src, bool)
358
+ {
359
+ if (!isinstance<pybind11::tuple>(src))
360
+ return false;
361
+
362
+ auto tuple = pybind11::reinterpret_borrow<pybind11::tuple>(src);
363
+ const auto tupleSize = tuple.size();
364
+ if (tupleSize > 4)
365
+ throw std::invalid_argument("Scalar should be a tuple with at most 4 elements. Got " + std::to_string(tupleSize));
366
+
367
+ ScalarTp r;
368
+ if (tupleSize == 1)
369
+ r = ScalarTp(tuple[0].cast<_Tp>());
370
+ else if (tupleSize == 2)
371
+ r = ScalarTp(tuple[0].cast<_Tp>(), tuple[1].cast<_Tp>());
372
+ else if (tupleSize == 3)
373
+ r = ScalarTp(tuple[0].cast<_Tp>(), tuple[1].cast<_Tp>(), tuple[2].cast<_Tp>());
374
+ else if (tupleSize == 4)
375
+ r = ScalarTp(tuple[0].cast<_Tp>(), tuple[1].cast<_Tp>(), tuple[2].cast<_Tp>(), tuple[3].cast<_Tp>());
376
+
377
+ value = r;
378
+ return true;
379
+ }
380
+
381
+ // Conversion part 2 (C++ -> Python)
382
+ static handle cast(const ScalarTp &value, return_value_policy, handle defval)
383
+ {
384
+ auto result = pybind11::make_tuple(value[0], value[1], value[2], value[3]);
385
+ return result.release();
386
+ }
387
+ };
388
+
389
+ //
390
+ // Rect_
391
+ // No shared memory
392
+ //
393
+ template<typename _Tp>
394
+ struct type_caster<cv::Rect_<_Tp>>
395
+ {
396
+ using RectTp = cv::Rect_<_Tp>;
397
+
398
+ public:
399
+ PYBIND11_TYPE_CASTER(RectTp , _("tuple"));
400
+
401
+ // Conversion part 1 (Python->C++)
402
+ bool load(handle src, bool)
403
+ {
404
+ if (!isinstance<pybind11::tuple>(src))
405
+ return false;
406
+
407
+ auto tuple = pybind11::reinterpret_borrow<pybind11::tuple>(src);
408
+ const auto tupleSize = tuple.size();
409
+ if (tupleSize != 4)
410
+ throw std::invalid_argument("Rect should be a tuple with 4 elements. Got " + std::to_string(tupleSize));
411
+
412
+ RectTp r;
413
+ r.x = tuple[0].cast<_Tp>();
414
+ r.y = tuple[1].cast<_Tp>();
415
+ r.width = tuple[2].cast<_Tp>();
416
+ r.height = tuple[3].cast<_Tp>();
417
+
418
+ value = r;
419
+ return true;
420
+ }
421
+
422
+ // Conversion part 2 (C++ -> Python)
423
+ static handle cast(const RectTp &value, return_value_policy, handle defval)
424
+ {
425
+ auto result = pybind11::make_tuple(value.x, value.y, value.width, value.height);
426
+ return result.release();
427
+ }
428
+ };
429
+
368
430
 
369
431
  } // namespace detail
370
432
  } // namespace pybind11
cscore/version.py CHANGED
@@ -1,4 +1,4 @@
1
1
  # file generated by setuptools_scm
2
2
  # don't change, don't track in version control
3
- __version__ = version = '2023.4.3.0'
4
- __version_tuple__ = version_tuple = (2023, 4, 3, 0)
3
+ __version__ = version = '2024.0.0b2.post1'
4
+ __version_tuple__ = version_tuple = (2024, 0, 0)
@@ -1,18 +1,18 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: robotpy-cscore
3
- Version: 2023.4.3.0
3
+ Version: 2024.0.0b2.post1
4
4
  Summary: RobotPy bindings for cscore image processing library
5
5
  Home-page: https://github.com/robotpy/robotpy-cscore
6
6
  Author: RobotPy Development Team
7
7
  Author-email: robotpy@googlegroups.com
8
8
  License: BSD-3-Clause
9
9
  Platform: UNKNOWN
10
- Requires-Python: >=3.6
10
+ Requires-Python: >=3.8
11
11
  Description-Content-Type: text/x-rst
12
12
  License-File: LICENSE
13
- Requires-Dist: robotpy-wpiutil (~=2023.4.3)
14
- Requires-Dist: robotpy-wpinet (~=2023.4.3)
15
- Requires-Dist: pyntcore (~=2023.4.3)
13
+ Requires-Dist: robotpy-wpiutil ~=2024.0.0b2
14
+ Requires-Dist: robotpy-wpinet ~=2024.0.0b2
15
+ Requires-Dist: pyntcore ~=2024.0.0b2
16
16
 
17
17
  robotpy-cscore
18
18
  ==============
@@ -0,0 +1,28 @@
1
+ cscore/__init__.py,sha256=VaZBAeqPudG-P5ca41SS9q7UNjEyfAM08xaXba1Q-uk,1091
2
+ cscore/__main__.py,sha256=JmC0gHCGkRWCrwjvp28hZlhr24b9Mol3lwlS1UF3Cls,4393
3
+ cscore/_cscore.cp39-win_amd64.pyd,sha256=3eD7tdR_zWlhL24TzsDnWYpy0FKOcDYfl0RklbZYa0Q,3532800
4
+ cscore/_cscore.pyi,sha256=YfRqCjW2j2zkz0_KqrBShq_tU7A4gzg79ZurM4ZTwpc,48747
5
+ cscore/_init_cscore.py,sha256=IJoWfQi1FpW48Uez-o9vS8SVCArHlmCAGt1BZkmbZmY,267
6
+ cscore/_logging.py,sha256=uv1Shlu49aPgQpRn5yD2ybT4N8ewJS3qUFOn8YTffwg,333
7
+ cscore/grip.py,sha256=qC6MbWvVllpnnsm10f31gqq4_PMWI_G9GKt3PfOaUpo,1042
8
+ cscore/imagewriter.py,sha256=RAWRRhL3DLNampZJjdd7Ye_8P1AmiYAZsWhnwov5id0,4537
9
+ cscore/pkgcfg.py,sha256=nkuqOy-Oy0Kw0pi8YXX9KfQCviwNliFZZlSOi2slsiw,791
10
+ cscore/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
+ cscore/version.py,sha256=DanI4SMo27Ol-LhGJpo64n5wVW9DyAZH2keeQt7Zc-0,178
12
+ cscore/__pycache__/__init__.cpython-39.pyc,sha256=oDK_BbvbCJDhWnnTZUkMIxihdor-tWY6NmHcj8ywEb4,986
13
+ cscore/__pycache__/_init_cscore.cpython-39.pyc,sha256=m2va8AB-349tz4mWsw8DLtL9M4RtyCaLNdK6vWBoZmA,433
14
+ cscore/__pycache__/_logging.cpython-39.pyc,sha256=OPou89jMZS-hiFjOgZ1_Tehsr6J9bl-NeHpcG-_XECQ,678
15
+ cscore/__pycache__/version.cpython-39.pyc,sha256=dpN1C72aL76UKHnB-MIziLtnh7td6v0UTCk7-js6ung,294
16
+ cscore/cvnp/README.md,sha256=197MQ-gG-pZf9YAUZqcHXLKk8au8WtxXrfFf7lnwHAo,1175
17
+ cscore/cvnp/cvnp.cpp,sha256=Zo-8jL2qRbH9SG0605vQ0-I1NjQKRfVqLyV7YxJEfqU,6247
18
+ cscore/cvnp/cvnp.h,sha256=4ymsVQgp8nOJqVazCtENVMgfTJ32M_j0ShfltPxL5aw,14852
19
+ cscore/cvnp/cvnp_shared_mat.h,sha256=xNsaRqfhi_D4yxCZF55Or96MOTsLyg_Mn9gLeOPin88,3576
20
+ cscore/cvnp/cvnp_synonyms.cpp,sha256=ZpLZzmK5ZcrIgLfi_j7eJ_NXLNtcb8ymDWehYuVVHvo,2419
21
+ cscore/cvnp/cvnp_synonyms.h,sha256=MgU4yOOXMhGGLrKb06dX4nsQLtqkq_1gDE6ToR3mjFo,589
22
+ cscore/src/main.cpp,sha256=H7WmA3wj-1pZduYdFBsrH1Ayfir4ur-bYsFhySe4Beo,532
23
+ robotpy_cscore-2024.0.0b2.post1.dist-info/LICENSE,sha256=eday0nHMlO9Rc7a6n0ONgNEe6N20r5xNWivVL5n-fN4,3138
24
+ robotpy_cscore-2024.0.0b2.post1.dist-info/METADATA,sha256=5M_-Arlp7YhEameDqqcOn-nIgZ_BQDig8LdjrSlNDoc,1128
25
+ robotpy_cscore-2024.0.0b2.post1.dist-info/WHEEL,sha256=QEPhY-QL5bUCGe8xLO1ow2Nlf5beRmRJkZ8YmG0I2hM,100
26
+ robotpy_cscore-2024.0.0b2.post1.dist-info/entry_points.txt,sha256=hFrjQmvJC8KIGhuinIdAazBPJW2oCe301Q9ZaIHVCe4,39
27
+ robotpy_cscore-2024.0.0b2.post1.dist-info/top_level.txt,sha256=yKRnfRQe07G2XO6XXYgsj9CN2obAQX3D3gsGvcewpVw,7
28
+ robotpy_cscore-2024.0.0b2.post1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.40.0)
2
+ Generator: bdist_wheel (0.41.3)
3
3
  Root-Is-Purelib: false
4
4
  Tag: cp39-cp39-win_amd64
5
5
 
@@ -1,28 +0,0 @@
1
- cscore/__init__.py,sha256=VaZBAeqPudG-P5ca41SS9q7UNjEyfAM08xaXba1Q-uk,1091
2
- cscore/__main__.py,sha256=JmC0gHCGkRWCrwjvp28hZlhr24b9Mol3lwlS1UF3Cls,4393
3
- cscore/_cscore.cp39-win_amd64.pyd,sha256=YKc7C6IlR4i8LhkYULbvcJWuJ-483ooaQWBpXq6wp4o,3401728
4
- cscore/_init_cscore.py,sha256=IJoWfQi1FpW48Uez-o9vS8SVCArHlmCAGt1BZkmbZmY,267
5
- cscore/_logging.py,sha256=uv1Shlu49aPgQpRn5yD2ybT4N8ewJS3qUFOn8YTffwg,333
6
- cscore/grip.py,sha256=qC6MbWvVllpnnsm10f31gqq4_PMWI_G9GKt3PfOaUpo,1042
7
- cscore/imagewriter.py,sha256=RAWRRhL3DLNampZJjdd7Ye_8P1AmiYAZsWhnwov5id0,4537
8
- cscore/pkgcfg.py,sha256=nkuqOy-Oy0Kw0pi8YXX9KfQCviwNliFZZlSOi2slsiw,791
9
- cscore/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
- cscore/version.py,sha256=aMmkAteYZjbJfZ43WF8Lt7EqRicJGj3mDI7c1j5iuWE,175
11
- cscore/__pycache__/__init__.cpython-39.pyc,sha256=6x_ii2F04-GsOvOGqb1DT8gjUb7UIEp9xn6rH6R65Xs,965
12
- cscore/__pycache__/_init_cscore.cpython-39.pyc,sha256=JuXD8m5B9YdvGQNHC8758i-4L8A8EpBHZZo5aW3aMew,412
13
- cscore/__pycache__/_logging.cpython-39.pyc,sha256=vw5VfPy5tnPwie--OQ8xbQBC0RU6i9pmbkDlkdRNha8,657
14
- cscore/__pycache__/version.cpython-39.pyc,sha256=1P-PvrwYjk4iL18_6067BkyUb9IrUmgDoG4swKUa2_Q,272
15
- cscore/_cscore/__init__.pyi,sha256=B17Jn5y05zBRErbjBkalwAAJLo-kw1bi7IoEQTGI340,47184
16
- cscore/cvnp/README.md,sha256=197MQ-gG-pZf9YAUZqcHXLKk8au8WtxXrfFf7lnwHAo,1175
17
- cscore/cvnp/cvnp.cpp,sha256=us_1aHeh63La0gXdmrxoBgZupmQknGCEapEbiwTgmzA,4719
18
- cscore/cvnp/cvnp.h,sha256=93ALp2KIgnLlyJpqlyASnRm81m3QEHQqv7w0RAqNyFE,12952
19
- cscore/cvnp/cvnp_shared_mat.h,sha256=xNsaRqfhi_D4yxCZF55Or96MOTsLyg_Mn9gLeOPin88,3576
20
- cscore/cvnp/cvnp_synonyms.cpp,sha256=ZpLZzmK5ZcrIgLfi_j7eJ_NXLNtcb8ymDWehYuVVHvo,2419
21
- cscore/cvnp/cvnp_synonyms.h,sha256=MgU4yOOXMhGGLrKb06dX4nsQLtqkq_1gDE6ToR3mjFo,589
22
- cscore/src/main.cpp,sha256=H7WmA3wj-1pZduYdFBsrH1Ayfir4ur-bYsFhySe4Beo,532
23
- robotpy_cscore-2023.4.3.0.dist-info/LICENSE,sha256=eday0nHMlO9Rc7a6n0ONgNEe6N20r5xNWivVL5n-fN4,3138
24
- robotpy_cscore-2023.4.3.0.dist-info/METADATA,sha256=W80tx5DX8EoNy5sXFEFt6TlhLJwxYOg6Jo48hFZrFT4,1122
25
- robotpy_cscore-2023.4.3.0.dist-info/WHEEL,sha256=eep6QWEFiQfg2wcclssb_WY-D33AnLYLnEKGA9Rn-VU,100
26
- robotpy_cscore-2023.4.3.0.dist-info/entry_points.txt,sha256=hFrjQmvJC8KIGhuinIdAazBPJW2oCe301Q9ZaIHVCe4,39
27
- robotpy_cscore-2023.4.3.0.dist-info/top_level.txt,sha256=yKRnfRQe07G2XO6XXYgsj9CN2obAQX3D3gsGvcewpVw,7
28
- robotpy_cscore-2023.4.3.0.dist-info/RECORD,,