Changes from Version 0.70-1 to 0.70-2 [15-May-2026]

* Promoted `npqreg()` to a fully fledged quantile-regression front end. It
  now supports formula/data calls that compute `npcdistbw()` internally,
  scalar or vector `tau`, bandwidth reuse for additional quantiles in
  `plot()`, and the standard S3 workflow through `fitted()`, `predict()`,
  `predict(..., se.fit = TRUE)`, `se()`, `gradients()`, `summary()`,
  `print()`, `quantile()`, and `plot()`.

* Promoted `npconmode()` to a first-class conditional-mode estimator with
  formula/data and bandwidth-object workflows, propagation of
  bandwidth-selection controls through `npcdensbw()`, local-polynomial/NOMAD
  metadata in returned objects, class-probability output, level-specific
  probability gradients, and `fitted()`, `predict()`, `summary()`, `print()`,
  `gradients()`, and `plot()` methods.

* Extended `npconmode()` plotting to object-fed class-probability slices and
  two-dimensional probability surfaces, including optional `rgl` rendering and
  probability-level asymptotic intervals where defined. Surface bootstrap
  intervals for class probabilities remain intentionally deferred.

* Promoted `npcopula()` to a first-class copula estimator with formula/data
  and bandwidth-object workflows, automatic two-dimensional probability-grid
  construction, explicit `u` grid evaluation, ordinary extractable object
  components including `$bws`, `fitted()`, `predict()`, `predict(...,
  se.fit = TRUE)`, `se()`, `summary()`, `print()`, `as.data.frame()`, and
  enhanced `plot()` methods with asymptotic and bootstrap intervals where
  defined.

* Hardened S3 prediction and evaluation contracts across the newly promoted
  and adjacent core/semiparametric methods. The repaired routes honor the
  standard `newdata` workflow, preserve native evaluation-argument precedence
  such as `exdat`/`eydat`, validate formula right-hand-side variables in new
  data, and report invalid `se.fit` or gradient controls before expensive
  computation begins.

* Expanded pre-release validation for the promoted estimator families with
  hostile argument tests, S3 extractor and prediction contract tests,
  installed/tarball proof scripts, and parity checks against the mirrored
  `npRmpi` implementations.

* Added an explicit proper-discrete-probability contract for
  `npconmode()`. Local-constant conditional-mode fits remain unchanged by
  default because their categorical probabilities are proper by construction;
  non-local-constant routes now default to projecting the fitted probabilities
  over the discrete response support onto the probability simplex before
  selecting and reporting the conditional mode. Binary outcomes are handled
  through the complement identity, and the optional `probabilities = TRUE`
  return component exposes the fitted probability matrix for inspection.

* Split restart-from-minimum controls into `powell.remin` and
  `nomad.remin`. Ordinary fixed-degree Powell-style searches retain
  `powell.remin = TRUE` by default, following the established Numerical
  Recipes restart convention. Local-polynomial NOMAD degree searches now
  expose `nomad.remin`, which optionally performs a second NOMAD pass from the
  best full bandwidth/degree candidate; simulation evidence supports
  `nomad.remin = FALSE` for routine defaults. For
  `search.engine = "nomad+powell"`, the Powell polish now uses
  `powell.remin = FALSE` by default unless explicitly supplied, avoiding an
  unhelpful hot start of the hot-start polish.

* Preserved deprecated legacy `remin` compatibility for `npregbw()` and
  `npreg()` while steering users to the new `powell.remin` and
  `nomad.remin` controls. This protects downstream packages that still pass
  `remin` through formula/front-end wrappers.

* Exposed the same `powell.remin` and `nomad.remin` controls on single-index
  and smooth-coefficient bandwidth searches so `npindexbw(..., nomad = TRUE)` and
  `npscoefbw(..., nomad = TRUE)` have the same documented NOMAD restart
  contract as the other LP-capable bandwidth selectors.

* Added the redesigned public plot-control interface with direct scalar
  controls such as `errors`, `band`, `alpha`, `bootstrap`, `B`, `behavior`,
  `renderer`, and `perspective`, plus validated `np_boot_control()`,
  `np_grid_control()`, and `np_render_control()` helpers for detailed
  bootstrap, grid, and rendering options. Historical `plot.errors.*` inputs
  remain accepted as compatibility arguments.

* Hardened S3 plot argument handling so unsupported or misspelled named
  arguments in `...` fail fast with concise diagnostics before expensive plot
  computation begins, while preserving ordinary base-graphics pass-through
  arguments such as labels, limits, colors, and line widths.

* Preserved documented `plot.data.overlay` compatibility under the redesigned
  plot argument validator: `plot.data.overlay = FALSE` remains an accepted
  harmless no-op on routes without observed-response overlays, while
  `plot.data.overlay = TRUE` still fails fast on unsupported plot families.

* Added object-fed plot-data runtime helpers for the main S3 plot families,
  improving shared plot payload construction for regression, unconditional
  density/distribution, conditional density/distribution, single-index,
  partially linear, smooth-coefficient, and quantile-regression plots while
  preserving the existing public plot API.

* Added `npqreg()` gradient support using the conditional-quantile
  delta-method relationship between the conditional distribution derivative
  and conditional density, with plot-data support for quantile gradients.

* Exposed higher-order continuous-derivative extraction for local-polynomial
  conditional estimators where the selected polynomial degree supports the
  requested derivative order. `npreg()`, `npcdens()`, and `npcdist()` now honor
  `gradient.order` more consistently across fitted, evaluated, predicted, and
  plotted objects, including vector orders over continuous predictors and
  tensor/additive/Bernstein local-polynomial bases.

* Added asymptotic standard errors for `npqreg()` conditional quantiles and
  quantile gradients, and documented the implemented delta-method formulas
  and Nelsen-style quasi-inverse construction used by the conditional
  quantile solver.

* Repaired `npqreg()` conditional-quantile inversion so quantile levels,
  standard errors, gradients, and gradient standard errors are all derived
  from the same selected `npcdistbw()` conditional distribution estimator,
  including selected local-polynomial degree and basis metadata. This removes
  an inconsistency where the newly degree-aware quantile-gradient path could
  use a higher-order conditional distribution fit while the quantile level was
  still extracted by the legacy degree-unaware inversion path.

