• Added vignette “Higher-Order MLE Analysis” demonstrating third-order derivative tensors (D(f, x, order = 3)) for computing asymptotic skewness of Gamma MLEs, with Monte Carlo validation.
  • Renamed package from dualr to nabla. The S4 class dualr retains its name (it describes the object type — a dual number in R).
  • Added composable total derivative operator D(f):
    • D(f) returns the derivative of f as a new function.
    • D(f, x) evaluates the derivative at x.
    • D(f, x, order = k) applies D k times for k-th order derivative tensors.
    • D(D(f)) composes naturally for higher-order derivatives.
    • Output tensor shape: each application of D appends one n-dimension. For f: R^n -> R: gradient (n), Hessian (n,n), etc. For f: R^n -> R^m: Jacobian (m,n), (m,n,n), etc.
  • Unified gradient(), hessian(), and jacobian() as thin wrappers around D, replacing separate seeding strategies with a single composable mechanism. This simplifies the codebase at the cost of O(p) gradient (was O(1) passes) and O(p^2) Hessian (was O(p) passes).
  • Removed deprecated second-order functions: dual2_variable(), dual2_constant(), value2(), first_deriv(), second_deriv(), differentiate2(). Use dual_variable_n(), dual_constant_n(), deriv_n(), and differentiate_n() instead.
  • Removed internal helpers .make_grad_vector() and .make_grad2_vector().
  • Updated higher-order vignette to use current API and demonstrate D operator.
  • Replaced MLE-specific API with general-purpose derivative functions:
    • score() -> gradient() — computes the gradient of any scalar-valued function (still single-pass via vector-valued derivatives).
    • hessian() — unchanged (already mathematically general).
    • observed_information() — removed (trivial: just -hessian()).
    • score_and_hessian() -> jacobian() — generalized to compute the full m x p Jacobian matrix of any f: R^p -> R^m. Accepts functions returning lists, numeric vectors, or scalar dualr objects.
  • Renamed R/mle-helpers.R to R/derivatives.R.
  • Updated vignettes to use general terminology (gradient/Hessian/Jacobian).
  • Generalized to arbitrary-order exact derivatives via recursive nesting. New API: dual_variable_n(), dual_constant_n(), deriv_n(), differentiate_n().
  • Removed Rcpp/C++ fast paths — package is now pure R with no compiled code. This simplifies installation and aligns with the package’s focus on exact arbitrary-order derivatives rather than scalar speed.
  • Deprecated second-order-only functions (dual2_variable(), dual2_constant(), value2(), first_deriv(), second_deriv(), differentiate2()) as thin wrappers around the new generalized API.
  • Removed benchmarks (speed is not this package’s value proposition).
  • score() now computes the full gradient in 1 forward pass (was p passes) using vector-valued derivatives, exploiting the ANY slots of the dualr class.
  • hessian() now computes the full Hessian in p forward passes (was p(p+1)/2) using vector-gradient inner duals with nested outer duals.
  • Internal .is_scalar_dual() now also checks length() == 1L to correctly distinguish scalar duals (C++ fast path) from vector-gradient duals (R path).
  • Added Rcpp-based C++ fast paths for first-order dual arithmetic (+, -, *, /, ^), math (exp, sqrt, log), and sum. Provides 3-10x speedup on scalar dual operations while preserving full R fallback for nested (second-order) duals.
  • New internal .is_scalar_dual() predicate gates C++ vs R paths using is.double() on slot contents.
  • Added Rcpp to Imports and LinkingTo; package now requires C++ compilation.
  • Renamed S4 class from dual to dualr to avoid conflict with base R’s dual usage.
  • Added dedicated setMethod dispatches for hot-path arithmetic (+, -, *, /, ^) and math (exp, sqrt) operations, bypassing group generic overhead.
  • Extracted .dual_min() / .dual_max() internal helpers, deduplicating 6 inline lambdas across dual-arithmetic.R and dual-math.R.
  • Removed dead switch branches (sqrt, exp, log) from Math group generic that were shadowed by dedicated methods.
  • Standardized sum() in Summary group generic to use .as_dual() promotion, consistent with prod, min, max, and range.
  • Fixed stale \code{compositional.mle} reference in score() documentation.
  • Initial CRAN release.
  • S4 dual number class with full arithmetic and math function support.
  • Nested duals for exact second-order derivatives (dual2_variable, differentiate2).
  • MLE workflow helpers: score, hessian, observed_information, score_and_hessian.
  • Special functions: erf, erfc, beta, lbeta, psigamma.
  • Four vignettes: introduction, MLE workflow, higher-order derivatives, optimizer integration.