Propose a Guarded Lower Graph Heat Time
Source:R/metric_graph_lowpass.R
metric.graph.heat.extend.lower.RdProposes one lower positive heat time after an external search controller has classified the current lower endpoint. The helper enforces a geometric expansion step, an identity-departure floor, a maximum number of expansion rounds, and the truncated-basis resolution certificate. It does not decide whether an endpoint is competitive; fold-level or cohort-level search logic remains the caller's responsibility.
Arguments
- basis
A
"metric.graph.lowpass.basis"object.- eta.grid
Current finite positive heat-time grid. The exact identity time
eta = 0is intentionally excluded from competitive search.- endpoint.status
External lower-endpoint classification:
"active"proposes one extension, while"inactive"and"unresolved"return the grid unchanged.- expansion.factor
Finite numeric factor greater than one. An active proposal is
min(eta.grid) / expansion.factorbefore applying the identity floor.- max.expansions
Nonnegative integer maximum number of lower-extension rounds.
- expansions.completed
Nonnegative integer number of extension rounds already admitted under the same search contract.
- identity.departure
Positive number smaller than one. The proposed time cannot be smaller than
-log(1 - identity.departure) / lambda.max, wherelambda.maxis the largest retained eigenvalue. For a complete basis this is the exact largest graph-Laplacian eigenvalue.- truncation.tol
Positive tolerance smaller than one for the conservative omitted-mode attenuation bound.
- unresolved.action
Action when an active proposal is not certified by a truncated basis:
"error"or"mark".
Value
A list of class "metric.graph.heat.lower.extension" with the
augmented or unchanged grid and proposal telemetry. A proposal is added
only when admitted is TRUE.
Examples
adj <- list(2L, c(1L, 3L), c(2L, 4L), 3L)
lengths <- list(1, c(1, 1), c(1, 1), 1)
basis <- metric.graph.lowpass.basis(adj, lengths, n.eigenpairs = 4L,
eigen.solver = "dense")
eta <- metric.graph.heat.eta.grid(basis, n.initial = 6L)
metric.graph.heat.extend.lower(basis, eta, endpoint.status = "active")
#> $eta.grid
#> [1] 0.09763107 0.29289322 0.64964295 1.44092090 3.19599103 7.08877124
#> [7] 15.72303466
#>
#> $previous.eta.min
#> [1] 0.2928932
#>
#> $proposed.eta.raw
#> [1] 0.09763107
#>
#> $proposed.eta
#> [1] 0.09763107
#>
#> $identity.floor
#> [1] 0.002943675
#>
#> $identity.departure
#> [1] 0.01
#>
#> $lambda.max
#> [1] 3.414214
#>
#> $lambda.max.type
#> [1] "complete_spectrum"
#>
#> $omitted.attenuation.bound
#> [1] 0.7165313
#>
#> $truncation.tol
#> [1] 1e-04
#>
#> $basis.complete
#> [1] TRUE
#>
#> $endpoint.status
#> [1] "active"
#>
#> $expansion.factor
#> [1] 3
#>
#> $max.expansions
#> [1] 3
#>
#> $expansions.completed
#> [1] 0
#>
#> $expansion.round
#> [1] 1
#>
#> $admitted
#> [1] TRUE
#>
#> $status
#> [1] "admitted"
#>
#> attr(,"class")
#> [1] "metric.graph.heat.lower.extension" "list"