* Repaired adaptive nearest-neighbor conditional density/distribution
  evaluation for local-polynomial fits so `npcdens()`, `npcdist()`, and
  downstream `npqreg()` quantiles, standard errors, gradients, and gradient
  standard errors honor the selected LP degree/basis metadata. The regression
  guard verifies that `regtype = "ll"` remains identical to `regtype = "lp",
  degree = 1` while higher-degree adaptive-NN LP fits are degree-sensitive.

* Restored live progress updates for local-polynomial plot-bootstrap helpers
  when bootstrap resampling counts are precomputed and shared by a higher-level
  route, such as the component regressions inside partially linear
  `plot(..., errors = "bootstrap")`. The helper now processes the existing
  count matrix in progress-sized chunks without changing the resamples or
  bootstrap output order.

* Restored pure-discrete/all-categorical `npregbw()` least-squares
  cross-validation for fixed bandwidths by allowing the optimized regression
  CV cache to represent legitimate zero-continuous bandwidth storage. This
  repairs a regression from legacy behavior where all-categorical regression
  bandwidth selection could fail with an invalid raw objective, while adjacent
  mixed continuous/categorical routes were regression-checked for unchanged
  numerical output.

* Reworked `npplregbw(..., nomad = TRUE)` so local-polynomial automatic degree
  search follows the natural partially linear decomposition: separate nuisance
  regressions for `E[y | z]` and each `E[x_j | z]`, each with its own selected
  degree and bandwidths, followed by the final partially linear solve. Fixed
  `regtype = "lp"` now also accepts child-indexed degree matrices/lists in the
  same order as the `plbandwidth` rows (`yzbw`, then the `x` children), while a
  vector remains the common-degree shorthand.

* Added `predict.plregression(..., se.fit = TRUE)` support using the
  partially linear fitted-value linear operator and training-fit residuals to
  return asymptotic prediction standard errors for training and evaluation
  data.

* Reblocked conditional density and conditional distribution local-polynomial
  `cv.ls` block products to use BLAS matrix multiplication in the fixed
  bandwidth block routes, materially reducing repeated long inner-product
  work while preserving numerical results up to floating-point summation
  order.

* Repaired explicit-grid `npcopula()` evaluation so large probability grids
  use the direct estimator route rather than an expanded-grid path with poor
  scaling. This preserves numerical results while avoiding severe runtime
  growth as the user increases the grid resolution.

* Hardened bandwidth/front-end argument hygiene so estimator-only options such
  as `proper` are not forwarded into bandwidth selectors that do not accept
  them, preventing false-positive "unused argument" failures while preserving
  the intended estimator behavior.

* Opened the next development cycle after the 0.70-1 CRAN submission, with
  release-hardening follow-up tracked separately.

Changes from Version 0.70-0 to 0.70-1 [29-Apr-2026]

* Updated the package startup message to point first to the online gallery
  of examples and guides, while retaining the compact installed
  `np_getting_started` vignette as the offline/package-side entry point.

* Reorganized and expanded `.Rd` argument documentation across the package
  into user-oriented sections with clearer defaults and cross-references,
  improving scanability without changing the public API.

* Added `.Rbuildignore` coverage for local agent/skill guidance files so
  release tarballs remain clean.

* Hardened native bandwidth-selector cleanup by clearing stale estimator
  alias pointers after production C routes release borrowed state, resolving
  an extended native shadow-proof abort without changing estimator
  mathematics or search behavior.

* Removed recently added extinct bounded-kernel convolution scaffolding for
  the bounded continuous kernel, preserving the live quadrature-based bounded
  `cv.ls` route and existing bounded-kernel functionality.

* Standardized continuous bandwidth-search control naming around
  `scale.factor.*` arguments and documented how initialization bounds,
  deterministic starts, and the hard search lower bound work together.

* Added local-polynomial instability guidance for conditional-density and
  conditional-distribution search failures, pointing users from canonical
  raw-basis `regtype="ll"` failures toward the numerically safer
  Bernstein-basis local-polynomial route.

* Canonicalized `npqreg` quantile extraction by removing the legacy
  Powell/environment-selected extraction path, retaining the single
  one-dimensional conditional-CDF residual refinement route, and updating
  the `npqreg` help page and fit interface to expose only the live
  quantile-extraction controls.

* Reduced the default multistart cap from `min(5, p)` to `min(2, p)`
  across the core bandwidth selectors, with the univariate boundary
  density helper now defaulting to `nmulti=1`.

* Aligned automatic LP degree-search NOMAD fallbacks with the same
  `min(2, p)` cap when `nmulti` is not supplied explicitly.

* Added benchmark-study documentation under `benchmarks/validation` for
  the empirical `nmulti` default decision, including synthetic,
  real-data, and NOMAD start-stress evidence.

* Added a documented `nomad=TRUE` convenience preset across the
  LP-capable front ends, with the recommended LP/NOMAD defaults exposed
  in the estimator and bandwidth help pages and regression formula
  shorthand carrying that preset through internal bandwidth
  construction.

* Reactivated the public conditional LP/LL cross-validation routes for the
  affected source-of-truth families after the low-memory shadow-helper
  remediation:
  - `npcdensbw(cv.ml)` fixed and generalized nearest-neighbor
  - `npcdensbw(cv.ls)` fixed and generalized nearest-neighbor
  - `npcdistbw(cv.ls)` fixed and generalized nearest-neighbor
  - adaptive nearest-neighbor remains explicit fail-fast containment for the
    remediated LP/LL families.

* Extended conditional density/distribution LP CV internals to support
  generalized nearest-neighbor bandwidths in the canonical extracted
  `jksum.c` shadow/micro-core path, eliminating the previous LP
  generalized-NN `cv.ls` penalty collapse in source-of-truth proof cells
  while preserving existing public fixed-bandwidth behavior.

* Remediated smooth-coefficient LL/LP core and bandwidth-selection paths to
  remove accidental `n x n` weight-matrix construction/full-matrix dependence
  from ordinary estimation/CV, while preserving explicit hat/plot helper
  behavior where intended.

* Canonicalized semiparametric LL/LP behavior across recently generalized
  core families:
  - `npscoef*` now uses the canonical LP engine in ordinary LL/LP paths
  - `npplreg*` now inherits canonical component-regression semantics via
    `npregbw()`
  - `npindex*` objective-stage LL/LP handling now aligns with fitted-path
    semantics.

* Repaired `npreg` local-polynomial `cv.ls` fidelity by landing a canonical
  GLP objective kernel for the fixed-bandwidth non-tree route across
  supported GLP degrees, eliminating the degree-1 LL/LP discrepancy.

