export type hasProperty = { [P in K]: S; }; export declare function isInstance(x: any, i: (new (...args: any[]) => T) | ((...args: any[]) => T)): x is T; export declare function hasStatic(x: any, f: string): ((...args: any[]) => any) | undefined; export declare function arrayOf(arr: any[], g: (x: any) => x is U): arr is U[]; export type AsFreeFunction = T[K] extends (this: infer This, ...args: infer Args) => infer R ? (self: This, ...args: Args) => R : never; export interface Operators { from(n: number): T; func(name: string, args: T[]): T | undefined; variable(name: string): T | undefined; dup(a: T): T; neg(a: T): T; scale(a: T, b: number): T; add(a: T, b: T): T; sub(a: T, b: T): T; mul(a: T, b: T): T; div(a: T, b: T): T; ipow(a: T, n: number): T; rpow(a: T, n: number, d: number): T; pow(a: T, b: T): T; eq(a: T, b: T): any; lt(a: T, b: T): any; } export declare function Type(operators: Operators): { new (value: T): { value: T; from(n: number): /*elided*/ any; dup(): /*elided*/ any; neg(): /*elided*/ any; scale(b: number): /*elided*/ any; add(b: /*elided*/ any): /*elided*/ any; sub(b: /*elided*/ any): /*elided*/ any; mul(b: /*elided*/ any): /*elided*/ any; div(b: /*elided*/ any): /*elided*/ any; mag(): number; abs(): /*elided*/ any; sign(): number; eq(b: /*elided*/ any): boolean; lt(b: /*elided*/ any): boolean; sqrt(): /*elided*/ any; recip(): /*elided*/ any; ipow(n: number): /*elided*/ any; rpow(n: number, d: number): /*elided*/ any; npow(n: number): /*elided*/ any; toString(): string; valueOf(): number; }; }; export interface ops, S = number> { dup(): C; neg(): C; scale(b: S): C; add(b: C): C; sub(b: C): C; mul(b: C): C; div(b: C): C; mag(): number | scalarExt; } export interface scalar, S = number> extends ops { from(n: number | bigint): C; ipow(n: number): C; abs(): C; sign(): number; eq(b: C): boolean; lt(b: C): boolean; valueOf(): number | bigint; } export interface scalarPow> extends scalar { sqrt(): C; recip(): C; rpow(n: number, d: number): C; npow(n: number): C; } export interface scalarExt> extends scalarPow { divmod(this: C, b: C): number | bigint; } export type scalarRational> = scalar & has<'divmod'> & has<'recip'>; export type Immutable = Omit; export type has0> = Pick, K>; export declare function has0>(f: K): (x: object) => x is has0; export type has> = ops & Pick, K>; export declare function has>(f: K): (x: ops) => x is has; export type hasFree> = { [P in K]: AsFreeFunction, K>; }; export declare function hasFree>(f: K): (x: object) => x is hasFree; export declare function isScalar(x: ops): x is scalar; export declare function isScalarRational(x: ops): x is scalarRational; export declare function isScalarExt(x: ops): x is scalarExt; export declare function asScalarT>(from: T, x: number | T): T; export declare function compare(a: T, b: T): number; export declare function lazySlice(arr: T[], start?: number, end?: number): Generator;