Traditional comparisons
tpose {=, <>, <, >, <=, >=} tpose → boolean
SELECT tpose '{[Pose(Point(1 1), 0.1)@2001-01-01, Pose(Point(1 1), 0.3)@2001-01-02),
[Pose(Point(1 1), 0.3)@2001-01-02, Pose(Point(1 1), 0.5)@2001-01-03]}' =
tpose '[Pose(Point(1 1), 0.1)@2001-01-01, Pose(Point(1 1), 0.5)@2001-01-03]';
-- true
SELECT tpose '{[Pose(Point(1 1), 0.1)@2001-01-01, Pose(Point(1 1), 0.5)@2001-01-03]}' <>
tpose '[Pose(Point(1 1), 0.1)@2001-01-01, Pose(Point(1 1), 0.5)@2001-01-03]';
-- false
SELECT tpose '[Pose(Point(1 1), 0.1)@2001-01-01, Pose(Point(1 1), 0.5)@2001-01-03]' <
tpose '[Pose(Point(1 1), 0.1)@2001-01-01, Pose(Point(1 1), 0.6)@2001-01-03]';
-- true
Ever and always comparisons
tpose {?=, ?<>, %=, %<>} tpose → boolean
SELECT tpose '[Pose(Point(1 1), 0.2)@2001-01-01, Pose(Point(1 1), 0.4)@2001-01-04)' ?= Pose(Point(1 1), 0.3); -- true SELECT tpose '[Pose(Point(1 1), 0.2)@2001-01-01, Pose(Point(1 1), 0.2)@2001-01-04)' &= Pose(Point(1 1), 0.2); -- true
Temporal comparisons
tpose {#=, #<>} tpose → tbool
SELECT tpose '[Pose(Point(1 1), 0.2)@2001-01-01,
Pose(Point(1 1), 0.4)@2001-01-03)' #= pose 'Pose(Point(1 1), 0.3)';
-- {[f@2001-01-01, t@2001-01-02], (f@2001-01-02, f@2001-01-03)}
SELECT tpose '[Pose(Point(1 1), 0.2)@2001-01-01, Pose(Point(1 1), 0.8)@2001-01-03)' #<>
tpose '[Pose(Point(1 1), 0.3)@2001-01-01, Pose(Point(1 1), 0.7)@2001-01-03)';
-- {[t@2001-01-01, f@2001-01-02], (t@2001-01-02, t@2001-01-03)}
Compare two temporal pose chains, or a temporal pose chain and a pose chain
eEq({pose,posechain,tpose,tposechain},{pose,posechain,tpose,tposechain}) → boolean
SELECT tposechain 'PoseChain(Pose(Point(1 1), 0.5))@2001-01-01' =
tposechain 'PoseChain(Pose(Point(1 1), 0.5))@2001-01-01';
-- t
SELECT eEq(tposechain '{PoseChain(Pose(Point(1 1), 0.5))@2001-01-01,
PoseChain(Pose(Point(2 2), 0.5))@2001-01-02}',
posechain 'PoseChain(Pose(Point(2 2), 0.5))');
-- t