* Added `npscoefbw()` fast-summary accounting (`num.feval.fast`) without
  adding generic `npksum()` hot-path overhead.

* Expanded LL/LP degree-1 regression coverage for semiparametric families,
  including multivariate parity tests for `npscoef`, `npindex`, and
  `npplreg`.

* Fixed `npplregbw()` to propagate kernel-defining options (continuous kernel,
  bandwidth type, bounds, and related controls) into child regression
  bandwidth objects during computed-bandwidth calls, restoring
  kernel-sensitive plot/helper behavior and metadata fidelity.

* Completed canonical plot-remediation hardening for core S3 families with
  explicit fail-fast behavior:
  - no silent bootstrap-method remaps
  - no hidden fallback branches for unsupported plot/bootstrap configurations
  - explicit errors for unsupported argument/mode combinations.

* Added broad plot contract coverage for regression/index/smooth-coefficient/
  density/distribution families:
  - bootstrap argument contract gates
  - asymptotic-only contract gates
  - helper option-forwarding and semantics parity contracts
  - regression guards for `plot.errors.method` remap regressions.

* Leaned core plot bootstrap/mean paths by standardizing helper usage where
  canonical (`npreghat`, `npscoefhat`, and canonical ksum helper routes),
  with explicit fail-fast handling instead of legacy fallback toggles.

* Removed superseded legacy/debug toggles and stale compatibility branches in
  plotting and CV routing paths, including:
  - residual fastpath-disable scaffolding in plot helpers,
  - stale `np.groupcv.fast` option footprint,
  - obsolete conditional-density fast-switch slot.

* Enforced canonical LP behavior and removed silent behavior coercions:
  - removed transform-bounds auto-remap in regression bandwidth routing,
  - removed legacy CV aliasing and unsupported cv-iterate remaps,
  - removed Bernstein OOS alternate fallback routing while preserving
    canonical LP path behavior.

* Restored and hardened CV path-lock behavior:
  - centralized CVLS route predicates in one helper path,
  - added path-lock tests preventing inline predicate drift/regressions,
  - hardened large-h gate coverage with route-safety contracts.

* Standardized ridge ladders in helper-side optimization/solve paths to
  additive `1/n.train` sequences for touched helper families.

* Fixed helper/core ridge-base mismatch in ill-posed helper parity:
  - `npreghat`/`semihat` now default to zero-ridge-first solve semantics
    (matching core behavior that attempts un-ridged solve first),
  - retained `ridge=1e-12` defaults for inid/plreg bootstrap helper internals
    where explicit parity/stability checks favored nonzero base ridge.

* Added/updated reproducible issue-note harnesses for plot-helper parity and
  closeout validation, with artifact-oriented reporting.

* Added Windows toolchain hardening for LAPACK/BLAS linkage and documented
  win-builder release-check ingestion workflow updates.

Changes from Version 0.60-20 to 0.70-0 [20-Feb-2026]

* Completed migration from monolithic plotting entry points to modular S3
  plot methods and helper dispatch, while preserving backward-compatible
  `plot*` internals for parity.

* Fixed S3 plot argument compatibility regression by normalizing legacy alias
  arguments prior to dispatch (`gradient` -> `gradients`, `persp` ->
  `perspective`) to avoid ambiguous matching in run-mode examples.

* Added bounded continuous-kernel support across the package with a unified
  interface for Gaussian-family kernels using per-variable bounds:
  - bound modes `none`, `range`, and `fixed`
  - per-variable lower/upper bounds (`*kerlb`, `*kerub`)
  - compatibility behavior where `(-Inf, Inf)` reproduces standard
    unbounded Gaussian behavior.

* Plumbed bounded continuous-kernel arguments through core bandwidth and
  estimator pathways including unconditional density/distribution, conditional
  density/distribution, regression, and smooth-coefficient workflows.

* Added finite-bound validation and guardrails for bounded kernels:
  - enforce admissible lower/upper ordering and data-coverage checks for
    supplied fixed bounds
  - enforce fixed-bandwidth requirements when finite bounds are requested.

* Updated core C kernel-sum pathways to support bounded continuous-kernel
  normalization and associated convolution/LS-CV pathways where required.

* Added the ordered kernel option `"racineliyan"` to ordered-kernel
  interfaces (`okertype`, `oxkertype`, `oykertype`) and synchronized kernel
  mapping in conditional-density/distribution paths.

* Added bounded-kernel regression/CV regression tests for formula/default-path
  parity and bandwidth-selection smoke coverage.

* Removed stale legacy conditional-density bwmethod aliasing so only
  canonical least-squares selector semantics remain.

* Expanded and hardened `plot()` bootstrap error-band support:
  - replaced fixed quantiles with scalar `plot.errors.alpha` and added
    bootstrap quantile band types `pointwise`, `bonferroni`,
    `simultaneous`, and `all` (alongside `standard`)
  - vendored/attributed rank-based simultaneous set computation (from
    `MCPAN::SCSrank`) for `plot.errors.type="simultaneous"`
  - added color-coded overlay + legend for `plot.errors.type="all"`
    (Pointwise/Simultaneous/Bonferroni)
  - fixed non-`all` bootstrap overlays not drawing in several paths due to
    default color handling
  - fixed mixed/factor plotting branches (including `npreg`) so all
    bootstrap error types (`standard`, `pointwise`, `bonferroni`,
    `simultaneous`, `all`) render consistently
  - fixed single-index (`npindex`) plotting edge cases in gradient mode:
    corrected sign-aware lower/upper bounds for negative index weights,
    fixed sorted alignment for `all` bands, fixed `plot.behavior="data"`
    return-shape errors, and fixed `ylim` handling for user limits and
    panel-specific error ranges.

* Optimized core kernel-sum code paths in C (including ordered/unordered
  kernels), yielding substantial speedups for npksum() and downstream
  estimators.

* Improved bandwidth-search robustness by adding transformed-bounds handling
  and baseline invalid-penalty behavior for Powell-based optimization.

* Added optimization benchmarking/documentation updates and synced check/docs
  maintenance changes.

* Guarded fallback kernel-table indexing in jksum.c to avoid GCC/Winbuilder
  array-bounds warnings.

