gri-plot 0.2.2__tar.gz → 0.2.3__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 (73) hide show
  1. {gri_plot-0.2.2 → gri_plot-0.2.3}/.docs_other_projects.md +10 -6
  2. {gri_plot-0.2.2 → gri_plot-0.2.3}/.init_venv.sh +8 -3
  3. {gri_plot-0.2.2 → gri_plot-0.2.3}/PKG-INFO +2 -2
  4. {gri_plot-0.2.2 → gri_plot-0.2.3}/gri_plot/figure_map.py +38 -14
  5. {gri_plot-0.2.2 → gri_plot-0.2.3}/pyproject.toml +1 -1
  6. gri_plot-0.2.3/report.xml +1 -0
  7. gri_plot-0.2.2/report.xml +0 -1
  8. {gri_plot-0.2.2 → gri_plot-0.2.3}/.coveragerc +0 -0
  9. {gri_plot-0.2.2 → gri_plot-0.2.3}/.gitignore +0 -0
  10. {gri_plot-0.2.2 → gri_plot-0.2.3}/.gitlab-ci-deps.yml +0 -0
  11. {gri_plot-0.2.2 → gri_plot-0.2.3}/.gitlab-ci.yml +0 -0
  12. {gri_plot-0.2.2 → gri_plot-0.2.3}/.pre-commit-config.yaml +0 -0
  13. {gri_plot-0.2.2 → gri_plot-0.2.3}/.pre-commit-unskipped.py +0 -0
  14. {gri_plot-0.2.2 → gri_plot-0.2.3}/.python-version +0 -0
  15. {gri_plot-0.2.2 → gri_plot-0.2.3}/.ruff.toml +0 -0
  16. {gri_plot-0.2.2 → gri_plot-0.2.3}/.vscode/settings.json +0 -0
  17. {gri_plot-0.2.2 → gri_plot-0.2.3}/CONTRIBUTING.md +0 -0
  18. {gri_plot-0.2.2 → gri_plot-0.2.3}/LICENSE +0 -0
  19. {gri_plot-0.2.2 → gri_plot-0.2.3}/README.md +0 -0
  20. {gri_plot-0.2.2 → gri_plot-0.2.3}/gri_plot/__init__.py +0 -0
  21. {gri_plot-0.2.2 → gri_plot-0.2.3}/gri_plot/figure3d.py +0 -0
  22. {gri_plot-0.2.2 → gri_plot-0.2.3}/gri_plot/frames.py +0 -0
  23. {gri_plot-0.2.2 → gri_plot-0.2.3}/gri_plot/observables/__init__.py +0 -0
  24. {gri_plot-0.2.2 → gri_plot-0.2.3}/gri_plot/observables/aoa.py +0 -0
  25. {gri_plot-0.2.2 → gri_plot-0.2.3}/gri_plot/observables/fdoa.py +0 -0
  26. {gri_plot-0.2.2 → gri_plot-0.2.3}/gri_plot/observables/los.py +0 -0
  27. {gri_plot-0.2.2 → gri_plot-0.2.3}/gri_plot/observables/range_sphere.py +0 -0
  28. {gri_plot-0.2.2 → gri_plot-0.2.3}/gri_plot/observables/tdoa.py +0 -0
  29. {gri_plot-0.2.2 → gri_plot-0.2.3}/gri_plot/observables/terrain.py +0 -0
  30. {gri_plot-0.2.2 → gri_plot-0.2.3}/gri_plot/plot_ellipse.py +0 -0
  31. {gri_plot-0.2.2 → gri_plot-0.2.3}/gri_plot/py.typed +0 -0
  32. {gri_plot-0.2.2 → gri_plot-0.2.3}/gri_plot/scatter.py +0 -0
  33. {gri_plot-0.2.2 → gri_plot-0.2.3}/gri_plot/scatter_map.py +0 -0
  34. {gri_plot-0.2.2 → gri_plot-0.2.3}/gri_plot/shapes/__init__.py +0 -0
  35. {gri_plot-0.2.2 → gri_plot-0.2.3}/gri_plot/shapes/cone.py +0 -0
  36. {gri_plot-0.2.2 → gri_plot-0.2.3}/gri_plot/shapes/cylinder.py +0 -0
  37. {gri_plot-0.2.2 → gri_plot-0.2.3}/gri_plot/shapes/ellipse.py +0 -0
  38. {gri_plot-0.2.2 → gri_plot-0.2.3}/gri_plot/shapes/ellipsoid.py +0 -0
  39. {gri_plot-0.2.2 → gri_plot-0.2.3}/gri_plot/shapes/meshgen.py +0 -0
  40. {gri_plot-0.2.2 → gri_plot-0.2.3}/gri_plot/shapes/sphere.py +0 -0
  41. {gri_plot-0.2.2 → gri_plot-0.2.3}/gri_plot/surfaces/__init__.py +0 -0
  42. {gri_plot-0.2.2 → gri_plot-0.2.3}/gri_plot/surfaces/gradients/__init__.py +0 -0
  43. {gri_plot-0.2.2 → gri_plot-0.2.3}/gri_plot/surfaces/gradients/axis.py +0 -0
  44. {gri_plot-0.2.2 → gri_plot-0.2.3}/gri_plot/surfaces/gradients/line.py +0 -0
  45. {gri_plot-0.2.2 → gri_plot-0.2.3}/gri_plot/surfaces/gradients/plane.py +0 -0
  46. {gri_plot-0.2.2 → gri_plot-0.2.3}/gri_plot/surfaces/gradients/point.py +0 -0
  47. {gri_plot-0.2.2 → gri_plot-0.2.3}/gri_plot/surfaces/intersection.py +0 -0
  48. {gri_plot-0.2.2 → gri_plot-0.2.3}/gri_plot/surfaces/mesh.py +0 -0
  49. {gri_plot-0.2.2 → gri_plot-0.2.3}/notes.txt +0 -0
  50. {gri_plot-0.2.2 → gri_plot-0.2.3}/test/__init__.py +0 -0
  51. {gri_plot-0.2.2 → gri_plot-0.2.3}/test/test_figure3d.py +0 -0
  52. {gri_plot-0.2.2 → gri_plot-0.2.3}/test/test_figure_map.py +0 -0
  53. {gri_plot-0.2.2 → gri_plot-0.2.3}/test/test_frames.py +0 -0
  54. {gri_plot-0.2.2 → gri_plot-0.2.3}/test/test_observables/__init__.py +0 -0
  55. {gri_plot-0.2.2 → gri_plot-0.2.3}/test/test_observables/test_aoa.py +0 -0
  56. {gri_plot-0.2.2 → gri_plot-0.2.3}/test/test_observables/test_fdoa.py +0 -0
  57. {gri_plot-0.2.2 → gri_plot-0.2.3}/test/test_observables/test_los.py +0 -0
  58. {gri_plot-0.2.2 → gri_plot-0.2.3}/test/test_observables/test_range_sphere.py +0 -0
  59. {gri_plot-0.2.2 → gri_plot-0.2.3}/test/test_observables/test_tdoa.py +0 -0
  60. {gri_plot-0.2.2 → gri_plot-0.2.3}/test/test_observables/test_terrain.py +0 -0
  61. {gri_plot-0.2.2 → gri_plot-0.2.3}/test/test_plot_ellipse.py +0 -0
  62. {gri_plot-0.2.2 → gri_plot-0.2.3}/test/test_plot_scattermap.py +0 -0
  63. {gri_plot-0.2.2 → gri_plot-0.2.3}/test/test_scatter.py +0 -0
  64. {gri_plot-0.2.2 → gri_plot-0.2.3}/test/test_shapes/__init__.py +0 -0
  65. {gri_plot-0.2.2 → gri_plot-0.2.3}/test/test_shapes/test_cone.py +0 -0
  66. {gri_plot-0.2.2 → gri_plot-0.2.3}/test/test_shapes/test_cylinder.py +0 -0
  67. {gri_plot-0.2.2 → gri_plot-0.2.3}/test/test_shapes/test_ellipse.py +0 -0
  68. {gri_plot-0.2.2 → gri_plot-0.2.3}/test/test_shapes/test_ellipsoid.py +0 -0
  69. {gri_plot-0.2.2 → gri_plot-0.2.3}/test/test_shapes/test_sphere.py +0 -0
  70. {gri_plot-0.2.2 → gri_plot-0.2.3}/test/test_surfaces/__init__.py +0 -0
  71. {gri_plot-0.2.2 → gri_plot-0.2.3}/test/test_surfaces/test_intersection.py +0 -0
  72. {gri_plot-0.2.2 → gri_plot-0.2.3}/test/test_surfaces/test_mesh.py +0 -0
  73. {gri_plot-0.2.2 → gri_plot-0.2.3}/uv.lock +0 -0
