/* tslint:disable */
/* eslint-disable */
export function start(): void;
export function initThreadPool(num_threads: number): Promise<any>;
export function wbg_rayon_start_worker(receiver: number): void;
export class Fsrs {
  free(): void;
  constructor(parameters?: Float32Array | null);
  /**
   * `minute_offset` should be the `user's timezone offset from UTC` minus `Anki's "next day starts at"`, in minutes.
   */
  computeParametersAnki(minute_offset: number, cids: BigInt64Array, eases: Uint8Array, ids: BigInt64Array, types: Uint8Array, progress: Progress | null | undefined, enable_short_term: boolean): Float32Array;
  computeParameters(ratings: Uint32Array, delta_ts: Uint32Array, lengths: Uint32Array, progress: Progress | null | undefined, enable_short_term: boolean): Float32Array;
  /**
   * Returns an array of 2 elements: `[stability, difficulty]`
   */
  memoryState(ratings: Uint32Array, delta_ts: Uint32Array): Float32Array;
  /**
   * `minute_offset` should be the `user's timezone offset from UTC` minus `Anki's "next day starts at"`, in minutes.
   * Returns an array of 2 elements: `[stability, difficulty]`
   */
  memoryStateAnki(minute_offset: number, cids: BigInt64Array, eases: Uint8Array, ids: BigInt64Array, types: Uint8Array): Float32Array | undefined;
  nextInterval(stability: number | null | undefined, desired_retention: number, rating: number): number;
  nextStates(stability: number | null | undefined, difficulty: number | null | undefined, desired_retention: number, days_elapsed: number): NextStates;
}
export class ItemState {
  private constructor();
  free(): void;
  memory: MemoryState;
  interval: number;
}
export class MemoryState {
  private constructor();
  free(): void;
  stability: number;
  difficulty: number;
}
export class NextStates {
  private constructor();
  free(): void;
  again: ItemState;
  hard: ItemState;
  good: ItemState;
  easy: ItemState;
}
export class Progress {
  private constructor();
  free(): void;
  static new(): Progress;
  /**
   * Memory will hold [items_processed, items_total]
   */
  pointer(): number;
}
export class wbg_rayon_PoolBuilder {
  private constructor();
  free(): void;
  numThreads(): number;
  receiver(): number;
  build(): void;
}

export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module;

export interface InitOutput {
  readonly __wbg_fsrs_free: (a: number, b: number) => void;
  readonly fsrs_new: (a: number, b: number) => number;
  readonly fsrs_computeParametersAnki: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number) => [number, number];
  readonly fsrs_computeParameters: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => [number, number];
  readonly fsrs_memoryState: (a: number, b: number, c: number, d: number, e: number) => [number, number];
  readonly fsrs_memoryStateAnki: (a: number, b: number, c: number, d: number, e: any, f: number, g: number, h: number, i: number, j: number, k: number) => [number, number];
  readonly fsrs_nextInterval: (a: number, b: number, c: number, d: number) => number;
  readonly fsrs_nextStates: (a: number, b: number, c: number, d: number, e: number) => number;
  readonly start: () => void;
  readonly __wbg_memorystate_free: (a: number, b: number) => void;
  readonly __wbg_get_memorystate_stability: (a: number) => number;
  readonly __wbg_set_memorystate_stability: (a: number, b: number) => void;
  readonly __wbg_get_memorystate_difficulty: (a: number) => number;
  readonly __wbg_set_memorystate_difficulty: (a: number, b: number) => void;
  readonly __wbg_nextstates_free: (a: number, b: number) => void;
  readonly __wbg_get_nextstates_again: (a: number) => number;
  readonly __wbg_set_nextstates_again: (a: number, b: number) => void;
  readonly __wbg_get_nextstates_hard: (a: number) => number;
  readonly __wbg_set_nextstates_hard: (a: number, b: number) => void;
  readonly __wbg_get_nextstates_good: (a: number) => number;
  readonly __wbg_set_nextstates_good: (a: number, b: number) => void;
  readonly __wbg_get_nextstates_easy: (a: number) => number;
  readonly __wbg_set_nextstates_easy: (a: number, b: number) => void;
  readonly __wbg_itemstate_free: (a: number, b: number) => void;
  readonly __wbg_get_itemstate_memory: (a: number) => number;
  readonly __wbg_set_itemstate_memory: (a: number, b: number) => void;
  readonly __wbg_get_itemstate_interval: (a: number) => number;
  readonly __wbg_set_itemstate_interval: (a: number, b: number) => void;
  readonly __wbg_progress_free: (a: number, b: number) => void;
  readonly progress_new: () => number;
  readonly progress_pointer: (a: number) => number;
  readonly __wbg_wbg_rayon_poolbuilder_free: (a: number, b: number) => void;
  readonly wbg_rayon_poolbuilder_numThreads: (a: number) => number;
  readonly wbg_rayon_poolbuilder_receiver: (a: number) => number;
  readonly wbg_rayon_poolbuilder_build: (a: number) => void;
  readonly initThreadPool: (a: number) => any;
  readonly wbg_rayon_start_worker: (a: number) => void;
  readonly __wbindgen_exn_store: (a: number) => void;
  readonly __externref_table_alloc: () => number;
  readonly __wbindgen_export_2: WebAssembly.Table;
  readonly __wbindgen_free: (a: number, b: number, c: number) => void;
  readonly memory: WebAssembly.Memory;
  readonly __wbindgen_malloc: (a: number, b: number) => number;
  readonly __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number;
  readonly __wbindgen_thread_destroy: (a?: number, b?: number, c?: number) => void;
  readonly __wbindgen_start: (a: number) => void;
}

export type SyncInitInput = BufferSource | WebAssembly.Module;
/**
* Instantiates the given `module`, which can either be bytes or
* a precompiled `WebAssembly.Module`.
*
* @param {{ module: SyncInitInput, memory?: WebAssembly.Memory, thread_stack_size?: number }} module - Passing `SyncInitInput` directly is deprecated.
* @param {WebAssembly.Memory} memory - Deprecated.
*
* @returns {InitOutput}
*/
export function initSync(module: { module: SyncInitInput, memory?: WebAssembly.Memory, thread_stack_size?: number } | SyncInitInput, memory?: WebAssembly.Memory): InitOutput;

/**
* If `module_or_path` is {RequestInfo} or {URL}, makes a request and
* for everything else, calls `WebAssembly.instantiate` directly.
*
* @param {{ module_or_path: InitInput | Promise<InitInput>, memory?: WebAssembly.Memory, thread_stack_size?: number }} module_or_path - Passing `InitInput` directly is deprecated.
* @param {WebAssembly.Memory} memory - Deprecated.
*
* @returns {Promise<InitOutput>}
*/
export default function __wbg_init (module_or_path?: { module_or_path: InitInput | Promise<InitInput>, memory?: WebAssembly.Memory, thread_stack_size?: number } | InitInput | Promise<InitInput>, memory?: WebAssembly.Memory): Promise<InitOutput>;

/**
* Do not use this function after the completion of `computeParameters` or `computeParametersAnki`.
* Data returned after completion will be random!
*/
export function getProgress(wasmMemoryBuffer: ArrayBuffer, pointer: number): {
    itemsProcessed: number;
    itemsTotal: number;
};