* Added user-configurable computational tolerances for kernel shortcuts via
  global options:
  - options(np.largeh.rel.tol=...) for continuous large-h K(0) shortcut logic
  - options(np.disc.upper.rel.tol=...) for discrete near-upper-bound
    (lambda) shortcut logic
  with fallback support for legacy environment variables.

* Extended large-h and discrete near-constant shortcut handling in jksum.c
  across core continuous/unordered kernel evaluator paths, improving runtime
  behavior for bandwidth-search-heavy workloads while preserving numerical
  stability.

* Added new documentation page np.options.Rd and cross-references from
  np-package and np.plot man pages; set default option values at package load.

* Added C-level generalized local polynomial regression support in `npreg`:
  - new `regtype="lp"` path in shared core code
  - per-continuous-variable degree vectors (`degree`)
  - GLP derivative extraction/plotting controls synchronized with
    regression/gradient interfaces.

* Refactored regression CV setup for `ll`/`glp`:
  - moved invariant basis/buffer setup outside hot objective loops
  - standardized raw-basis handling in fit/predict/CV pathways
  - reduced redundant recomputation during `cv.ls`/`cv.aic` optimization.

* Replaced inverse-heavy local-linear matrix workflows with solve-based linear
  algebra backends in hot paths (LAPACK/BLAS-oriented), improving numerical
  robustness and reducing overhead.

* Expanded all-large (`h`/`lambda`) fast-path instrumentation and reporting:
  - `num.feval.fast` now reported alongside `num.feval` for relevant
    bandwidth summaries
  - all-large shortcut logic extended to conditional density/distribution CV
    pathways with explicit counter accounting
  - simplified all-large accumulation branches and bypassed residual tree-list
    overhead when the all-large regime is already known.

* Updated `plot()` error-type semantics and docs:
  - renamed bootstrap error type `standard` to `pmzsd`
  - `pmzsd` now uses plus/minus the `1-alpha/2` normal quantile
    (`qnorm(alpha/2, lower.tail=FALSE)` semantics).

* Fixed remaining bootstrap `plot.errors.type="all"` rendering gaps across
  perspective/non-perspective plotting branches for regression, conditional
  density, and conditional distribution objects.

* Tightened discrete upper-bound gate semantics to strict relative tolerance
  handling for near-upper-bound lambda shortcuts.

* Removed unused legacy sources and prototypes (RuniqueCombs, pgplot
  placeholder) and restored B-spline error handling in bspline.c.

Changes from Version 0.60-19 to 0.60-20 [06-Feb-2026]

* Major enhancements to npregiv() and npregivderiv():
  - Implemented warm-start strategy for improved convergence
  - Aligned multistart strategy with crsiv/crsivderiv for consistency
  - Performance optimizations: pre-allocated matrices/lists in iterative loops,
    optimized trapezoidal integration, improved Tikhonov and Ridge calculations
  - Added S3 methods (print, summary, plot) for better integration with R workflow
  - Enhanced summaries with bandwidth details and estimation timing information
  - Alphabetized function arguments for consistency
  - Fixed initialization of bw.mu.w in npregivderiv
  - Cleaned up naming convention (phihat to phi throughout)

* Testing improvements:
  - Added comprehensive unit tests using testthat framework
  - Expanded test coverage to include distribution, copula, quantile regression,
    tests of independence/specification, and boundary/shape-constrained methods

* Build and maintenance updates:
  - Resolved -Wfree-nonheap-object compiler warnings in nr.c by implementing 
    a safe 0-based allocation strategy for 1-based indexing compatibility
  - Refined .Rbuildignore regexes to correctly exclude .git and build artifacts
  - Added missing imports (graphics, grDevices) to NAMESPACE to resolve global
    function notes
  - Restored \dontrun blocks in documentation to expedite package checks
  - Suppressed build warnings for non-standard man directory files

* Bug fixes:
  - Fixed np.plot categorical predictor evaluation
  - Fixed np package registrations after sync
  - Synced non-MPI code fixes from npRmpi

* Documentation updates:
  - Updated URLs to resolve CRAN check warnings
  - Updated McMaster website URL to https://experts.mcmaster.ca/people/racinej
  - Added build notes, worktrees documentation, and CRAN diff summary
  - Fixed documentation mismatches for npregiv/npregivderiv

Changes from Version 0.60-18 to 0.60-19 [28-Jan-2026]

* Added crs to Suggests field in DESCRIPTION per CRAN requirements

* Utility functions integrate.trapezoidal(), NZD(), NZD_pos() (new, affect npregiv() and npregivderiv())

* Miscellaneous typos fixed

Changes from Version 0.60-17 to 0.60-18 [09-Dec-2024]

* Patched issue with as.double(data) when data is a NULL object
  reported by Brian Ripley

* Merged rng pull request https://github.com/JeffreyRacine/R-Package-np/pull/48

* Incorporated Kurt Hornik's suggestion "If indeed intended as a
  package overview help file, please add \alias{np-package} to file
  'np/man/np-package.Rd'."

Changes from Version 0.60-16 to 0.60-17 [12-Mar-2023]

* Fixed warning "Check: S3 generic/method consistency Result: WARN
  compute.bootstrap.errors: function(..., bws)
  compute.bootstrap.errors.*" triggered potentially by lack of
  "...,bw" in functions called (thanks to Kurt Hornik for
  assistance!)

* Updated inst/CITATIONS to get rid of old-style cit and bib entries

Changes from Version 0.60-15 to 0.60-16 [18-Oct-2022]

* Fixed warning: a function definition without a prototype is
  deprecated in all versions of C and is not supported in C2x
  [-Wdeprecated-non-prototype] (thanks Zhenghua!)

Changes from Version 0.60-14 to 0.60-15 [09-Oct-2022]

* Explicit acknowledgment in DESCRIPTION of code gsl_bspline.c/.h
  adapted from the GNU GSL library with further details appended to
  gsl_bspline.c/.h (thanks to Professor Brian Ripley for noting this
  oversight).

Changes from Version 0.60-13 to 0.60-14 [22-Aug-2022]

* Added logspline and ks to DESCRIPTION to address NOTE on some system
  builds stating "Undeclared packages ‘logspline’, ‘ks’ in Rd xrefs"

* Zhenghua Nie kindly addressed the clang-UBSAN issue in jksum.c
  causing `runtime error: applying non-zero offset 8 to null pointer`

Changes from Version 0.60-12 to 0.60-13 [15-Aug-2022]