@@ -16,10 +16,6 @@ Equation fitting wrapper around scipy.optimize.curve\_fit. Simplifies curve fitt
16
16
 
17
17
  Class-based memoization with full type hints and IDE integration. Provides caching decorators for performance optimization.
18
18
 
19
- ### [GRI Plot](https://gitlab.com/geosol-foss/python/gri-plot)
20
-
21
- Plotting utilities for Plotly and Matplotlib. Provides consistent styling and common plot types for geospatial visualization.
22
-
23
19
  ### [GRI Signal](https://gitlab.com/geosol-foss/python/gri-signal)
24
20
 
25
21
  Functional signal processing library with pure functions operating on numpy arrays. Includes signal generation (tones, PRN, pulsed), channel simulation (delay, AWGN, Doppler, multipath), modulation (AM/FM/PM, BPSK/QPSK/QAM), sampling (ADC), filtering (lowpass, highpass, bandpass, notch, analytic), spectral analysis (PSD, SNR, THD, time-bandwidth product), cross-correlation, and beamforming.
@@ -46,6 +42,14 @@ Solar flux and NeQuickG coefficient data pipeline for ionospheric modeling.
46
42
 
47
43
  A lot of the work we do is down to nanosecond or tens of nanosecond accuracy. We needed an object that could both handle that level of precision as well as do a lot of the string <=> time conversions for the many semi-standards formats we run into in this field.
48
44
 
45
+ ### [GRI Obs](https://gitlab.com/geosol-foss/python/gri-obs)
46
+
47
+ Typed observation objects (TDOA, FDOA, AOA, Range, PDOA) for geolocation measurements. Each observation carries measurement data, noise characterization, sensor geometry, and measurement math (predicted values, Jacobians, noise covariance) for EKF integration with Kalman filters.
48
+
49
+ ### [GRI Plot](https://gitlab.com/geosol-foss/python/gri-plot)
50
+
51
+ Plotting utilities for Plotly and Matplotlib. Provides consistent styling and common plot types for geospatial visualization.
52
+
49
53
  ### [GRI Pos](https://gitlab.com/geosol-foss/python/gri-pos)
50
54
 
51
55
  A position object that greatly simplifies handling coordinates, distances, and memory, mostly on the WGS-84 ellipsoid.
@@ -66,7 +70,7 @@ ERA5 data pipeline for downloading and processing tropospheric refractivity data
66
70
 
67
71
  ### [GRI Convolve](https://gitlab.com/geosol-foss/python/gri-convolve)
68
72
 
69
- Ellipsoid convolution with outlier detection and clustering. Combines multiple statistical position estimates into refined solutions.
73
+ Ellipsoid convolution with outlier detection and clustering, plus Kalman tracking via Interacting Multiple Model (IMM) filter. Combines multiple statistical position estimates into refined solutions. The Kalman tracker supports both ellipsoid-based and raw observable (EKF) updates, bidirectional outlier detection, and online track segmentation.
70
74
 
71
75
  ### [GRI GeoSim](https://gitlab.com/geosol-foss/python/gri-geosim)
72
76
 
@@ -78,4 +82,4 @@ Some neat (small) examples and projects we've put together over time using the a
78
82
 
79
83
  ### [GRI SigSim](https://gitlab.com/geosol-foss/python/gri-sigsim)
80
84
 
81
- Object-based RF signal simulation library. Wraps gri-signal functions with chainable object-oriented classes for waveforms (chirp, OFDM, pulsed), channel modeling (delay, Doppler, multipath), receiver simulation, and observable extraction (TOA, FOA, AOA).
85
+ Object-based RF signal simulation library. Wraps gri-signal functions with chainable object-oriented classes for waveforms (pulsed, PRN, tone), channel modeling (delay, Doppler, multipath), receiver simulation, and TOA estimation.
@@ -65,10 +65,15 @@ if [ $? -ne 0 ]; then
65
65
  fi
66
66
  uv sync
67
67
 
68
- # activate and print version
68
+ # activate and print version (Scripts/ on Windows, bin/ elsewhere)
69
69
  echo "${bold}Activating environment${normal}"
70
- . $VENV/bin/activate
71
- $VENV/bin/python --version
70
+ if [[ -d "$VENV/Scripts" ]]; then
71
+ . $VENV/Scripts/activate
72
+ $VENV/Scripts/python --version
73
+ else
74
+ . $VENV/bin/activate
75
+ $VENV/bin/python --version
76
+ fi
72
77
 
73
78
  # Install pre-commit scripts
74
79
  echo "${bold}Installing git hooks${normal}"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gri-plot
3
- Version: 0.2.2
3
+ Version: 0.2.3
4
4
  Summary: 3D geolocation visualization and 2D plotting utilities built on Plotly
5
5
  Project-URL: Homepage, https://geosolresearch.com
6
6
  Project-URL: Repository, https://gitlab.com/geosol-foss/python/gri-plot
@@ -17,7 +17,7 @@ Classifier: Programming Language :: Python :: 3
17
17
  Classifier: Topic :: Scientific/Engineering
18
18
  Classifier: Topic :: Scientific/Engineering :: Visualization
19
19
  Requires-Python: >=3.12
20
- Requires-Dist: gri-utils>=0.2.0
20
+ Requires-Dist: gri-utils>=0.3.3
21
21
  Requires-Dist: numpy>=2.3.3
22
22
  Requires-Dist: plotly>=6.3.0
23
23
  Requires-Dist: scikit-image>=0.25.0
@@ -241,11 +241,9 @@ class FigureMap:
241
241
  showlegend=show_legend and label is not None,
242
242
  )
243
243
  else:
244
- x_vals = display_coords[:, 0]
245
- y_vals = display_coords[:, 1]
246
244
  trace = go.Scatter(
247
- x=x_vals,
248
- y=y_vals,
245
+ x=display_coords[:, 1],
246
+ y=display_coords[:, 0],
249
247
  mode="lines",
250
248
  line={"color": color, "width": width},
251
249
  name=label,
@@ -278,8 +276,8 @@ class FigureMap:
278
276
  )
279
277
  else:
