feat(c-abi): expose warmup_period / is_ready across the C ABI bindings (#297)
* feat(c-abi): expose warmup_period / is_ready across the C ABI bindings The C ABI hub exposed new/update/batch/reset/free per indicator but not the Indicator::warmup_period / is_ready queries that the native (Python/Node/WASM) bindings already had, so C/C#/Go/Java/R callers could not ask an indicator whether it was warmed up without feeding it and watching for NaN. Regenerated from the ScriptHelpers capi + language generators: - bindings/c: wickra_<ind>_warmup_period (size_t) and wickra_<ind>_is_ready (bool) for every indicator (504; the 10 alt-chart bar builders are excluded by design). wickra.h regenerated via cbindgen (additive only). - bindings/csharp: int WarmupPeriod() / bool IsReady() on each wrapper. - bindings/go: WarmupPeriod() int / IsReady() bool. - bindings/java: int warmupPeriod() / boolean isReady(). - bindings/r: C glue + registration; hand-written warmup_period() / is_ready() S3 generics in methods.R, plus NAMESPACE exports. Tests: C-ABI Rust unit tests, the C examples/archetypes.c suite, and the C#, Go, Java and R archetype suites all gain a warmup/is_ready transition check. * build(go): sync vendored wickra.h with the C ABI header The Go binding vendors bindings/c/include/wickra.h; refresh it with the new warmup_period / is_ready declarations so the CI sync check passes.
This commit is contained in:
@@ -1,8 +1,10 @@
|
||||
# Generated by roxygen2: do not edit by hand
|
||||
|
||||
S3method(batch,wickra_indicator)
|
||||
S3method(is_ready,wickra_indicator)
|
||||
S3method(reset,wickra_indicator)
|
||||
S3method(update,wickra_indicator)
|
||||
S3method(warmup_period,wickra_indicator)
|
||||
export(AbandonedBaby)
|
||||
export(Abcd)
|
||||
export(AbsoluteBreadthIndex)
|
||||
@@ -518,5 +520,7 @@ export(ZeroLagMacd)
|
||||
export(ZigZag)
|
||||
export(Zlema)
|
||||
export(batch)
|
||||
export(is_ready)
|
||||
export(reset)
|
||||
export(warmup_period)
|
||||
importFrom(stats,update)
|
||||
|
||||
@@ -76,3 +76,45 @@ reset.wickra_indicator <- function(object) {
|
||||
.Call(paste0("wk_", object$prefix, "_reset"), object$ptr, PACKAGE = "wickra")
|
||||
invisible(object)
|
||||
}
|
||||
|
||||
#' Number of updates an indicator needs before it produces a value
|
||||
#'
|
||||
#' Not available for the alt-chart bar builders ([RenkoBars()], [KagiBars()],
|
||||
#' [PointAndFigureBars()], …), which have no warmup.
|
||||
#'
|
||||
#' @param object A `wickra_indicator`.
|
||||
#' @return A single integer: the warmup period.
|
||||
#' @examples
|
||||
#' warmup_period(Sma(14)) # 14
|
||||
#' @export
|
||||
warmup_period <- function(object) {
|
||||
UseMethod("warmup_period")
|
||||
}
|
||||
|
||||
#' @rdname warmup_period
|
||||
#' @export
|
||||
warmup_period.wickra_indicator <- function(object) {
|
||||
.Call(paste0("wk_", object$prefix, "_warmup_period"), object$ptr, PACKAGE = "wickra")
|
||||
}
|
||||
|
||||
#' Whether an indicator has consumed enough input to emit a value
|
||||
#'
|
||||
#' Not available for the alt-chart bar builders, which have no warmup.
|
||||
#'
|
||||
#' @param object A `wickra_indicator`.
|
||||
#' @return A single logical.
|
||||
#' @examples
|
||||
#' sma <- Sma(3)
|
||||
#' is_ready(sma) # FALSE
|
||||
#' for (x in c(1, 2, 3)) update(sma, x)
|
||||
#' is_ready(sma) # TRUE
|
||||
#' @export
|
||||
is_ready <- function(object) {
|
||||
UseMethod("is_ready")
|
||||
}
|
||||
|
||||
#' @rdname is_ready
|
||||
#' @export
|
||||
is_ready.wickra_indicator <- function(object) {
|
||||
.Call(paste0("wk_", object$prefix, "_is_ready"), object$ptr, PACKAGE = "wickra")
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -7,6 +7,19 @@ test_that("scalar update returns the textbook value", {
|
||||
expect_equal(v, 4)
|
||||
})
|
||||
|
||||
test_that("warmup_period and is_ready report the warmup transition", {
|
||||
s <- Sma(3)
|
||||
expect_equal(warmup_period(s), 3L)
|
||||
expect_false(is_ready(s))
|
||||
update(s, 1)
|
||||
update(s, 2)
|
||||
expect_false(is_ready(s))
|
||||
update(s, 3)
|
||||
expect_true(is_ready(s))
|
||||
reset(s)
|
||||
expect_false(is_ready(s))
|
||||
})
|
||||
|
||||
test_that("batch matches streaming", {
|
||||
input <- c(1, 2, 3, 4, 5, 6, 7, 8)
|
||||
stream <- Sma(3)
|
||||
|
||||
Reference in New Issue
Block a user