gri-plot 0.2.0.post1__tar.gz → 0.2.1__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 (71) hide show
  1. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/.gitlab-ci.yml +2 -2
  2. gri_plot-0.2.1/.python-version +1 -0
  3. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/CONTRIBUTING.md +1 -1
  4. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/PKG-INFO +4 -4
  5. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/README.md +1 -1
  6. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/gri_plot/figure3d.py +2 -0
  7. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/gri_plot/frames.py +2 -0
  8. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/gri_plot/observables/aoa.py +2 -0
  9. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/gri_plot/observables/fdoa.py +2 -0
  10. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/gri_plot/observables/los.py +2 -0
  11. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/gri_plot/observables/range_sphere.py +2 -0
  12. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/gri_plot/observables/tdoa.py +2 -0
  13. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/gri_plot/observables/terrain.py +2 -0
  14. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/gri_plot/plot_ellipse.py +2 -0
  15. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/gri_plot/scatter.py +2 -0
  16. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/gri_plot/scatter_map.py +2 -0
  17. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/gri_plot/shapes/cone.py +2 -0
  18. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/gri_plot/shapes/cylinder.py +2 -0
  19. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/gri_plot/shapes/ellipse.py +2 -0
  20. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/gri_plot/shapes/ellipsoid.py +2 -0
  21. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/gri_plot/shapes/meshgen.py +2 -0
  22. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/gri_plot/shapes/sphere.py +2 -0
  23. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/gri_plot/surfaces/__init__.py +2 -0
  24. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/gri_plot/surfaces/gradients/axis.py +2 -0
  25. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/gri_plot/surfaces/gradients/line.py +2 -0
  26. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/gri_plot/surfaces/gradients/plane.py +2 -0
  27. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/gri_plot/surfaces/gradients/point.py +2 -0
  28. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/gri_plot/surfaces/intersection.py +2 -0
  29. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/gri_plot/surfaces/mesh.py +2 -0
  30. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/pyproject.toml +2 -2
  31. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/report.xml +1 -1
  32. gri_plot-0.2.0.post1/.python-version +0 -1
  33. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/.coveragerc +0 -0
  34. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/.docs_other_projects.md +0 -0
  35. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/.gitignore +0 -0
  36. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/.gitlab-ci-deps.yml +0 -0
  37. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/.init_venv.sh +0 -0
  38. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/.pre-commit-config.yaml +0 -0
  39. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/.pre-commit-unskipped.py +0 -0
  40. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/.ruff.toml +0 -0
  41. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/.vscode/settings.json +0 -0
  42. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/LICENSE +0 -0
  43. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/gri_plot/__init__.py +0 -0
  44. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/gri_plot/observables/__init__.py +0 -0
  45. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/gri_plot/py.typed +0 -0
  46. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/gri_plot/shapes/__init__.py +0 -0
  47. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/gri_plot/surfaces/gradients/__init__.py +0 -0
  48. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/notes.txt +0 -0
  49. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/test/__init__.py +0 -0
  50. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/test/test_figure3d.py +0 -0
  51. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/test/test_frames.py +0 -0
  52. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/test/test_observables/__init__.py +0 -0
  53. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/test/test_observables/test_aoa.py +0 -0
  54. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/test/test_observables/test_fdoa.py +0 -0
  55. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/test/test_observables/test_los.py +0 -0
  56. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/test/test_observables/test_range_sphere.py +0 -0
  57. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/test/test_observables/test_tdoa.py +0 -0
  58. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/test/test_observables/test_terrain.py +0 -0
  59. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/test/test_plot_ellipse.py +0 -0
  60. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/test/test_plot_scattermap.py +0 -0
  61. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/test/test_scatter.py +0 -0
  62. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/test/test_shapes/__init__.py +0 -0
  63. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/test/test_shapes/test_cone.py +0 -0
  64. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/test/test_shapes/test_cylinder.py +0 -0
  65. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/test/test_shapes/test_ellipse.py +0 -0
  66. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/test/test_shapes/test_ellipsoid.py +0 -0
  67. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/test/test_shapes/test_sphere.py +0 -0
  68. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/test/test_surfaces/__init__.py +0 -0
  69. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/test/test_surfaces/test_intersection.py +0 -0
  70. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/test/test_surfaces/test_mesh.py +0 -0
  71. {gri_plot-0.2.0.post1 → gri_plot-0.2.1}/uv.lock +0 -0
@@ -17,7 +17,7 @@ cache:
17
17
  - .venv/
18
18
 
19
19
  .python_base:
20
- image: python:3.14
20
+ image: python:3.12
21
21
  before_script:
22
22
  # TODO: This reference and include is a stopgap until we have the projects on pypi
23
23
  - !reference [.clone_dependencies, before_script]
@@ -75,7 +75,7 @@ lint:pyright:
75
75
 
76
76
  deploy:pypi:
77
77
  stage: deploy
78
- image: python:3.14
78
+ image: python:3.12
79
79
  id_tokens:
80
80
  PYPI_ID_TOKEN:
81
81
  aud: pypi
@@ -0,0 +1 @@
1
+ 3.12
@@ -5,7 +5,7 @@ to get started.
5
5
 
6
6
  ## Setup
7
7
 
8
- Requires **Python 3.14+** and **bash**.
8
+ Requires **Python 3.12+** and **bash**.
9
9
 
10
10
  ```bash
11
11
  git clone <repo-url>
@@ -1,12 +1,12 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gri-plot
3
- Version: 0.2.0.post1
3
+ Version: 0.2.1
4
4
  Project-URL: repository, https://gitlab.com/geosol-foss/python/gri-plot
5
5
  Project-URL: homepage, https://geosolresearch.com
6
6
  License-Expression: MIT
7
7
  License-File: LICENSE
8
- Requires-Python: >=3.14
9
- Requires-Dist: gri-utils
8
+ Requires-Python: >=3.12
9
+ Requires-Dist: gri-utils>=0.2.0
10
10
  Requires-Dist: numpy>=2.3.3
11
11
  Requires-Dist: plotly>=6.3.0
12
12
  Requires-Dist: scikit-image>=0.25.0
@@ -16,7 +16,7 @@ Description-Content-Type: text/markdown
16
16
 
17
17
  # Plot (3D Geolocation Visualization)
18
18
 
19
- 3D geolocation visualization and 2D plotting utilities built on Plotly. Requires Python 3.14+.
19
+ 3D geolocation visualization and 2D plotting utilities built on Plotly. Requires Python 3.12+.
20
20
 
21
21
  ## Overview
22
22
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Plot (3D Geolocation Visualization)
4
4
 
5
- 3D geolocation visualization and 2D plotting utilities built on Plotly. Requires Python 3.14+.
5
+ 3D geolocation visualization and 2D plotting utilities built on Plotly. Requires Python 3.12+.
6
6
 
7
7
  ## Overview
8
8
 
@@ -4,6 +4,8 @@ This module provides the Figure3D class for building complex 3D visualizations
4
4
  by combining multiple Surface objects with coordinate frame transformation.
5
5
  """
6
6
 
7
+ from __future__ import annotations
8
+
7
9
  from typing import TYPE_CHECKING
8
10
 
9
11
  import numpy as np
@@ -4,6 +4,8 @@ This module provides coordinate frame handling for 3D visualization using
4
4
  gri-utils for coordinate conversions.
5
5
  """
6
6
 
7
+ from __future__ import annotations
8
+
7
9
  from enum import Enum
8
10
  from typing import TYPE_CHECKING, NamedTuple
9
11
 
@@ -3,6 +3,8 @@
3
3
  This module provides the AoaSurface class for visualizing AOA measurements.
4
4
  """
5
5
 
6
+ from __future__ import annotations
7
+
6
8
  from typing import TYPE_CHECKING
7
9
 
8
10
  import numpy as np
@@ -3,6 +3,8 @@
3
3
  This module provides the FdoaSurface class for visualizing FDOA measurements.
4
4
  """
5
5
 
6
+ from __future__ import annotations
7
+
6
8
  from typing import TYPE_CHECKING
7
9
 
8
10
  import numpy as np
@@ -3,6 +3,8 @@
3
3
  This module provides the LosSurface class for visualizing line of sight.
4
4
  """
5
5
 
6
+ from __future__ import annotations
7
+
6
8
  from typing import TYPE_CHECKING
7
9
 
8
10
  import numpy as np
@@ -3,6 +3,8 @@
3
3
  This module provides the RangeSphere class for visualizing range measurements.
4
4
  """
5
5
 
6
+ from __future__ import annotations
7
+
6
8
  from typing import TYPE_CHECKING
7
9
 
8
10
  from gri_plot.shapes.sphere import Sphere
@@ -3,6 +3,8 @@
3
3
  This module provides the TdoaSurface class for visualizing TDOA isosurfaces.
4
4
  """
5
5
 
6
+ from __future__ import annotations
7
+
6
8
  from typing import TYPE_CHECKING
7
9
 
8
10
  import numpy as np
@@ -3,6 +3,8 @@
3
3
  This module provides the TerrainSurface class for visualizing terrain.
4
4
  """
5
5
 
6
+ from __future__ import annotations
7
+
6
8
  from typing import TYPE_CHECKING
7
9
 
8
10
  import numpy as np
@@ -5,6 +5,8 @@ one or more 2D error ellipses as Plotly figures. Designed for visualizing
5
5
  geolocation error ellipses from gri-ell's Ell.ellipse output.
6
6
  """
7
7
 
8
+ from __future__ import annotations
9
+
8
10
  import math
9
11
  from typing import TYPE_CHECKING
10
12
 
@@ -1,5 +1,7 @@
1
1
  """Simple helper to externalize the plotly scattergram. Make it a one-liner."""
2
2
 
3
+ from __future__ import annotations
4
+
3
5
  from collections.abc import Sequence
4
6
 
5
7
  import numpy as np
@@ -1,5 +1,7 @@
1
1
  """Basic lat/lon plot to a scatter_map in plotly."""
2
2
 
3
+ from __future__ import annotations
4
+
3
5
  from typing import TYPE_CHECKING
4
6
 
5
7
  import plotly.graph_objects as go
@@ -1,5 +1,7 @@
1
1
  """Cone shape for 3D visualization."""
2
2
 
3
+ from __future__ import annotations
4
+
3
5
  from typing import TYPE_CHECKING
4
6
 
5
7
  import numpy as np
@@ -1,5 +1,7 @@
1
1
  """Cylinder shape for 3D visualization."""
2
2
 
3
+ from __future__ import annotations
4
+
3
5
  from typing import TYPE_CHECKING
4
6
 
5
7
  import numpy as np
@@ -6,6 +6,8 @@ is a simple 2D boundary representation parameterized by semi-major axis,
6
6
  semi-minor axis, and orientation.
7
7
  """
8
8
 
9
+ from __future__ import annotations
10
+
9
11
  import math
10
12
  from typing import TYPE_CHECKING
11
13
 
@@ -1,5 +1,7 @@
1
1
  """Ellipsoid shape for 3D visualization."""
2
2
 
3
+ from __future__ import annotations
4
+
3
5
  from typing import TYPE_CHECKING
4
6
 
5
7
  import numpy as np
@@ -4,6 +4,8 @@ This module provides functions to generate vertices and faces for common
4
4
  3D shapes. The output can be passed to vertices_to_mesh3d() for rendering.
5
5
  """
6
6
 
7
+ from __future__ import annotations
8
+
7
9
  from typing import TYPE_CHECKING
8
10
 
9
11
  import numpy as np
@@ -1,5 +1,7 @@
1
1
  """Sphere shape for 3D visualization."""
2
2
 
3
+ from __future__ import annotations
4
+
3
5
  from typing import TYPE_CHECKING
4
6
 
5
7
  import numpy as np
@@ -3,6 +3,8 @@
3
3
  This module defines the ImplicitShape ABC that all plottable shapes must implement.
4
4
  """
5
5
 
6
+ from __future__ import annotations
7
+
6
8
  from abc import ABC, abstractmethod
7
9
  from typing import TYPE_CHECKING
8
10
 
@@ -1,5 +1,7 @@
1
1
  """Axis-based intensity functions."""
2
2
 
3
+ from __future__ import annotations
4
+
3
5
  from typing import TYPE_CHECKING
4
6
 
5
7
  import numpy as np
@@ -1,5 +1,7 @@
1
1
  """Line-based intensity functions."""
2
2
 
3
+ from __future__ import annotations
4
+
3
5
  from typing import TYPE_CHECKING
4
6
 
5
7
  import numpy as np
@@ -1,5 +1,7 @@
1
1
  """Plane-based intensity functions."""
2
2
 
3
+ from __future__ import annotations
4
+
3
5
  from typing import TYPE_CHECKING
4
6
 
5
7
  import numpy as np
@@ -1,5 +1,7 @@
1
1
  """Point-based intensity functions."""
2
2
 
3
+ from __future__ import annotations
4
+
3
5
  from typing import TYPE_CHECKING
4
6
 
5
7
  import numpy as np
@@ -6,6 +6,8 @@ Euclidean distance in residual space, giving a smooth tube-like volume around
6
6
  the intersection curve/region.
7
7
  """
8
8
 
9
+ from __future__ import annotations
10
+
9
11
  from typing import TYPE_CHECKING
10
12
 
11
13
  import numpy as np
@@ -4,6 +4,8 @@ This module provides the fundamental functions for creating Plotly Mesh3d traces
4
4
  from vertices and faces, and for extracting mesh geometry from scalar fields.
5
5
  """
6
6
 
7
+ from __future__ import annotations
8
+
7
9
  from typing import TYPE_CHECKING
8
10
 
9
11
  import numpy as np
@@ -3,9 +3,9 @@ name = "gri-plot"
3
3
  dynamic = ["version"]
4
4
  readme = "README.md"
5
5
  license = "MIT"
6
- requires-python = ">=3.14"
6
+ requires-python = ">=3.12"
7
7
  dependencies = [
8
- "gri-utils",
8
+ "gri-utils>=0.2.0",
9
9
  "numpy>=2.3.3",
10
10
  "plotly>=6.3.0",
11
11
  "scikit-image>=0.25.0",
@@ -1 +1 @@
1
- <?xml version="1.0" encoding="utf-8"?><testsuites name="pytest tests"><testsuite name="pytest" errors="0" failures="0" skipped="29" tests="111" time="8.481" timestamp="2026-02-19T16:46:25.619978+00:00" hostname="runner-zxwgkjaph-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.854" /><testcase classname="test.test_figure3d" name="test_plot_surfaces_convenience" time="0.025" /><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.000"><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.000"><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.004" /><testcase classname="test.test_figure3d" name="test_add_intersection_returns_self" time="1.584" /><testcase classname="test.test_figure3d" name="test_add_intersection_creates_trace" time="1.517" /><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.000"><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.000"><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_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.004" /><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.005" /><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.000"><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.005" /><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.005" /><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.000"><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.000"><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.004" /><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.000"><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.000"><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.006" /><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.032" /><testcase classname="test.test_plot_ellipse" name="test_requires_at_least_one_ellipse" time="0.001" /><testcase classname="test.test_plot_ellipse" name="test_multiple_ellipses_create_traces" time="0.017" /><testcase classname="test.test_plot_ellipse" name="test_show_axes_false_reduces_traces" time="0.029" /><testcase classname="test.test_plot_ellipse" name="test_visual_single_ellipse" time="0.000"><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.000"><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.000"><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.000"><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.000"><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.000"><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.000"><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.000"><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.001" /><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.000"><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.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.002" /><testcase classname="test.test_shapes.test_ellipsoid" name="test_residual_on_surface" time="0.004" /><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.000"><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.000"><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.001" /><testcase classname="test.test_surfaces.test_mesh" name="test_sphere_mesh_vertices_on_surface" time="0.001" /><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.001" /><testcase classname="test.test_surfaces.test_mesh" name="test_refine_mesh_with_projection" time="0.002" /><testcase classname="test.test_surfaces.test_mesh" name="test_refine_mesh_max_iterations_limits_refinement" time="0.003" /><testcase classname="test.test_surfaces.test_mesh" name="test_field_to_mesh_with_refinement" time="0.043" /></testsuite></testsuites>
1
+ <?xml version="1.0" encoding="utf-8"?><testsuites name="pytest tests"><testsuite name="pytest" errors="0" failures="0" skipped="29" tests="111" time="11.890" timestamp="2026-03-18T04:26:41.072019+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.783" /><testcase classname="test.test_figure3d" name="test_plot_surfaces_convenience" time="0.048" /><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.824" /><testcase classname="test.test_figure3d" name="test_add_intersection_creates_trace" time="2.964" /><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_frames" name="test_xyz_lla_roundtrip" time="0.002" /><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.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.002" /><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.059" /><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.051" /><testcase classname="test.test_plot_ellipse" name="test_show_axes_false_reduces_traces" time="0.083" /><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.000"><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.000"><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.001"><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.001"><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.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.002" /><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.004" /><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.083" /></testsuite></testsuites>
@@ -1 +0,0 @@
1
- 3.14
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes