import { BigNumber, multBigNumbers, num, one } from './BigNumber/utils' import { todo } from './todo' export type Estimator = (option: Opt) => Num export type EstimatorP = (option: Opt) => Promise export type EstimatorBigNum = Estimator export type EstimatorBigNumP = EstimatorP export type MultiEstimator = (option: Opt) => Num[] export type MultiEstimatorP = (option: Opt) => Promise export type MultiEstimatorBigNum = MultiEstimator export type MultiEstimatorBigNumP = MultiEstimatorP export const AlwaysOne = () => num(1) export const AlwaysOneP = async () => num(1) export const utilityBigNum = (getGain: EstimatorBigNum, getLoss: EstimatorBigNum) => { return function (option: Opt) { return getGain(option).dividedBy(getLoss(option)) } } export const utilityByFactorsBigNum = (getGainFactors: MultiEstimatorBigNum, getLossFactors: MultiEstimatorBigNum) => { return function (option: Opt) { const gain = multBigNumbers(getGainFactors(option)) const loss = multBigNumbers(getLossFactors(option)) return gain.dividedBy(loss) } } export const ubn = utilityBigNum export const ufbn = utilityByFactorsBigNum export const TodoEstimator = (option: Opt): Num => { return todo() } export const TodoEstimatorP = async (option: Opt): Promise => { return todo() } export const TodoEstimatorBigNumP = async (option: Opt): Promise => { return todo() } export const TodoEstimatorBigNum = (option: Opt): BigNumber => { return todo() } export const invert = (n: BigNumber) => one.dividedBy(n) export const invertE = (e: EstimatorBigNum) => { return (option: Opt) => one.dividedBy(e(option)) }