% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/gmds_edge_repulsive_unfolding.R
\name{repulsive.state}
\alias{repulsive.state}
\title{Evaluate a pure repulsive layout objective}
\usage{
repulsive.state(
  coords,
  lambda = 1,
  pair.index = NULL,
  pair.weights = NULL,
  repulsion.family = c("log", "inverse_power"),
  repulsion.delta = 0.001,
  repulsion.power = 1,
  distance.eps = 1e-10,
  engine = c("cpp", "R")
)
}
\arguments{
\item{coords}{Numeric `n` by `dim` coordinate matrix.}

\item{lambda}{Repulsion strength. The returned total energy is
`lambda * repel.energy`; the gradient is scaled by `lambda`.}

\item{pair.index}{Optional two-column matrix of 1-based vertex pairs. If
`NULL` and `lambda > 0`, all unordered pairs are used.}

\item{pair.weights}{Optional non-negative pair weights parallel to
`pair.index`.}

\item{repulsion.family}{Repulsion potential family, either `"log"` or
`"inverse_power"`.}

\item{repulsion.delta}{Small positive softening parameter for pair distances.}

\item{repulsion.power}{Power used by the `"inverse_power"` repulsion.}

\item{distance.eps}{Small positive distance floor used in derivatives.}

\item{engine}{Backend engine. `"cpp"` is the default; `"R"` uses the
reference implementation.}
}
\value{
A list containing energy, unscaled repulsion energy, gradient,
  gradient norm, and embedded pair lengths.
}
\description{
`repulsive.state()` evaluates only the repulsion term used by the
experimental GMDS repulsive-unfolding operators. Unlike
[edge.repulsive.state()], this function has no graph-edge term and does
not require placeholder edges or edge lengths.
}
