import { BivectorN } from '../math/bivector.js';
import { Rotor4 } from '../math/rotor4.js';
export type BaseMap = (state: Base) => Base;
export type RotorCocycle = (state: Base) => BivectorN;
export interface SkewProductFlowOptions {
readonly id?: string;
readonly baseMap: BaseMap;
readonly cocycle: RotorCocycle;
/** Scalar epsilon in `exp(epsilon B(x))`. Default 1. */
readonly coupling?: number;
}
export interface SkewProductState {
readonly base: Base;
readonly fiber: Rotor4;
readonly step: number;
}
/**
* A discrete compact-group extension `(x,R) -> (f(x), exp(epsilon B(x)) R)`.
*
* The base map owns its state representation. The fiber is always a `Rotor4`,
* so each increment is an SO(4) isometry and pair-quaternion normalization is
* the complete drift repair after composition.
*/
export declare class SkewProductFlow {
readonly id: string;
readonly baseMap: BaseMap;
readonly cocycle: RotorCocycle;
readonly coupling: number;
constructor({ id, baseMap, cocycle, coupling }: SkewProductFlowOptions);
initial(base: Base, fiber?: Rotor4): SkewProductState;
/** The state-dependent fiber increment `exp(epsilon B(x))`. */
increment(base: Base): Rotor4;
step(state: SkewProductState): SkewProductState;
iterate(state: SkewProductState, count: number): SkewProductState;
}
/** Cover-independent Frobenius distance from a rotor's SO(4) matrix to identity. */
export declare function rotorIdentityResidual(rotor: Rotor4): number;
export interface PeriodicOrbitHolonomyOptions {
readonly period: number;
readonly baseDistance: (left: Base, right: Base) => number;
/** Maximum closure error accepted for the supplied periodic orbit. Default 1e-12. */
readonly closureTolerance?: number;
/** SO(4) identity residual below which holonomy counts as identity. Default 1e-12. */
readonly identityTolerance?: number;
}
export interface PeriodicOrbitHolonomy {
readonly flow: string;
readonly period: number;
readonly orbit: readonly Base[];
readonly returnedBase: Base;
readonly closureError: number;
readonly closureTolerance: number;
readonly closed: boolean;
readonly holonomy: Rotor4;
readonly identityResidual: number;
readonly identityTolerance: number;
readonly nontrivial: boolean;
/** A finite obstruction to the cocycle being a coboundary on this base system. */
readonly essentialWitness: boolean;
}
/** Ordered fiber product around a claimed periodic base orbit. */
export declare function periodicOrbitHolonomy(flow: SkewProductFlow, initialBase: Base, { period, baseDistance, closureTolerance, identityTolerance }: PeriodicOrbitHolonomyOptions): PeriodicOrbitHolonomy;
//# sourceMappingURL=skew-product.d.ts.map