280
278
  trace = go.Scatter(
281
- x=display_coords[:, 0],
282
- y=display_coords[:, 1],
279
+ x=display_coords[:, 1],
280
+ y=display_coords[:, 0],
283
281
  mode="lines",
284
282
  fill="toself",
285
283
  fillcolor=fill_color,
@@ -478,21 +476,40 @@ class FigureMap:
478
476
  self._add_line_trace(display, color, width, label, show_legend=True)
479
477
  return self
480
478
 
481
- def add_heatmap(
479
+ def add_heatmap( # noqa: PLR0913
482
480
  self,
483
481
  sheet_xyz: NDArray[np.floating],
482
+ *,
483
+ values: NDArray[np.floating] | None = None,
484
+ lat_deg: NDArray[np.floating] | None = None,
485
+ lon_deg: NDArray[np.floating] | None = None,
484
486
  colorscale: str = "earth",
485
487
  opacity: float = 0.6,
486
488
  label: str | None = None,
487
489
  ) -> FigureMap:
488
- """Add a terrain-like heatmap colored by altitude.
490
+ """Add a heatmap over a spatial grid.
491
+
492
+ Renders a 2D grid as a colored heatmap. When ``values`` is None,
493
+ color represents the altitude of each grid point. When ``values``
494
+ is provided, it is used as the color field instead (e.g. TDOA,
495
+ TDOA-dot, or any scalar quantity defined on the grid).
496
+
497
+ When ``lat_deg`` and ``lon_deg`` are provided they are used
498
+ directly as the axis coordinates, bypassing extraction from
499
+ ``sheet_xyz``. This is useful when the sheet contains NaN cells
500
+ (e.g. a visibility-masked grid) that would corrupt the
501
+ coordinate recovery.
489
502
 
490
- Renders a 2D grid as a colored heatmap where color represents
491
- the altitude (Z-height) of each grid point. Only supported in
492
- BLANK mode.
503
+ Only supported in BLANK mode.
493
504
 
494
505
  Args:
495
506
  sheet_xyz: Terrain sheet in ECEF meters, shape (M, N, 3).
507
+ values: Optional scalar field to color by, shape (M, N).
508
+ When None, altitude is used.
509
+ lat_deg: Optional latitude axis, shape (M,). When None,
510
+ extracted from sheet_xyz.
511
+ lon_deg: Optional longitude axis, shape (N,). When None,
512
+ extracted from sheet_xyz.
496
513
  colorscale: Plotly colorscale name. Default "earth".
497
514
  opacity: Heatmap opacity (0-1). Default 0.6.
498
515
  label: Colorbar title.
@@ -510,7 +527,11 @@ class FigureMap:
510
527
  sheet_xyz = np.asarray(sheet_xyz, dtype=np.float64)
511
528
  m, n, _ = sheet_xyz.shape
512
529
 
513
- if self._frame == "enu":
530
+ if lat_deg is not None and lon_deg is not None:
531
+ x_vals = np.asarray(lon_deg, dtype=np.float64)
532
+ y_vals = np.asarray(lat_deg, dtype=np.float64)
533
+ z_vals = values
534
+ elif self._frame == "enu":
514
535
  assert self._origin_xyz is not None # noqa: S101
515
536
  flat = sheet_xyz.reshape(-1, 3)
516
537
  enu = get_enu(self._origin_xyz, flat)
@@ -526,6 +547,9 @@ class FigureMap:
526
547
  y_vals = lats
527
548
  z_vals = alts
528
549
 
550
+ if values is not None:
551
+ z_vals = np.asarray(values, dtype=np.float64)
552
+
529
553
  trace = go.Heatmap(
530
554
  x=x_vals,
531
555
  y=y_vals,
@@ -580,8 +604,8 @@ class FigureMap:
580
604
  self._traces.append(go.Scattermap(**trace_kwargs))
581
605
  else:
582
606
  trace_kwargs = {
583
- "x": display[:, 0],
584
- "y": display[:, 1],
607
+ "x": display[:, 1],
608
+ "y": display[:, 0],
585
609
  "mode": mode,
586
610
  "marker": {"size": size, "color": color},
587
611
  "showlegend": False,
@@ -18,7 +18,7 @@ classifiers = [
18
18
  "Topic :: Scientific/Engineering :: Visualization",
19
19
  ]
20
20
  dependencies = [
21
- "gri-utils>=0.2.0",
21
+ "gri-utils>=0.3.3",
22
22
  "numpy>=2.3.3",
23
23
  "plotly>=6.3.0",
24
24
  "scikit-image>=0.25.0",
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="utf-8"?><testsuites name="pytest tests"><testsuite name="pytest" errors="0" failures="0" skipped="31" tests="137" time="12.921" timestamp="2026-04-15T21:22:50.814916+00:00" hostname="runner-jlguopmmv-project-74598118-concurrent-0"><testcase classname="test.test_figure3d" name="test_enu_requires_origin" time="0.002" /><testcase classname="test.test_figure3d" name="test_build_returns_plotly_figure" time="0.767" /><testcase classname="test.test_figure3d" name="test_plot_surfaces_convenience" time="0.052" /><testcase classname="test.test_figure3d" name="test_visual_ellipsoid_enu" time="0.001"><skipped type="pytest.skip" message="Visual test - unskip to generate plot">/builds/geosol-foss/python/gri-plot/test/test_figure3d.py:41: Visual test - unskip to generate plot</skipped></testcase><testcase classname="test.test_figure3d" name="test_visual_multiple_spheres" time="0.001"><skipped type="pytest.skip" message="Visual test - unskip to generate plot">/builds/geosol-foss/python/gri-plot/test/test_figure3d.py:54: Visual test - unskip to generate plot</skipped></testcase><testcase classname="test.test_figure3d" name="test_visual_combined_surfaces" time="0.001"><skipped type="pytest.skip" message="Visual test - unskip to generate plot">/builds/geosol-foss/python/gri-plot/test/test_figure3d.py:66: Visual test - unskip to generate plot</skipped></testcase><testcase classname="test.test_figure3d" name="test_add_intersection_requires_two_surfaces" time="0.002" /><testcase classname="test.test_figure3d" name="test_add_intersection_returns_self" time="2.745" /><testcase classname="test.test_figure3d" name="test_add_intersection_creates_trace" time="2.913" /><testcase classname="test.test_figure3d" name="test_visual_sphere_intersection" time="0.000"><skipped type="pytest.skip" message="Visual test - unskip to generate plot">/builds/geosol-foss/python/gri-plot/test/test_figure3d.py:117: Visual test - unskip to generate plot</skipped></testcase><testcase classname="test.test_figure3d" name="test_visual_geolocation_surfaces" time="0.001"><skipped type="pytest.skip" message="Visual test - unskip to generate plot">/builds/geosol-foss/python/gri-plot/test/test_figure3d.py:252: Visual test - unskip to generate plot</skipped></testcase><testcase classname="test.test_figure3d" name="test_visual_geolocation_intersection" time="0.001"><skipped type="pytest.skip" message="Visual test - unskip to generate plot">/builds/geosol-foss/python/gri-plot/test/test_figure3d.py:262: Visual test - unskip to generate plot</skipped></testcase><testcase classname="test.test_figure_map" name="test_default_init" time="0.001" /><testcase classname="test.test_figure_map" name="test_blank_enu_requires_origin" time="0.002" /><testcase classname="test.test_figure_map" name="test_blank_enu_with_origin" time="0.001" /><testcase classname="test.test_figure_map" name="test_build_satellite_returns_figure" time="0.046" /><testcase classname="test.test_figure_map" name="test_build_blank_returns_figure" time="0.043" /><testcase classname="test.test_figure_map" name="test_build_with_title" time="0.038" /><testcase classname="test.test_figure_map" name="test_add_contour_returns_self" time="0.004" /><testcase classname="test.test_figure_map" name="test_add_contour_satellite_creates_scattermap" time="0.039" /><testcase classname="test.test_figure_map" name="test_add_contour_blank_creates_scatter" time="0.039" /><testcase classname="test.test_figure_map" name="test_add_contours_returns_self" time="0.002" /><testcase classname="test.test_figure_map" name="test_add_contours_creates_separate_traces" time="0.041" /><testcase classname="test.test_figure_map" name="test_add_contours_empty_list" time="0.037" /><testcase classname="test.test_figure_map" name="test_add_band_returns_self" time="0.009" /><testcase classname="test.test_figure_map" name="test_add_band_creates_filled_trace" time="0.046" /><testcase classname="test.test_figure_map" name="test_add_band_blank_mode" time="0.044" /><testcase classname="test.test_figure_map" name="test_add_band_empty_list" time="0.037" /><testcase classname="test.test_figure_map" name="test_add_filled_contour_returns_self" time="0.002" /><testcase classname="test.test_figure_map" name="test_add_filled_contour_creates_fill" time="0.041" /><testcase classname="test.test_figure_map" name="test_add_markers_returns_self" time="0.002" /><testcase classname="test.test_figure_map" name="test_add_markers_satellite" time="0.039" /><testcase classname="test.test_figure_map" name="test_add_markers_blank" time="0.037" /><testcase classname="test.test_figure_map" name="test_add_markers_single_point" time="0.039" /><testcase classname="test.test_figure_map" name="test_full_chaining" time="0.050" /><testcase classname="test.test_figure_map" name="test_auto_color_cycling" time="0.042" /><testcase classname="test.test_figure_map" name="test_visual_satellite_contours" time="0.001"><skipped type="pytest.skip" message="Visual test - unskip to inspect satellite map">/builds/geosol-foss/python/gri-plot/test/test_figure_map.py:308: Visual test - unskip to inspect satellite map</skipped></testcase><testcase classname="test.test_figure_map" name="test_visual_blank_enu" time="0.001"><skipped type="pytest.skip" message="Visual test - unskip to inspect blank ENU plot">/builds/geosol-foss/python/gri-plot/test/test_figure_map.py:321: Visual test - unskip to inspect blank ENU plot</skipped></testcase><testcase classname="test.test_frames" name="test_xyz_lla_roundtrip" time="0.001" /><testcase classname="test.test_frames" name="test_enu_requires_origin" time="0.001" /><testcase classname="test.test_frames" name="test_enu_roundtrip" time="0.002" /><testcase classname="test.test_frames" name="test_axis_labels" time="0.001" /><testcase classname="test.test_observables.test_aoa" name="test_residual_on_axis_inside" time="0.002" /><testcase classname="test.test_observables.test_aoa" name="test_residual_perpendicular_outside" time="0.001" /><testcase classname="test.test_observables.test_aoa" name="test_invalid_max_range" time="0.001" /><testcase classname="test.test_observables.test_aoa" name="test_visual_aoa_cone" time="0.001"><skipped type="pytest.skip" message="Visual test - unskip to generate plot">/builds/geosol-foss/python/gri-plot/test/test_observables/test_aoa.py:40: Visual test - unskip to generate plot</skipped></testcase><testcase classname="test.test_observables.test_fdoa" name="test_residual_symmetric_velocities" time="0.001" /><testcase classname="test.test_observables.test_fdoa" name="test_invalid_frequency" time="0.001" /><testcase classname="test.test_observables.test_fdoa" name="test_visual_fdoa_surface" time="0.001"><skipped type="pytest.skip" message="Visual test - unskip to generate plot">/builds/geosol-foss/python/gri-plot/test/test_observables/test_fdoa.py:36: Visual test - unskip to generate plot</skipped></testcase><testcase classname="test.test_observables.test_los" name="test_residual_inside_outside" time="0.001" /><testcase classname="test.test_observables.test_los" name="test_invalid_length" time="0.001" /><testcase classname="test.test_observables.test_los" name="test_visual_los_ray" time="0.001"><skipped type="pytest.skip" message="Visual test - unskip to generate plot">/builds/geosol-foss/python/gri-plot/test/test_observables/test_los.py:32: Visual test - unskip to generate plot</skipped></testcase><testcase classname="test.test_observables.test_range_sphere" name="test_residual_on_surface" time="0.002" /><testcase classname="test.test_observables.test_range_sphere" name="test_invalid_range" time="0.001" /><testcase classname="test.test_observables.test_range_sphere" name="test_visual_range_sphere" time="0.001"><skipped type="pytest.skip" message="Visual test - unskip to generate plot">/builds/geosol-foss/python/gri-plot/test/test_observables/test_range_sphere.py:25: Visual test - unskip to generate plot</skipped></testcase><testcase classname="test.test_observables.test_tdoa" name="test_residual_at_midpoint_zero_tdoa" time="0.001" /><testcase classname="test.test_observables.test_tdoa" name="test_residual_sign" time="0.001" /><testcase classname="test.test_observables.test_tdoa" name="test_visual_tdoa_hyperboloid" time="0.001"><skipped type="pytest.skip" message="Visual test - unskip to generate plot">/builds/geosol-foss/python/gri-plot/test/test_observables/test_tdoa.py:34: Visual test - unskip to generate plot</skipped></testcase><testcase classname="test.test_observables.test_tdoa" name="test_visual_tdoa_hyperboloid_enu" time="0.001"><skipped type="pytest.skip" message="Visual test - unskip to generate plot">/builds/geosol-foss/python/gri-plot/test/test_observables/test_tdoa.py:49: Visual test - unskip to generate plot</skipped></testcase><testcase classname="test.test_observables.test_terrain" name="test_from_xyz_grids" time="0.002" /><testcase classname="test.test_observables.test_terrain" name="test_from_3d_vertices" time="0.001" /><testcase classname="test.test_observables.test_terrain" name="test_visual_terrain" time="0.001"><skipped type="pytest.skip" message="Visual test - unskip to generate plot">/builds/geosol-foss/python/gri-plot/test/test_observables/test_terrain.py:33: Visual test - unskip to generate plot</skipped></testcase><testcase classname="test.test_plot_ellipse" name="test_returns_figure" time="0.048" /><testcase classname="test.test_plot_ellipse" name="test_requires_at_least_one_ellipse" time="0.002" /><testcase classname="test.test_plot_ellipse" name="test_multiple_ellipses_create_traces" time="0.046" /><testcase classname="test.test_plot_ellipse" name="test_show_axes_false_reduces_traces" time="0.079" /><testcase classname="test.test_plot_ellipse" name="test_visual_single_ellipse" time="0.001"><skipped type="pytest.skip" message="Visual test - unskip to view">/builds/geosol-foss/python/gri-plot/test/test_plot_ellipse.py:40: Visual test - unskip to view</skipped></testcase><testcase classname="test.test_plot_ellipse" name="test_visual_multiple_ellipses" time="0.001"><skipped type="pytest.skip" message="Visual test - unskip to view">/builds/geosol-foss/python/gri-plot/test/test_plot_ellipse.py:48: Visual test - unskip to view</skipped></testcase><testcase classname="test.test_plot_scattermap" name="test_map_plot_single" time="0.001"><skipped type="pytest.skip" message="manual only for demonstration and test">/builds/geosol-foss/python/gri-plot/test/test_plot_scattermap.py:6: manual only for demonstration and test</skipped></testcase><testcase classname="test.test_plot_scattermap" name="test_map_plot_mult" time="0.001"><skipped type="pytest.skip" message="manual only for demonstration and test">/builds/geosol-foss/python/gri-plot/test/test_plot_scattermap.py:23: manual only for demonstration and test</skipped></testcase><testcase classname="test.test_scatter" name="test_single" time="0.001"><skipped type="pytest.skip" message="manual only for demonstration and test">/builds/geosol-foss/python/gri-plot/test/test_scatter.py:7: manual only for demonstration and test</skipped></testcase><testcase classname="test.test_scatter" name="test_double" time="0.001"><skipped type="pytest.skip" message="manual only for demonstration and test">/builds/geosol-foss/python/gri-plot/test/test_scatter.py:14: manual only for demonstration and test</skipped></testcase><testcase classname="test.test_scatter" name="test_x_space" time="0.001"><skipped type="pytest.skip" message="manual only for demonstration and test">/builds/geosol-foss/python/gri-plot/test/test_scatter.py:22: manual only for demonstration and test</skipped></testcase><testcase classname="test.test_scatter" name="test_sequence" time="0.001"><skipped type="pytest.skip" message="manual only for demonstration and test">/builds/geosol-foss/python/gri-plot/test/test_scatter.py:30: manual only for demonstration and test</skipped></testcase><testcase classname="test.test_scatter" name="test_kwargs" time="0.001"><skipped type="pytest.skip" message="manual only for demonstration and test">/builds/geosol-foss/python/gri-plot/test/test_scatter.py:38: manual only for demonstration and test</skipped></testcase><testcase classname="test.test_scatter" name="test_trace_kwargs" time="0.000"><skipped type="pytest.skip" message="manual only for demonstration and test">/builds/geosol-foss/python/gri-plot/test/test_scatter.py:46: manual only for demonstration and test</skipped></testcase><testcase classname="test.test_scatter" name="test_trace_kwargs2" time="0.000"><skipped type="pytest.skip" message="manual only for demonstration and test">/builds/geosol-foss/python/gri-plot/test/test_scatter.py:54: manual only for demonstration and test</skipped></testcase><testcase classname="test.test_shapes.test_cone" name="test_residual_inside_outside" time="0.002" /><testcase classname="test.test_shapes.test_cone" name="test_invalid_parameters[0.0-100.0]" time="0.001" /><testcase classname="test.test_shapes.test_cone" name="test_invalid_parameters[1.5707963267948966-100.0]" time="0.001" /><testcase classname="test.test_shapes.test_cone" name="test_invalid_parameters[0.5-0.0]" time="0.001" /><testcase classname="test.test_shapes.test_cone" name="test_invalid_parameters[0.5--10.0]" time="0.001" /><testcase classname="test.test_shapes.test_cone" name="test_visual_cone" time="0.001"><skipped type="pytest.skip" message="Visual test - unskip to generate plot">/builds/geosol-foss/python/gri-plot/test/test_shapes/test_cone.py:41: Visual test - unskip to generate plot</skipped></testcase><testcase classname="test.test_shapes.test_cylinder" name="test_residual_inside_outside" time="0.001" /><testcase classname="test.test_shapes.test_cylinder" name="test_invalid_parameters[0.0-100.0]" time="0.001" /><testcase classname="test.test_shapes.test_cylinder" name="test_invalid_parameters[-10.0-100.0]" time="0.001" /><testcase classname="test.test_shapes.test_cylinder" name="test_invalid_parameters[25.0-0.0]" time="0.001" /><testcase classname="test.test_shapes.test_cylinder" name="test_invalid_parameters[25.0--10.0]" time="0.001" /><testcase classname="test.test_shapes.test_cylinder" name="test_visual_cylinder" time="0.001"><skipped type="pytest.skip" message="Visual test - unskip to generate plot">/builds/geosol-foss/python/gri-plot/test/test_shapes/test_cylinder.py:44: Visual test - unskip to generate plot</skipped></testcase><testcase classname="test.test_shapes.test_ellipse" name="test_properties_stored" time="0.001" /><testcase classname="test.test_shapes.test_ellipse" name="test_center_defaults_to_origin" time="0.001" /><testcase classname="test.test_shapes.test_ellipse" name="test_ori_deg_normalized[370.0-10.0]" time="0.001" /><testcase classname="test.test_shapes.test_ellipse" name="test_ori_deg_normalized[-10.0-350.0]" time="0.001" /><testcase classname="test.test_shapes.test_ellipse" name="test_ori_deg_normalized[0.0-0.0]" time="0.001" /><testcase classname="test.test_shapes.test_ellipse" name="test_ori_deg_normalized[360.0-0.0]" time="0.001" /><testcase classname="test.test_shapes.test_ellipse" name="test_ori_deg_normalized[720.0-0.0]" time="0.001" /><testcase classname="test.test_shapes.test_ellipse" name="test_rejects_non_positive_axes[0-50]" time="0.001" /><testcase classname="test.test_shapes.test_ellipse" name="test_rejects_non_positive_axes[-10-50]" time="0.001" /><testcase classname="test.test_shapes.test_ellipse" name="test_rejects_non_positive_axes[100-0]" time="0.001" /><testcase classname="test.test_shapes.test_ellipse" name="test_rejects_non_positive_axes[100--5]" time="0.001" /><testcase classname="test.test_shapes.test_ellipse" name="test_rejects_sma_less_than_smi" time="0.002" /><testcase classname="test.test_shapes.test_ellipse" name="test_boundary_shape" time="0.001" /><testcase classname="test.test_shapes.test_ellipse" name="test_boundary_extent_at_zero_orientation" time="0.001" /><testcase classname="test.test_shapes.test_ellipse" name="test_boundary_respects_center" time="0.001" /><testcase classname="test.test_shapes.test_ellipse" name="test_repr" time="0.001" /><testcase classname="test.test_shapes.test_ellipsoid" name="test_residual_on_surface" time="0.001" /><testcase classname="test.test_shapes.test_ellipsoid" name="test_requires_covariance_or_semi_axes" time="0.001" /><testcase classname="test.test_shapes.test_ellipsoid" name="test_rejects_both_covariance_and_semi_axes" time="0.001" /><testcase classname="test.test_shapes.test_ellipsoid" name="test_visual_ellipsoid_from_covariance" time="0.001"><skipped type="pytest.skip" message="Visual test - unskip to generate plot">/builds/geosol-foss/python/gri-plot/test/test_shapes/test_ellipsoid.py:31: Visual test - unskip to generate plot</skipped></testcase><testcase classname="test.test_shapes.test_ellipsoid" name="test_visual_ellipsoid_from_semi_axes" time="0.001"><skipped type="pytest.skip" message="Visual test - unskip to generate plot">/builds/geosol-foss/python/gri-plot/test/test_shapes/test_ellipsoid.py:42: Visual test - unskip to generate plot</skipped></testcase><testcase classname="test.test_shapes.test_sphere" name="test_residual_fn[point_offset0-0]" time="0.001" /><testcase classname="test.test_shapes.test_sphere" name="test_residual_fn[point_offset1--1]" time="0.001" /><testcase classname="test.test_shapes.test_sphere" name="test_residual_fn[point_offset2-1]" time="0.001" /><testcase classname="test.test_shapes.test_sphere" name="test_invalid_radius" time="0.001" /><testcase classname="test.test_shapes.test_sphere" name="test_visual_sphere" time="0.000"><skipped type="pytest.skip" message="Visual test - unskip to generate plot">/builds/geosol-foss/python/gri-plot/test/test_shapes/test_sphere.py:37: Visual test - unskip to generate plot</skipped></testcase><testcase classname="test.test_surfaces.test_intersection" name="test_requires_at_least_two_surfaces" time="0.001" /><testcase classname="test.test_surfaces.test_intersection" name="test_distance_zero_at_intersection" time="0.001" /><testcase classname="test.test_surfaces.test_intersection" name="test_distance_increases_away_from_intersection" time="0.001" /><testcase classname="test.test_surfaces.test_intersection" name="test_residual_fn_negative_at_intersection" time="0.001" /><testcase classname="test.test_surfaces.test_intersection" name="test_residual_fn_positive_away_from_surfaces" time="0.001" /><testcase classname="test.test_surfaces.test_intersection" name="test_radius_property" time="0.001" /><testcase classname="test.test_surfaces.test_intersection" name="test_default_radius" time="0.001" /><testcase classname="test.test_surfaces.test_intersection" name="test_bounds_merges_all_surfaces" time="0.001" /><testcase classname="test.test_surfaces.test_intersection" name="test_label_property" time="0.001" /><testcase classname="test.test_surfaces.test_intersection" name="test_volume_intersection" time="0.001" /><testcase classname="test.test_surfaces.test_mesh" name="test_vertices_to_mesh3d" time="0.002" /><testcase classname="test.test_surfaces.test_mesh" name="test_sphere_mesh_vertices_on_surface" time="0.002" /><testcase classname="test.test_surfaces.test_mesh" name="test_compute_face_normals_single_triangle" time="0.001" /><testcase classname="test.test_surfaces.test_mesh" name="test_compute_face_normals_tetrahedron" time="0.001" /><testcase classname="test.test_surfaces.test_mesh" name="test_dihedral_angles_flat_surface" time="0.001" /><testcase classname="test.test_surfaces.test_mesh" name="test_dihedral_angles_right_angle" time="0.001" /><testcase classname="test.test_surfaces.test_mesh" name="test_dihedral_angles_boundary_edges_excluded" time="0.001" /><testcase classname="test.test_surfaces.test_mesh" name="test_refine_mesh_no_refinement_when_flat" time="0.001" /><testcase classname="test.test_surfaces.test_mesh" name="test_refine_mesh_subdivides_high_curvature" time="0.002" /><testcase classname="test.test_surfaces.test_mesh" name="test_refine_mesh_with_projection" time="0.003" /><testcase classname="test.test_surfaces.test_mesh" name="test_refine_mesh_max_iterations_limits_refinement" time="0.006" /><testcase classname="test.test_surfaces.test_mesh" name="test_field_to_mesh_with_refinement" time="0.079" /></testsuite></testsuites>
gri_plot-0.2.2/report.xml DELETED
@@ -1 +0,0 @@
1
- <?xml version="1.0" encoding="utf-8"?><testsuites name="pytest tests"><testsuite name="pytest" errors="0" failures="0" skipped="31" tests="137" time="12.427" timestamp="2026-04-07T03:33:02.175018+00:00" hostname="runner-jhcjxvh8-project-74598118-concurrent-0"><testcase classname="test.test_figure3d" name="test_enu_requires_origin" time="0.002" /><testcase classname="test.test_figure3d" name="test_build_returns_plotly_figure" time="0.754" /><testcase classname="test.test_figure3d" name="test_plot_surfaces_convenience" time="0.049" /><testcase classname="test.test_figure3d" name="test_visual_ellipsoid_enu" time="0.001"><skipped type="pytest.skip" message="Visual test - unskip to generate plot">/builds/geosol-foss/python/gri-plot/test/test_figure3d.py:41: Visual test - unskip to generate plot</skipped></testcase><testcase classname="test.test_figure3d" name="test_visual_multiple_spheres" time="0.001"><skipped type="pytest.skip" message="Visual test - unskip to generate plot">/builds/geosol-foss/python/gri-plot/test/test_figure3d.py:54: Visual test - unskip to generate plot</skipped></testcase><testcase classname="test.test_figure3d" name="test_visual_combined_surfaces" time="0.001"><skipped type="pytest.skip" message="Visual test - unskip to generate plot">/builds/geosol-foss/python/gri-plot/test/test_figure3d.py:66: Visual test - unskip to generate plot</skipped></testcase><testcase classname="test.test_figure3d" name="test_add_intersection_requires_two_surfaces" time="0.002" /><testcase classname="test.test_figure3d" name="test_add_intersection_returns_self" time="2.710" /><testcase classname="test.test_figure3d" name="test_add_intersection_creates_trace" time="2.780" /><testcase classname="test.test_figure3d" name="test_visual_sphere_intersection" time="0.001"><skipped type="pytest.skip" message="Visual test - unskip to generate plot">/builds/geosol-foss/python/gri-plot/test/test_figure3d.py:117: Visual test - unskip to generate plot</skipped></testcase><testcase classname="test.test_figure3d" name="test_visual_geolocation_surfaces" time="0.001"><skipped type="pytest.skip" message="Visual test - unskip to generate plot">/builds/geosol-foss/python/gri-plot/test/test_figure3d.py:252: Visual test - unskip to generate plot</skipped></testcase><testcase classname="test.test_figure3d" name="test_visual_geolocation_intersection" time="0.001"><skipped type="pytest.skip" message="Visual test - unskip to generate plot">/builds/geosol-foss/python/gri-plot/test/test_figure3d.py:262: Visual test - unskip to generate plot</skipped></testcase><testcase classname="test.test_figure_map" name="test_default_init" time="0.001" /><testcase classname="test.test_figure_map" name="test_blank_enu_requires_origin" time="0.001" /><testcase classname="test.test_figure_map" name="test_blank_enu_with_origin" time="0.001" /><testcase classname="test.test_figure_map" name="test_build_satellite_returns_figure" time="0.044" /><testcase classname="test.test_figure_map" name="test_build_blank_returns_figure" time="0.042" /><testcase classname="test.test_figure_map" name="test_build_with_title" time="0.037" /><testcase classname="test.test_figure_map" name="test_add_contour_returns_self" time="0.003" /><testcase classname="test.test_figure_map" name="test_add_contour_satellite_creates_scattermap" time="0.039" /><testcase classname="test.test_figure_map" name="test_add_contour_blank_creates_scatter" time="0.038" /><testcase classname="test.test_figure_map" name="test_add_contours_returns_self" time="0.002" /><testcase classname="test.test_figure_map" name="test_add_contours_creates_separate_traces" time="0.039" /><testcase classname="test.test_figure_map" name="test_add_contours_empty_list" time="0.036" /><testcase classname="test.test_figure_map" name="test_add_band_returns_self" time="0.008" /><testcase classname="test.test_figure_map" name="test_add_band_creates_filled_trace" time="0.043" /><testcase classname="test.test_figure_map" name="test_add_band_blank_mode" time="0.041" /><testcase classname="test.test_figure_map" name="test_add_band_empty_list" time="0.036" /><testcase classname="test.test_figure_map" name="test_add_filled_contour_returns_self" time="0.002" /><testcase classname="test.test_figure_map" name="test_add_filled_contour_creates_fill" time="0.038" /><testcase classname="test.test_figure_map" name="test_add_markers_returns_self" time="0.002" /><testcase classname="test.test_figure_map" name="test_add_markers_satellite" time="0.037" /><testcase classname="test.test_figure_map" name="test_add_markers_blank" time="0.035" /><testcase classname="test.test_figure_map" name="test_add_markers_single_point" time="0.037" /><testcase classname="test.test_figure_map" name="test_full_chaining" time="0.048" /><testcase classname="test.test_figure_map" name="test_auto_color_cycling" time="0.039" /><testcase classname="test.test_figure_map" name="test_visual_satellite_contours" time="0.001"><skipped type="pytest.skip" message="Visual test - unskip to inspect satellite map">/builds/geosol-foss/python/gri-plot/test/test_figure_map.py:308: Visual test - unskip to inspect satellite map</skipped></testcase><testcase classname="test.test_figure_map" name="test_visual_blank_enu" time="0.001"><skipped type="pytest.skip" message="Visual test - unskip to inspect blank ENU plot">/builds/geosol-foss/python/gri-plot/test/test_figure_map.py:321: Visual test - unskip to inspect blank ENU plot</skipped></testcase><testcase classname="test.test_frames" name="test_xyz_lla_roundtrip" time="0.001" /><testcase classname="test.test_frames" name="test_enu_requires_origin" time="0.001" /><testcase classname="test.test_frames" name="test_enu_roundtrip" time="0.001" /><testcase classname="test.test_frames" name="test_axis_labels" time="0.001" /><testcase classname="test.test_observables.test_aoa" name="test_residual_on_axis_inside" time="0.002" /><testcase classname="test.test_observables.test_aoa" name="test_residual_perpendicular_outside" time="0.001" /><testcase classname="test.test_observables.test_aoa" name="test_invalid_max_range" time="0.001" /><testcase classname="test.test_observables.test_aoa" name="test_visual_aoa_cone" time="0.001"><skipped type="pytest.skip" message="Visual test - unskip to generate plot">/builds/geosol-foss/python/gri-plot/test/test_observables/test_aoa.py:40: Visual test - unskip to generate plot</skipped></testcase><testcase classname="test.test_observables.test_fdoa" name="test_residual_symmetric_velocities" time="0.001" /><testcase classname="test.test_observables.test_fdoa" name="test_invalid_frequency" time="0.001" /><testcase classname="test.test_observables.test_fdoa" name="test_visual_fdoa_surface" time="0.000"><skipped type="pytest.skip" message="Visual test - unskip to generate plot">/builds/geosol-foss/python/gri-plot/test/test_observables/test_fdoa.py:36: Visual test - unskip to generate plot</skipped></testcase><testcase classname="test.test_observables.test_los" name="test_residual_inside_outside" time="0.001" /><testcase classname="test.test_observables.test_los" name="test_invalid_length" time="0.001" /><testcase classname="test.test_observables.test_los" name="test_visual_los_ray" time="0.001"><skipped type="pytest.skip" message="Visual test - unskip to generate plot">/builds/geosol-foss/python/gri-plot/test/test_observables/test_los.py:32: Visual test - unskip to generate plot</skipped></testcase><testcase classname="test.test_observables.test_range_sphere" name="test_residual_on_surface" time="0.001" /><testcase classname="test.test_observables.test_range_sphere" name="test_invalid_range" time="0.001" /><testcase classname="test.test_observables.test_range_sphere" name="test_visual_range_sphere" time="0.001"><skipped type="pytest.skip" message="Visual test - unskip to generate plot">/builds/geosol-foss/python/gri-plot/test/test_observables/test_range_sphere.py:25: Visual test - unskip to generate plot</skipped></testcase><testcase classname="test.test_observables.test_tdoa" name="test_residual_at_midpoint_zero_tdoa" time="0.001" /><testcase classname="test.test_observables.test_tdoa" name="test_residual_sign" time="0.001" /><testcase classname="test.test_observables.test_tdoa" name="test_visual_tdoa_hyperboloid" time="0.001"><skipped type="pytest.skip" message="Visual test - unskip to generate plot">/builds/geosol-foss/python/gri-plot/test/test_observables/test_tdoa.py:34: Visual test - unskip to generate plot</skipped></testcase><testcase classname="test.test_observables.test_tdoa" name="test_visual_tdoa_hyperboloid_enu" time="0.001"><skipped type="pytest.skip" message="Visual test - unskip to generate plot">/builds/geosol-foss/python/gri-plot/test/test_observables/test_tdoa.py:49: Visual test - unskip to generate plot</skipped></testcase><testcase classname="test.test_observables.test_terrain" name="test_from_xyz_grids" time="0.002" /><testcase classname="test.test_observables.test_terrain" name="test_from_3d_vertices" time="0.001" /><testcase classname="test.test_observables.test_terrain" name="test_visual_terrain" time="0.000"><skipped type="pytest.skip" message="Visual test - unskip to generate plot">/builds/geosol-foss/python/gri-plot/test/test_observables/test_terrain.py:33: Visual test - unskip to generate plot</skipped></testcase><testcase classname="test.test_plot_ellipse" name="test_returns_figure" time="0.046" /><testcase classname="test.test_plot_ellipse" name="test_requires_at_least_one_ellipse" time="0.002" /><testcase classname="test.test_plot_ellipse" name="test_multiple_ellipses_create_traces" time="0.043" /><testcase classname="test.test_plot_ellipse" name="test_show_axes_false_reduces_traces" time="0.075" /><testcase classname="test.test_plot_ellipse" name="test_visual_single_ellipse" time="0.001"><skipped type="pytest.skip" message="Visual test - unskip to view">/builds/geosol-foss/python/gri-plot/test/test_plot_ellipse.py:40: Visual test - unskip to view</skipped></testcase><testcase classname="test.test_plot_ellipse" name="test_visual_multiple_ellipses" time="0.001"><skipped type="pytest.skip" message="Visual test - unskip to view">/builds/geosol-foss/python/gri-plot/test/test_plot_ellipse.py:48: Visual test - unskip to view</skipped></testcase><testcase classname="test.test_plot_scattermap" name="test_map_plot_single" time="0.001"><skipped type="pytest.skip" message="manual only for demonstration and test">/builds/geosol-foss/python/gri-plot/test/test_plot_scattermap.py:6: manual only for demonstration and test</skipped></testcase><testcase classname="test.test_plot_scattermap" name="test_map_plot_mult" time="0.000"><skipped type="pytest.skip" message="manual only for demonstration and test">/builds/geosol-foss/python/gri-plot/test/test_plot_scattermap.py:23: manual only for demonstration and test</skipped></testcase><testcase classname="test.test_scatter" name="test_single" time="0.001"><skipped type="pytest.skip" message="manual only for demonstration and test">/builds/geosol-foss/python/gri-plot/test/test_scatter.py:7: manual only for demonstration and test</skipped></testcase><testcase classname="test.test_scatter" name="test_double" time="0.001"><skipped type="pytest.skip" message="manual only for demonstration and test">/builds/geosol-foss/python/gri-plot/test/test_scatter.py:14: manual only for demonstration and test</skipped></testcase><testcase classname="test.test_scatter" name="test_x_space" time="0.001"><skipped type="pytest.skip" message="manual only for demonstration and test">/builds/geosol-foss/python/gri-plot/test/test_scatter.py:22: manual only for demonstration and test</skipped></testcase><testcase classname="test.test_scatter" name="test_sequence" time="0.001"><skipped type="pytest.skip" message="manual only for demonstration and test">/builds/geosol-foss/python/gri-plot/test/test_scatter.py:30: manual only for demonstration and test</skipped></testcase><testcase classname="test.test_scatter" name="test_kwargs" time="0.001"><skipped type="pytest.skip" message="manual only for demonstration and test">/builds/geosol-foss/python/gri-plot/test/test_scatter.py:38: manual only for demonstration and test</skipped></testcase><testcase classname="test.test_scatter" name="test_trace_kwargs" time="0.000"><skipped type="pytest.skip" message="manual only for demonstration and test">/builds/geosol-foss/python/gri-plot/test/test_scatter.py:46: manual only for demonstration and test</skipped></testcase><testcase classname="test.test_scatter" name="test_trace_kwargs2" time="0.000"><skipped type="pytest.skip" message="manual only for demonstration and test">/builds/geosol-foss/python/gri-plot/test/test_scatter.py:54: manual only for demonstration and test</skipped></testcase><testcase classname="test.test_shapes.test_cone" name="test_residual_inside_outside" time="0.002" /><testcase classname="test.test_shapes.test_cone" name="test_invalid_parameters[0.0-100.0]" time="0.001" /><testcase classname="test.test_shapes.test_cone" name="test_invalid_parameters[1.5707963267948966-100.0]" time="0.001" /><testcase classname="test.test_shapes.test_cone" name="test_invalid_parameters[0.5-0.0]" time="0.001" /><testcase classname="test.test_shapes.test_cone" name="test_invalid_parameters[0.5--10.0]" time="0.001" /><testcase classname="test.test_shapes.test_cone" name="test_visual_cone" time="0.000"><skipped type="pytest.skip" message="Visual test - unskip to generate plot">/builds/geosol-foss/python/gri-plot/test/test_shapes/test_cone.py:41: Visual test - unskip to generate plot</skipped></testcase><testcase classname="test.test_shapes.test_cylinder" name="test_residual_inside_outside" time="0.001" /><testcase classname="test.test_shapes.test_cylinder" name="test_invalid_parameters[0.0-100.0]" time="0.001" /><testcase classname="test.test_shapes.test_cylinder" name="test_invalid_parameters[-10.0-100.0]" time="0.001" /><testcase classname="test.test_shapes.test_cylinder" name="test_invalid_parameters[25.0-0.0]" time="0.001" /><testcase classname="test.test_shapes.test_cylinder" name="test_invalid_parameters[25.0--10.0]" time="0.001" /><testcase classname="test.test_shapes.test_cylinder" name="test_visual_cylinder" time="0.001"><skipped type="pytest.skip" message="Visual test - unskip to generate plot">/builds/geosol-foss/python/gri-plot/test/test_shapes/test_cylinder.py:44: Visual test - unskip to generate plot</skipped></testcase><testcase classname="test.test_shapes.test_ellipse" name="test_properties_stored" time="0.001" /><testcase classname="test.test_shapes.test_ellipse" name="test_center_defaults_to_origin" time="0.001" /><testcase classname="test.test_shapes.test_ellipse" name="test_ori_deg_normalized[370.0-10.0]" time="0.001" /><testcase classname="test.test_shapes.test_ellipse" name="test_ori_deg_normalized[-10.0-350.0]" time="0.001" /><testcase classname="test.test_shapes.test_ellipse" name="test_ori_deg_normalized[0.0-0.0]" time="0.001" /><testcase classname="test.test_shapes.test_ellipse" name="test_ori_deg_normalized[360.0-0.0]" time="0.001" /><testcase classname="test.test_shapes.test_ellipse" name="test_ori_deg_normalized[720.0-0.0]" time="0.001" /><testcase classname="test.test_shapes.test_ellipse" name="test_rejects_non_positive_axes[0-50]" time="0.002" /><testcase classname="test.test_shapes.test_ellipse" name="test_rejects_non_positive_axes[-10-50]" time="0.001" /><testcase classname="test.test_shapes.test_ellipse" name="test_rejects_non_positive_axes[100-0]" time="0.001" /><testcase classname="test.test_shapes.test_ellipse" name="test_rejects_non_positive_axes[100--5]" time="0.001" /><testcase classname="test.test_shapes.test_ellipse" name="test_rejects_sma_less_than_smi" time="0.001" /><testcase classname="test.test_shapes.test_ellipse" name="test_boundary_shape" time="0.001" /><testcase classname="test.test_shapes.test_ellipse" name="test_boundary_extent_at_zero_orientation" time="0.001" /><testcase classname="test.test_shapes.test_ellipse" name="test_boundary_respects_center" time="0.001" /><testcase classname="test.test_shapes.test_ellipse" name="test_repr" time="0.001" /><testcase classname="test.test_shapes.test_ellipsoid" name="test_residual_on_surface" time="0.001" /><testcase classname="test.test_shapes.test_ellipsoid" name="test_requires_covariance_or_semi_axes" time="0.001" /><testcase classname="test.test_shapes.test_ellipsoid" name="test_rejects_both_covariance_and_semi_axes" time="0.001" /><testcase classname="test.test_shapes.test_ellipsoid" name="test_visual_ellipsoid_from_covariance" time="0.001"><skipped type="pytest.skip" message="Visual test - unskip to generate plot">/builds/geosol-foss/python/gri-plot/test/test_shapes/test_ellipsoid.py:31: Visual test - unskip to generate plot</skipped></testcase><testcase classname="test.test_shapes.test_ellipsoid" name="test_visual_ellipsoid_from_semi_axes" time="0.001"><skipped type="pytest.skip" message="Visual test - unskip to generate plot">/builds/geosol-foss/python/gri-plot/test/test_shapes/test_ellipsoid.py:42: Visual test - unskip to generate plot</skipped></testcase><testcase classname="test.test_shapes.test_sphere" name="test_residual_fn[point_offset0-0]" time="0.001" /><testcase classname="test.test_shapes.test_sphere" name="test_residual_fn[point_offset1--1]" time="0.001" /><testcase classname="test.test_shapes.test_sphere" name="test_residual_fn[point_offset2-1]" time="0.001" /><testcase classname="test.test_shapes.test_sphere" name="test_invalid_radius" time="0.001" /><testcase classname="test.test_shapes.test_sphere" name="test_visual_sphere" time="0.001"><skipped type="pytest.skip" message="Visual test - unskip to generate plot">/builds/geosol-foss/python/gri-plot/test/test_shapes/test_sphere.py:37: Visual test - unskip to generate plot</skipped></testcase><testcase classname="test.test_surfaces.test_intersection" name="test_requires_at_least_two_surfaces" time="0.001" /><testcase classname="test.test_surfaces.test_intersection" name="test_distance_zero_at_intersection" time="0.001" /><testcase classname="test.test_surfaces.test_intersection" name="test_distance_increases_away_from_intersection" time="0.001" /><testcase classname="test.test_surfaces.test_intersection" name="test_residual_fn_negative_at_intersection" time="0.001" /><testcase classname="test.test_surfaces.test_intersection" name="test_residual_fn_positive_away_from_surfaces" time="0.001" /><testcase classname="test.test_surfaces.test_intersection" name="test_radius_property" time="0.001" /><testcase classname="test.test_surfaces.test_intersection" name="test_default_radius" time="0.001" /><testcase classname="test.test_surfaces.test_intersection" name="test_bounds_merges_all_surfaces" time="0.001" /><testcase classname="test.test_surfaces.test_intersection" name="test_label_property" time="0.001" /><testcase classname="test.test_surfaces.test_intersection" name="test_volume_intersection" time="0.001" /><testcase classname="test.test_surfaces.test_mesh" name="test_vertices_to_mesh3d" time="0.002" /><testcase classname="test.test_surfaces.test_mesh" name="test_sphere_mesh_vertices_on_surface" time="0.002" /><testcase classname="test.test_surfaces.test_mesh" name="test_compute_face_normals_single_triangle" time="0.001" /><testcase classname="test.test_surfaces.test_mesh" name="test_compute_face_normals_tetrahedron" time="0.001" /><testcase classname="test.test_surfaces.test_mesh" name="test_dihedral_angles_flat_surface" time="0.001" /><testcase classname="test.test_surfaces.test_mesh" name="test_dihedral_angles_right_angle" time="0.001" /><testcase classname="test.test_surfaces.test_mesh" name="test_dihedral_angles_boundary_edges_excluded" time="0.001" /><testcase classname="test.test_surfaces.test_mesh" name="test_refine_mesh_no_refinement_when_flat" time="0.001" /><testcase classname="test.test_surfaces.test_mesh" name="test_refine_mesh_subdivides_high_curvature" time="0.002" /><testcase classname="test.test_surfaces.test_mesh" name="test_refine_mesh_with_projection" time="0.003" /><testcase classname="test.test_surfaces.test_mesh" name="test_refine_mesh_max_iterations_limits_refinement" time="0.006" /><testcase classname="test.test_surfaces.test_mesh" name="test_field_to_mesh_with_refinement" time="0.078" /></testsuite></testsuites>
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes