PartSegCore-compiled-backend 0.15.14__tar.gz → 0.15.15__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 (61) hide show
  1. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/.pre-commit-config.yaml +15 -7
  2. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/PKG-INFO +1 -1
  3. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/pyproject.toml +3 -1
  4. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/src/PartSegCore_compiled_backend/triangulation/intersection.hpp +19 -16
  5. partsegcore_compiled_backend-0.15.15/src/PartSegCore_compiled_backend/version.py +24 -0
  6. partsegcore_compiled_backend-0.15.15/src/tests/data/create_holes_triangulation_failure.txt +570 -0
  7. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/src/tests/test_triangulate.py +16 -0
  8. partsegcore_compiled_backend-0.15.14/src/PartSegCore_compiled_backend/version.py +0 -34
  9. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/.gitignore +0 -0
  10. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/CMakeLists.txt +0 -0
  11. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/LICENSE.txt +0 -0
  12. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/MANIFEST.in +0 -0
  13. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/Readme.md +0 -0
  14. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/docs/Makefile +0 -0
  15. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/docs/calc_bounds.rst +0 -0
  16. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/docs/conf.py +0 -0
  17. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/docs/fast_unique.rst +0 -0
  18. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/docs/index.rst +0 -0
  19. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/docs/make.bat +0 -0
  20. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/docs/napari_mapping.rst +0 -0
  21. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/docs/sprawl_utils.rst +0 -0
  22. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/src/PartSegCore_compiled_backend/__init__.py +0 -0
  23. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/src/PartSegCore_compiled_backend/_fast_unique.pyi +0 -0
  24. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/src/PartSegCore_compiled_backend/_fast_unique.pyx +0 -0
  25. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/src/PartSegCore_compiled_backend/_napari_mapping.pyx +0 -0
  26. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/src/PartSegCore_compiled_backend/calc_bounds.pyi +0 -0
  27. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/src/PartSegCore_compiled_backend/calc_bounds.pyx +0 -0
  28. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/src/PartSegCore_compiled_backend/color_image_cython.pyi +0 -0
  29. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/src/PartSegCore_compiled_backend/color_image_cython.pyx +0 -0
  30. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/src/PartSegCore_compiled_backend/fast_unique.py +0 -0
  31. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/src/PartSegCore_compiled_backend/multiscale_opening/__init__.py +0 -0
  32. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/src/PartSegCore_compiled_backend/multiscale_opening/mso.h +0 -0
  33. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/src/PartSegCore_compiled_backend/multiscale_opening/mso_bind.pyi +0 -0
  34. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/src/PartSegCore_compiled_backend/multiscale_opening/mso_bind.pyx +0 -0
  35. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/src/PartSegCore_compiled_backend/multiscale_opening/my_queue.h +0 -0
  36. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/src/PartSegCore_compiled_backend/napari_mapping.py +0 -0
  37. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/src/PartSegCore_compiled_backend/sprawl_utils/__init__.py +0 -0
  38. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/src/PartSegCore_compiled_backend/sprawl_utils/distance_utils.pxd +0 -0
  39. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/src/PartSegCore_compiled_backend/sprawl_utils/euclidean_cython.pyi +0 -0
  40. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/src/PartSegCore_compiled_backend/sprawl_utils/euclidean_cython.pyx +0 -0
  41. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/src/PartSegCore_compiled_backend/sprawl_utils/find_split.py +0 -0
  42. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/src/PartSegCore_compiled_backend/sprawl_utils/find_split.pyi +0 -0
  43. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/src/PartSegCore_compiled_backend/sprawl_utils/fuzzy_distance.pyx +0 -0
  44. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/src/PartSegCore_compiled_backend/sprawl_utils/global_consts.h +0 -0
  45. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/src/PartSegCore_compiled_backend/sprawl_utils/my_queue.h +0 -0
  46. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/src/PartSegCore_compiled_backend/sprawl_utils/path_sprawl_cython.pyi +0 -0
  47. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/src/PartSegCore_compiled_backend/sprawl_utils/path_sprawl_cython.pyx +0 -0
  48. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/src/PartSegCore_compiled_backend/sprawl_utils/put_borders_in_queue.pyx +0 -0
  49. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/src/PartSegCore_compiled_backend/sprawl_utils/sprawl_utils.pyi +0 -0
  50. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/src/PartSegCore_compiled_backend/sprawl_utils/sprawl_utils.pyx +0 -0
  51. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/src/PartSegCore_compiled_backend/triangulate.pyx +0 -0
  52. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/src/PartSegCore_compiled_backend/triangulation/debug_util.hpp +0 -0
  53. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/src/PartSegCore_compiled_backend/triangulation/point.hpp +0 -0
  54. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/src/PartSegCore_compiled_backend/triangulation/triangulate.hpp +0 -0
  55. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/src/PartSegCore_compiled_backend/utils.py +0 -0
  56. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/src/tests/test_calc_bounds.py +0 -0
  57. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/src/tests/test_coloring.py +0 -0
  58. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/src/tests/test_fast_unique.py +0 -0
  59. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/src/tests/test_napari_mapping.py +0 -0
  60. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/src/tests/test_sprawl_utils/__init__.py +0 -0
  61. {partsegcore_compiled_backend-0.15.14 → partsegcore_compiled_backend-0.15.15}/src/tests/test_sprawl_utils/test_euclidean.py +0 -0
@@ -1,10 +1,10 @@
1
1
  repos:
2
2
  - repo: https://github.com/astral-sh/ruff-pre-commit
3
3
  # Ruff version.
4
- rev: v0.13.1
4
+ rev: v0.16.8
5
5
  hooks:
6
6
  # Run the linter.
7
- - id: ruff
7
+ - id: ruff-check
8
8
  # Run the formatter.
9
9
  - id: ruff-format
10
10
  - repo: https://github.com/pre-commit/pre-commit-hooks
@@ -22,18 +22,26 @@ repos:
22
22
  rev: v1.10.0
23
23
  hooks:
24
24
  - id: rst-backticks
25
- - repo: https://github.com/markdownlint/markdownlint
26
- rev: v0.12.0 # Use the ref you want to point at
25
+ - repo: https://github.com/executablebooks/mdformat
26
+ rev: 1.0.0 # Use the ref you want to point at
27
27
  hooks:
28
- - id: markdownlint
28
+ - id: mdformat
29
+ exclude: TEST_FAIL_TEMPLATE.md|bug_report.md|feature_request.md
30
+ args: ["--number"]
31
+ additional_dependencies:
32
+ - mdformat-gfm
33
+ - mdformat-footnote
34
+ - mdformat-gfm-alerts
35
+ - mdformat-ruff
36
+ - mdformat-toc
29
37
  - repo: https://github.com/codespell-project/codespell
30
- rev: v2.4.1
38
+ rev: v2.4.3
31
39
  hooks:
32
40
  - id: codespell
33
41
  additional_dependencies:
34
42
  - tomli
35
43
  - repo: https://github.com/pre-commit/mirrors-clang-format
36
- rev: v21.1.1 # Use the sha / tag you want to point at
44
+ rev: v23.1.1 # Use the sha / tag you want to point at
37
45
  hooks:
38
46
  - id: clang-format
39
47
  args: ["-style=Google"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: PartSegCore_compiled_backend
3
- Version: 0.15.14
3
+ Version: 0.15.15
4
4
  Summary: PartSegCore compiled backend,
5
5
  Keywords: bioimaging
6
6
  Author-Email: Grzegorz Bokota <g.bokota@cent.uw.edu.pl>
@@ -130,9 +130,11 @@ test-command = "pytest {project}/src/tests"
130
130
  test-extras = ["test"]
131
131
  skip = "pp*macos* pp31* pp39-manylinux*"
132
132
  build = "*64"
133
- enable = ["pypy", "cpython-freethreading"]
133
+ enable = ["pypy"]
134
134
 
135
135
  [tool.cibuildwheel.macos]
136
+ # libomp (LLVM 23) uses aligned_alloc, available since macOS 10.15
137
+ environment = { MACOSX_DEPLOYMENT_TARGET = "10.15" }
136
138
  before-all = [
137
139
  "set",
138
140
  "bash {project}/build_utils/build_libomp.sh",
@@ -133,8 +133,12 @@ enum Orientation {
133
133
  */
134
134
  inline Orientation _orientation(const point::Point& p, const point::Point& q,
135
135
  const point::Point& r) {
136
- double val1 = ((q.y - p.y) * (r.x - q.x));
137
- double val2 = ((r.y - q.y) * (q.x - p.x));
136
+ // Promote to double before multiplying: the float products lose precision
137
+ // and can flip the result for nearly collinear points.
138
+ double val1 =
139
+ (static_cast<double>(q.y) - p.y) * (static_cast<double>(r.x) - q.x);
140
+ double val2 =
141
+ (static_cast<double>(r.y) - q.y) * (static_cast<double>(q.x) - p.x);
138
142
  // This commented code if for debugging purposes of differences between macOS
139
143
  // and linux double val = ((q.y - p.y) * (r.x - q.x)) - ((r.y - q.y) * (q.x -
140
144
  // p.x)); if (val!= 0 && val1 == val2) {
@@ -337,15 +341,16 @@ inline std::unordered_set<OrderedPair> _find_intersections(
337
341
  */
338
342
  inline std::vector<point::Point> _find_intersection(const point::Segment& s1,
339
343
  const point::Segment& s2) {
344
+ // To reduce problems with float precision, the same pair of segments
345
+ // should always be calculated in the same order.
346
+ if (s2 < s1) return _find_intersection(s2, s1);
340
347
  // ReSharper disable CppJoinDeclarationAndAssignment
341
- point::Point::coordinate_t a1, b1, a2, b2, det, x, y, t;
342
- // point::Point::coordinate_t c1, c2, u;
343
- a1 = s1.top.y - s1.bottom.y;
344
- b1 = s1.bottom.x - s1.top.x;
345
- // c1 = a1 * s1.bottom.x + b1 * s1.bottom.y;
346
- a2 = s2.top.y - s2.bottom.y;
347
- b2 = s2.bottom.x - s2.top.x;
348
- // c2 = a2 * s2.bottom.x + b2 * s2.bottom.y;
348
+ double a1, b1, a2, b2, det, t;
349
+ point::Point::coordinate_t x, y;
350
+ a1 = static_cast<double>(s1.top.y) - s1.bottom.y;
351
+ b1 = static_cast<double>(s1.bottom.x) - s1.top.x;
352
+ a2 = static_cast<double>(s2.top.y) - s2.bottom.y;
353
+ b2 = static_cast<double>(s2.bottom.x) - s2.top.x;
349
354
  det = a1 * b2 - a2 * b1;
350
355
  if (det == 0) {
351
356
  // collinear case
@@ -356,15 +361,13 @@ inline std::vector<point::Point> _find_intersection(const point::Segment& s1,
356
361
  if (s2.point_on_line(s1.top)) res.push_back(s1.top);
357
362
  return res;
358
363
  }
359
- t = ((s2.top.x - s1.top.x) * (s2.bottom.y - s2.top.y) -
360
- (s2.top.y - s1.top.y) * (s2.bottom.x - s2.top.x)) /
364
+ t = ((static_cast<double>(s2.top.x) - s1.top.x) * -a2 -
365
+ (static_cast<double>(s2.top.y) - s1.top.y) * b2) /
361
366
  det;
362
- // u = ((s2.top.x - s1.top.x) * (s1.bottom.y - s1.top.y) -
363
- // (s2.top.y - s1.top.y) * (s2.bottom.x - s2.top.x)) / det;
364
367
  if (t < 0) return {s1.top};
365
368
  if (t > 1) return {s1.bottom};
366
- x = s1.top.x + t * b1;
367
- y = s1.top.y + t * (-a1);
369
+ x = s1.top.x + static_cast<point::Point::coordinate_t>(t * b1);
370
+ y = s1.top.y + static_cast<point::Point::coordinate_t>(t * (-a1));
368
371
  return {{x, y}};
369
372
  }
370
373
  } // namespace partsegcore::intersection
@@ -0,0 +1,24 @@
1
+ # file generated by vcs-versioning
2
+ # don't change, don't track in version control
3
+ from __future__ import annotations
4
+
5
+ __all__ = [
6
+ "__version__",
7
+ "__version_tuple__",
8
+ "version",
9
+ "version_tuple",
10
+ "__commit_id__",
11
+ "commit_id",
12
+ ]
13
+
14
+ version: str
15
+ __version__: str
16
+ __version_tuple__: tuple[int | str, ...]
17
+ version_tuple: tuple[int | str, ...]
18
+ commit_id: str | None
19
+ __commit_id__: str | None
20
+
21
+ __version__ = version = '0.15.15'
22
+ __version_tuple__ = version_tuple = (0, 15, 15)
23
+
24
+ __commit_id__ = commit_id = 'gc7ec30e77'
@@ -0,0 +1,570 @@
1
+ 2.029067968750000000e+04 2.404950195312500000e+04
2
+ 2.026631835937500000e+04 2.403294726562500000e+04
3
+ 2.025670898437500000e+04 2.396467578125000000e+04
4
+ 2.028290039062500000e+04 2.394192968750000000e+04
5
+ 2.026603710937500000e+04 2.388205273437500000e+04
6
+ 2.023153515625000000e+04 2.388622070312500000e+04
7
+ 2.022579492187500000e+04 2.381791601562500000e+04
8
+ 2.017229492187500000e+04 2.374486523437500000e+04
9
+ 2.021608593750000000e+04 2.373803710937500000e+04
10
+ 2.011988867187500000e+04 2.364859179687500000e+04
11
+ 2.007155859375000000e+04 2.357678710937500000e+04
12
+ 2.001443164062500000e+04 2.353214257812500000e+04
13
+ 1.990998828125000000e+04 2.353433984375000000e+04
14
+ 1.985698437500000000e+04 2.351932226562500000e+04
15
+ 1.979911718750000000e+04 2.353917187500000000e+04
16
+ 1.974989453125000000e+04 2.351380468750000000e+04
17
+ 1.971911914062500000e+04 2.353470703125000000e+04
18
+ 1.968275976562500000e+04 2.350535937500000000e+04
19
+ 1.965597460937500000e+04 2.354041406250000000e+04
20
+ 1.960955078125000000e+04 2.354081835937500000e+04
21
+ 1.956032617187500000e+04 2.351545117187500000e+04
22
+ 1.954836718750000000e+04 2.347428320312500000e+04
23
+ 1.947315429687500000e+04 2.342592773437500000e+04
24
+ 1.939641992187500000e+04 2.335050000000000000e+04
25
+ 1.934934570312500000e+04 2.327481445312500000e+04
26
+ 1.927438476562500000e+04 2.325611914062500000e+04
27
+ 1.920283203125000000e+04 2.318322656250000000e+04
28
+ 1.916012109375000000e+04 2.316554101562500000e+04
29
+ 1.914307031250000000e+04 2.313215429687500000e+04
30
+ 1.911074218750000000e+04 2.312211718750000000e+04
31
+ 1.912474804687500000e+04 2.310087109375000000e+04
32
+ 1.909763671875000000e+04 2.308096093750000000e+04
33
+ 1.900979296875000000e+04 2.308043359375000000e+04
34
+ 1.899569531250000000e+04 2.309087304687500000e+04
35
+ 1.895284179687500000e+04 2.305642382812500000e+04
36
+ 1.889984765625000000e+04 2.304269531250000000e+04
37
+ 1.882214257812500000e+04 2.300467968750000000e+04
38
+ 1.875972460937500000e+04 2.294460351562500000e+04
39
+ 1.866389843750000000e+04 2.289900585937500000e+04
40
+ 1.854620507812500000e+04 2.286004492187500000e+04
41
+ 1.847483593750000000e+04 2.280907421875000000e+04
42
+ 1.844240234375000000e+04 2.283337109375000000e+04
43
+ 1.838576757812500000e+04 2.282527343750000000e+04
44
+ 1.829405273437500000e+04 2.276732226562500000e+04
45
+ 1.822769531250000000e+04 2.269442187500000000e+04
46
+ 1.812605273437500000e+04 2.264884765625000000e+04
47
+ 1.801439062500000000e+04 2.258997265625000000e+04
48
+ 1.797648242187500000e+04 2.254728906250000000e+04
49
+ 1.790965429687500000e+04 2.252949023437500000e+04
50
+ 1.783273437500000000e+04 2.249144140625000000e+04
51
+ 1.775533203125000000e+04 2.247691992187500000e+04
52
+ 1.766158398437500000e+04 2.242877539062500000e+04
53
+ 1.760719335937500000e+04 2.238886523437500000e+04
54
+ 1.754871875000000000e+04 2.237379296875000000e+04
55
+ 1.751932617187500000e+04 2.233774218750000000e+04
56
+ 1.730468945312500000e+04 2.226163867187500000e+04
57
+ 1.716951367187500000e+04 2.222368164062500000e+04
58
+ 1.704849804687500000e+04 2.216455273437500000e+04
59
+ 1.695317578125000000e+04 2.213281250000000000e+04
60
+ 1.683397070312500000e+04 2.207413281250000000e+04
61
+ 1.674663085937500000e+04 2.200170312500000000e+04
62
+ 1.667750976562500000e+04 2.197936523437500000e+04
63
+ 1.653255078125000000e+04 2.190480468750000000e+04
64
+ 1.645490625000000000e+04 2.188717187500000000e+04
65
+ 1.632388867187500000e+04 2.183085351562500000e+04
66
+ 1.627165332031250000e+04 2.179719921875000000e+04
67
+ 1.619081542968750000e+04 2.176954882812500000e+04
68
+ 1.606919335937500000e+04 2.170218554687500000e+04
69
+ 1.601641015625000000e+04 2.165886523437500000e+04
70
+ 1.589643554687500000e+04 2.160764648437500000e+04
71
+ 1.581010742187500000e+04 2.156095703125000000e+04
72
+ 1.574621582031250000e+04 2.153803125000000000e+04
73
+ 1.558749316406250000e+04 2.145598242187500000e+04
74
+ 1.543580566406250000e+04 2.135831835937500000e+04
75
+ 1.535383300781250000e+04 2.132332421875000000e+04
76
+ 1.528976367187500000e+04 2.126484765625000000e+04
77
+ 1.523956640625000000e+04 2.123276171875000000e+04
78
+ 1.519392089843750000e+04 2.118129296875000000e+04
79
+ 1.511895312500000000e+04 2.112278125000000000e+04
80
+ 1.503601660156250000e+04 2.104036328125000000e+04
81
+ 1.494150000000000000e+04 2.098348046875000000e+04
82
+ 1.485238964843750000e+04 2.095083203125000000e+04
83
+ 1.479880859375000000e+04 2.090628125000000000e+04
84
+ 1.473879199218750000e+04 2.089159960937500000e+04
85
+ 1.466992480468750000e+04 2.084809765625000000e+04
86
+ 1.460319824218750000e+04 2.082539062500000000e+04
87
+ 1.452040625000000000e+04 2.076732031250000000e+04
88
+ 1.435269726562500000e+04 2.067397460937500000e+04
89
+ 1.418946777343750000e+04 2.059455468750000000e+04
90
+ 1.413737792968750000e+04 2.055846289062500000e+04
91
+ 1.397711718750000000e+04 2.049582031250000000e+04
92
+ 1.396131054687500000e+04 2.047391992187500000e+04
93
+ 1.385148730468750000e+04 2.041424023437500000e+04
94
+ 1.374012011718750000e+04 2.038053710937500000e+04
95
+ 1.368979199218750000e+04 2.032446484375000000e+04
96
+ 1.357850976562500000e+04 2.025732031250000000e+04
97
+ 1.345941699218750000e+04 2.015480468750000000e+04
98
+ 1.339886914062500000e+04 2.012197070312500000e+04
99
+ 1.328145019531250000e+04 1.999242187500000000e+04
100
+ 1.317935546875000000e+04 1.985132812500000000e+04
101
+ 1.311469140625000000e+04 1.980786523437500000e+04
102
+ 1.306388671875000000e+04 1.975793554687500000e+04
103
+ 1.302976269531250000e+04 1.970267773437500000e+04
104
+ 1.297900390625000000e+04 1.965950585937500000e+04
105
+ 1.293863574218750000e+04 1.956527734375000000e+04
106
+ 1.286706250000000000e+04 1.945950976562500000e+04
107
+ 1.276580957031250000e+04 1.935908203125000000e+04
108
+ 1.268605761718750000e+04 1.929478125000000000e+04
109
+ 1.265612011718750000e+04 1.924507031250000000e+04
110
+ 1.258577832031250000e+04 1.921758398437500000e+04
111
+ 1.246133886718750000e+04 1.910845898437500000e+04
112
+ 1.243359179687500000e+04 1.904793554687500000e+04
113
+ 1.233253710937500000e+04 1.893472460937500000e+04
114
+ 1.226178222656250000e+04 1.881623437500000000e+04
115
+ 1.218814257812500000e+04 1.874299414062500000e+04
116
+ 1.209400683593750000e+04 1.857976367187500000e+04
117
+ 1.199378417968750000e+04 1.848818750000000000e+04
118
+ 1.196227734375000000e+04 1.843443945312500000e+04
119
+ 1.186742089843750000e+04 1.837880859375000000e+04
120
+ 1.180190039062500000e+04 1.830043164062500000e+04
121
+ 1.173422851562500000e+04 1.824772265625000000e+04
122
+ 1.164022851562500000e+04 1.821220117187500000e+04
123
+ 1.152188378906250000e+04 1.813688867187500000e+04
124
+ 1.147341308593750000e+04 1.809890820312500000e+04
125
+ 1.137171875000000000e+04 1.806403515625000000e+04
126
+ 1.126145117187500000e+04 1.798162304687500000e+04
127
+ 1.110342968750000000e+04 1.790550976562500000e+04
128
+ 1.099955371093750000e+04 1.789867968750000000e+04
129
+ 1.087742285156250000e+04 1.785025585937500000e+04
130
+ 1.077609570312500000e+04 1.782286132812500000e+04
131
+ 1.054201953125000000e+04 1.783133398437500000e+04
132
+ 1.041437500000000000e+04 1.782599023437500000e+04
133
+ 1.029124316406250000e+04 1.786110351562500000e+04
134
+ 1.020952246093750000e+04 1.786258593750000000e+04
135
+ 1.017280371093750000e+04 1.784928320312500000e+04
136
+ 1.010682714843750000e+04 1.779159570312500000e+04
137
+ 1.003645996093750000e+04 1.776483593750000000e+04
138
+ 9.998660156250000000e+03 1.772768359375000000e+04
139
+ 9.963460937500000000e+03 1.765066796875000000e+04
140
+ 9.873398437500000000e+03 1.757876953125000000e+04
141
+ 9.833862304687500000e+03 1.751049804687500000e+04
142
+ 9.774826171875000000e+03 1.747555273437500000e+04
143
+ 9.724547851562500000e+03 1.747375781250000000e+04
144
+ 9.644480468750000000e+03 1.744701757812500000e+04
145
+ 9.477606445312500000e+03 1.744846093750000000e+04
146
+ 9.329179687500000000e+03 1.739299609375000000e+04
147
+ 9.292694335937500000e+03 1.739331054687500000e+04
148
+ 9.216972656250000000e+03 1.736797851562500000e+04
149
+ 9.097304687500000000e+03 1.729554882812500000e+04
150
+ 8.972371093750000000e+03 1.726189648437500000e+04
151
+ 8.945245117187500000e+03 1.722702539062500000e+04
152
+ 8.886674804687500000e+03 1.719972460937500000e+04
153
+ 8.855001953125000000e+03 1.716859375000000000e+04
154
+ 8.820028320312500000e+03 1.716171289062500000e+04
155
+ 8.711138671875000000e+03 1.710685937500000000e+04
156
+ 8.643079101562500000e+03 1.711325195312500000e+04
157
+ 8.550609375000000000e+03 1.710824804687500000e+04
158
+ 8.481304687500000000e+03 1.711529687500000000e+04
159
+ 8.328781250000000000e+03 1.711016601562500000e+04
160
+ 8.247391601562500000e+03 1.711731835937500000e+04
161
+ 8.090074218750000000e+03 1.711867968750000000e+04
162
+ 7.914561523437500000e+03 1.716275976562500000e+04
163
+ 7.812727050781250000e+03 1.716364062500000000e+04
164
+ 7.713734863281250000e+03 1.718771289062500000e+04
165
+ 7.639409667968750000e+03 1.718835546875000000e+04
166
+ 7.522776367187500000e+03 1.722640429687500000e+04
167
+ 7.445793457031250000e+03 1.731133007812500000e+04
168
+ 7.422085937500000000e+03 1.732026562500000000e+04
169
+ 7.371176757812500000e+03 1.740150976562500000e+04
170
+ 7.377716796875000000e+03 1.750098242187500000e+04
171
+ 7.433875976562500000e+03 1.756747265625000000e+04
172
+ 7.461587890625000000e+03 1.766317773437500000e+04
173
+ 7.526603515625000000e+03 1.779081640625000000e+04
174
+ 7.579823242187500000e+03 1.783780664062500000e+04
175
+ 7.618174804687500000e+03 1.789868554687500000e+04
176
+ 7.641685546875000000e+03 1.798422460937500000e+04
177
+ 7.643786621093750000e+03 1.808340039062500000e+04
178
+ 7.656231445312500000e+03 1.816142578125000000e+04
179
+ 7.630340820312500000e+03 1.822558398437500000e+04
180
+ 7.618059570312500000e+03 1.828997070312500000e+04
181
+ 7.535269531250000000e+03 1.839992968750000000e+04
182
+ 7.479681640625000000e+03 1.844047460937500000e+04
183
+ 7.428769042968750000e+03 1.853045703125000000e+04
184
+ 7.352376464843750000e+03 1.858624218750000000e+04
185
+ 7.281804687500000000e+03 1.865902734375000000e+04
186
+ 7.206596679687500000e+03 1.868304882812500000e+04
187
+ 7.005042968750000000e+03 1.868479296875000000e+04
188
+ 6.952565429687500000e+03 1.866725390625000000e+04
189
+ 6.832694335937500000e+03 1.857284960937500000e+04
190
+ 6.772167480468750000e+03 1.849356250000000000e+04
191
+ 6.652600585937500000e+03 1.838494140625000000e+04
192
+ 6.608810546875000000e+03 1.835467578125000000e+04
193
+ 6.564916992187500000e+03 1.827479492187500000e+04
194
+ 6.526380371093750000e+03 1.824200781250000000e+04
195
+ 6.479379394531250000e+03 1.822985156250000000e+04
196
+ 6.384748046875000000e+03 1.818332421875000000e+04
197
+ 6.270885742187500000e+03 1.810817382812500000e+04
198
+ 6.201706542968750000e+03 1.810877343750000000e+04
199
+ 6.161563476562500000e+03 1.808716796875000000e+04
200
+ 5.952607421875000000e+03 1.808900195312500000e+04
201
+ 5.821907714843750000e+03 1.814706250000000000e+04
202
+ 5.763791992187500000e+03 1.820292187500000000e+04
203
+ 5.725899414062500000e+03 1.827377343750000000e+04
204
+ 5.717454101562500000e+03 1.831622656250000000e+04
205
+ 5.690277343750000000e+03 1.834616601562500000e+04
206
+ 5.676694335937500000e+03 1.839408203125000000e+04
207
+ 5.561963378906250000e+03 1.851080273437500000e+04
208
+ 5.485389648437500000e+03 1.866568164062500000e+04
209
+ 5.409885742187500000e+03 1.874379882812500000e+04
210
+ 5.335548828125000000e+03 1.879861132812500000e+04
211
+ 5.283369140625000000e+03 1.881576562500000000e+04
212
+ 5.120507324218750000e+03 1.881717382812500000e+04
213
+ 5.029332031250000000e+03 1.879312109375000000e+04
214
+ 4.867397949218750000e+03 1.870283398437500000e+04
215
+ 4.795847656250000000e+03 1.865103710937500000e+04
216
+ 4.778916992187500000e+03 1.861247851562500000e+04
217
+ 4.715666015625000000e+03 1.858096289062500000e+04
218
+ 4.638639160156250000e+03 1.857628906250000000e+04
219
+ 4.491806640625000000e+03 1.853079296875000000e+04
220
+ 4.460532714843750000e+03 1.851463281250000000e+04
221
+ 4.286552734375000000e+03 1.851598437500000000e+04
222
+ 4.186043945312500000e+03 1.854796289062500000e+04
223
+ 4.136017089843750000e+03 1.854839453125000000e+04
224
+ 4.101404296875000000e+03 1.857746875000000000e+04
225
+ 4.059087890625000000e+03 1.858664453125000000e+04
226
+ 4.032560302734375000e+03 1.861255273437500000e+04
227
+ 3.989743896484375000e+03 1.862205468750000000e+04
228
+ 3.746425537109375000e+03 1.886962695312500000e+04
229
+ 3.733618896484375000e+03 1.891776953125000000e+04
230
+ 3.658141845703125000e+03 1.899587304687500000e+04
231
+ 3.623775390625000000e+03 1.906561132812500000e+04
232
+ 3.615143554687500000e+03 1.910877734375000000e+04
233
+ 3.585714843750000000e+03 1.914373828125000000e+04
234
+ 3.586441162109375000e+03 1.922823828125000000e+04
235
+ 3.552091064453125000e+03 1.928332421875000000e+04
236
+ 3.552828857421875000e+03 1.936911328125000000e+04
237
+ 3.518478759765625000e+03 1.942419921875000000e+04
238
+ 3.513024414062500000e+03 1.949480859375000000e+04
239
+ 3.486005615234375000e+03 1.952352148437500000e+04
240
+ 3.473926513671875000e+03 1.958267187500000000e+04
241
+ 3.430375244140625000e+03 1.971651367187500000e+04
242
+ 3.385135498046875000e+03 1.980853125000000000e+04
243
+ 3.329718994140625000e+03 1.986599218750000000e+04
244
+ 3.278843261718750000e+03 2.000886132812500000e+04
245
+ 3.252946044921875000e+03 2.003743554687500000e+04
246
+ 3.244315429687500000e+03 2.008060156250000000e+04
247
+ 3.218855957031250000e+03 2.010758398437500000e+04
248
+ 3.210412841796875000e+03 2.015003906250000000e+04
249
+ 3.184515625000000000e+03 2.017861328125000000e+04
250
+ 3.149002685546875000e+03 2.029160742187500000e+04
251
+ 3.098723388671875000e+03 2.040473242187500000e+04
252
+ 3.090038330078125000e+03 2.044450585937500000e+04
253
+ 3.093437744140625000e+03 2.083804101562500000e+04
254
+ 3.126782226562500000e+03 2.096531250000000000e+04
255
+ 3.127619873046875000e+03 2.106216796875000000e+04
256
+ 3.180916748046875000e+03 2.119673437500000000e+04
257
+ 3.261877441406250000e+03 2.132216210937500000e+04
258
+ 3.296692382812500000e+03 2.141200390625000000e+04
259
+ 3.300525634765625000e+03 2.145102539062500000e+04
260
+ 3.329916992187500000e+03 2.152521875000000000e+04
261
+ 3.354444580078125000e+03 2.163790039062500000e+04
262
+ 3.370982421875000000e+03 2.176028906250000000e+04
263
+ 3.377687500000000000e+03 2.193858398437500000e+04
264
+ 3.349148193359375000e+03 2.215449804687500000e+04
265
+ 3.349399414062500000e+03 2.224585351562500000e+04
266
+ 3.359076171875000000e+03 2.232052539062500000e+04
267
+ 3.350291259765625000e+03 2.234856445312500000e+04
268
+ 3.351404052734375000e+03 2.247671093750000000e+04
269
+ 3.373951660156250000e+03 2.255569726562500000e+04
270
+ 3.418291992187500000e+03 2.260006835937500000e+04
271
+ 3.447371826171875000e+03 2.268570507812500000e+04
272
+ 3.447765136718750000e+03 2.273097460937500000e+04
273
+ 3.486172607421875000e+03 2.278719921875000000e+04
274
+ 3.482500976562500000e+03 2.292713671875000000e+04
275
+ 3.528857666015625000e+03 2.296607421875000000e+04
276
+ 3.538603759765625000e+03 2.303229882812500000e+04
277
+ 3.511715820312500000e+03 2.311427929687500000e+04
278
+ 3.523372314453125000e+03 2.315990234375000000e+04
279
+ 3.562746826171875000e+03 2.319086523437500000e+04
280
+ 3.589098388671875000e+03 2.323704492187500000e+04
281
+ 3.661531982421875000e+03 2.330539648437500000e+04
282
+ 3.755188232421875000e+03 2.336554101562500000e+04
283
+ 3.799999023437500000e+03 2.340762695312500000e+04
284
+ 3.846763183593750000e+03 2.342958593750000000e+04
285
+ 3.968414306640625000e+03 2.343573046875000000e+04
286
+ 4.014926757812500000e+03 2.341394140625000000e+04
287
+ 4.285226074218750000e+03 2.341160156250000000e+04
288
+ 4.363020996093750000e+03 2.337712109375000000e+04
289
+ 4.474038574218750000e+03 2.337514062500000000e+04
290
+ 4.588990722656250000e+03 2.338059375000000000e+04
291
+ 4.645762695312500000e+03 2.340099804687500000e+04
292
+ 4.783469238281250000e+03 2.355820703125000000e+04
293
+ 4.818433593750000000e+03 2.363371875000000000e+04
294
+ 4.848883300781250000e+03 2.366469335937500000e+04
295
+ 4.869827636718750000e+03 2.373280859375000000e+04
296
+ 4.977874023437500000e+03 2.383995898437500000e+04
297
+ 5.027005859375000000e+03 2.394141406250000000e+04
298
+ 5.113432128906250000e+03 2.398735742187500000e+04
299
+ 5.164187988281250000e+03 2.403084765625000000e+04
300
+ 5.187327636718750000e+03 2.406953515625000000e+04
301
+ 5.291292480468750000e+03 2.412124609375000000e+04
302
+ 5.365128417968750000e+03 2.419656445312500000e+04
303
+ 5.426392089843750000e+03 2.422333789062500000e+04
304
+ 5.457322265625000000e+03 2.426802148437500000e+04
305
+ 5.501503417968750000e+03 2.427331250000000000e+04
306
+ 5.585341796875000000e+03 2.431833593750000000e+04
307
+ 5.696886230468750000e+03 2.442140625000000000e+04
308
+ 5.780453613281250000e+03 2.445751953125000000e+04
309
+ 5.820649902343750000e+03 2.451921093750000000e+04
310
+ 5.833442871093750000e+03 2.457097656250000000e+04
311
+ 5.893768066406250000e+03 2.459364453125000000e+04
312
+ 5.938048828125000000e+03 2.462519726562500000e+04
313
+ 5.982570312500000000e+03 2.470219921875000000e+04
314
+ 6.004197265625000000e+03 2.477462890625000000e+04
315
+ 6.168975585937500000e+03 2.492888085937500000e+04
316
+ 6.179100097656250000e+03 2.496739843750000000e+04
317
+ 6.231009765625000000e+03 2.507829687500000000e+04
318
+ 6.308170898437500000e+03 2.517711132812500000e+04
319
+ 6.333130371093750000e+03 2.522637304687500000e+04
320
+ 6.347707519531250000e+03 2.529936523437500000e+04
321
+ 6.415401855468750000e+03 2.538333984375000000e+04
322
+ 6.459376464843750000e+03 2.546128906250000000e+04
323
+ 6.637791015625000000e+03 2.564421093750000000e+04
324
+ 6.679791015625000000e+03 2.567899414062500000e+04
325
+ 6.720562988281250000e+03 2.575946093750000000e+04
326
+ 6.794536132812500000e+03 2.585359570312500000e+04
327
+ 6.913812011718750000e+03 2.599312500000000000e+04
328
+ 7.010680175781250000e+03 2.606686328125000000e+04
329
+ 7.098095214843750000e+03 2.617323632812500000e+04
330
+ 7.171892578125000000e+03 2.628282421875000000e+04
331
+ 7.231979003906250000e+03 2.633450195312500000e+04
332
+ 7.310220214843750000e+03 2.646864843750000000e+04
333
+ 7.383843261718750000e+03 2.651822265625000000e+04
334
+ 7.487861328125000000e+03 2.662673437500000000e+04
335
+ 7.541147460937500000e+03 2.665875000000000000e+04
336
+ 7.629165039062500000e+03 2.673227929687500000e+04
337
+ 7.660623535156250000e+03 2.679626562500000000e+04
338
+ 7.829224609375000000e+03 2.690717187500000000e+04
339
+ 7.903329101562500000e+03 2.697215429687500000e+04
340
+ 8.014062011718750000e+03 2.702243750000000000e+04
341
+ 8.191990234375000000e+03 2.714118164062500000e+04
342
+ 8.274635742187500000e+03 2.722880273437500000e+04
343
+ 8.300904296875000000e+03 2.727598828125000000e+04
344
+ 8.392316406250000000e+03 2.733807421875000000e+04
345
+ 8.466873046875000000e+03 2.740474218750000000e+04
346
+ 8.498178710937500000e+03 2.744824609375000000e+04
347
+ 8.537940429687500000e+03 2.747352929687500000e+04
348
+ 8.663455078125000000e+03 2.759689453125000000e+04
349
+ 8.693246093750000000e+03 2.765316796875000000e+04
350
+ 8.811126953125000000e+03 2.769962304687500000e+04
351
+ 8.928100585937500000e+03 2.780034765625000000e+04
352
+ 9.119741210937500000e+03 2.789170312500000000e+04
353
+ 9.141291992187500000e+03 2.792733398437500000e+04
354
+ 9.120637695312500000e+03 2.796516406250000000e+04
355
+ 9.160181640625000000e+03 2.798921093750000000e+04
356
+ 9.242094726562500000e+03 2.806857031250000000e+04
357
+ 9.278351562500000000e+03 2.808233984375000000e+04
358
+ 9.342726562500000000e+03 2.814561328125000000e+04
359
+ 9.357148437500000000e+03 2.818157617187500000e+04
360
+ 9.579760742187500000e+03 2.840159375000000000e+04
361
+ 9.594115234375000000e+03 2.843874414062500000e+04
362
+ 9.651414062500000000e+03 2.849504882812500000e+04
363
+ 9.665859375000000000e+03 2.853227734375000000e+04
364
+ 9.723157226562500000e+03 2.858858203125000000e+04
365
+ 9.737551757812500000e+03 2.862591210937500000e+04
366
+ 9.787964843750000000e+03 2.867638281250000000e+04
367
+ 9.896620117187500000e+03 2.873605859375000000e+04
368
+ 9.984408203125000000e+03 2.882234570312500000e+04
369
+ 1.000492285156250000e+04 2.886496289062500000e+04
370
+ 1.003970312500000000e+04 2.887669531250000000e+04
371
+ 1.019773046875000000e+04 2.903201953125000000e+04
372
+ 1.021217578125000000e+04 2.906924609375000000e+04
373
+ 1.026947265625000000e+04 2.912555078125000000e+04
374
+ 1.028396679687500000e+04 2.916395117187500000e+04
375
+ 1.038789843750000000e+04 2.926495507812500000e+04
376
+ 1.044952441406250000e+04 2.937286523437500000e+04
377
+ 1.053023437500000000e+04 2.945218359375000000e+04
378
+ 1.054467871093750000e+04 2.948941015625000000e+04
379
+ 1.076847851562500000e+04 2.971065039062500000e+04
380
+ 1.078291113281250000e+04 2.974658789062500000e+04
381
+ 1.095278320312500000e+04 2.991355664062500000e+04
382
+ 1.098896093750000000e+04 2.992736523437500000e+04
383
+ 1.104753320312500000e+04 2.998365820312500000e+04
384
+ 1.115485351562500000e+04 3.004308593750000000e+04
385
+ 1.123694335937500000e+04 3.012264843750000000e+04
386
+ 1.127424218750000000e+04 3.013646093750000000e+04
387
+ 1.152166796875000000e+04 3.037936718750000000e+04
388
+ 1.157652050781250000e+04 3.041132812500000000e+04
389
+ 1.161271484375000000e+04 3.046887304687500000e+04
390
+ 1.172190820312500000e+04 3.052887890625000000e+04
391
+ 1.175431640625000000e+04 3.056169140625000000e+04
392
+ 1.186287500000000000e+04 3.062140625000000000e+04
393
+ 1.196790136718750000e+04 3.070061328125000000e+04
394
+ 1.210007910156250000e+04 3.076121679687500000e+04
395
+ 1.228117480468750000e+04 3.086563281250000000e+04
396
+ 1.234582812500000000e+04 3.088574414062500000e+04
397
+ 1.247823535156250000e+04 3.094623046875000000e+04
398
+ 1.251080371093750000e+04 3.097825585937500000e+04
399
+ 1.289564648437500000e+04 3.116595703125000000e+04
400
+ 1.300103515625000000e+04 3.118902929687500000e+04
401
+ 1.310840136718750000e+04 3.123504101562500000e+04
402
+ 1.315871679687500000e+04 3.123460156250000000e+04
403
+ 1.324943164062500000e+04 3.128024218750000000e+04
404
+ 1.330091992187500000e+04 3.127979492187500000e+04
405
+ 1.341481640625000000e+04 3.132652343750000000e+04
406
+ 1.344941894531250000e+04 3.132692968750000000e+04
407
+ 1.353224316406250000e+04 3.136078710937500000e+04
408
+ 1.356682519531250000e+04 3.134841406250000000e+04
409
+ 1.372189550781250000e+04 3.134706054687500000e+04
410
+ 1.376594824218750000e+04 3.137118359375000000e+04
411
+ 1.388590625000000000e+04 3.137013671875000000e+04
412
+ 1.392992187500000000e+04 3.139296875000000000e+04
413
+ 1.415975390625000000e+04 3.139096484375000000e+04
414
+ 1.420272460937500000e+04 3.136737304687500000e+04
415
+ 1.427623632812500000e+04 3.136673242187500000e+04
416
+ 1.431986718750000000e+04 3.134184570312500000e+04
417
+ 1.438080664062500000e+04 3.134131445312500000e+04
418
+ 1.442485839843750000e+04 3.136543554687500000e+04
419
+ 1.447516015625000000e+04 3.136499804687500000e+04
420
+ 1.451853125000000000e+04 3.138783593750000000e+04
421
+ 1.488891210937500000e+04 3.138460546875000000e+04
422
+ 1.493252832031250000e+04 3.136100781250000000e+04
423
+ 1.510019531250000000e+04 3.135954687500000000e+04
424
+ 1.514382519531250000e+04 3.133466015625000000e+04
425
+ 1.535982128906250000e+04 3.133277539062500000e+04
426
+ 1.540279199218750000e+04 3.130918554687500000e+04
427
+ 1.545308007812500000e+04 3.130874609375000000e+04
428
+ 1.553514843750000000e+04 3.126237304687500000e+04
429
+ 1.557003417968750000e+04 3.126129492187500000e+04
430
+ 1.566116210937500000e+04 3.121277929687500000e+04
431
+ 1.573466113281250000e+04 3.121213867187500000e+04
432
+ 1.577827636718750000e+04 3.118854296875000000e+04
433
+ 1.601299316406250000e+04 3.118778515625000000e+04
434
+ 1.605660937500000000e+04 3.116418945312500000e+04
435
+ 1.613014648437500000e+04 3.116354687500000000e+04
436
+ 1.617377734375000000e+04 3.113866210937500000e+04
437
+ 1.622526562500000000e+04 3.113821289062500000e+04
438
+ 1.634011523437500000e+04 3.107394726562500000e+04
439
+ 1.646544140625000000e+04 3.101620898437500000e+04
440
+ 1.657506640625000000e+04 3.095324023437500000e+04
441
+ 1.660423828125000000e+04 3.094586718750000000e+04
442
+ 1.664687695312500000e+04 3.090618359375000000e+04
443
+ 1.672301367187500000e+04 3.087316015625000000e+04
444
+ 1.685006835937500000e+04 3.075233789062500000e+04
445
+ 1.687947070312500000e+04 3.068923046875000000e+04
446
+ 1.701177148437500000e+04 3.055460156250000000e+04
447
+ 1.704899414062500000e+04 3.054015429687500000e+04
448
+ 1.710529492187500000e+04 3.048284960937500000e+04
449
+ 1.714380468750000000e+04 3.046839062500000000e+04
450
+ 1.719882812500000000e+04 3.041238671875000000e+04
451
+ 1.723604882812500000e+04 3.039793945312500000e+04
452
+ 1.737997460937500000e+04 3.025016992187500000e+04
453
+ 1.741167187500000000e+04 3.017346289062500000e+04
454
+ 1.745111914062500000e+04 3.010413085937500000e+04
455
+ 1.745164648437500000e+04 3.006772851562500000e+04
456
+ 1.747500195312500000e+04 3.003178710937500000e+04
457
+ 1.754283007812500000e+04 2.982087500000000000e+04
458
+ 1.754238867187500000e+04 2.976937890625000000e+04
459
+ 1.756651367187500000e+04 2.972531835937500000e+04
460
+ 1.756547460937500000e+04 2.960407812500000000e+04
461
+ 1.758831640625000000e+04 2.956069726562500000e+04
462
+ 1.758787890625000000e+04 2.950974414062500000e+04
463
+ 1.761072460937500000e+04 2.946689257812500000e+04
464
+ 1.761028320312500000e+04 2.941539648437500000e+04
465
+ 1.763312890625000000e+04 2.937254687500000000e+04
466
+ 1.763268750000000000e+04 2.932105078125000000e+04
467
+ 1.765681250000000000e+04 2.927698828125000000e+04
468
+ 1.765638085937500000e+04 2.922667968750000000e+04
469
+ 1.770183593750000000e+04 2.911345703125000000e+04
470
+ 1.773152539062500000e+04 2.896630859375000000e+04
471
+ 1.772811328125000000e+04 2.856783203125000000e+04
472
+ 1.771992187500000000e+04 2.851486914062500000e+04
473
+ 1.768052734375000000e+04 2.843237109375000000e+04
474
+ 1.768010156250000000e+04 2.838266796875000000e+04
475
+ 1.765521875000000000e+04 2.833841406250000000e+04
476
+ 1.765418164062500000e+04 2.821726367187500000e+04
477
+ 1.763060546875000000e+04 2.817481640625000000e+04
478
+ 1.762995898437500000e+04 2.809935937500000000e+04
479
+ 1.760721875000000000e+04 2.806417968750000000e+04
480
+ 1.759666992187500000e+04 2.799957812500000000e+04
481
+ 1.754902539062500000e+04 2.788883007812500000e+04
482
+ 1.748198828125000000e+04 2.776368750000000000e+04
483
+ 1.744511718750000000e+04 2.772740625000000000e+04
484
+ 1.741468359375000000e+04 2.765823046875000000e+04
485
+ 1.741353320312500000e+04 2.752397851562500000e+04
486
+ 1.740342968750000000e+04 2.746605273437500000e+04
487
+ 1.742522070312500000e+04 2.738745898437500000e+04
488
+ 1.747479882812500000e+04 2.730527148437500000e+04
489
+ 1.760346093750000000e+04 2.717260937500000000e+04
490
+ 1.767556835937500000e+04 2.712644140625000000e+04
491
+ 1.774347265625000000e+04 2.705795898437500000e+04
492
+ 1.788370507812500000e+04 2.696279296875000000e+04
493
+ 1.800704296875000000e+04 2.690249414062500000e+04
494
+ 1.807427734375000000e+04 2.685342773437500000e+04
495
+ 1.815277539062500000e+04 2.677356835937500000e+04
496
+ 1.824125390625000000e+04 2.662240039062500000e+04
497
+ 1.829629296875000000e+04 2.656641210937500000e+04
498
+ 1.830515429687500000e+04 2.653504492187500000e+04
499
+ 1.841929296875000000e+04 2.640612304687500000e+04
500
+ 1.854045117187500000e+04 2.635758203125000000e+04
501
+ 1.873197265625000000e+04 2.635591601562500000e+04
502
+ 1.877494726562500000e+04 2.633232617187500000e+04
503
+ 1.887964453125000000e+04 2.633141601562500000e+04
504
+ 1.891269335937500000e+04 2.631126562500000000e+04
505
+ 1.896242382812500000e+04 2.631006054687500000e+04
506
+ 1.900667773437500000e+04 2.628516992187500000e+04
507
+ 1.905764062500000000e+04 2.628472656250000000e+04
508
+ 1.912707617187500000e+04 2.626090820312500000e+04
509
+ 1.920977148437500000e+04 2.621453125000000000e+04
510
+ 1.924402734375000000e+04 2.621345898437500000e+04
511
+ 1.931244921875000000e+04 2.617205664062500000e+04
512
+ 1.939168164062500000e+04 2.613839062500000000e+04
513
+ 1.946241796875000000e+04 2.609015820312500000e+04
514
+ 1.956605273437500000e+04 2.598601367187500000e+04
515
+ 1.960197460937500000e+04 2.597157812500000000e+04
516
+ 1.969864453125000000e+04 2.587323437500000000e+04
517
+ 1.973289062500000000e+04 2.579392578125000000e+04
518
+ 1.982325976562500000e+04 2.565384960937500000e+04
519
+ 1.986222656250000000e+04 2.561080859375000000e+04
520
+ 1.991507031250000000e+04 2.549081640625000000e+04
521
+ 1.993931835937500000e+04 2.546094140625000000e+04
522
+ 1.995429882812500000e+04 2.540277343750000000e+04
523
+ 1.997972656250000000e+04 2.539336914062500000e+04
524
+ 1.997186718750000000e+04 2.534587304687500000e+04
525
+ 2.000095507812500000e+04 2.527855273437500000e+04
526
+ 1.999982226562500000e+04 2.514572070312500000e+04
527
+ 2.003843164062500000e+04 2.513635742187500000e+04
528
+ 2.002507421875000000e+04 2.508230468750000000e+04
529
+ 1.998919726562500000e+04 2.510970117187500000e+04
530
+ 1.998867968750000000e+04 2.504908789062500000e+04
531
+ 2.001278515625000000e+04 2.500244726562500000e+04
532
+ 2.001025390625000000e+04 2.485673046875000000e+04
533
+ 2.002043750000000000e+04 2.484116601562500000e+04
534
+ 2.002091406250000000e+04 2.474572070312500000e+04
535
+ 2.006262109375000000e+04 2.464604882812500000e+04
536
+ 2.013422070312500000e+04 2.457320312500000000e+04
537
+ 2.019986718750000000e+04 2.455844531250000000e+04
538
+ 2.019570117187500000e+04 2.452365820312500000e+04
539
+ 2.026135156250000000e+04 2.435800195312500000e+04
540
+ 2.026828515625000000e+04 2.426379296875000000e+04
541
+ 2.025897265625000000e+04 2.423033984375000000e+04
542
+ 2.029213085937500000e+04 2.421973437500000000e+04
543
+ 2.025854492187500000e+04 2.418004492187500000e+04
544
+ 2.026575390625000000e+04 2.411807421875000000e+04
545
+ 2.029139257812500000e+04 2.413332812500000000e+04
546
+ 2.029067968750000000e+04 2.404950195312500000e+04
547
+ 3.321274169921875000e+03 2.034471093750000000e+04
548
+ 3.370284423828125000e+03 2.018542773437500000e+04
549
+ 3.480557128906250000e+03 2.006290234375000000e+04
550
+ 3.652092773437500000e+03 1.997713281250000000e+04
551
+ 3.786870849609375000e+03 2.003839648437500000e+04
552
+ 3.823628417968750000e+03 2.020993164062500000e+04
553
+ 3.823628417968750000e+03 2.035696289062500000e+04
554
+ 3.762365722656250000e+03 2.061426562500000000e+04
555
+ 3.701103027343750000e+03 2.072453906250000000e+04
556
+ 3.603082763671875000e+03 2.083481250000000000e+04
557
+ 3.321274169921875000e+03 2.034471093750000000e+04
558
+ 2.029067968750000000e+04 2.404950195312500000e+04
559
+ 3.627587646484375000e+03 2.183952148437500000e+04
560
+ 3.713355468750000000e+03 2.165573242187500000e+04
561
+ 3.884891113281250000e+03 2.139842968750000000e+04
562
+ 4.044174316406250000e+03 2.138617578125000000e+04
563
+ 4.240214843750000000e+03 2.166798437500000000e+04
564
+ 4.240214843750000000e+03 2.180276367187500000e+04
565
+ 4.129941894531250000e+03 2.208457226562500000e+04
566
+ 3.970658935546875000e+03 2.221934960937500000e+04
567
+ 3.848133544921875000e+03 2.228061132812500000e+04
568
+ 3.725608154296875000e+03 2.224385546875000000e+04
569
+ 3.627587646484375000e+03 2.183952148437500000e+04
570
+ 2.029067968750000000e+04 2.404950195312500000e+04
@@ -1,3 +1,5 @@
1
+ from pathlib import Path
2
+
1
3
  import numpy as np
2
4
  import pytest
3
5
  from PartSegCore_compiled_backend.triangulate import (
@@ -20,6 +22,8 @@ from PartSegCore_compiled_backend.triangulate import (
20
22
  triangulate_polygon_with_edge_numpy_li,
21
23
  )
22
24
 
25
+ DATA_DIR = Path(__file__).parent / 'data'
26
+
23
27
 
24
28
  def test_on_segment():
25
29
  assert on_segment((0, 0), (0, 1), (0, 2))
@@ -743,3 +747,15 @@ def test_is_convex_regular_polygon(angle, n_vertex, reverse):
743
747
  rot = rotation_matrix(angle)
744
748
  rotated_poly = np.dot(poly, rot)
745
749
  assert is_convex(rotated_poly)
750
+
751
+
752
+ def test_hole_triangulation_precision():
753
+ # Polygon with two holes (napari single path encoding) from napari/bermuda#194.
754
+ # Float precision errors in orientation/intersection used to silently drop ~30% of the area.
755
+ vertices = np.loadtxt(DATA_DIR / 'create_holes_triangulation_failure.txt', dtype=np.float32)
756
+ triangles, points = triangulate_polygon_numpy_li([vertices])
757
+ tri_points = points.astype(np.float64)[triangles]
758
+ v1 = tri_points[:, 1] - tri_points[:, 0]
759
+ v2 = tri_points[:, 2] - tri_points[:, 0]
760
+ area = np.abs(v1[:, 0] * v2[:, 1] - v1[:, 1] * v2[:, 0]).sum() / 2
761
+ assert area == pytest.approx(139420612.3, rel=1e-6)
@@ -1,34 +0,0 @@
1
- # file generated by setuptools-scm
2
- # don't change, don't track in version control
3
-
4
- __all__ = [
5
- "__version__",
6
- "__version_tuple__",
7
- "version",
8
- "version_tuple",
9
- "__commit_id__",
10
- "commit_id",
11
- ]
12
-
13
- TYPE_CHECKING = False
14
- if TYPE_CHECKING:
15
- from typing import Tuple
16
- from typing import Union
17
-
18
- VERSION_TUPLE = Tuple[Union[int, str], ...]
19
- COMMIT_ID = Union[str, None]
20
- else:
21
- VERSION_TUPLE = object
22
- COMMIT_ID = object
23
-
24
- version: str
25
- __version__: str
26
- __version_tuple__: VERSION_TUPLE
27
- version_tuple: VERSION_TUPLE
28
- commit_id: COMMIT_ID
29
- __commit_id__: COMMIT_ID
30
-
31
- __version__ = version = '0.15.14'
32
- __version_tuple__ = version_tuple = (0, 15, 14)
33
-
34
- __commit_id__ = commit_id = 'ga18220505'