Testing
Documentation for testing utilities for Manifolds.jl
. The function test_manifold
can be used to verify that your manifold correctly implements the Manifolds.jl
interface. Similarly test_group
and test_action
can be used to verify implementation of groups and group actions.
Manifolds.test_action
โ Functiontest_action(
A::AbstractGroupAction,
a_pts::AbstractVector,
m_pts::AbstractVector,
X_pts = [];
atol = 1e-10,
atol_ident_compose = 0,
test_optimal_alignment = false,
test_mutating_group=true,
test_mutating_action=true,
test_diff = false,
test_switch_direction = true,
)
Tests general properties of the action A
, given at least three different points that lie on it (contained in a_pts
) and three different point that lie on the manifold it acts upon (contained in m_pts
).
Arguments
atol_ident_compose = 0
: absolute tolerance for the test that composition with identity doesn't change the group element.
Manifolds.test_group
โ Functiontest_group(
G,
g_pts::AbstractVector,
X_pts::AbstractVector = [],
Xe_pts::AbstractVector = [];
atol = 1e-10,
test_mutating = true,
test_exp_lie_log = true,
test_diff = false,
test_invariance = false,
test_lie_bracket=false,
test_adjoint_action=false,
diff_convs = [(), (LeftForwardAction(),), (RightBackwardAction(),)],
)
Tests general properties of the group G
, given at least three different points elements of it (contained in g_pts
). Optionally, specify test_diff
to test differentials of translation, using X_pts
, which must contain at least one tangent vector at g_pts[1]
, and the direction conventions specified in diff_convs
. Xe_pts
should contain tangent vectors at identity for testing Lie algebra operations. If the group is equipped with an invariant metric, test_invariance
indicates that the invariance should be checked for the provided points.
Manifolds.test_manifold
โ Functiontest_manifold(
M::AbstractManifold,
pts::AbstractVector;
args,
)
Test general properties of manifold M
, given at least three different points that lie on it (contained in pts
).
Arguments
basis_has_specialized_diagonalizing_get = false
: if true, assumes thatDiagonalizingOrthonormalBasis
given inbasis_types
hasget_coordinates
andget_vector
that work without caching.basis_types_to_from = ()
: basis types that will be tested based onget_coordinates
andget_vector
.basis_types_vecs = ()
: basis types that will be tested based onget_vectors
default_inverse_retraction_method = ManifoldsBase.LogarithmicInverseRetraction()
: default method for inverse retractions (log
.default_retraction_method = ManifoldsBase.ExponentialRetraction()
: default method for retractions (exp
).exp_log_atol_multiplier = 0
: change absolute tolerance of exp/log tests (0 use default, i.e. deactivate atol and use rtol).exp_log_rtol_multiplier = 1
: change the relative tolerance of exp/log tests (1 use default). This is deactivated if theexp_log_atol_multiplier
is nonzero.expected_dimension_type = Integer
: expected type of value returned bymanifold_dimension
.inverse_retraction_methods = []
: inverse retraction methods that will be tested.is_mutating = true
: whether mutating variants of functions should be tested.is_point_atol_multiplier = 0
: determines atol ofis_point
checks.is_tangent_atol_multiplier = 0
: determines atol ofis_vector
checks.mid_point12 = test_exp_log ? shortest_geodesic(M, pts[1], pts[2], 0.5) : nothing
: if notnothing
, then check thatmid_point(M, pts[1], pts[2])
is approximately equal tomid_point12
. This is by default set tonothing
iftext_exp_log
is set to false.point_distributions = []
: point distributions to test.rand_tvector_atol_multiplier = 0
: chage absolute tolerance in testing random vectors (0 use default, i.e. deactivate atol and use rtol) random tangent vectors are tangent vectors.retraction_atol_multiplier = 0
: change absolute tolerance of (inverse) retraction tests (0 use default, i.e. deactivate atol and use rtol).retraction_rtol_multiplier = 1
: change the relative tolerance of (inverse) retraction tests (1 use default). This is deactivated if theexp_log_atol_multiplier
is nonzero.retraction_methods = []
: retraction methods that will be tested.test_atlases = []
: Vector or tuple of atlases that should be tested.test_exp_log = true
: if true, check thatexp
is the inverse oflog
.test_injectivity_radius = true
: whether implementation ofinjectivity_radius
should be tested.test_inplace = false
: if true check if inplace variants work if they are activated, e.g. check thatexp!(M, p, p, X)
work iftest_exp_log = true
. This in general requiresis_mutating
to be true.test_is_tangent
: if true check that thedefault_inverse_retraction_method
actually returns valid tangent vectors.test_musical_isomorphisms = false
: test musical isomorphisms.test_mutating_rand = false
: test the mutating random function for points on manifolds.test_project_point = false
: test projections onto the manifold.test_project_tangent = false
: test projections on tangent spaces.test_representation_size = true
: test repersentation size of points/tvectprs.test_tangent_vector_broadcasting = true
: test boradcasting operators on TangentSpace.test_vector_spaces = true
: test Vector bundle of this manifold.test_default_vector_transport = false
: test the default vector transport (usually parallel transport).test_vee_hat = false
: testvee
andhat
functions.tvector_distributions = []
: tangent vector distributions to test.vector_transport_methods = []
: vector transport methods that should be tested.vector_transport_inverse_retractions = [default_inverse_retraction_method for _ in 1:length(vector_transport_methods)]
` inverse retractions to use with the vector transport method (especially the differentiated ones)vector_transport_to = [ true for _ in 1:length(vector_transport_methods)]
: whether to check theto
variant of vector transportvector_transport_direction = [ true for _ in 1:length(vector_transport_methods)]
: whether to check thedirection
variant of vector transport
Manifolds.find_eps
โ Functionfind_eps(x...)
Find an appropriate tolerance for given points or tangent vectors, or their types.
Manifolds.test_parallel_transport
โ Functiontest_parallel_transport(M,P; along=false, to=true, diretion=true)
Generic tests for parallel transport on M
given at least two pointsin P
.
The single functions to transport along
(a curve), to
(a point) or (towards a) direction
are sub-tests that can be activated by the keywords arguemnts
!!! Note Since the interface to specify curves is not yet provided, the along keyword does not have an effect yet