Module orca_whirlpool.internal.utils.decimal_util
Expand source code
from decimal import Decimal
from ..constants import U64_MAX
from ..invariant import invariant
class DecimalUtil:
# https://github.com/orca-so/orca-sdks/blob/main/packages/common-sdk/src/math/decimal-util.ts
@staticmethod
def to_u64(num: Decimal, shift: int = 0) -> int:
u64 = int(num * 10**shift)
invariant(0 <= u64 <= U64_MAX, "0 <= u64 <= U64_MAX")
return u64
@staticmethod
def from_u64(u64: int, shift: int = 0) -> Decimal:
invariant(0 <= u64 <= U64_MAX, "0 <= u64 <= U64_MAX")
return Decimal(u64) / Decimal(10**shift)
@staticmethod
def to_fixed(num: Decimal, decimals: int) -> Decimal:
if decimals == 0:
return num.quantize(Decimal("1"))
else:
return num.quantize(Decimal("0." + "0"*(decimals-1) + "1"))
Classes
class DecimalUtil
-
Expand source code
class DecimalUtil: # https://github.com/orca-so/orca-sdks/blob/main/packages/common-sdk/src/math/decimal-util.ts @staticmethod def to_u64(num: Decimal, shift: int = 0) -> int: u64 = int(num * 10**shift) invariant(0 <= u64 <= U64_MAX, "0 <= u64 <= U64_MAX") return u64 @staticmethod def from_u64(u64: int, shift: int = 0) -> Decimal: invariant(0 <= u64 <= U64_MAX, "0 <= u64 <= U64_MAX") return Decimal(u64) / Decimal(10**shift) @staticmethod def to_fixed(num: Decimal, decimals: int) -> Decimal: if decimals == 0: return num.quantize(Decimal("1")) else: return num.quantize(Decimal("0." + "0"*(decimals-1) + "1"))
Static methods
def from_u64(u64: int, shift: int = 0) ‑> decimal.Decimal
-
Expand source code
@staticmethod def from_u64(u64: int, shift: int = 0) -> Decimal: invariant(0 <= u64 <= U64_MAX, "0 <= u64 <= U64_MAX") return Decimal(u64) / Decimal(10**shift)
def to_fixed(num: decimal.Decimal, decimals: int) ‑> decimal.Decimal
-
Expand source code
@staticmethod def to_fixed(num: Decimal, decimals: int) -> Decimal: if decimals == 0: return num.quantize(Decimal("1")) else: return num.quantize(Decimal("0." + "0"*(decimals-1) + "1"))
def to_u64(num: decimal.Decimal, shift: int = 0) ‑> int
-
Expand source code
@staticmethod def to_u64(num: Decimal, shift: int = 0) -> int: u64 = int(num * 10**shift) invariant(0 <= u64 <= U64_MAX, "0 <= u64 <= U64_MAX") return u64