* Minor changes to np.Rnw vignette viz Sweave options and class
  (redundancies commented out)

* Fixed issues relating to new NOTE "Found if() conditions
  comparing class() to string [..] Use inherits() (or maybe is())
  instead." Addressed by using by using isa()

Changes from Version 0.60-11 to 0.60-12 [12-Aug-2022]

* JSS issues corrected in vignette/*.bib and inst/CITATION (use of DOI,
  etc., thanks to Achim Zeileis)

* Issues with utf8x in entropy_np.Rnw and np.Rnw corrected (utf8x -> utf8, etc.)

Changes from Version 0.60-10 to 0.60-11 [04-Jun-2021]

* npuniden.boundary() uses empirical support for a and b (previously was
  [0,1], now [min(X),max(X)])

* Corrected potential issue with malloc failing on null vector
  in C function sort_unique() detected by development version of
  gcc11 (thanks to Professor Brian Ripley for pointing this out
  and for his assistance)

* Corrected outdated URLs

Changes from Version 0.60-9 to 0.60-10 [5-Feb-2020]

* Corrected issue `Documented arguments not in usage in documentation
  object se: ...'

* Removal of directed quotes in some Rd documents, replacement with sQuote

* Fixed issue causing rebuilding of vignettes to crash (uocquantile() was
  the culprit)

Changes from Version 0.60-8 to 0.60-9 [24-Oct-2018]

* Added support for character expansion to plot() (which is invoked
  by calling plot() on an np object) - will take defaults from the
  environment par() or can be set directly, e.g.,
  plot(foo,cex.main=0.8)

Changes from Version 0.60-7 to 0.60-8 [04-Jun-2018]

* Used patch suggested by Scott Thompson for issue
  https://github.com/JeffreyRacine/R-Package-np/issues/8 regarding
  npcdens/npcdist and formulas

Changes from Version 0.60-6 to 0.60-7 [01-May-2018]

* Fix for switch() and zero length character strings that affected
  summary output for certain tests

* Added function for shape constrained bounded univariate PDF and CDF
  estimation (npuniden.sc())

* Added option for renormalizing improper bounded density estimates
  than can arise from the use of asymmetric negative edge kernel
  functions (proper=TRUE, npuniden.boundary())

* Fixed issues with CDF estimation in the presence of large bandwidths
  for bounded density estimates (npuniden.boundary())

Changes from Version 0.60-5 to 0.60-6 [12-Jan-2018]

* Added more edge kernel functions for npuniden.boundary(), some
  glitches addressed

* Added asymptotic standard errors and integrated density (CDF) to
  npuniden.boundary() and npuniden.reflect() plus additional examples

* Added least squares cross-validation to npuniden.boundary() (default
  for boundary kernel functions)

Changes from Version 0.60-4 to 0.60-5 [04-Jan-2018]

* Added two basic functions for univariate bounded kernel density
  estimation, npuniden.boundary and npuniden.reflect

* More plotting routines accept more passable parameters

Changes from Version 0.60-3 to 0.60-4 [03-Dec-2017]

* Default plot.errors.style changed to "band"

* Using wrapLines(strwrap(...)) for summary output for model specification
  test to automatically wrap long formula lines

* plot() calls plot() and plot() behaves better when most passable
  parameters are fed (col =, lty =, xlab =, etc.) but there may still
  be room for improvement

* Added option plot.par.mfrow=TRUE/FALSE to plot() so that the
  automated setting of par(mfrow=c(,)) in plot is disabled and the
  user can do this manually if desired

* Option plot.par.mfrow=TRUE/FALSE can be overridden by setting
  options(plot.par.mfrow=TRUE/FALSE)

Changes from Version 0.60-2 to 0.60-3 [29-Apr-2017]

* Fixed the `cannot find function is()' glitch that just surfaced with R 3.4.0

* Fixed glitch in npconmode when randomizing if all probabilities are equal

* Migrated some code from crs (which I wrote) to avoid crs:::

* Fixed	outstanding glitch in npscoef() with tydat being converted

* Leave.one.out not properly implemented in npscoef, corrected

* Using pmin/pmax in NZD (parallel min/max more efficient with vectors)

* Improved screen i/o when smooth.residuals=TRUE/FALSE

* Corrected glitch in npregiv() where multivariate z would halt with error

* Npregiv with method="Landweber-Fridman" no longer passes back lists

* Fixed glitch in Kmat.lp with p=0 and derivatives

* Tikhonov regularization in npregiv now supports evaluation data

* Updated npregiv (was sorely lacking, did not support eval etc.)

* Use of .onLoad suggested (by Bernd Bischl)

* Fixed glitch in npconmode

* Added vignette("entropy_np",package="np") to startup message

* In np.distribution.bw.R default for do.full.integral changed to FALSE

* Fixed the CDF objective function when averaging over the training data

* Fixed crash error with npcdistbw and adaptive bandwidths

Changes from Version 0.60-1 to 0.60-2 [27-Jun-2014]

* added timeseries support for all relevant objects (i.e. for a
  ts() vector data object x, npreg(x~lag(x,-1)+lag(x,-2)) is now
  supported)

* added total time to summary for bandwidth objects

* npqreg no longer accepts gradients=TRUE when gradients are in fact not
  supported

* npqreg fails with an informative message when passed a conditional
  density bandwidth object

Changes from Version 0.60-0 to 0.60-1 [6-Jun-2014]

* Fixed glitch in adaptive_nn/generalized_nn bandwidths that affected all
  routines that rely on non-fixed bandwidths

* Tweaks to search for adaptive_nn/generalized_nn initial search values

* Fixed glitch in local linear estimation with adaptive_nn bandwidths

Changes from Version 0.50-1 to 0.60-0 [1-Jun-2014]

* Ordered kernel types now default to liracine/liracine (normalized) for
  conditional/unconditional objects, respectively (the previous default,
  i.e. the Wang van Ryzin kernel, is poorly behaved when smoothing out of
  ordered predictors is appropriate)

* Added analytical ordered CDF kernels, resulting in significant
  speedups for cross validation with ordered variables

* Added analytical ordered convolution kernels, resulting in significant
  speedups for least-squares cross validation with ordered variables

* The entire C backend has been rewritten and improved in almost every
  regard

* Glitch in adaptive convolution kernels corrected

* Added truncated gaussian kernel (see ntpgauss for modifying the
  truncation radius)

* Support for trees complete (use options(np.tree=TRUE)) which when used in
  conjunction with bounded kernels (i.e. "epanechnikov"/"truncated
  gaussian") can reduce the computational burden for certain problems

* Optimizers that make use of Powell's direction set method now accept
  additional arguments that can be used to potentially improve
  default settings

* Default search settings for optimizers that make use of Powell's
  direction set method should better scale to the range of variables

* Added mean absolute deviation/1.4826 to mix of robust scale elements

* Corrected error in order of conditional density/distribution manual
  bandwidths pointed out by Decet Romain

* Figure in vignette not displaying properly, needed png=TRUE reported by
  Christophe Bontemps

*  Using chol2inv/chol rather than solve throughout R routines that rely
   on inversion

* Fixed glitch in npindexbw() to stop maxit from blowing up every time
  convergence fails

* Fixed issue with summary reporting incorrect value of objective function
  in certain bandwidth objects

* When nmulti > 1,  the full multi- starting search history is now
  returned in a vector named fval.history

* Added na.action for consistency with other R functions such as lm()

* New function npquantile() that returns smooth univariate quantiles

* npksum explicitly only uses raw bandwidths now (and will emit an error
  if passed numeric scale factors, bandwidth objects are still OK)

* Fixed regression in npindex() with bootstrapped standard errors

* Code makes use of one call to npksum() in npindex() and npscoef() where
  possible rather than two separate calls

* Updated npsigtest() for addition of power and added joint test to
  the mix

* Changed ceiling() to max(1,round()) in b.star per Dimitris Politis's
  suggestion

* Reworked the interface for npcopula() to avoid two bandwidths and
  density=TRUE but exploiting passing of either npudistbw (copula) or
  npudensbw (copula density)

Changes from Version 0.40-13 to 0.50-1 [13-Mar-2013]

* The functions npudist() and npudistbw() are now uncoupled from npudens()
  and npudensbw() (previously they relied on unconditional PDF bandwidths
  due to the lack of a multivariate mixed-data method for selecting bandwidths
  for CDFs - now with Li & Racine (2013) we have a robust method hence the
  split)

* The use of cdf=TRUE is deprecated for npudens and
  npudensbw objects due to the uncoupling described above

* Fixed glitch in gradient standard errors in npindex where identical
  standard errors were output in model$gerr

* Fixed glitch in covariance matrix in npindex (ichimura) where covariance
  matrix was not symmetric

* Fixed glitch in npksum() where use of bwtype="adaptive_nn" and
  operator="integral" produced the survivor function rather than
  the cumulative distribution function

* Cleaned up internals for npcmstest()

* Using .onUnload rather than .Last.lib in zzz.R

* Fixed glitch in npreg() summary where `Residual standard error' was
  reporting residual variance

* npksum() functionality extended

- npksum() can now return the matrix of kernel weights (which can be
  useful for constrained estimation, by way of illustration, or
  constructing novel kernel-based procedures without the need to write
  extensive code)

- npksum() can now accept different operators on a product kernel, for
  example,

  npksum(txdat=data.frame(x1,x2),operator=c("derivative","normal"),bws=c(1,1))

  will use the derivative kernel for x1 (i.e. the derivative of the
  gaussian kernel) and the default kernel for x2 (i.e. a standard
  kernel such as the gaussian) thereby allowing the user to program a
  number of estimators such as conditional CDFs etc. that were
  previously not available via npksum()

* Fixed glitch with variable scope where certain objects could not be
  found in the environment

* Added function `npcopula()' for d-dimensional copula estimation via
  inversion

* Modified stopping rules in npregiv and npregivderiv

* Added reference to R2 measure (Doksum and Samarov (1995))

* Startup message points to the faq, faq is now a vignette

Changes from Version 0.40-12 to 0.40-13 [05-Mar-2012]

* Added new function npregivderiv() that implements the IV derivative
  method of Florens and Racine (2012)

* Added more passable parameters to npregiv() (multistarting,
  parameters passed to optim() for cross-validation)

* Changes to code to improve compliance with R `Writing portable
  packages' guidelines and correct partial argument matches

Changes from Version 0.40-11 to 0.40-12 [24-Nov-2011]

* Added option (user request) to hold the bandwidth fixed but optimize
  the parameters in the single index model

Changes from Version 0.40-10 to 0.40-11 [24-Oct-2011]

* Corrected regression in single index errors

Changes from Version 0.40-9 to 0.40-10 [24-Oct-2011]

* Modified Silverman's adaptive measure of spread to reflect changes
  in sd() (sd on matrix deprecated)

Changes from Version 0.40-8 to 0.40-9 [30-July-2011]

* Renamed COPYING file to COPYRIGHTS

Changes from Version 0.40-7 to 0.40-8 [29-July-2011]

* Fixed issue where calling plot resets system seed

* Updated examples in docs so that plot is recommended throughout (and
  not plot that is invoked by plot)

* Fixed regression in npindex when gradients=TRUE and errors=TRUE

* Function npindex/npindexbw now accepts additional arguments and
  implements this properly (i.e. proper implementation by Tristen of
  Version 0.30-8/0.30-9 change for npindex)

* Function npplreg now supports factors in the parametric part just
  like lm() does

* Fixed glitch in jksum.c where the use of weights and adaptive bws
  could segfault.

Changes from Version 0.40-6 to 0.40-7 [8-Jun-2011]

* Function npregiv now supports exogenous X and multivariate Z and W.

* demo(npregiv) provides a useful illustration.

Changes from Version 0.40-5 to 0.40-6 [1-Jun-2011]

* Added a new function npregiv that conducts nonparametric
  instrumental regression a la Darolles, Fan, Florens and Renault
  (2011, forthcoming, Econometrica) and Horowitz (2011,
  Econometrica). Note that this function currently returns the fitted
  phi(z) (i.e. lacks much functionality relative to other np
  functions) and is in `beta status' until further notice.

* Added a new dataset `Engel95' that allows one to estimate Engel
  curves using the new nonparametric instrumental regression function
  npregiv.

Changes from Version 0.40-4 to 0.40-5 [26-Apr-2011]

* Fixed issue with npindexbw where, for certain problems, starting
  values needed refinement otherwise convergence would fail (we now
  use an improved normalization for the starting values)

Changes from Version 0.40-3 to 0.40-4 [21-Jan-2011]

* Fixed issue with ckertype and ckerorder not being propagated in
  np.singleindex.bw.R

* Fixed issue with negative penalties being returned by cv.aic in
  npregbw (ought to have been +infinity)

Changes from Version 0.40-1 to 0.40-3 [23-Jul-2010]

* Added random seed (defaults to 42) to npscoefbw to ensure consistent
  values for optimization for successive invocations on the same data

* Fixed glitch in multistarting in npscoefbw whereby multistarting was
  not working (always returned last computed function value and not
  the minimum)

* Fixed issue for npRmpi where the C code underlying regression
  cross-validation (code in jksum.c) differs between np and npRmpi
  (both were correct with the latter being a tad slower, now both use
  unified code base)

* Fixed a scope issue whereby a user would write a function that calls
  an np/npRmpi command, however, objects passed to the user's function
  and called by the np/npRmpi command (i.e. such as newdata) cannot be
  found in the environment yet they exist outside of the function

* Fixed issue with bwscaling=TRUE and bwmethod="cv.aic" in npreg

Changes from Version 0.40-0 to 0.40-1 [4-Jun-2010]

* Added asymptotic standard errors to npindex for the Klein and Spady
  and Ichimura parameter estimates which, when gradients=TRUE, can be
  extracted via vcov(foo) where foo is a npsingleindex object (the
  Z-scores can be obtained via Z<-coef(foo)[-1]/sqrt(diag(vcov(foo)))[-1])

Changes from Version 0.30-9 to 0.40-0 [25-May-2010]

* Modified codebase to enable dynamic spawning for interactive
  sessions in npRmpi

* Interactive examples supported in npRmpi

Changes from Version 0.30-8 to 0.30-9 [17-May-2010]

* Fixed issue where ukertype and okertype were being ignored by npindex

* Fixed regression (dating to version 0.30-4) where random.seed=42 was
  not initialized in functions npcmstest, npdeneqtest, npindexbw,
  npsdeptest, npqcmstest, npsigtest, npsymtest, npunitest, and plot

* Fixed issue with saving and restoring random seed in npdeptest

* Changes to codebase to modify method used to prevent division by
  zero

* New vignette for the npRmpi package (vignette("npRmpi",package="npRmpi"))

Changes from Version 0.30-7 to 0.30-8 [20-Apr-2010]

* Implemented moment version of metric entropy in npsymtest and
  npunitest with warnings about their use documented carefully and
  exceptions trapped and warnings issuing when detected
 
* Cleaned up print/summary output formatting of some functions

Changes from Version 0.30-6 to 0.30-7 [15-Feb-2010]

* Added function npunitest for entropy-based testing of equality of
  univariate densities as described in Maasoumi and Racine (2002,
  2009)

* Updated vignette to reflect new functions (Table 1: np functions)

Changes from Version 0.30-5 to 0.30-6 [3-Feb-2010]

* Added function npsdeptest for entropy-based testing of nonlinear
  serial dependence described in Granger, Maasoumi and Racine (2004)

* Added function npdeptest for entropy-based testing of nonlinear
  pairwise dependence described in Maasoumi and Racine (2002)

* Added more bootstrap options to npsymtest (now both iid and
  time-series bootstrapping are supported)

* Cleaned up summary formatting in the vignette by adding
  \usepackage[utf8x]{inputenc} to the Sweave file np.Rnw

* Fixed issue with saving and restoring random seed when there was
  none in the environment

Changes from Version 0.30-4 to 0.30-5 [29-Jan-2010]

* Added function npdeneqtest for integrated squared difference testing
  of equality of densities as described in Maasoumi, Li, and Racine
  (2009), Journal of Econometrics

* Save random seed prior to setting seed in certain functions, then
  restore seed after function completes

Changes from Version 0.30-3 to 0.30-4 [27-Jan-2010]

* Added function npsymtest for entropy-based testing of symmetry
  described in Maasoumi and Racine (2009), Econometric Reviews

* Added function b.star that automates block length selection for
  the stationary and circular bootstrap

* Cleaned up docs

Changes from Version 0.30-2 to 0.30-3 [29-May-2009]

* Corrected error in Epanechnikov convolution kernels for fixed and
  generalized bandwidth objects

* Changed default example in npscoef

Changes from Version 0.30-1 to 0.30-2 [19-Apr-2009]

* min(std,IQR/1.348) is the adaptive measure of spread. We now test
  for the pathological case where IQR is zero but std > 0 and return
  std in this instance

Changes from Version 0.30-0 to 0.30-1 [29-Jan-2009]

* predict now supports bandwidth, density, distribution, conbandwidth,
  condensity, and condistribution objects

* Consistently allow predictions for categorical values outside of
  support of training data

  Note that predictions based upon unconditional density objects
  defined over categorical variables that lie outside the support of
  the training data may no longer be true probabilities (i.e., as
  defined over the training data and the extended/augmented support --
  their sum may exceed one) and may therefore require renormalization
  by the user 

* Fixed a numerical issue which could hinder npregbw()'s cross
  validation with higher-order kernels

* Default nmulti in npplregbw() is now set correctly

* Fixed a bug with the ridging routine in npscoefbw(), added ridging to
  npscoef

* Fixed trivial i/o issue with "Multistart 1 of" using npscoefbw()

Changes from Version 0.20-4 to 0.30-0 [15-Jan-2009]

* Added basic user-interrupt checking for all underlying C code so
  that either <Ctrl-C> (Rterm) or the `STOP' icon (Rgui) will
  interrupt all running processes. This has a number of desirable side
  effects in addition to being able to interrupt C-based processes
  including i) R no longer showing up as `not responding' under the
  task manager (Windows) or the activity monitor (Mac OS X) and ii)
  buffered output now being correctly displayed when using Rgui under
  Windows and Mac OS X

  Note that repeated interruption of large jobs can reduce available
  memory under R - if this becomes an issue (i.e., you get a `cannot
  allocate...' error under R) simply restart R (i.e., exit then run a
  fresh R session)

* Added a function npseed() that allows the user to set/reset the
  random seed for all underlying C routines

* Fixed a bug that caused npplregbw() to ignore any kernel options
  for the regression of y on z

* Refined certain constants used in the normal-reference density
  bandwidth rule for increased accuracy

* Moved from using the maximum likelihood estimate of variance
  throughout to the degrees of freedom corrected estimate (all
  variance estimates now change by the factor (n-1)/n)

Changes from Version 0.20-3 to 0.20-4 [19-Nov-2008]

* Using an adaptive measure of spread throughout.  The scale factor
  reported for a bandwidth can appear to be small when the standard
  deviation is inflated due to the presence of outliers.  Furthermore,
  supplying a scale factor of, say, 1.06 for density estimation when
  there are outliers that inflate the standard deviation may
  oversmooth rather dramatically in the presence of outliers.  We now
  use the measure found in Silverman (1986, equation (3.30)) which is
  min(standard deviation, interquartile range/1.349). This robust
  choice produces expected results for scale factors in the presence
  of outliers

Changes from Version 0.20-2 to 0.20-3 [14-Nov-2008]

* Fixed a typo which caused predict() and plot() to abort when called
  on plregression objects, and which also prevented print() and
  summary() from printing information about the kernels used when
  called on plregression objects

* Fixed a typo which caused partially linear regressions to crash when
  out-of-sample responses were provided with evaluation data

Changes from Version 0.20-1 to 0.20-2 [02-Nov-2008]

* Allow for evaluation outside of discrete support of factors in
  npksum() and fixed a warning in jksum

* Fixed a bug which lead to unpredictable behavior when there were
  more categorical values for the training data than realisations

Changes from Version 0.20-0 to 0.20-1 [13-Aug-2008]

* Work-around for scale-factor issues during npregbw() cv when
  changing the training data

Changes from Version 0.14-3 to 0.20-0 [28-Jul-2008]

* npksum() now supports an expanded set of kernels (including
  convolution, derivative and integral), which can be selected via the
  'operator' argument

* Automatic bandwidth searches are now performed when attempting to
  evaluate on data without bandwidths. This allows users to combine
  bandwidth selection and estimation in one step

* The npsigtest() interface is brought in line with other functions
  (S3)

* Significance tests can now be performed on npreg() outputs, so
  npsigtest(modelname) is now supported

* Added a vignette and faq. To see the vignette try
    vignette("np",package="np")

* summary() on npconmode() now properly retrieves names from bandwidth
  objects

* Fixed the 6th and 8th order epanechnikov kernels

* Fixed some quietness issues

* plot() now returns data upon request for conditional densities

* npreg() and npcdens() now take the appropriate limits in some
  pathological cases

* User supplied bandwidths now operate seamlessly with the formula
  interface

Changes from Version 0.14-2 to 0.14-3 [02-May-2008]

* Fixed a glitch that only arose when using the `liracine' unordered
  kernel in the presence of irrelevant variables. The upper bound for
  numerical search was constrained to be (c-1)/c [that for the
  aitchisonaitken unordered kernel] but ought to have been 1. The
  summary output would therefore show a value of lambda hitting the
  (smaller) upper bound (c-1)/1 when it may have hit the (larger)
  upper bound 1

Changes from Version 0.14-1 to 0.14-2 [11-Jan-2008]

* Relaxed checking tolerances slightly to prevent spurious 'invalid
  bandwidth' errors

* Empty sections were removed from help files

* example(foobar) now works again. This was disabled in 0.14-1 at the
  request of the R maintainers in order to shorten the duration of R
  CMD check. All examples remained in the help files but due to the
  presence of `dontrun' they were not run when examples(foobar) is
  requested. Now a limited subset are run while the full set of
  examples remain in the documents

Changes from Version 0.13-1 to 0.14-1 [18-Dec-2007]

* Now use optim for minimisation in single index and smooth
  coefficient models

* Fixed bug in klein-spady objective function

* Standard errors are now available in the case of no continuous
  variables

* Summary should look prettier, print additional information

* Tidied up lingering issues with out-of-sample data and conditional
  modes

* Fixed error when plotting asymptotic errors with conditional
  densities

* Fixed a bug in plot() with partially linear regressions and
  plot.behavior='data' or 'plot-data'

* Maximum default number of multistarts is 5

* Least-squares cross-validation of conditional densities uses a new,
  much faster algorithm

* New, faster algorithm for least-squares cross-validation for both
  local-constant and local linear regressions

  Note that the estimator has changed somewhat: both cross-validation
  and the estimator itself use a method of shrinking towards the local
  constant estimator when singularity would otherwise lead to the
  breakdown of the estimator. This arises in sparse data settings in
  conjunction with small bandwidths for one or more regressor

* Optimised smooth coefficient code, added ridging

* Fixed bug in uniform CDF kernel

* Fixed bug where npindexbw() would ignore bandwidth.compute = FALSE
  and compute bandwidths when supplied with a preexisting bw object

* Now can handle estimation out of discrete support

* Summary would misreport the values of discrete scale factors which
  were computed with bwscaling = TRUE

Changes from Version 0.12-1 to 0.13-1 [03-May-2007]

* Bandwidths are now checked for validity based on their variable and
  kernel types

* np now does a better job of preserving names of some 'y' data

* Names of coefficients returned from coef() now match variable names

* Fixed some corner cases in npksum() involving the dimensionality of
  outputs

* Fixed deprecation warnings in R 2.5.0 caused by use of $ on atomic
  objects

* Various and sundry bug fixes in npscoef()

* npscoef() now handles discrete 'z' data

* Predict now accepts the argument 'se.fit', like predict.lm

* Fixed bug where incorrect asymptotic standard errors of gradients
  for regression objects were being displayed in plot()

* Fixed bug where errors of gradients of regression objects were not
  being returned in matrix form

* vcov() now works with partially linear regression objects

* Fixed detection of evaluation responses when using the formula
  interface

* Pre-computed bandwidth objects are now provided for some of the more
  computationally burdensome examples

* Added Jeffrey Wooldridge's WAGE1 dataset with qualitative variables
  (married, female, nonwhite)

* Predictions outside of discrete support for regressions and
  conditional densities are now allowed

* Fixed sign issue with scaling of standard errors in the single index
  model

* Fixed error when calculating some bandwidths/scale factors for
  display purposes

* Bug in passing certain arguments to npcdensbw() fixed

* Added predict method for qregression objects

* Proper normalisation for liracine kernel shown in summary

* Fixed output bug ($\hat ~$H) in summary method for sigtest objects

* Fixed regression with plotting of bootstrapped errors in perspective
  plots

* npcdist() no longer incorrectly calls npcdens()

* Fixed spacing between var name and p-value in significance test
  summaries

Version 0.12-1 [19-Nov-2006]

* Initial release of the np package on CRAN
