import { VecN } from '@holotope/core'; import { XpbdIncrementalPotentialProblemN, type XpbdPackedIncrementalPotentialEvaluationN } from './xpbd-incremental-potential-problem.js'; import { type XpbdIncrementalPotentialMinimizationResultN } from './xpbd-incremental-potential-minimizer.js'; export type XpbdIncrementalPotentialVelocityUpdateN = 'backward-euler' | 'preserve'; export interface ApplyXpbdIncrementalPotentialResultNOptions { readonly result: XpbdIncrementalPotentialMinimizationResultN; /** Default `backward-euler`. */ readonly velocityUpdate?: XpbdIncrementalPotentialVelocityUpdateN; /** Matches a successful `XpbdWorldN` outer step by default. */ readonly clearForces?: boolean; } export type XpbdIncrementalPotentialParticleStateFieldN = 'particle-id' | 'dimension' | 'position' | 'velocity' | 'force' | 'inverse-mass' | 'gravity-scale'; export interface XpbdIncrementalPotentialParticleStateMismatchN { readonly particleIndex: number; readonly particleId: string; readonly field: XpbdIncrementalPotentialParticleStateFieldN; readonly axis?: number; readonly expected: number | string; readonly actual: number | string; } export type XpbdIncrementalPotentialEvidenceFieldN = 'position' | 'objective' | 'gradient' | 'gradient-norm'; export interface XpbdIncrementalPotentialEvidenceMismatchN { readonly field: XpbdIncrementalPotentialEvidenceFieldN; readonly particleIndex?: number; readonly coordinateIndex?: number; readonly axis?: number; readonly stored: number; readonly verified: number; } export interface XpbdIncrementalPotentialAppliedParticleN { readonly particleIndex: number; readonly particleId: string; readonly dynamic: boolean; readonly positionBefore: VecN; readonly positionAfter: VecN; readonly velocityBefore: VecN; readonly velocityAfter: VecN; readonly forceBefore: VecN; readonly forceAfter: VecN; } /** Context every application outcome carries, whether or not it applied. */ interface XpbdIncrementalPotentialApplicationBaseN { /** Compiled objective the minimization ran against. */ readonly problem: XpbdIncrementalPotentialProblemN; /** The complete minimization result this application was asked to apply. */ readonly result: XpbdIncrementalPotentialMinimizationResultN; /** Authored policy for deriving velocities from the accepted positions. */ readonly velocityUpdate: XpbdIncrementalPotentialVelocityUpdateN; /** Whether accumulated particle forces are cleared once positions land. */ readonly clearForces: boolean; } export interface XpbdIncrementalPotentialAppliedN extends XpbdIncrementalPotentialApplicationBaseN { readonly status: 'applied'; readonly verifiedFinal: XpbdPackedIncrementalPotentialEvaluationN; readonly particles: readonly XpbdIncrementalPotentialAppliedParticleN[]; } export interface XpbdIncrementalPotentialNotConvergedN extends XpbdIncrementalPotentialApplicationBaseN { readonly status: 'refused'; readonly reason: 'not-converged'; readonly minimizationStatus: Exclude; } export interface XpbdIncrementalPotentialStaleParticleStateN extends XpbdIncrementalPotentialApplicationBaseN { readonly status: 'refused'; readonly reason: 'stale-particle-state' | 'verification-mutated-particle-state'; readonly mismatch: XpbdIncrementalPotentialParticleStateMismatchN; } export interface XpbdIncrementalPotentialStaleEvidenceN extends XpbdIncrementalPotentialApplicationBaseN { readonly status: 'refused'; readonly reason: 'stale-result-evidence'; readonly mismatch: XpbdIncrementalPotentialEvidenceMismatchN; readonly verifiedFinal: XpbdPackedIncrementalPotentialEvaluationN; } export type XpbdIncrementalPotentialApplicationRefusedN = XpbdIncrementalPotentialNotConvergedN | XpbdIncrementalPotentialStaleParticleStateN | XpbdIncrementalPotentialStaleEvidenceN; export type XpbdIncrementalPotentialApplicationResultN = XpbdIncrementalPotentialAppliedN | XpbdIncrementalPotentialApplicationRefusedN; /** * Atomically applies one converged minimization result to its compiled particles. * * Expected non-application states return typed refusal evidence. Malformed * policy, arithmetic, and provider failures throw after particle rollback. */ export declare function applyXpbdIncrementalPotentialResultN(options: ApplyXpbdIncrementalPotentialResultNOptions): XpbdIncrementalPotentialApplicationResultN; export {}; //# sourceMappingURL=xpbd-incremental-potential-application.d.ts.map