Source code for bittensor.utils.balance

import warnings
from typing import Union, TypedDict, Optional

from scalecodec import ScaleType

from bittensor.core import settings


[docs] class Balance: """ Represents the bittensor balance of the wallet, stored as rao (int). This class provides a way to interact with balances in two different units: rao and tao. It provides methods to convert between these units, as well as to perform arithmetic and comparison operations. Attributes: unit (str): A string representing the symbol for the tao unit. rao_unit (str): A string representing the symbol for the rao unit. rao (int): An integer that stores the balance in rao units. tao (float): A float property that gives the balance in tao units. """ unit: str = settings.TAO_SYMBOL # This is the tao unit rao_unit: str = settings.RAO_SYMBOL # This is the rao unit rao: int tao: float def __init__(self, balance: Union[int, float]): """ Initialize a Balance object. If balance is an int, it's assumed to be in rao. If balance is a float, it's assumed to be in tao. Args: balance: The initial balance, in either rao (if an int) or tao (if a float). """ if isinstance(balance, int): self.rao = balance elif isinstance(balance, float): # Assume tao value for the float self.rao = int(balance * pow(10, 9)) else: raise TypeError("balance must be an int (rao) or a float (tao)") @property def tao(self): return self.rao / pow(10, 9) def __int__(self): """Convert the Balance object to an int. The resulting value is in rao.""" return self.rao def __float__(self): """Convert the Balance object to a float. The resulting value is in tao.""" return self.tao def __str__(self): """Returns the Balance object as a string in the format "symbolvalue", where the value is in tao.""" return f"{self.unit}{float(self.tao):,.9f}" def __rich__(self): int_tao, fract_tao = format(float(self.tao), "f").split(".") return f"[green]{self.unit}{int_tao}.{fract_tao}[/green]" def __str_rao__(self): return f"{self.rao_unit}{int(self.rao)}" def __rich_rao__(self): return f"[green]{self.rao_unit}{int(self.rao)}[/green]" def __repr__(self): return self.__str__() def __eq__(self, other: Union[int, float, "Balance"]): if other is None: return False if hasattr(other, "rao"): return self.rao == other.rao else: try: # Attempt to cast to int from rao other_rao = int(other) return self.rao == other_rao except (TypeError, ValueError): raise NotImplementedError("Unsupported type") def __ne__(self, other: Union[int, float, "Balance"]): return not self == other def __gt__(self, other: Union[int, float, "Balance"]): if hasattr(other, "rao"): return self.rao > other.rao else: try: # Attempt to cast to int from rao other_rao = int(other) return self.rao > other_rao except ValueError: raise NotImplementedError("Unsupported type") def __lt__(self, other: Union[int, float, "Balance"]): if hasattr(other, "rao"): return self.rao < other.rao else: try: # Attempt to cast to int from rao other_rao = int(other) return self.rao < other_rao except ValueError: raise NotImplementedError("Unsupported type") def __le__(self, other: Union[int, float, "Balance"]): try: return self < other or self == other except TypeError: raise NotImplementedError("Unsupported type") def __ge__(self, other: Union[int, float, "Balance"]): try: return self > other or self == other except TypeError: raise NotImplementedError("Unsupported type") def __add__(self, other: Union[int, float, "Balance"]): if hasattr(other, "rao"): return Balance.from_rao(int(self.rao + other.rao)) else: try: # Attempt to cast to int from rao return Balance.from_rao(int(self.rao + other)) except (ValueError, TypeError): raise NotImplementedError("Unsupported type") def __radd__(self, other: Union[int, float, "Balance"]): try: return self + other except TypeError: raise NotImplementedError("Unsupported type") def __sub__(self, other: Union[int, float, "Balance"]): try: return self + -other except TypeError: raise NotImplementedError("Unsupported type") def __rsub__(self, other: Union[int, float, "Balance"]): try: return -self + other except TypeError: raise NotImplementedError("Unsupported type") def __mul__(self, other: Union[int, float, "Balance"]): if hasattr(other, "rao"): return Balance.from_rao(int(self.rao * other.rao)) else: try: # Attempt to cast to int from rao return Balance.from_rao(int(self.rao * other)) except (ValueError, TypeError): raise NotImplementedError("Unsupported type") def __rmul__(self, other: Union[int, float, "Balance"]): return self * other def __truediv__(self, other: Union[int, float, "Balance"]): if hasattr(other, "rao"): return Balance.from_rao(int(self.rao / other.rao)) else: try: # Attempt to cast to int from rao return Balance.from_rao(int(self.rao / other)) except (ValueError, TypeError): raise NotImplementedError("Unsupported type") def __rtruediv__(self, other: Union[int, float, "Balance"]): if hasattr(other, "rao"): return Balance.from_rao(int(other.rao / self.rao)) else: try: # Attempt to cast to int from rao return Balance.from_rao(int(other / self.rao)) except (ValueError, TypeError): raise NotImplementedError("Unsupported type") def __floordiv__(self, other: Union[int, float, "Balance"]): if hasattr(other, "rao"): return Balance.from_rao(int(self.tao // other.tao)) else: try: # Attempt to cast to int from rao return Balance.from_rao(int(self.rao // other)) except (ValueError, TypeError): raise NotImplementedError("Unsupported type") def __rfloordiv__(self, other: Union[int, float, "Balance"]): if hasattr(other, "rao"): return Balance.from_rao(int(other.rao // self.rao)) else: try: # Attempt to cast to int from rao return Balance.from_rao(int(other // self.rao)) except (ValueError, TypeError): raise NotImplementedError("Unsupported type") def __nonzero__(self) -> bool: return bool(self.rao) def __neg__(self): return Balance.from_rao(-self.rao) def __pos__(self): return Balance.from_rao(self.rao) def __abs__(self): return Balance.from_rao(abs(self.rao))
[docs] @staticmethod def from_float(amount: float, netuid: int = 0): """ Given tao, return :func:`Balance` object with rao(``int``) and tao(``float``), where rao = int(tao*pow(10,9)) Args: amount (float): The amount in tao. netuid (int): The subnet uid for set currency unit. Defaults to `0`. Returns: A Balance object representing the given amount. """ rao_ = int(amount * pow(10, 9)) return Balance(rao_).set_unit(netuid)
[docs] @staticmethod def from_tao(amount: float, netuid: int = 0): """ Given tao, return Balance object with rao(``int``) and tao(``float``), where rao = int(tao*pow(10,9)) Args: amount (float): The amount in tao. netuid (int): The subnet uid for set currency unit. Defaults to `0`. Returns: A Balance object representing the given amount. """ rao_ = int(amount * pow(10, 9)) return Balance(rao_).set_unit(netuid)
[docs] @staticmethod def from_rao(amount: int, netuid: int = 0): """ Given rao, return Balance object with rao(``int``) and tao(``float``), where rao = int(tao*pow(10,9)) Args: amount (int): The amount in rao. netuid (int): The subnet uid for set currency unit. Defaults to `0`. Returns: A Balance object representing the given amount. """ return Balance(amount).set_unit(netuid)
[docs] @staticmethod def get_unit(netuid: int): base = len(units) if netuid < base: return units[netuid] else: result = "" while netuid > 0: result = units[netuid % base] + result netuid //= base return result
[docs] def set_unit(self, netuid: int): self.unit = Balance.get_unit(netuid) self.rao_unit = Balance.get_unit(netuid) return self
[docs] class FixedPoint(TypedDict): """ Represents a fixed point ``U64F64`` number. Where ``bits`` is a U128 representation of the fixed point number. This matches the type of the Alpha shares. """ bits: int
[docs] def fixed_to_float( fixed: Union[FixedPoint, ScaleType], frac_bits: int = 64, total_bits: int = 128 ) -> float: # By default, this is a U64F64 # which is 64 bits of integer and 64 bits of fractional data: int = fixed["bits"] # Logical and to get the fractional part; remaining is the integer part fractional_part = data & (2**frac_bits - 1) # Shift to get the integer part from the remaining bits integer_part = data >> (total_bits - frac_bits) frac_float = fractional_part / (2**frac_bits) return integer_part + frac_float
units = [ # Greek Alphabet (0-24) "\u03c4", # τ (tau, 0) "\u03b1", # α (alpha, 1) "\u03b2", # β (beta, 2) "\u03b3", # γ (gamma, 3) "\u03b4", # δ (delta, 4) "\u03b5", # ε (epsilon, 5) "\u03b6", # ζ (zeta, 6) "\u03b7", # η (eta, 7) "\u03b8", # θ (theta, 8) "\u03b9", # ι (iota, 9) "\u03ba", # κ (kappa, 10) "\u03bb", # λ (lambda, 11) "\u03bc", # μ (mu, 12) "\u03bd", # ν (nu, 13) "\u03be", # ξ (xi, 14) "\u03bf", # ο (omicron, 15) "\u03c0", # π (pi, 16) "\u03c1", # ρ (rho, 17) "\u03c3", # σ (sigma, 18) "t", # t (tau, 19) "\u03c5", # υ (upsilon, 20) "\u03c6", # φ (phi, 21) "\u03c7", # χ (chi, 22) "\u03c8", # ψ (psi, 23) "\u03c9", # ω (omega, 24) # Hebrew Alphabet (25-51) "\u05d0", # א (aleph, 25) "\u05d1", # ב (bet, 26) "\u05d2", # ג (gimel, 27) "\u05d3", # ד (dalet, 28) "\u05d4", # ה (he, 29) "\u05d5", # ו (vav, 30) "\u05d6", # ז (zayin, 31) "\u05d7", # ח (het, 32) "\u05d8", # ט (tet, 33) "\u05d9", # י (yod, 34) "\u05da", # ך (final kaf, 35) "\u05db", # כ (kaf, 36) "\u05dc", # ל (lamed, 37) "\u05dd", # ם (final mem, 38) "\u05de", # מ (mem, 39) "\u05df", # ן (final nun, 40) "\u05e0", # נ (nun, 41) "\u05e1", # ס (samekh, 42) "\u05e2", # ע (ayin, 43) "\u05e3", # ף (final pe, 44) "\u05e4", # פ (pe, 45) "\u05e5", # ץ (final tsadi, 46) "\u05e6", # צ (tsadi, 47) "\u05e7", # ק (qof, 48) "\u05e8", # ר (resh, 49) "\u05e9", # ש (shin, 50) "\u05ea", # ת (tav, 51) # Arabic Alphabet (52-81) "\u0627", # ا (alif, 52) "\u0628", # ب (ba, 53) "\u062a", # ت (ta, 54) "\u062b", # ث (tha, 55) "\u062c", # ج (jeem, 56) "\u062d", # ح (ha, 57) "\u062e", # خ (kha, 58) "\u062f", # د (dal, 59) "\u0630", # ذ (dhal, 60) "\u0631", # ر (ra, 61) "\u0632", # ز (zay, 62) "\u0633", # س (seen, 63) "\u0634", # ش (sheen, 64) "\u0635", # ص (sad, 65) "\u0636", # ض (dad, 66) "\u0637", # ط (ta, 67) "\u0638", # ظ (dha, 68) "\u0639", # ع (ain, 69) "\u063a", # غ (ghain, 70) "\u0641", # ف (fa, 71) "\u0642", # ق (qaf, 72) "\u0643", # ك (kaf, 73) "\u0644", # ل (lam, 74) "\u0645", # م (meem, 75) "\u0646", # ن (noon, 76) "\u0647", # ه (ha, 77) "\u0648", # و (waw, 78) "\u064a", # ي (ya, 79) "\u0649", # ى (alef maksura, 80) "\u064a", # ي (ya, 81) # Runic Alphabet (82-90) "\u16a0", # ᚠ (fehu, 82) "\u16a2", # ᚢ (uruz, 83) "\u16a6", # ᚦ (thurisaz, 84) "\u16a8", # ᚨ (ansuz, 85) "\u16b1", # ᚱ (raidho, 86) "\u16b3", # ᚲ (kaunan, 87) "\u16c7", # ᛇ (eihwaz, 88) "\u16c9", # ᛉ (algiz, 89) "\u16d2", # ᛒ (berkanan, 90) # Ogham Alphabet (91-97) "\u1680", #   (Space, 91) "\u1681", # ᚁ (Beith, 92) "\u1682", # ᚂ (Luis, 93) "\u1683", # ᚃ (Fearn, 94) "\u1684", # ᚄ (Sail, 95) "\u1685", # ᚅ (Nion, 96) "\u169b", # ᚛ (Forfeda, 97) # Georgian Alphabet (98-103) "\u10d0", # ა (ani, 98) "\u10d1", # ბ (bani, 99) "\u10d2", # გ (gani, 100) "\u10d3", # დ (doni, 101) "\u10d4", # ე (eni, 102) "\u10d5", # ვ (vini, 103) # Armenian Alphabet (104-110) "\u0531", # Ա (Ayp, 104) "\u0532", # Բ (Ben, 105) "\u0533", # Գ (Gim, 106) "\u0534", # Դ (Da, 107) "\u0535", # Ե (Ech, 108) "\u0536", # Զ (Za, 109) "\u055e", # ՞ (Question mark, 110) # Cyrillic Alphabet (111-116) "\u0400", # Ѐ (Ie with grave, 111) "\u0401", # Ё (Io, 112) "\u0402", # Ђ (Dje, 113) "\u0403", # Ѓ (Gje, 114) "\u0404", # Є (Ukrainian Ie, 115) "\u0405", # Ѕ (Dze, 116) # Coptic Alphabet (117-122) "\u2c80", # Ⲁ (Alfa, 117) "\u2c81", # ⲁ (Small Alfa, 118) "\u2c82", # Ⲃ (Vida, 119) "\u2c83", # ⲃ (Small Vida, 120) "\u2c84", # Ⲅ (Gamma, 121) "\u2c85", # ⲅ (Small Gamma, 122) # Brahmi Script (123-127) "\U00011000", # 𑀀 (A, 123) "\U00011001", # 𑀁 (Aa, 124) "\U00011002", # 𑀂 (I, 125) "\U00011003", # 𑀃 (Ii, 126) "\U00011005", # 𑀅 (U, 127) # Tifinagh Alphabet (128-133) "\u2d30", # ⴰ (Ya, 128) "\u2d31", # ⴱ (Yab, 129) "\u2d32", # ⴲ (Yabh, 130) "\u2d33", # ⴳ (Yag, 131) "\u2d34", # ⴴ (Yagh, 132) "\u2d35", # ⴵ (Yaj, 133) # Glagolitic Alphabet (134-166) "\u2c00", # Ⰰ (Az, 134) "\u2c01", # Ⰱ (Buky, 135) "\u2c02", # Ⰲ (Vede, 136) "\u2c03", # Ⰳ (Glagoli, 137) "\u2c04", # Ⰴ (Dobro, 138) "\u2c05", # Ⰵ (Yest, 139) "\u2c06", # Ⰶ (Zhivete, 140) "\u2c07", # Ⰷ (Zemlja, 141) "\u2c08", # Ⰸ (Izhe, 142) "\u2c09", # Ⰹ (Initial Izhe, 143) "\u2c0a", # Ⰺ (I, 144) "\u2c0b", # Ⰻ (Djerv, 145) "\u2c0c", # Ⰼ (Kako, 146) "\u2c0d", # Ⰽ (Ljudije, 147) "\u2c0e", # Ⰾ (Myse, 148) "\u2c0f", # Ⰿ (Nash, 149) "\u2c10", # Ⱀ (On, 150) "\u2c11", # Ⱁ (Pokoj, 151) "\u2c12", # Ⱂ (Rtsy, 152) "\u2c13", # Ⱃ (Slovo, 153) "\u2c14", # Ⱄ (Tvrido, 154) "\u2c15", # Ⱅ (Uku, 155) "\u2c16", # Ⱆ (Fert, 156) "\u2c17", # Ⱇ (Xrivi, 157) "\u2c18", # Ⱈ (Ot, 158) "\u2c19", # Ⱉ (Cy, 159) "\u2c1a", # Ⱊ (Shcha, 160) "\u2c1b", # Ⱋ (Er, 161) "\u2c1c", # Ⱌ (Yeru, 162) "\u2c1d", # Ⱍ (Small Yer, 163) "\u2c1e", # Ⱎ (Yo, 164) "\u2c1f", # Ⱏ (Yu, 165) "\u2c20", # Ⱐ (Ja, 166) # Thai Alphabet (167-210) "\u0e01", # ก (Ko Kai, 167) "\u0e02", # ข (Kho Khai, 168) "\u0e03", # ฃ (Kho Khuat, 169) "\u0e04", # ค (Kho Khon, 170) "\u0e05", # ฅ (Kho Rakhang, 171) "\u0e06", # ฆ (Kho Khwai, 172) "\u0e07", # ง (Ngo Ngu, 173) "\u0e08", # จ (Cho Chan, 174) "\u0e09", # ฉ (Cho Ching, 175) "\u0e0a", # ช (Cho Chang, 176) "\u0e0b", # ซ (So So, 177) "\u0e0c", # ฌ (Cho Choe, 178) "\u0e0d", # ญ (Yo Ying, 179) "\u0e0e", # ฎ (Do Chada, 180) "\u0e0f", # ฏ (To Patak, 181) "\u0e10", # ฐ (Tho Than, 182) "\u0e11", # ฑ (Tho Nangmontho, 183) "\u0e12", # ฒ (Tho Phuthao, 184) "\u0e13", # ณ (No Nen, 185) "\u0e14", # ด (Do Dek, 186) "\u0e15", # ต (To Tao, 187) "\u0e16", # ถ (Tho Thung, 188) "\u0e17", # ท (Tho Thahan, 189) "\u0e18", # ธ (Tho Thong, 190) "\u0e19", # น (No Nu, 191) "\u0e1a", # บ (Bo Baimai, 192) "\u0e1b", # ป (Po Pla, 193) "\u0e1c", # ผ (Pho Phung, 194) "\u0e1d", # ฝ (Fo Fa, 195) "\u0e1e", # พ (Pho Phan, 196) "\u0e1f", # ฟ (Fo Fan, 197) "\u0e20", # ภ (Pho Samphao, 198) "\u0e21", # ม (Mo Ma, 199) "\u0e22", # ย (Yo Yak, 200) "\u0e23", # ร (Ro Rua, 201) "\u0e25", # ล (Lo Ling, 202) "\u0e27", # ว (Wo Waen, 203) "\u0e28", # ศ (So Sala, 204) "\u0e29", # ษ (So Rusi, 205) "\u0e2a", # ส (So Sua, 206) "\u0e2b", # ห (Ho Hip, 207) "\u0e2c", # ฬ (Lo Chula, 208) "\u0e2d", # อ (O Ang, 209) "\u0e2e", # ฮ (Ho Nokhuk, 210) # Hangul Consonants (211-224) "\u1100", # ㄱ (Giyeok, 211) "\u1101", # ㄴ (Nieun, 212) "\u1102", # ㄷ (Digeut, 213) "\u1103", # ㄹ (Rieul, 214) "\u1104", # ㅁ (Mieum, 215) "\u1105", # ㅂ (Bieup, 216) "\u1106", # ㅅ (Siot, 217) "\u1107", # ㅇ (Ieung, 218) "\u1108", # ㅈ (Jieut, 219) "\u1109", # ㅊ (Chieut, 220) "\u110a", # ㅋ (Kieuk, 221) "\u110b", # ㅌ (Tieut, 222) "\u110c", # ㅍ (Pieup, 223) "\u110d", # ㅎ (Hieut, 224) # Hangul Vowels (225-245) "\u1161", # ㅏ (A, 225) "\u1162", # ㅐ (Ae, 226) "\u1163", # ㅑ (Ya, 227) "\u1164", # ㅒ (Yae, 228) "\u1165", # ㅓ (Eo, 229) "\u1166", # ㅔ (E, 230) "\u1167", # ㅕ (Yeo, 231) "\u1168", # ㅖ (Ye, 232) "\u1169", # ㅗ (O, 233) "\u116a", # ㅘ (Wa, 234) "\u116b", # ㅙ (Wae, 235) "\u116c", # ㅚ (Oe, 236) "\u116d", # ㅛ (Yo, 237) "\u116e", # ㅜ (U, 238) "\u116f", # ㅝ (Weo, 239) "\u1170", # ㅞ (We, 240) "\u1171", # ㅟ (Wi, 241) "\u1172", # ㅠ (Yu, 242) "\u1173", # ㅡ (Eu, 243) "\u1174", # ㅢ (Ui, 244) "\u1175", # ㅣ (I, 245) # Ethiopic Alphabet (246-274) "\u12a0", # አ (Glottal A, 246) "\u12a1", # ኡ (Glottal U, 247) "\u12a2", # ኢ (Glottal I, 248) "\u12a3", # ኣ (Glottal Aa, 249) "\u12a4", # ኤ (Glottal E, 250) "\u12a5", # እ (Glottal Ie, 251) "\u12a6", # ኦ (Glottal O, 252) "\u12a7", # ኧ (Glottal Wa, 253) "\u12c8", # ወ (Wa, 254) "\u12c9", # ዉ (Wu, 255) "\u12ca", # ዊ (Wi, 256) "\u12cb", # ዋ (Waa, 257) "\u12cc", # ዌ (We, 258) "\u12cd", # ው (Wye, 259) "\u12ce", # ዎ (Wo, 260) "\u12b0", # ኰ (Ko, 261) "\u12b1", # ኱ (Ku, 262) "\u12b2", # ኲ (Ki, 263) "\u12b3", # ኳ (Kua, 264) "\u12b4", # ኴ (Ke, 265) "\u12b5", # ኵ (Kwe, 266) "\u12b6", # ኶ (Ko, 267) "\u12a0", # ጐ (Go, 268) "\u12a1", # ጑ (Gu, 269) "\u12a2", # ጒ (Gi, 270) "\u12a3", # መ (Gua, 271) "\u12a4", # ጔ (Ge, 272) "\u12a5", # ጕ (Gwe, 273) "\u12a6", # ጖ (Go, 274) # Devanagari Alphabet (275-318) "\u0905", # अ (A, 275) "\u0906", # आ (Aa, 276) "\u0907", # इ (I, 277) "\u0908", # ई (Ii, 278) "\u0909", # उ (U, 279) "\u090a", # ऊ (Uu, 280) "\u090b", # ऋ (R, 281) "\u090f", # ए (E, 282) "\u0910", # ऐ (Ai, 283) "\u0913", # ओ (O, 284) "\u0914", # औ (Au, 285) "\u0915", # क (Ka, 286) "\u0916", # ख (Kha, 287) "\u0917", # ग (Ga, 288) "\u0918", # घ (Gha, 289) "\u0919", # ङ (Nga, 290) "\u091a", # च (Cha, 291) "\u091b", # छ (Chha, 292) "\u091c", # ज (Ja, 293) "\u091d", # झ (Jha, 294) "\u091e", # ञ (Nya, 295) "\u091f", # ट (Ta, 296) "\u0920", # ठ (Tha, 297) "\u0921", # ड (Da, 298) "\u0922", # ढ (Dha, 299) "\u0923", # ण (Na, 300) "\u0924", # त (Ta, 301) "\u0925", # थ (Tha, 302) "\u0926", # द (Da, 303) "\u0927", # ध (Dha, 304) "\u0928", # न (Na, 305) "\u092a", # प (Pa, 306) "\u092b", # फ (Pha, 307) "\u092c", # ब (Ba, 308) "\u092d", # भ (Bha, 309) "\u092e", # म (Ma, 310) "\u092f", # य (Ya, 311) "\u0930", # र (Ra, 312) "\u0932", # ल (La, 313) "\u0935", # व (Va, 314) "\u0936", # श (Sha, 315) "\u0937", # ष (Ssa, 316) "\u0938", # स (Sa, 317) "\u0939", # ह (Ha, 318) # Katakana Alphabet (319-364) "\u30a2", # ア (A, 319) "\u30a4", # イ (I, 320) "\u30a6", # ウ (U, 321) "\u30a8", # エ (E, 322) "\u30aa", # オ (O, 323) "\u30ab", # カ (Ka, 324) "\u30ad", # キ (Ki, 325) "\u30af", # ク (Ku, 326) "\u30b1", # ケ (Ke, 327) "\u30b3", # コ (Ko, 328) "\u30b5", # サ (Sa, 329) "\u30b7", # シ (Shi, 330) "\u30b9", # ス (Su, 331) "\u30bb", # セ (Se, 332) "\u30bd", # ソ (So, 333) "\u30bf", # タ (Ta, 334) "\u30c1", # チ (Chi, 335) "\u30c4", # ツ (Tsu, 336) "\u30c6", # テ (Te, 337) "\u30c8", # ト (To, 338) "\u30ca", # ナ (Na, 339) "\u30cb", # ニ (Ni, 340) "\u30cc", # ヌ (Nu, 341) "\u30cd", # ネ (Ne, 342) "\u30ce", # ノ (No, 343) "\u30cf", # ハ (Ha, 344) "\u30d2", # ヒ (Hi, 345) "\u30d5", # フ (Fu, 346) "\u30d8", # ヘ (He, 347) "\u30db", # ホ (Ho, 348) "\u30de", # マ (Ma, 349) "\u30df", # ミ (Mi, 350) "\u30e0", # ム (Mu, 351) "\u30e1", # メ (Me, 352) "\u30e2", # モ (Mo, 353) "\u30e4", # ヤ (Ya, 354) "\u30e6", # ユ (Yu, 355) "\u30e8", # ヨ (Yo, 356) "\u30e9", # ラ (Ra, 357) "\u30ea", # リ (Ri, 358) "\u30eb", # ル (Ru, 359) "\u30ec", # レ (Re, 360) "\u30ed", # ロ (Ro, 361) "\u30ef", # ワ (Wa, 362) "\u30f2", # ヲ (Wo, 363) "\u30f3", # ン (N, 364) # Tifinagh Alphabet (365-400) "\u2d30", # ⴰ (Ya, 365) "\u2d31", # ⴱ (Yab, 366) "\u2d32", # ⴲ (Yabh, 367) "\u2d33", # ⴳ (Yag, 368) "\u2d34", # ⴴ (Yagh, 369) "\u2d35", # ⴵ (Yaj, 370) "\u2d36", # ⴶ (Yach, 371) "\u2d37", # ⴷ (Yad, 372) "\u2d38", # ⴸ (Yadh, 373) "\u2d39", # ⴹ (Yadh, emphatic, 374) "\u2d3a", # ⴺ (Yaz, 375) "\u2d3b", # ⴻ (Yazh, 376) "\u2d3c", # ⴼ (Yaf, 377) "\u2d3d", # ⴽ (Yak, 378) "\u2d3e", # ⴾ (Yak, variant, 379) "\u2d3f", # ⴿ (Yaq, 380) "\u2d40", # ⵀ (Yah, 381) "\u2d41", # ⵁ (Yahh, 382) "\u2d42", # ⵂ (Yahl, 383) "\u2d43", # ⵃ (Yahm, 384) "\u2d44", # ⵄ (Yayn, 385) "\u2d45", # ⵅ (Yakh, 386) "\u2d46", # ⵆ (Yakl, 387) "\u2d47", # ⵇ (Yahq, 388) "\u2d48", # ⵈ (Yash, 389) "\u2d49", # ⵉ (Yi, 390) "\u2d4a", # ⵊ (Yij, 391) "\u2d4b", # ⵋ (Yizh, 392) "\u2d4c", # ⵌ (Yink, 393) "\u2d4d", # ⵍ (Yal, 394) "\u2d4e", # ⵎ (Yam, 395) "\u2d4f", # ⵏ (Yan, 396) "\u2d50", # ⵐ (Yang, 397) "\u2d51", # ⵑ (Yany, 398) "\u2d52", # ⵒ (Yap, 399) "\u2d53", # ⵓ (Yu, 400) # Sinhala Alphabet (401-444) "\u0d85", # අ (A, 401) "\u0d86", # ආ (Aa, 402) "\u0d87", # ඉ (I, 403) "\u0d88", # ඊ (Ii, 404) "\u0d89", # උ (U, 405) "\u0d8a", # ඌ (Uu, 406) "\u0d8b", # ඍ (R, 407) "\u0d8c", # ඎ (Rr, 408) "\u0d8f", # ඏ (L, 409) "\u0d90", # ඐ (Ll, 410) "\u0d91", # එ (E, 411) "\u0d92", # ඒ (Ee, 412) "\u0d93", # ඓ (Ai, 413) "\u0d94", # ඔ (O, 414) "\u0d95", # ඕ (Oo, 415) "\u0d96", # ඖ (Au, 416) "\u0d9a", # ක (Ka, 417) "\u0d9b", # ඛ (Kha, 418) "\u0d9c", # ග (Ga, 419) "\u0d9d", # ඝ (Gha, 420) "\u0d9e", # ඞ (Nga, 421) "\u0d9f", # ච (Cha, 422) "\u0da0", # ඡ (Chha, 423) "\u0da1", # ජ (Ja, 424) "\u0da2", # ඣ (Jha, 425) "\u0da3", # ඤ (Nya, 426) "\u0da4", # ට (Ta, 427) "\u0da5", # ඥ (Tha, 428) "\u0da6", # ඦ (Da, 429) "\u0da7", # ට (Dha, 430) "\u0da8", # ඨ (Na, 431) "\u0daa", # ඪ (Pa, 432) "\u0dab", # ණ (Pha, 433) "\u0dac", # ඬ (Ba, 434) "\u0dad", # ත (Bha, 435) "\u0dae", # ථ (Ma, 436) "\u0daf", # ද (Ya, 437) "\u0db0", # ධ (Ra, 438) "\u0db1", # ඲ (La, 439) "\u0db2", # ඳ (Va, 440) "\u0db3", # ප (Sha, 441) "\u0db4", # ඵ (Ssa, 442) "\u0db5", # බ (Sa, 443) "\u0db6", # භ (Ha, 444) ]
[docs] def tao(amount: float) -> Balance: """ Helper function to create a Balance object from a float (Tao) """ return Balance.from_tao(amount)
[docs] def rao(amount: int) -> Balance: """ Helper function to create a Balance object from an int (Rao) """ return Balance.from_rao(amount)
[docs] def check_and_convert_to_balance( amount: Union[float, int, Optional[Balance]], ) -> Balance: """ Helper function to check and convert the amount type to a Balance object. This is used to support backwards compatibility while also providing a deprecation notice. """ if isinstance(amount, (float, int)): warnings.simplefilter("default", DeprecationWarning) warnings.warn( "Detected a non-balance amount. Converting to Balance from Tao for backwards compatibility." "Please update your code to use tao(amount) or Balance.from_tao(amount) for the main release 9.0.0.", category=DeprecationWarning, stacklevel=2, ) amount = tao(amount) return amount