14std::optional<IntervalType>
29 double c_market)
noexcept {
30 if (!std::isfinite(a.time) || !std::isfinite(b.time) ||
31 !std::isfinite(a.price) || !std::isfinite(b.price) ||
32 !std::isfinite(a.volume) || !std::isfinite(b.volume) ||
33 !std::isfinite(a.momentum) || !std::isfinite(b.momentum) ||
34 !std::isfinite(c_market) || c_market <= 0.0) {
38 const double dt = b.time - a.time;
44 const double dp = b.price - a.price;
45 const double dv = b.volume - a.volume;
46 const double dm = b.momentum - a.momentum;
49 const double spatial_speed = std::sqrt(dp*dp + dv*dv + dm*dm) / std::abs(dt);
50 const double raw_beta = spatial_speed / c_market;
62 auto result = classify(a, b);
73std::optional<IntervalType>
79 auto maybe_curr_norm = normalizer.normalize(curr_raw);
82 if (!maybe_curr_norm.has_value()) {
89 return classify(prev_normalized, curr_norm);
static bool is_causal(const SpacetimeEvent &a, const SpacetimeEvent &b) noexcept
True if the trajectory from a to b is causal (timelike or lightlike).
static std::optional< double > beta(const SpacetimeEvent &a, const SpacetimeEvent &b, double c_market=constants::SPEED_OF_INFORMATION) noexcept
static std::optional< IntervalType > classify(const SpacetimeEvent &a, const SpacetimeEvent &b) noexcept
static std::optional< IntervalType > process(srfm::CoordinateNormalizer &normalizer, const SpacetimeEvent &prev_normalized, const SpacetimeEvent &curr_raw) noexcept
static IntervalType classify(double interval_squared) noexcept
static std::optional< double > compute(const SpacetimeEvent &a, const SpacetimeEvent &b, double c_market=constants::SPEED_OF_INFORMATION) noexcept
Spacetime Market Manifold — AGT-02 public API (implemented by AGT-06).
static constexpr double FLOAT_EPSILON
General floating-point comparison epsilon.
static constexpr double BETA_MAX_SAFE
@ Timelike
ds² < 0 — causal market movement (β < c)
@ Lightlike
ds² ≈ 0 — information propagation at c
CoordinateNormalizer — rolling z-score normalizer for SpacetimeEvent.
A point in 4D spacetime (t, x, y, z).