meshtensor-cli 9.18.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. meshtensor_cli/__init__.py +22 -0
  2. meshtensor_cli/cli.py +10742 -0
  3. meshtensor_cli/doc_generation_helper.py +4 -0
  4. meshtensor_cli/src/__init__.py +1085 -0
  5. meshtensor_cli/src/commands/__init__.py +0 -0
  6. meshtensor_cli/src/commands/axon/__init__.py +0 -0
  7. meshtensor_cli/src/commands/axon/axon.py +132 -0
  8. meshtensor_cli/src/commands/crowd/__init__.py +0 -0
  9. meshtensor_cli/src/commands/crowd/contribute.py +621 -0
  10. meshtensor_cli/src/commands/crowd/contributors.py +200 -0
  11. meshtensor_cli/src/commands/crowd/create.py +783 -0
  12. meshtensor_cli/src/commands/crowd/dissolve.py +219 -0
  13. meshtensor_cli/src/commands/crowd/refund.py +233 -0
  14. meshtensor_cli/src/commands/crowd/update.py +418 -0
  15. meshtensor_cli/src/commands/crowd/utils.py +124 -0
  16. meshtensor_cli/src/commands/crowd/view.py +991 -0
  17. meshtensor_cli/src/commands/governance/__init__.py +0 -0
  18. meshtensor_cli/src/commands/governance/governance.py +794 -0
  19. meshtensor_cli/src/commands/liquidity/__init__.py +0 -0
  20. meshtensor_cli/src/commands/liquidity/liquidity.py +699 -0
  21. meshtensor_cli/src/commands/liquidity/utils.py +202 -0
  22. meshtensor_cli/src/commands/proxy.py +700 -0
  23. meshtensor_cli/src/commands/stake/__init__.py +0 -0
  24. meshtensor_cli/src/commands/stake/add.py +799 -0
  25. meshtensor_cli/src/commands/stake/auto_staking.py +306 -0
  26. meshtensor_cli/src/commands/stake/children_hotkeys.py +865 -0
  27. meshtensor_cli/src/commands/stake/claim.py +770 -0
  28. meshtensor_cli/src/commands/stake/list.py +738 -0
  29. meshtensor_cli/src/commands/stake/move.py +1211 -0
  30. meshtensor_cli/src/commands/stake/remove.py +1466 -0
  31. meshtensor_cli/src/commands/stake/wizard.py +323 -0
  32. meshtensor_cli/src/commands/subnets/__init__.py +0 -0
  33. meshtensor_cli/src/commands/subnets/mechanisms.py +515 -0
  34. meshtensor_cli/src/commands/subnets/price.py +733 -0
  35. meshtensor_cli/src/commands/subnets/subnets.py +2908 -0
  36. meshtensor_cli/src/commands/sudo.py +1294 -0
  37. meshtensor_cli/src/commands/tc/__init__.py +0 -0
  38. meshtensor_cli/src/commands/tc/tc.py +190 -0
  39. meshtensor_cli/src/commands/treasury/__init__.py +0 -0
  40. meshtensor_cli/src/commands/treasury/treasury.py +194 -0
  41. meshtensor_cli/src/commands/view.py +354 -0
  42. meshtensor_cli/src/commands/wallets.py +2311 -0
  43. meshtensor_cli/src/commands/weights.py +467 -0
  44. meshtensor_cli/src/meshtensor/__init__.py +0 -0
  45. meshtensor_cli/src/meshtensor/balances.py +313 -0
  46. meshtensor_cli/src/meshtensor/chain_data.py +1263 -0
  47. meshtensor_cli/src/meshtensor/extrinsics/__init__.py +0 -0
  48. meshtensor_cli/src/meshtensor/extrinsics/mev_shield.py +174 -0
  49. meshtensor_cli/src/meshtensor/extrinsics/registration.py +1861 -0
  50. meshtensor_cli/src/meshtensor/extrinsics/root.py +550 -0
  51. meshtensor_cli/src/meshtensor/extrinsics/serving.py +255 -0
  52. meshtensor_cli/src/meshtensor/extrinsics/transfer.py +239 -0
  53. meshtensor_cli/src/meshtensor/meshtensor_interface.py +2598 -0
  54. meshtensor_cli/src/meshtensor/minigraph.py +254 -0
  55. meshtensor_cli/src/meshtensor/networking.py +12 -0
  56. meshtensor_cli/src/meshtensor/templates/main-filters.j2 +24 -0
  57. meshtensor_cli/src/meshtensor/templates/main-header.j2 +36 -0
  58. meshtensor_cli/src/meshtensor/templates/neuron-details.j2 +111 -0
  59. meshtensor_cli/src/meshtensor/templates/price-multi.j2 +113 -0
  60. meshtensor_cli/src/meshtensor/templates/price-single.j2 +99 -0
  61. meshtensor_cli/src/meshtensor/templates/subnet-details-header.j2 +49 -0
  62. meshtensor_cli/src/meshtensor/templates/subnet-details.j2 +32 -0
  63. meshtensor_cli/src/meshtensor/templates/subnet-metrics.j2 +57 -0
  64. meshtensor_cli/src/meshtensor/templates/subnets-table.j2 +28 -0
  65. meshtensor_cli/src/meshtensor/templates/table.j2 +267 -0
  66. meshtensor_cli/src/meshtensor/templates/view.css +1058 -0
  67. meshtensor_cli/src/meshtensor/templates/view.j2 +43 -0
  68. meshtensor_cli/src/meshtensor/templates/view.js +1053 -0
  69. meshtensor_cli/src/meshtensor/utils.py +2007 -0
  70. meshtensor_cli/version.py +23 -0
  71. meshtensor_cli-9.18.1.dist-info/METADATA +261 -0
  72. meshtensor_cli-9.18.1.dist-info/RECORD +74 -0
  73. meshtensor_cli-9.18.1.dist-info/WHEEL +4 -0
  74. meshtensor_cli-9.18.1.dist-info/entry_points.txt +3 -0
@@ -0,0 +1,1085 @@
1
+ from enum import Enum
2
+ from dataclasses import dataclass
3
+ from typing import Any, Optional
4
+
5
+
6
+ class Constants:
7
+ networks = [
8
+ "local",
9
+ "finney",
10
+ "test",
11
+ "archive",
12
+ "meshlet",
13
+ "dev",
14
+ "latent-lite",
15
+ ]
16
+ finney_entrypoint = "wss://entrypoint-finney.opentensor.ai:443"
17
+ finney_test_entrypoint = "wss://test.finney.opentensor.ai:443"
18
+ archive_entrypoint = "wss://archive.chain.opentensor.ai:443"
19
+ local_entrypoint = "ws://127.0.0.1:9944"
20
+ meshlet_entrypoint = "wss://meshlet.chain.opentensor.ai:443"
21
+ dev_entrypoint = "wss://dev.chain.opentensor.ai:443"
22
+ latent_lite_entrypoint = "wss://lite.sub.latent.to:443"
23
+ lite_nodes = [finney_entrypoint, latent_lite_entrypoint]
24
+ network_map = {
25
+ "finney": finney_entrypoint,
26
+ "test": finney_test_entrypoint,
27
+ "archive": archive_entrypoint,
28
+ "local": local_entrypoint,
29
+ "dev": dev_entrypoint,
30
+ "meshlet": meshlet_entrypoint,
31
+ "latent-lite": latent_lite_entrypoint,
32
+ }
33
+ genesis_block_hash_map = {
34
+ "finney": "0x2f0555cc76fc2840a25a6ea3b9637146806f1f44b090c175ffde2a7e5ab36c03",
35
+ "test": "0x8f9cf856bf558a14440e75569c9e58594757048d7b3a84b5d25f6bd978263105",
36
+ }
37
+ delegates_detail_url = "https://raw.githubusercontent.com/opentensor/meshtensor-delegates/main/public/delegates.json"
38
+
39
+
40
+ @dataclass
41
+ class DelegatesDetails:
42
+ display: str
43
+ additional: list[tuple[str, str]]
44
+ web: str
45
+ legal: Optional[str] = None
46
+ riot: Optional[str] = None
47
+ email: Optional[str] = None
48
+ pgp_fingerprint: Optional[str] = None
49
+ image: Optional[str] = None
50
+ twitter: Optional[str] = None
51
+
52
+ @classmethod
53
+ def from_chain_data(cls, data: dict[str, Any]) -> "DelegatesDetails":
54
+ def decode(key: str, default=""):
55
+ try:
56
+ if isinstance(data.get(key), dict):
57
+ value = next(data.get(key).values())
58
+ return bytes(value[0]).decode("utf-8")
59
+ elif isinstance(data.get(key), int):
60
+ return data.get(key)
61
+ elif isinstance(data.get(key), tuple):
62
+ return bytes(data.get(key)[0]).decode("utf-8")
63
+ else:
64
+ return default
65
+ except (UnicodeDecodeError, TypeError):
66
+ return default
67
+
68
+ return cls(
69
+ display=decode("display"),
70
+ additional=decode("additional", []),
71
+ web=decode("web"),
72
+ legal=decode("legal"),
73
+ riot=decode("riot"),
74
+ email=decode("email"),
75
+ pgp_fingerprint=decode("pgp_fingerprint", None),
76
+ image=decode("image"),
77
+ twitter=decode("twitter"),
78
+ )
79
+
80
+
81
+ class Defaults:
82
+ netuid = 1
83
+ rate_tolerance = 0.005
84
+
85
+ class config:
86
+ base_path = "~/.meshtensor"
87
+ path = "~/.meshtensor/config.yml"
88
+ debug_file_path = "~/.meshtensor/debug.txt"
89
+ dictionary = {
90
+ "network": None,
91
+ "wallet_path": None,
92
+ "wallet_name": None,
93
+ "wallet_hotkey": None,
94
+ "use_cache": True,
95
+ "disk_cache": False,
96
+ "metagraph_cols": {
97
+ "UID": True,
98
+ "GLOBAL_STAKE": True,
99
+ "LOCAL_STAKE": True,
100
+ "STAKE_WEIGHT": True,
101
+ "RANK": True,
102
+ "TRUST": True,
103
+ "CONSENSUS": True,
104
+ "INCENTIVE": True,
105
+ "DIVIDENDS": True,
106
+ "EMISSION": True,
107
+ "VTRUST": True,
108
+ "VAL": True,
109
+ "UPDATED": True,
110
+ "ACTIVE": True,
111
+ "AXON": True,
112
+ "HOTKEY": True,
113
+ "COLDKEY": True,
114
+ },
115
+ }
116
+
117
+ class proxies:
118
+ base_path = "~/.meshtensor"
119
+ path = "~/.meshtensor/meshtensor.db"
120
+ dictionary = {}
121
+
122
+ class meshtensor:
123
+ network = "finney"
124
+ chain_endpoint = None
125
+ _mock = False
126
+
127
+ class pow_register:
128
+ num_processes = None
129
+ update_interval = 50_000
130
+ output_in_place = True
131
+ verbose = False
132
+
133
+ class cuda:
134
+ dev_id = 0
135
+ use_cuda = False
136
+ tpb = 256
137
+
138
+ class wallet:
139
+ name = "default"
140
+ hotkey = "default"
141
+ path = "~/.meshtensor/wallets/"
142
+
143
+ class logging:
144
+ debug = False
145
+ trace = False
146
+ record_log = False
147
+ logging_dir = "~/.meshtensor/miners"
148
+
149
+ class dashboard:
150
+ path = "~/.meshtensor/dashboard/"
151
+
152
+
153
+ defaults = Defaults
154
+
155
+
156
+ class WalletOptions(Enum):
157
+ PATH: str = "path"
158
+ NAME: str = "name"
159
+ HOTKEY: str = "hotkey"
160
+
161
+
162
+ class WalletValidationTypes(Enum):
163
+ NONE = None
164
+ WALLET = "wallet"
165
+ WALLET_AND_HOTKEY = "wallet_and_hotkey"
166
+
167
+
168
+ TYPE_REGISTRY = {
169
+ "types": {
170
+ "Balance": "u64", # Need to override default u128
171
+ },
172
+ }
173
+
174
+ UNITS = [
175
+ b"\xce\xa4".decode(), # Τ (Upper case Tau, 0)
176
+ b"\xce\xb1".decode(), # α (Alpha, 1)
177
+ b"\xce\xb2".decode(), # β (Beta, 2)
178
+ b"\xce\xb3".decode(), # γ (Gamma, 3)
179
+ b"\xce\xb4".decode(), # δ (Delta, 4)
180
+ b"\xce\xb5".decode(), # ε (Epsilon, 5)
181
+ b"\xce\xb6".decode(), # ζ (Zeta, 6)
182
+ b"\xce\xb7".decode(), # η (Eta, 7)
183
+ b"\xce\xb8".decode(), # θ (Theta, 8)
184
+ b"\xce\xb9".decode(), # ι (Iota, 9)
185
+ b"\xce\xba".decode(), # κ (Kappa, 10)
186
+ b"\xce\xbb".decode(), # λ (Lambda, 11)
187
+ b"\xce\xbc".decode(), # μ (Mu, 12)
188
+ b"\xce\xbd".decode(), # ν (Nu, 13)
189
+ b"\xce\xbe".decode(), # ξ (Xi, 14)
190
+ b"\xce\xbf".decode(), # ο (Omicron, 15)
191
+ b"\xcf\x80".decode(), # π (Pi, 16)
192
+ b"\xcf\x81".decode(), # ρ (Rho, 17)
193
+ b"\xcf\x83".decode(), # σ (Sigma, 18)
194
+ "t", # t (Tau, 19)
195
+ b"\xcf\x85".decode(), # υ (Upsilon, 20)
196
+ b"\xcf\x86".decode(), # φ (Phi, 21)
197
+ b"\xcf\x87".decode(), # χ (Chi, 22)
198
+ b"\xcf\x88".decode(), # ψ (Psi, 23)
199
+ b"\xcf\x89".decode(), # ω (Omega, 24)
200
+ b"\xd7\x90".decode(), # א (Aleph, 25)
201
+ b"\xd7\x91".decode(), # ב (Bet, 26)
202
+ b"\xd7\x92".decode(), # ג (Gimel, 27)
203
+ b"\xd7\x93".decode(), # ד (Dalet, 28)
204
+ b"\xd7\x94".decode(), # ה (He, 29)
205
+ b"\xd7\x95".decode(), # ו (Vav, 30)
206
+ b"\xd7\x96".decode(), # ז (Zayin, 31)
207
+ b"\xd7\x97".decode(), # ח (Het, 32)
208
+ b"\xd7\x98".decode(), # ט (Tet, 33)
209
+ b"\xd7\x99".decode(), # י (Yod, 34)
210
+ b"\xd7\x9a".decode(), # ך (Final Kaf, 35)
211
+ b"\xd7\x9b".decode(), # כ (Kaf, 36)
212
+ b"\xd7\x9c".decode(), # ל (Lamed, 37)
213
+ b"\xd7\x9d".decode(), # ם (Final Mem, 38)
214
+ b"\xd7\x9e".decode(), # מ (Mem, 39)
215
+ b"\xd7\x9f".decode(), # ן (Final Nun, 40)
216
+ b"\xd7\xa0".decode(), # נ (Nun, 41)
217
+ b"\xd7\xa1".decode(), # ס (Samekh, 42)
218
+ b"\xd7\xa2".decode(), # ע (Ayin, 43)
219
+ b"\xd7\xa3".decode(), # ף (Final Pe, 44)
220
+ b"\xd7\xa4".decode(), # פ (Pe, 45)
221
+ b"\xd7\xa5".decode(), # ץ (Final Tsadi, 46)
222
+ b"\xd7\xa6".decode(), # צ (Tsadi, 47)
223
+ b"\xd7\xa7".decode(), # ק (Qof, 48)
224
+ b"\xd7\xa8".decode(), # ר (Resh, 49)
225
+ b"\xd7\xa9".decode(), # ש (Shin, 50)
226
+ b"\xd7\xaa".decode(), # ת (Tav, 51)
227
+ b"\xd8\xa7".decode(), # ا (Alif, 52)
228
+ b"\xd8\xa8".decode(), # ب (Ba, 53)
229
+ b"\xd8\xaa".decode(), # ت (Ta, 54)
230
+ b"\xd8\xab".decode(), # ث (Tha, 55)
231
+ b"\xd8\xac".decode(), # ج (Jim, 56)
232
+ b"\xd8\xad".decode(), # ح (Ha, 57)
233
+ b"\xd8\xae".decode(), # خ (Kha, 58)
234
+ b"\xd8\xaf".decode(), # د (Dal, 59)
235
+ b"\xd8\xb0".decode(), # ذ (Dhal, 60)
236
+ b"\xd8\xb1".decode(), # ر (Ra, 61)
237
+ b"\xd8\xb2".decode(), # ز (Zay, 62)
238
+ b"\xd8\xb3".decode(), # س (Sin, 63)
239
+ b"\xd8\xb4".decode(), # ش (Shin, 64)
240
+ b"\xd8\xb5".decode(), # ص (Sad, 65)
241
+ b"\xd8\xb6".decode(), # ض (Dad, 66)
242
+ b"\xd8\xb7".decode(), # ط (Ta, 67)
243
+ b"\xd8\xb8".decode(), # ظ (Dha, 68)
244
+ b"\xd8\xb9".decode(), # ع (Ain, 69)
245
+ b"\xd8\xba".decode(), # غ (Ghayn, 70)
246
+ b"\xd9\x81".decode(), # ف (Fa, 71)
247
+ b"\xd9\x82".decode(), # ق (Qaf, 72)
248
+ b"\xd9\x83".decode(), # ك (Kaf, 73)
249
+ b"\xd9\x84".decode(), # ل (Lam, 74)
250
+ b"\xd9\x85".decode(), # م (Mim, 75)
251
+ b"\xd9\x86".decode(), # ن (Nun, 76)
252
+ b"\xd9\x87".decode(), # ه (Ha, 77)
253
+ b"\xd9\x88".decode(), # و (Waw, 78)
254
+ b"\xd9\x8a".decode(), # ي (Ya, 79)
255
+ b"\xd9\x89".decode(), # ى (Alef Maksura, 80)
256
+ b"\xe1\x9a\xa0".decode(), # ᚠ (Fehu, wealth, 81)
257
+ b"\xe1\x9a\xa2".decode(), # ᚢ (Uruz, strength, 82)
258
+ b"\xe1\x9a\xa6".decode(), # ᚦ (Thurisaz, giant, 83)
259
+ b"\xe1\x9a\xa8".decode(), # ᚨ (Ansuz, god, 84)
260
+ b"\xe1\x9a\xb1".decode(), # ᚱ (Raidho, ride, 85)
261
+ b"\xe1\x9a\xb3".decode(), # ᚲ (Kaunan, ulcer, 86)
262
+ b"\xd0\xab".decode(), # Ы (Cyrillic Yeru, 87)
263
+ b"\xe1\x9b\x89".decode(), # ᛉ (Algiz, protection, 88)
264
+ b"\xe1\x9b\x92".decode(), # ᛒ (Berkanan, birch, 89)
265
+ b"\xe1\x9a\x80".decode(), #   (Space, 90)
266
+ b"\xe1\x9a\x81".decode(), # ᚁ (Beith, birch, 91)
267
+ b"\xe1\x9a\x82".decode(), # ᚂ (Luis, rowan, 92)
268
+ b"\xe1\x9a\x83".decode(), # ᚃ (Fearn, alder, 93)
269
+ b"\xe1\x9a\x84".decode(), # ᚄ (Sail, willow, 94)
270
+ b"\xe1\x9a\x85".decode(), # ᚅ (Nion, ash, 95)
271
+ b"\xe1\x9a\x9b".decode(), # ᚛ (Forfeda, 96)
272
+ b"\xe1\x83\x90".decode(), # ა (Ani, 97)
273
+ b"\xe1\x83\x91".decode(), # ბ (Bani, 98)
274
+ b"\xe1\x83\x92".decode(), # გ (Gani, 99)
275
+ b"\xe1\x83\x93".decode(), # დ (Doni, 100)
276
+ b"\xe1\x83\x94".decode(), # ე (Eni, 101)
277
+ b"\xe1\x83\x95".decode(), # ვ (Vini, 102)
278
+ b"\xd4\xb1".decode(), # Ա (Ayp, 103)
279
+ b"\xd4\xb2".decode(), # Բ (Ben, 104)
280
+ b"\xd4\xb3".decode(), # Գ (Gim, 105)
281
+ b"\xd4\xb4".decode(), # Դ (Da, 106)
282
+ b"\xd4\xb5".decode(), # Ե (Ech, 107)
283
+ b"\xd4\xb6".decode(), # Զ (Za, 108)
284
+ b"\xd5\x9e".decode(), # ՞ (Question mark, 109)
285
+ b"\xd0\x80".decode(), # Ѐ (Ie with grave, 110)
286
+ b"\xd0\x81".decode(), # Ё (Io, 111)
287
+ b"\xd0\x82".decode(), # Ђ (Dje, 112)
288
+ b"\xd0\x83".decode(), # Ѓ (Gje, 113)
289
+ b"\xd0\x84".decode(), # Є (Ukrainian Ie, 114)
290
+ b"\xd0\x85".decode(), # Ѕ (Dze, 115)
291
+ b"\xd1\x8a".decode(), # Ъ (Hard sign, 116)
292
+ b"\xe2\xb2\x80".decode(), # Ⲁ (Alfa, 117)
293
+ b"\xe2\xb2\x81".decode(), # ⲁ (Small Alfa, 118)
294
+ b"\xe2\xb2\x82".decode(), # Ⲃ (Vida, 119)
295
+ b"\xe2\xb2\x83".decode(), # ⲃ (Small Vida, 120)
296
+ b"\xe2\xb2\x84".decode(), # Ⲅ (Gamma, 121)
297
+ b"\xe2\xb2\x85".decode(), # ⲅ (Small Gamma, 122)
298
+ b"\xf0\x91\x80\x80".decode(), # 𑀀 (A, 123)
299
+ b"\xf0\x91\x80\x81".decode(), # 𑀁 (Aa, 124)
300
+ b"\xf0\x91\x80\x82".decode(), # 𑀂 (I, 125)
301
+ b"\xf0\x91\x80\x83".decode(), # 𑀃 (Ii, 126)
302
+ b"\xf0\x91\x80\x85".decode(), # 𑀅 (U, 127)
303
+ b"\xe0\xb6\xb1".decode(), # ඲ (La, 128)
304
+ b"\xe0\xb6\xb2".decode(), # ඳ (Va, 129)
305
+ b"\xe0\xb6\xb3".decode(), # ප (Sha, 130)
306
+ b"\xe0\xb6\xb4".decode(), # ඵ (Ssa, 131)
307
+ b"\xe0\xb6\xb5".decode(), # බ (Sa, 132)
308
+ b"\xe0\xb6\xb6".decode(), # භ (Ha, 133)
309
+ b"\xe2\xb0\x80".decode(), # Ⰰ (Az, 134)
310
+ b"\xe2\xb0\x81".decode(), # Ⰱ (Buky, 135)
311
+ b"\xe2\xb0\x82".decode(), # Ⰲ (Vede, 136)
312
+ b"\xe2\xb0\x83".decode(), # Ⰳ (Glagoli, 137)
313
+ b"\xe2\xb0\x84".decode(), # Ⰴ (Dobro, 138)
314
+ b"\xe2\xb0\x85".decode(), # Ⰵ (Yest, 139)
315
+ b"\xe2\xb0\x86".decode(), # Ⰶ (Zhivete, 140)
316
+ b"\xe2\xb0\x87".decode(), # Ⰷ (Zemlja, 141)
317
+ b"\xe2\xb0\x88".decode(), # Ⰸ (Izhe, 142)
318
+ b"\xe2\xb0\x89".decode(), # Ⰹ (Initial Izhe, 143)
319
+ b"\xe2\xb0\x8a".decode(), # Ⰺ (I, 144)
320
+ b"\xe2\xb0\x8b".decode(), # Ⰻ (Djerv, 145)
321
+ b"\xe2\xb0\x8c".decode(), # Ⰼ (Kako, 146)
322
+ b"\xe2\xb0\x8d".decode(), # Ⰽ (Ljudije, 147)
323
+ b"\xe2\xb0\x8e".decode(), # Ⰾ (Myse, 148)
324
+ b"\xe2\xb0\x8f".decode(), # Ⰿ (Nash, 149)
325
+ b"\xe2\xb0\x90".decode(), # Ⱀ (On, 150)
326
+ b"\xe2\xb0\x91".decode(), # Ⱁ (Pokoj, 151)
327
+ b"\xe2\xb0\x92".decode(), # Ⱂ (Rtsy, 152)
328
+ b"\xe2\xb0\x93".decode(), # Ⱃ (Slovo, 153)
329
+ b"\xe2\xb0\x94".decode(), # Ⱄ (Tvrido, 154)
330
+ b"\xe2\xb0\x95".decode(), # Ⱅ (Uku, 155)
331
+ b"\xe2\xb0\x96".decode(), # Ⱆ (Fert, 156)
332
+ b"\xe2\xb0\x97".decode(), # Ⱇ (Xrivi, 157)
333
+ b"\xe2\xb0\x98".decode(), # Ⱈ (Ot, 158)
334
+ b"\xe2\xb0\x99".decode(), # Ⱉ (Cy, 159)
335
+ b"\xe2\xb0\x9a".decode(), # Ⱊ (Shcha, 160)
336
+ b"\xe2\xb0\x9b".decode(), # Ⱋ (Er, 161)
337
+ b"\xe2\xb0\x9c".decode(), # Ⱌ (Yeru, 162)
338
+ b"\xe2\xb0\x9d".decode(), # Ⱍ (Small Yer, 163)
339
+ b"\xe2\xb0\x9e".decode(), # Ⱎ (Yo, 164)
340
+ b"\xe2\xb0\x9f".decode(), # Ⱏ (Yu, 165)
341
+ b"\xe2\xb0\xa0".decode(), # Ⱐ (Ja, 166)
342
+ b"\xe0\xb8\x81".decode(), # ก (Ko Kai, 167)
343
+ b"\xe0\xb8\x82".decode(), # ข (Kho Khai, 168)
344
+ b"\xe0\xb8\x83".decode(), # ฃ (Kho Khuat, 169)
345
+ b"\xe0\xb8\x84".decode(), # ค (Kho Khon, 170)
346
+ b"\xe0\xb8\x85".decode(), # ฅ (Kho Rakhang, 171)
347
+ b"\xe0\xb8\x86".decode(), # ฆ (Kho Khwai, 172)
348
+ b"\xe0\xb8\x87".decode(), # ง (Ngo Ngu, 173)
349
+ b"\xe0\xb8\x88".decode(), # จ (Cho Chan, 174)
350
+ b"\xe0\xb8\x89".decode(), # ฉ (Cho Ching, 175)
351
+ b"\xe0\xb8\x8a".decode(), # ช (Cho Chang, 176)
352
+ b"\xe0\xb8\x8b".decode(), # ซ (So So, 177)
353
+ b"\xe0\xb8\x8c".decode(), # ฌ (Cho Choe, 178)
354
+ b"\xe0\xb8\x8d".decode(), # ญ (Yo Ying, 179)
355
+ b"\xe0\xb8\x8e".decode(), # ฎ (Do Chada, 180)
356
+ b"\xe0\xb8\x8f".decode(), # ฏ (To Patak, 181)
357
+ b"\xe0\xb8\x90".decode(), # ฐ (Tho Than, 182)
358
+ b"\xe0\xb8\x91".decode(), # ฑ (Tho Nangmontho, 183)
359
+ b"\xe0\xb8\x92".decode(), # ฒ (Tho Phuthao, 184)
360
+ b"\xe0\xb8\x93".decode(), # ณ (No Nen, 185)
361
+ b"\xe0\xb8\x94".decode(), # ด (Do Dek, 186)
362
+ b"\xe0\xb8\x95".decode(), # ต (To Tao, 187)
363
+ b"\xe0\xb8\x96".decode(), # ถ (Tho Thung, 188)
364
+ b"\xe0\xb8\x97".decode(), # ท (Tho Thahan, 189)
365
+ b"\xe0\xb8\x98".decode(), # ธ (Tho Thong, 190)
366
+ b"\xe0\xb8\x99".decode(), # น (No Nu, 191)
367
+ b"\xe0\xb8\x9a".decode(), # บ (Bo Baimai, 192)
368
+ b"\xe0\xb8\x9b".decode(), # ป (Po Pla, 193)
369
+ b"\xe0\xb8\x9c".decode(), # ผ (Pho Phung, 194)
370
+ b"\xe0\xb8\x9d".decode(), # ฝ (Fo Fa, 195)
371
+ b"\xe0\xb8\x9e".decode(), # พ (Pho Phan, 196)
372
+ b"\xe0\xb8\x9f".decode(), # ฟ (Fo Fan, 197)
373
+ b"\xe0\xb8\xa0".decode(), # ภ (Pho Samphao, 198)
374
+ b"\xe0\xb8\xa1".decode(), # ม (Mo Ma, 199)
375
+ b"\xe0\xb8\xa2".decode(), # ย (Yo Yak, 200)
376
+ b"\xe0\xb8\xa3".decode(), # ร (Ro Rua, 201)
377
+ b"\xe0\xb8\xa5".decode(), # ล (Lo Ling, 202)
378
+ b"\xe0\xb8\xa7".decode(), # ว (Wo Waen, 203)
379
+ b"\xe0\xb8\xa8".decode(), # ศ (So Sala, 204)
380
+ b"\xe0\xb8\xa9".decode(), # ษ (So Rusi, 205)
381
+ b"\xe0\xb8\xaa".decode(), # ส (So Sua, 206)
382
+ b"\xe0\xb8\xab".decode(), # ห (Ho Hip, 207)
383
+ b"\xe0\xb8\xac".decode(), # ฬ (Lo Chula, 208)
384
+ b"\xe0\xb8\xad".decode(), # อ (O Ang, 209)
385
+ b"\xe0\xb8\xae".decode(), # ฮ (Ho Nokhuk, 210)
386
+ b"\xe1\x84\x80".decode(), # ㄱ (Giyeok, 211)
387
+ b"\xe1\x84\x81".decode(), # ㄴ (Nieun, 212)
388
+ b"\xe1\x84\x82".decode(), # ㄷ (Digeut, 213)
389
+ b"\xe1\x84\x83".decode(), # ㄹ (Rieul, 214)
390
+ b"\xe1\x84\x84".decode(), # ㅁ (Mieum, 215)
391
+ b"\xe1\x84\x85".decode(), # ㅂ (Bieup, 216)
392
+ b"\xe1\x84\x86".decode(), # ㅅ (Siot, 217)
393
+ b"\xe1\x84\x87".decode(), # ㅇ (Ieung, 218)
394
+ b"\xe1\x84\x88".decode(), # ㅈ (Jieut, 219)
395
+ b"\xe1\x84\x89".decode(), # ㅊ (Chieut, 220)
396
+ b"\xe1\x84\x8a".decode(), # ㅋ (Kieuk, 221)
397
+ b"\xe1\x84\x8b".decode(), # ㅌ (Tieut, 222)
398
+ b"\xe1\x84\x8c".decode(), # ㅍ (Pieup, 223)
399
+ b"\xe1\x84\x8d".decode(), # ㅎ (Hieut, 224)
400
+ b"\xe1\x85\xa1".decode(), # ㅏ (A, 225)
401
+ b"\xe1\x85\xa2".decode(), # ㅐ (Ae, 226)
402
+ b"\xe1\x85\xa3".decode(), # ㅑ (Ya, 227)
403
+ b"\xe1\x85\xa4".decode(), # ㅒ (Yae, 228)
404
+ b"\xe1\x85\xa5".decode(), # ㅓ (Eo, 229)
405
+ b"\xe1\x85\xa6".decode(), # ㅔ (E, 230)
406
+ b"\xe1\x85\xa7".decode(), # ㅕ (Yeo, 231)
407
+ b"\xe1\x85\xa8".decode(), # ㅖ (Ye, 232)
408
+ b"\xe1\x85\xa9".decode(), # ㅗ (O, 233)
409
+ b"\xe1\x85\xaa".decode(), # ㅘ (Wa, 234)
410
+ b"\xe1\x85\xab".decode(), # ㅙ (Wae, 235)
411
+ b"\xe1\x85\xac".decode(), # ㅚ (Oe, 236)
412
+ b"\xe1\x85\xad".decode(), # ㅛ (Yo, 237)
413
+ b"\xe1\x85\xae".decode(), # ㅜ (U, 238)
414
+ b"\xe1\x85\xaf".decode(), # ㅝ (Weo, 239)
415
+ b"\xe1\x85\xb0".decode(), # ㅞ (We, 240)
416
+ b"\xe1\x85\xb1".decode(), # ㅟ (Wi, 241)
417
+ b"\xe1\x85\xb2".decode(), # ㅠ (Yu, 242)
418
+ b"\xe1\x85\xb3".decode(), # ㅡ (Eu, 243)
419
+ b"\xe1\x85\xb4".decode(), # ㅢ (Ui, 244)
420
+ b"\xe1\x85\xb5".decode(), # ㅣ (I, 245)
421
+ b"\xe1\x8a\xa0".decode(), # አ (Glottal A, 246)
422
+ b"\xe1\x8a\xa1".decode(), # ኡ (Glottal U, 247)
423
+ b"\xe1\x8a\xa2".decode(), # ኢ (Glottal I, 248)
424
+ b"\xe1\x8a\xa3".decode(), # ኣ (Glottal Aa, 249)
425
+ b"\xe1\x8a\xa4".decode(), # ኤ (Glottal E, 250)
426
+ b"\xe1\x8a\xa5".decode(), # እ (Glottal Ie, 251)
427
+ b"\xe1\x8a\xa6".decode(), # ኦ (Glottal O, 252)
428
+ b"\xe1\x8a\xa7".decode(), # ኧ (Glottal Wa, 253)
429
+ b"\xe1\x8b\x88".decode(), # ወ (Wa, 254)
430
+ b"\xe1\x8b\x89".decode(), # ዉ (Wu, 255)
431
+ b"\xe1\x8b\x8a".decode(), # ዊ (Wi, 256)
432
+ b"\xe1\x8b\x8b".decode(), # ዋ (Waa, 257)
433
+ b"\xe1\x8b\x8c".decode(), # ዌ (We, 258)
434
+ b"\xe1\x8b\x8d".decode(), # ው (Wye, 259)
435
+ b"\xe1\x8b\x8e".decode(), # ዎ (Wo, 260)
436
+ b"\xe1\x8a\xb0".decode(), # ኰ (Ko, 261)
437
+ b"\xe1\x8a\xb1".decode(), # ኱ (Ku, 262)
438
+ b"\xe1\x8a\xb2".decode(), # ኲ (Ki, 263)
439
+ b"\xe1\x8a\xb3".decode(), # ኳ (Kua, 264)
440
+ b"\xe1\x8a\xb4".decode(), # ኴ (Ke, 265)
441
+ b"\xe1\x8a\xb5".decode(), # ኵ (Kwe, 266)
442
+ b"\xe1\x8a\xb6".decode(), # ኶ (Ko, 267)
443
+ b"\xe1\x8a\x90".decode(), # ጐ (Go, 268)
444
+ b"\xe1\x8a\x91".decode(), # ጑ (Gu, 269)
445
+ b"\xe1\x8a\x92".decode(), # ጒ (Gi, 270)
446
+ b"\xe1\x8a\x93".decode(), # መ (Gua, 271)
447
+ b"\xe1\x8a\x94".decode(), # ጔ (Ge, 272)
448
+ b"\xe1\x8a\x95".decode(), # ጕ (Gwe, 273)
449
+ b"\xe1\x8a\x96".decode(), # ጖ (Go, 274)
450
+ b"\xe0\xa4\x85".decode(), # अ (A, 275)
451
+ b"\xe0\xa4\x86".decode(), # आ (Aa, 276)
452
+ b"\xe0\xa4\x87".decode(), # इ (I, 277)
453
+ b"\xe0\xa4\x88".decode(), # ई (Ii, 278)
454
+ b"\xe0\xa4\x89".decode(), # उ (U, 279)
455
+ b"\xe0\xa4\x8a".decode(), # ऊ (Uu, 280)
456
+ b"\xe0\xa4\x8b".decode(), # ऋ (R, 281)
457
+ b"\xe0\xa4\x8f".decode(), # ए (E, 282)
458
+ b"\xe0\xa4\x90".decode(), # ऐ (Ai, 283)
459
+ b"\xe0\xa4\x93".decode(), # ओ (O, 284)
460
+ b"\xe0\xa4\x94".decode(), # औ (Au, 285)
461
+ b"\xe0\xa4\x95".decode(), # क (Ka, 286)
462
+ b"\xe0\xa4\x96".decode(), # ख (Kha, 287)
463
+ b"\xe0\xa4\x97".decode(), # ग (Ga, 288)
464
+ b"\xe0\xa4\x98".decode(), # घ (Gha, 289)
465
+ b"\xe0\xa4\x99".decode(), # ङ (Nga, 290)
466
+ b"\xe0\xa4\x9a".decode(), # च (Cha, 291)
467
+ b"\xe0\xa4\x9b".decode(), # छ (Chha, 292)
468
+ b"\xe0\xa4\x9c".decode(), # ज (Ja, 293)
469
+ b"\xe0\xa4\x9d".decode(), # झ (Jha, 294)
470
+ b"\xe0\xa4\x9e".decode(), # ञ (Nya, 295)
471
+ b"\xe0\xa4\x9f".decode(), # ट (Ta, 296)
472
+ b"\xe0\xa4\xa0".decode(), # ठ (Tha, 297)
473
+ b"\xe0\xa4\xa1".decode(), # ड (Da, 298)
474
+ b"\xe0\xa4\xa2".decode(), # ढ (Dha, 299)
475
+ b"\xe0\xa4\xa3".decode(), # ण (Na, 300)
476
+ b"\xe0\xa4\xa4".decode(), # त (Ta, 301)
477
+ b"\xe0\xa4\xa5".decode(), # थ (Tha, 302)
478
+ b"\xe0\xa4\xa6".decode(), # द (Da, 303)
479
+ b"\xe0\xa4\xa7".decode(), # ध (Dha, 304)
480
+ b"\xe0\xa4\xa8".decode(), # न (Na, 305)
481
+ b"\xe0\xa4\xaa".decode(), # प (Pa, 306)
482
+ b"\xe0\xa4\xab".decode(), # फ (Pha, 307)
483
+ b"\xe0\xa4\xac".decode(), # ब (Ba, 308)
484
+ b"\xe0\xa4\xad".decode(), # भ (Bha, 309)
485
+ b"\xe0\xa4\xae".decode(), # म (Ma, 310)
486
+ b"\xe0\xa4\xaf".decode(), # य (Ya, 311)
487
+ b"\xe0\xa4\xb0".decode(), # र (Ra, 312)
488
+ b"\xe0\xa4\xb2".decode(), # ल (La, 313)
489
+ b"\xe0\xa4\xb5".decode(), # व (Va, 314)
490
+ b"\xe0\xa4\xb6".decode(), # श (Sha, 315)
491
+ b"\xe0\xa4\xb7".decode(), # ष (Ssa, 316)
492
+ b"\xe0\xa4\xb8".decode(), # स (Sa, 317)
493
+ b"\xe0\xa4\xb9".decode(), # ह (Ha, 318)
494
+ b"\xe3\x82\xa2".decode(), # ア (A, 319)
495
+ b"\xe3\x82\xa4".decode(), # イ (I, 320)
496
+ b"\xe3\x82\xa6".decode(), # ウ (U, 321)
497
+ b"\xe3\x82\xa8".decode(), # エ (E, 322)
498
+ b"\xe3\x82\xaa".decode(), # オ (O, 323)
499
+ b"\xe3\x82\xab".decode(), # カ (Ka, 324)
500
+ b"\xe3\x82\xad".decode(), # キ (Ki, 325)
501
+ b"\xe3\x82\xaf".decode(), # ク (Ku, 326)
502
+ b"\xe3\x82\xb1".decode(), # ケ (Ke, 327)
503
+ b"\xe3\x82\xb3".decode(), # コ (Ko, 328)
504
+ b"\xe3\x82\xb5".decode(), # サ (Sa, 329)
505
+ b"\xe3\x82\xb7".decode(), # シ (Shi, 330)
506
+ b"\xe3\x82\xb9".decode(), # ス (Su, 331)
507
+ b"\xe3\x82\xbb".decode(), # セ (Se, 332)
508
+ b"\xe3\x82\xbd".decode(), # ソ (So, 333)
509
+ b"\xe3\x82\xbf".decode(), # タ (Ta, 334)
510
+ b"\xe3\x83\x81".decode(), # チ (Chi, 335)
511
+ b"\xe3\x83\x84".decode(), # ツ (Tsu, 336)
512
+ b"\xe3\x83\x86".decode(), # テ (Te, 337)
513
+ b"\xe3\x83\x88".decode(), # ト (To, 338)
514
+ b"\xe3\x83\x8a".decode(), # ナ (Na, 339)
515
+ b"\xe3\x83\x8b".decode(), # ニ (Ni, 340)
516
+ b"\xe3\x83\x8c".decode(), # ヌ (Nu, 341)
517
+ b"\xe3\x83\x8d".decode(), # ネ (Ne, 342)
518
+ b"\xe3\x83\x8e".decode(), # ノ (No, 343)
519
+ b"\xe3\x83\x8f".decode(), # ハ (Ha, 344)
520
+ b"\xe3\x83\x92".decode(), # ヒ (Hi, 345)
521
+ b"\xe3\x83\x95".decode(), # フ (Fu, 346)
522
+ b"\xe3\x83\x98".decode(), # ヘ (He, 347)
523
+ b"\xe3\x83\x9b".decode(), # ホ (Ho, 348)
524
+ b"\xe3\x83\x9e".decode(), # マ (Ma, 349)
525
+ b"\xe3\x83\x9f".decode(), # ミ (Mi, 350)
526
+ b"\xe3\x83\xa0".decode(), # ム (Mu, 351)
527
+ b"\xe3\x83\xa1".decode(), # メ (Me, 352)
528
+ b"\xe3\x83\xa2".decode(), # モ (Mo, 353)
529
+ b"\xe3\x83\xa4".decode(), # ヤ (Ya, 354)
530
+ b"\xe3\x83\xa6".decode(), # ユ (Yu, 355)
531
+ b"\xe3\x83\xa8".decode(), # ヨ (Yo, 356)
532
+ b"\xe3\x83\xa9".decode(), # ラ (Ra, 357)
533
+ b"\xe3\x83\xaa".decode(), # リ (Ri, 358)
534
+ b"\xe3\x83\xab".decode(), # ル (Ru, 359)
535
+ b"\xe3\x83\xac".decode(), # レ (Re, 360)
536
+ b"\xe3\x83\xad".decode(), # ロ (Ro, 361)
537
+ b"\xe3\x83\xaf".decode(), # ワ (Wa, 362)
538
+ b"\xe3\x83\xb2".decode(), # ヲ (Wo, 363)
539
+ b"\xe3\x83\xb3".decode(), # ン (N, 364)
540
+ b"\xe2\xb4\xb0".decode(), # ⴰ (Ya, 365)
541
+ b"\xe2\xb4\xb1".decode(), # ⴱ (Yab, 366)
542
+ b"\xe2\xb4\xb2".decode(), # ⴲ (Yabh, 367)
543
+ b"\xe2\xb4\xb3".decode(), # ⴳ (Yag, 368)
544
+ b"\xe2\xb4\xb4".decode(), # ⴴ (Yagh, 369)
545
+ b"\xe2\xb4\xb5".decode(), # ⴵ (Yaj, 370)
546
+ b"\xe2\xb4\xb6".decode(), # ⴶ (Yach, 371)
547
+ b"\xe2\xb4\xb7".decode(), # ⴷ (Yad, 372)
548
+ b"\xe2\xb4\xb8".decode(), # ⴸ (Yadh, 373)
549
+ b"\xe2\xb4\xb9".decode(), # ⴹ (Yadh, emphatic, 374)
550
+ b"\xe2\xb4\xba".decode(), # ⴺ (Yaz, 375)
551
+ b"\xe2\xb4\xbb".decode(), # ⴻ (Yazh, 376)
552
+ b"\xe2\xb4\xbc".decode(), # ⴼ (Yaf, 377)
553
+ b"\xe2\xb4\xbd".decode(), # ⴽ (Yak, 378)
554
+ b"\xe2\xb4\xbe".decode(), # ⴾ (Yak, variant, 379)
555
+ b"\xe2\xb4\xbf".decode(), # ⴿ (Yaq, 380)
556
+ b"\xe2\xb5\x80".decode(), # ⵀ (Yah, 381)
557
+ b"\xe2\xb5\x81".decode(), # ⵁ (Yahh, 382)
558
+ b"\xe2\xb5\x82".decode(), # ⵂ (Yahl, 383)
559
+ b"\xe2\xb5\x83".decode(), # ⵃ (Yahm, 384)
560
+ b"\xe2\xb5\x84".decode(), # ⵄ (Yayn, 385)
561
+ b"\xe2\xb5\x85".decode(), # ⵅ (Yakh, 386)
562
+ b"\xe2\xb5\x86".decode(), # ⵆ (Yakl, 387)
563
+ b"\xe2\xb5\x87".decode(), # ⵇ (Yahq, 388)
564
+ b"\xe2\xb5\x88".decode(), # ⵈ (Yash, 389)
565
+ b"\xe2\xb5\x89".decode(), # ⵉ (Yi, 390)
566
+ b"\xe2\xb5\x8a".decode(), # ⵊ (Yij, 391)
567
+ b"\xe2\xb5\x8b".decode(), # ⵋ (Yizh, 392)
568
+ b"\xe2\xb5\x8c".decode(), # ⵌ (Yink, 393)
569
+ b"\xe2\xb5\x8d".decode(), # ⵍ (Yal, 394)
570
+ b"\xe2\xb5\x8e".decode(), # ⵎ (Yam, 395)
571
+ b"\xe2\xb5\x8f".decode(), # ⵏ (Yan, 396)
572
+ b"\xe2\xb5\x90".decode(), # ⵐ (Yang, 397)
573
+ b"\xe2\xb5\x91".decode(), # ⵑ (Yany, 398)
574
+ b"\xe2\xb5\x92".decode(), # ⵒ (Yap, 399)
575
+ b"\xe2\xb5\x93".decode(), # ⵓ (Yu, 400)
576
+ b"\xe0\xb6\x85".decode(), # අ (A, 401)
577
+ b"\xe0\xb6\x86".decode(), # ආ (Aa, 402)
578
+ b"\xe0\xb6\x87".decode(), # ඉ (I, 403)
579
+ b"\xe0\xb6\x88".decode(), # ඊ (Ii, 404)
580
+ b"\xe0\xb6\x89".decode(), # උ (U, 405)
581
+ b"\xe0\xb6\x8a".decode(), # ඌ (Uu, 406)
582
+ b"\xe0\xb6\x8b".decode(), # ඍ (R, 407)
583
+ b"\xe0\xb6\x8c".decode(), # ඎ (Rr, 408)
584
+ b"\xe0\xb6\x8f".decode(), # ඏ (L, 409)
585
+ b"\xe0\xb6\x90".decode(), # ඐ (Ll, 410)
586
+ b"\xe0\xb6\x91".decode(), # එ (E, 411)
587
+ b"\xe0\xb6\x92".decode(), # ඒ (Ee, 412)
588
+ b"\xe0\xb6\x93".decode(), # ඓ (Ai, 413)
589
+ b"\xe0\xb6\x94".decode(), # ඔ (O, 414)
590
+ b"\xe0\xb6\x95".decode(), # ඕ (Oo, 415)
591
+ b"\xe0\xb6\x96".decode(), # ඖ (Au, 416)
592
+ b"\xe0\xb6\x9a".decode(), # ක (Ka, 417)
593
+ b"\xe0\xb6\x9b".decode(), # ඛ (Kha, 418)
594
+ b"\xe0\xb6\x9c".decode(), # ග (Ga, 419)
595
+ b"\xe0\xb6\x9d".decode(), # ඝ (Gha, 420)
596
+ b"\xe0\xb6\x9e".decode(), # ඞ (Nga, 421)
597
+ b"\xe0\xb6\x9f".decode(), # ච (Cha, 422)
598
+ b"\xe0\xb6\xa0".decode(), # ඡ (Chha, 423)
599
+ b"\xe0\xb6\xa1".decode(), # ජ (Ja, 424)
600
+ b"\xe0\xb6\xa2".decode(), # ඣ (Jha, 425)
601
+ b"\xe0\xb6\xa3".decode(), # ඤ (Nya, 426)
602
+ b"\xe0\xb6\xa4".decode(), # ට (Ta, 427)
603
+ b"\xe0\xb6\xa5".decode(), # ඥ (Tha, 428)
604
+ b"\xe0\xb6\xa6".decode(), # ඦ (Da, 429)
605
+ b"\xe0\xb6\xa7".decode(), # ට (Dha, 430)
606
+ b"\xe0\xb6\xa8".decode(), # ඨ (Na, 431)
607
+ b"\xe0\xb6\xaa".decode(), # ඪ (Pa, 432)
608
+ b"\xe0\xb6\xab".decode(), # ණ (Pha, 433)
609
+ b"\xe0\xb6\xac".decode(), # ඬ (Ba, 434)
610
+ b"\xe0\xb6\xad".decode(), # ත (Bha, 435)
611
+ b"\xe0\xb6\xae".decode(), # ථ (Ma, 436)
612
+ b"\xe0\xb6\xaf".decode(), # ද (Ya, 437)
613
+ b"\xe0\xb6\xb0".decode(), # ධ (Ra, 438)
614
+ ]
615
+
616
+ NETWORK_EXPLORER_MAP = {
617
+ "opentensor": {
618
+ "local": "https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Fentrypoint-finney.opentensor.ai%3A443#/explorer",
619
+ "endpoint": "https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Fentrypoint-finney.opentensor.ai%3A443#/explorer",
620
+ "finney": "https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Fentrypoint-finney.opentensor.ai%3A443#/explorer",
621
+ },
622
+ "taostats": {
623
+ "local": "https://x.taostats.io",
624
+ "endpoint": "https://x.taostats.io",
625
+ "finney": "https://x.taostats.io",
626
+ },
627
+ }
628
+
629
+
630
+ class RootSudoOnly(Enum):
631
+ FALSE = 0
632
+ TRUE = 1
633
+ COMPLICATED = 2
634
+
635
+
636
+ HYPERPARAMS = {
637
+ # meshcli name: (meshtensor method, root-only enum)
638
+ "rho": ("sudo_set_rho", RootSudoOnly.FALSE),
639
+ "kappa": ("sudo_set_kappa", RootSudoOnly.TRUE),
640
+ "immunity_period": ("sudo_set_immunity_period", RootSudoOnly.FALSE),
641
+ "min_allowed_weights": ("sudo_set_min_allowed_weights", RootSudoOnly.FALSE),
642
+ "max_weights_limit": ("sudo_set_max_weight_limit", RootSudoOnly.FALSE),
643
+ "tempo": ("sudo_set_tempo", RootSudoOnly.TRUE),
644
+ "min_difficulty": ("sudo_set_min_difficulty", RootSudoOnly.TRUE),
645
+ "max_difficulty": ("sudo_set_max_difficulty", RootSudoOnly.FALSE),
646
+ "weights_version": ("sudo_set_weights_version_key", RootSudoOnly.FALSE),
647
+ "weights_rate_limit": ("sudo_set_weights_set_rate_limit", RootSudoOnly.TRUE),
648
+ "adjustment_interval": ("sudo_set_adjustment_interval", RootSudoOnly.TRUE),
649
+ "activity_cutoff": ("sudo_set_activity_cutoff", RootSudoOnly.FALSE),
650
+ "target_regs_per_interval": (
651
+ "sudo_set_target_registrations_per_interval",
652
+ RootSudoOnly.TRUE,
653
+ ),
654
+ "min_burn": ("sudo_set_min_burn", RootSudoOnly.FALSE),
655
+ "max_burn": ("sudo_set_max_burn", RootSudoOnly.TRUE),
656
+ "bonds_moving_avg": ("sudo_set_bonds_moving_average", RootSudoOnly.FALSE),
657
+ "max_regs_per_block": ("sudo_set_max_registrations_per_block", RootSudoOnly.TRUE),
658
+ "serving_rate_limit": ("sudo_set_serving_rate_limit", RootSudoOnly.FALSE),
659
+ "max_validators": ("sudo_set_max_allowed_validators", RootSudoOnly.TRUE),
660
+ "adjustment_alpha": ("sudo_set_adjustment_alpha", RootSudoOnly.FALSE),
661
+ "difficulty": ("sudo_set_difficulty", RootSudoOnly.TRUE),
662
+ "commit_reveal_period": (
663
+ "sudo_set_commit_reveal_weights_interval",
664
+ RootSudoOnly.FALSE,
665
+ ),
666
+ "commit_reveal_weights_enabled": (
667
+ "sudo_set_commit_reveal_weights_enabled",
668
+ RootSudoOnly.FALSE,
669
+ ),
670
+ "alpha_values": ("sudo_set_alpha_values", RootSudoOnly.FALSE),
671
+ "liquid_alpha_enabled": ("sudo_set_liquid_alpha_enabled", RootSudoOnly.FALSE),
672
+ "registration_allowed": (
673
+ "sudo_set_network_registration_allowed",
674
+ RootSudoOnly.TRUE,
675
+ ),
676
+ "network_pow_registration_allowed": (
677
+ "sudo_set_network_pow_registration_allowed",
678
+ RootSudoOnly.FALSE,
679
+ ),
680
+ "yuma3_enabled": ("sudo_set_yuma3_enabled", RootSudoOnly.FALSE),
681
+ "alpha_sigmoid_steepness": ("sudo_set_alpha_sigmoid_steepness", RootSudoOnly.TRUE),
682
+ "user_liquidity_enabled": ("toggle_user_liquidity", RootSudoOnly.COMPLICATED),
683
+ "bonds_reset_enabled": ("sudo_set_bonds_reset_enabled", RootSudoOnly.FALSE),
684
+ "transfers_enabled": ("sudo_set_toggle_transfer", RootSudoOnly.FALSE),
685
+ "min_allowed_uids": ("sudo_set_min_allowed_uids", RootSudoOnly.TRUE),
686
+ # Note: These are displayed but not directly settable via HYPERPARAMS
687
+ # They are derived or set via other mechanisms
688
+ "alpha_high": ("", RootSudoOnly.FALSE), # Derived from alpha_values
689
+ "alpha_low": ("", RootSudoOnly.FALSE), # Derived from alpha_values
690
+ "subnet_is_active": ("", RootSudoOnly.FALSE), # Set via meshcli subnets start
691
+ "yuma_version": ("", RootSudoOnly.FALSE), # Related to yuma3_enabled
692
+ }
693
+
694
+ HYPERPARAMS_MODULE = {
695
+ "user_liquidity_enabled": "Swap",
696
+ }
697
+
698
+ # Hyperparameter metadata: descriptions, side-effects, ownership, and documentation links
699
+ HYPERPARAMS_METADATA = {
700
+ "rho": {
701
+ "description": "Rho controls the rate at which weights decay over time.",
702
+ "side_effects": "Changing rho affects how quickly neurons' influence diminishes, impacting consensus dynamics.",
703
+ "owner_settable": True,
704
+ "docs_link": "docs.learnmeshtensor.org/subnets/subnet-hyperparameters#rho",
705
+ },
706
+ "kappa": {
707
+ "description": "Kappa determines the scaling factor for consensus calculations.",
708
+ "side_effects": "Modifying kappa changes how validator votes are weighted in consensus mechanisms.",
709
+ "owner_settable": True,
710
+ "docs_link": "docs.learnmeshtensor.org/subnets/subnet-hyperparameters#kappa",
711
+ },
712
+ "immunity_period": {
713
+ "description": "Duration (in blocks) during which newly registered neurons are protected from certain penalties.",
714
+ "side_effects": "Increasing immunity period gives new neurons more time to establish themselves before facing penalties.",
715
+ "owner_settable": True,
716
+ "docs_link": "docs.learnmeshtensor.org/subnets/subnet-hyperparameters#immunityperiod",
717
+ },
718
+ "min_allowed_weights": {
719
+ "description": "Minimum number of weight connections a neuron must maintain to stay active.",
720
+ "side_effects": "Lower values allow neurons with fewer connections to remain active; higher values enforce stricter connectivity requirements.",
721
+ "owner_settable": True,
722
+ "docs_link": "docs.learnmeshtensor.org/subnets/subnet-hyperparameters#minallowedweights",
723
+ },
724
+ "max_weights_limit": {
725
+ "description": "Maximum number of weight connections a neuron can have with other neurons.",
726
+ "side_effects": "Limits the maximum out-degree of the network graph, affecting network topology and consensus.",
727
+ "owner_settable": True,
728
+ "docs_link": "docs.learnmeshtensor.org/subnets/subnet-hyperparameters#maxweightslimit",
729
+ },
730
+ "tempo": {
731
+ "description": "Number of blocks between epoch transitions",
732
+ "side_effects": "Lower tempo means more frequent updates but higher chain load. Higher tempo reduces frequency but may slow responsiveness.",
733
+ "owner_settable": False,
734
+ "docs_link": "docs.learnmeshtensor.org/subnets/subnet-hyperparameters#tempo",
735
+ },
736
+ "min_difficulty": {
737
+ "description": "Minimum proof-of-work difficulty required for registration",
738
+ "side_effects": "Increasing min_difficulty raises the computational barrier for new neuron registrations.",
739
+ "owner_settable": False,
740
+ "docs_link": "docs.learnmeshtensor.org/subnets/subnet-hyperparameters#mindifficulty",
741
+ },
742
+ "max_difficulty": {
743
+ "description": "Maximum proof-of-work difficulty cap.",
744
+ "side_effects": "Caps the maximum computational requirement, ensuring registration remains feasible.",
745
+ "owner_settable": True,
746
+ "docs_link": "docs.learnmeshtensor.org/subnets/subnet-hyperparameters#maxdifficulty",
747
+ },
748
+ "weights_version": {
749
+ "description": "Version key for weight sets.",
750
+ "side_effects": "Changing this invalidates all existing weights, forcing neurons to resubmit weights.",
751
+ "owner_settable": True,
752
+ "docs_link": "docs.learnmeshtensor.org/subnets/subnet-hyperparameters#weightsversion",
753
+ },
754
+ "weights_rate_limit": {
755
+ "description": "Maximum number of weight updates allowed per epoch.",
756
+ "side_effects": "Lower values reduce chain load but may limit legitimate weight updates. Higher values allow more flexibility.",
757
+ "owner_settable": False,
758
+ "docs_link": "docs.learnmeshtensor.org/subnets/subnet-hyperparameters#weightsratelimit--commitmentratelimit",
759
+ },
760
+ "adjustment_interval": {
761
+ "description": "Number of blocks between automatic difficulty adjustments.",
762
+ "side_effects": "Shorter intervals make difficulty more responsive but may cause volatility. Longer intervals provide stability.",
763
+ "owner_settable": False,
764
+ "docs_link": "docs.learnmeshtensor.org/subnets/subnet-hyperparameters#adjustmentinterval",
765
+ },
766
+ "activity_cutoff": {
767
+ "description": "Minimum activity level required for neurons to remain active.",
768
+ "side_effects": "Lower values keep more neurons active; higher values prune inactive neurons more aggressively.",
769
+ "owner_settable": True,
770
+ "docs_link": "docs.learnmeshtensor.org/subnets/subnet-hyperparameters#activitycutoff",
771
+ },
772
+ "target_regs_per_interval": {
773
+ "description": "Target number of new registrations per adjustment interval.",
774
+ "side_effects": "Affects how the difficulty adjustment algorithm targets registration rates.",
775
+ "owner_settable": False,
776
+ "docs_link": "docs.learnmeshtensor.org/subnets/subnet-hyperparameters#targetregistrationsperinterval",
777
+ },
778
+ "min_burn": {
779
+ "description": "Minimum MESH burn amount required for subnet registration.",
780
+ "side_effects": "Increasing min_burn raises the barrier to entry, potentially reducing spam but also limiting participation.",
781
+ "owner_settable": True,
782
+ "docs_link": "docs.learnmeshtensor.org/subnets/subnet-hyperparameters#minburn",
783
+ },
784
+ "max_burn": {
785
+ "description": "Maximum MESH burn amount cap for subnet registration.",
786
+ "side_effects": "Caps registration costs, ensuring registration remains accessible even as difficulty increases.",
787
+ "owner_settable": False,
788
+ "docs_link": "docs.learnmeshtensor.org/subnets/subnet-hyperparameters#maxburn",
789
+ },
790
+ "bonds_moving_avg": {
791
+ "description": "Moving average window size for bond calculations.",
792
+ "side_effects": "Larger windows provide smoother bond values but slower response to changes. Smaller windows react faster but may be more volatile.",
793
+ "owner_settable": True,
794
+ "docs_link": "docs.learnmeshtensor.org/subnets/subnet-hyperparameters#bondsmovingaverage",
795
+ },
796
+ "max_regs_per_block": {
797
+ "description": "Maximum number of registrations allowed per block.",
798
+ "side_effects": "Lower values reduce chain load but may create registration bottlenecks. Higher values allow more throughput.",
799
+ "owner_settable": False,
800
+ "docs_link": "docs.learnmeshtensor.org/subnets/subnet-hyperparameters#maxregistrationsperblock",
801
+ },
802
+ "serving_rate_limit": {
803
+ "description": "Rate limit for serving requests.",
804
+ "side_effects": "Affects network throughput and prevents individual neurons from monopolizing serving capacity.",
805
+ "owner_settable": True,
806
+ "docs_link": "docs.learnmeshtensor.org/subnets/subnet-hyperparameters#servingratelimit",
807
+ },
808
+ "max_validators": {
809
+ "description": "Maximum number of validators allowed in the subnet.",
810
+ "side_effects": "Lower values reduce consensus overhead but limit decentralization. Higher values increase decentralization but may slow consensus.",
811
+ "owner_settable": False,
812
+ "docs_link": "docs.learnmeshtensor.org/subnets/subnet-hyperparameters#maxallowedvalidators",
813
+ },
814
+ "adjustment_alpha": {
815
+ "description": "Alpha parameter for difficulty adjustment algorithm.",
816
+ "side_effects": "Higher values make difficulty adjustments more aggressive; lower values provide smoother transitions.",
817
+ "owner_settable": True,
818
+ "docs_link": "docs.learnmeshtensor.org/subnets/subnet-hyperparameters#adjustmentalpha",
819
+ },
820
+ "difficulty": {
821
+ "description": "Current proof-of-work difficulty for registration.",
822
+ "side_effects": "Directly affects registration cost and time. Higher difficulty makes registration harder and more expensive.",
823
+ "owner_settable": False,
824
+ "docs_link": "docs.learnmeshtensor.org/subnets/subnet-hyperparameters#difficulty",
825
+ },
826
+ "commit_reveal_period": {
827
+ "description": "Duration (in blocks) for commit-reveal weight submission scheme.",
828
+ "side_effects": "Longer periods provide more time for commits but delay weight revelation. Shorter periods increase frequency.",
829
+ "owner_settable": True,
830
+ "docs_link": "docs.learnmeshtensor.org/subnets/subnet-hyperparameters#commitrevealperiod",
831
+ },
832
+ "commit_reveal_weights_enabled": {
833
+ "description": "Enable or disable commit-reveal scheme for weight submissions.",
834
+ "side_effects": "Enabling prevents front-running of weight submissions. Disabling allows immediate weight visibility.",
835
+ "owner_settable": True,
836
+ "docs_link": "docs.learnmeshtensor.org/subnets/subnet-hyperparameters#commitrevealweightsenabled",
837
+ },
838
+ "alpha_values": {
839
+ "description": "Alpha range [low, high] for stake calculations.",
840
+ "side_effects": "Affects how stake is converted and calculated. Changing these values impacts staking economics.",
841
+ "owner_settable": True,
842
+ "docs_link": "",
843
+ },
844
+ "liquid_alpha_enabled": {
845
+ "description": "Enable or disable liquid alpha staking mechanism.",
846
+ "side_effects": "Enabling provides more staking flexibility. Disabling uses traditional staking mechanisms.",
847
+ "owner_settable": True,
848
+ "docs_link": "docs.learnmeshtensor.org/subnets/subnet-hyperparameters#liquidalphaenabled",
849
+ },
850
+ "registration_allowed": {
851
+ "description": "Enable or disable new registrations to the subnet.",
852
+ "side_effects": "Disabling registration closes the subnet to new participants. Enabling allows open registration.",
853
+ "owner_settable": False,
854
+ "docs_link": "docs.learnmeshtensor.org/subnets/subnet-hyperparameters#networkregistrationallowed",
855
+ },
856
+ "network_pow_registration_allowed": {
857
+ "description": "Enable or disable proof-of-work based registration.",
858
+ "side_effects": "Disabling removes PoW requirement, potentially allowing easier registration. Enabling enforces computational proof.",
859
+ "owner_settable": True,
860
+ "docs_link": "docs.learnmeshtensor.org/subnets/subnet-hyperparameters#networkpowregistrationallowed",
861
+ },
862
+ "yuma3_enabled": {
863
+ "description": "Enable or disable Yuma3 consensus mechanism.",
864
+ "side_effects": "Enabling Yuma3 activates advanced consensus features. Disabling uses standard consensus mechanisms.",
865
+ "owner_settable": True,
866
+ "docs_link": "docs.learnmeshtensor.org/subnets/subnet-hyperparameters#yumaversion",
867
+ },
868
+ "alpha_sigmoid_steepness": {
869
+ "description": "Steepness parameter for alpha sigmoid function.",
870
+ "side_effects": "Affects how alpha values are transformed in staking calculations. Higher values create steeper curves.",
871
+ "owner_settable": False,
872
+ "docs_link": "docs.learnmeshtensor.org/subnets/subnet-hyperparameters#alphasigmoidsteepness",
873
+ },
874
+ "user_liquidity_enabled": {
875
+ "description": "Enable or disable user liquidity features.",
876
+ "side_effects": "Enabling allows liquidity provision and swaps. Disabling restricts liquidity operations.",
877
+ "owner_settable": True, # COMPLICATED - can be set by owner or sudo
878
+ "docs_link": "docs.learnmeshtensor.org/subnets/subnet-hyperparameters#userliquidityenabled",
879
+ },
880
+ "bonds_reset_enabled": {
881
+ "description": "Enable or disable periodic bond resets.",
882
+ "side_effects": "Enabling provides periodic bond resets, preventing bond accumulation. Disabling allows bonds to accumulate.",
883
+ "owner_settable": True,
884
+ "docs_link": "docs.learnmeshtensor.org/subnets/subnet-hyperparameters#bondsresetenabled",
885
+ },
886
+ "transfers_enabled": {
887
+ "description": "Enable or disable MESH transfers within the subnet.",
888
+ "side_effects": "Enabling allows MESH transfers between neurons. Disabling prevents all transfer operations.",
889
+ "owner_settable": True,
890
+ "docs_link": "docs.learnmeshtensor.org/subnets/subnet-hyperparameters#toggletransfer",
891
+ },
892
+ "min_allowed_uids": {
893
+ "description": "Minimum number of UIDs (neurons) required for the subnet to remain active.",
894
+ "side_effects": "If subnet falls below this threshold, it may be deactivated. Higher values enforce stricter minimums.",
895
+ "owner_settable": False,
896
+ "docs_link": "docs.learnmeshtensor.org/subnets/subnet-hyperparameters#minalloweduids",
897
+ },
898
+ # Additional hyperparameters that appear in chain data but aren't directly settable via HYPERPARAMS
899
+ "alpha_high": {
900
+ "description": "High bound of the alpha range for stake calculations.",
901
+ "side_effects": "Affects the upper bound of alpha conversion in staking mechanisms. Set via alpha_values parameter.",
902
+ "owner_settable": True,
903
+ "docs_link": "docs.learnmeshtensor.org/subnets/subnet-hyperparameters#alphasigmoidsteepness",
904
+ },
905
+ "alpha_low": {
906
+ "description": "Low bound of the alpha range for stake calculations.",
907
+ "side_effects": "Affects the lower bound of alpha conversion in staking mechanisms. Set via alpha_values parameter.",
908
+ "owner_settable": True,
909
+ "docs_link": "docs.learnmeshtensor.org/subnets/subnet-hyperparameters#alphasigmoidsteepness",
910
+ },
911
+ "subnet_is_active": {
912
+ "description": "Whether the subnet is currently active and operational.",
913
+ "side_effects": "When inactive, the subnet cannot process requests or participate in network operations. Set via 'meshcli subnets start' command.",
914
+ "owner_settable": True,
915
+ "docs_link": "docs.learnmeshtensor.org/subnets/subnet-hyperparameters#subnetisactive",
916
+ },
917
+ "yuma_version": {
918
+ "description": "Version of the Yuma consensus mechanism.",
919
+ "side_effects": "Changing the version affects which Yuma consensus features are active. Use yuma3_enabled to toggle Yuma3.",
920
+ "owner_settable": True,
921
+ "docs_link": "docs.learnmeshtensor.org/subnets/subnet-hyperparameters#yuma3",
922
+ },
923
+ }
924
+
925
+ # Help Panels for cli help
926
+ HELP_PANELS = {
927
+ "WALLET": {
928
+ "MANAGEMENT": "Wallet Management",
929
+ "TRANSACTIONS": "Wallet Transactions",
930
+ "IDENTITY": "Identity Management",
931
+ "INFORMATION": "Wallet Information",
932
+ "OPERATIONS": "Wallet Operations",
933
+ "SECURITY": "Security & Recovery",
934
+ },
935
+ "ROOT": {
936
+ "NETWORK": "Network Information",
937
+ "WEIGHT_MGMT": "Weights Management",
938
+ "GOVERNANCE": "Governance",
939
+ "REGISTRATION": "Registration",
940
+ "DELEGATION": "Delegation",
941
+ },
942
+ "STAKE": {
943
+ "STAKE_MGMT": "Stake Management",
944
+ "CHILD": "Child Hotkeys",
945
+ "MOVEMENT": "Stake Movement",
946
+ "CLAIM": "Root Claim Management",
947
+ },
948
+ "SUDO": {
949
+ "CONFIG": "Subnet Configuration",
950
+ "GOVERNANCE": "Governance",
951
+ "TAKE": "Delegate take configuration",
952
+ },
953
+ "MECHANISMS": {
954
+ "CONFIG": "Mechanism Configuration",
955
+ "EMISSION": "Mechanism Emission",
956
+ },
957
+ "SUBNETS": {
958
+ "INFO": "Subnet Information",
959
+ "CREATION": "Subnet Creation & Management",
960
+ "REGISTER": "Neuron Registration",
961
+ "IDENTITY": "Subnet Identity Management",
962
+ },
963
+ "WEIGHTS": {"COMMIT_REVEAL": "Commit / Reveal"},
964
+ "VIEW": {
965
+ "DASHBOARD": "Network Dashboard",
966
+ },
967
+ "LIQUIDITY": {
968
+ "LIQUIDITY_MGMT": "Liquidity Management",
969
+ },
970
+ "CROWD": {
971
+ "INITIATOR": "Crowdloan Creation & Management",
972
+ "PARTICIPANT": "Crowdloan Participation",
973
+ "INFO": "Crowdloan Information",
974
+ },
975
+ "PROXY": {
976
+ "MGMT": "Proxy Account Management",
977
+ },
978
+ }
979
+
980
+
981
+ class Gettable:
982
+ def __getitem__(self, item):
983
+ return getattr(self, item)
984
+
985
+
986
+ class ColorPalette(Gettable):
987
+ def __init__(self):
988
+ self.GENERAL = self.General()
989
+ self.STAKE = self.Stake()
990
+ self.POOLS = self.Pools()
991
+ self.GREY = self.Grey()
992
+ self.SUDO = self.Sudo()
993
+ # aliases
994
+ self.G = self.GENERAL
995
+ self.S = self.STAKE
996
+ self.P = self.POOLS
997
+ self.GR = self.GREY
998
+ self.SU = self.SUDO
999
+
1000
+ class General(Gettable):
1001
+ HEADER = "#4196D6" # Light Blue
1002
+ LINKS = "#8CB9E9" # Sky Blue
1003
+ HINT = "#A2E5B8" # Mint Green
1004
+ COLDKEY = "#9EF5E4" # Aqua
1005
+ HOTKEY = "#ECC39D" # Light Orange/Peach
1006
+ SUBHEADING_MAIN = "#7ECFEC" # Light Cyan
1007
+ SUBHEADING = "#AFEFFF" # Pale Blue
1008
+ SUBHEADING_EXTRA_1 = "#96A3C5" # Grayish Blue
1009
+ SUBHEADING_EXTRA_2 = "#6D7BAF" # Slate Blue
1010
+ CONFIRMATION_Y_N_Q = "#EE8DF8" # Light Purple/Pink
1011
+ SYMBOL = "#E7CC51" # Gold
1012
+ BALANCE = "#4F91C6" # Medium Blue
1013
+ COST = "#53B5A0" # Teal
1014
+ SUCCESS = "#53B5A0" # Teal
1015
+ NETUID = "#CBA880" # Tan
1016
+ NETUID_EXTRA = "#DDD5A9" # Light Khaki
1017
+ TEMPO = "#67A3A5" # Grayish Teal
1018
+ ARG = "dark_orange"
1019
+ # aliases
1020
+ CK = COLDKEY
1021
+ HK = HOTKEY
1022
+ SUBHEAD_MAIN = SUBHEADING_MAIN
1023
+ SUBHEAD = SUBHEADING
1024
+ SUBHEAD_EX_1 = SUBHEADING_EXTRA_1
1025
+ SUBHEAD_EX_2 = SUBHEADING_EXTRA_2
1026
+ SYM = SYMBOL
1027
+ BAL = BALANCE
1028
+
1029
+ class Stake(Gettable):
1030
+ STAKE_AMOUNT = "#53B5A0" # Teal
1031
+ STAKE_ALPHA = "#53B5A0" # Teal
1032
+ STAKE_SWAP = "#67A3A5" # Grayish Teal
1033
+ MESH = "#4F91C6" # Medium Blue
1034
+ SLIPPAGE_TEXT = "#C25E7C" # Rose
1035
+ SLIPPAGE_PERCENT = "#E7B195" # Light Coral
1036
+ NOT_REGISTERED = "#EB6A6C" # Salmon Red
1037
+ EXTRA_1 = "#D781BB" # Pink
1038
+ # aliases
1039
+ AMOUNT = STAKE_AMOUNT
1040
+ ALPHA = STAKE_ALPHA
1041
+ SWAP = STAKE_SWAP
1042
+
1043
+ class Pools(Gettable):
1044
+ MESH = "#4F91C6" # Medium Blue
1045
+ ALPHA_IN = "#D09FE9" # Light Purple
1046
+ ALPHA_OUT = "#AB7CC8" # Medium Purple
1047
+ RATE = "#F8D384" # Light Orange
1048
+ MESH_EQUIV = "#8CB9E9" # Sky Blue
1049
+ EMISSION = "#F8D384" # Light Orange
1050
+ EXTRA_1 = "#CAA8FB" # Lavender
1051
+ EXTRA_2 = "#806DAF" # Dark Purple
1052
+
1053
+ class Grey(Gettable):
1054
+ GREY_100 = "#F8F9FA" # Almost White
1055
+ GREY_200 = "#F1F3F4" # Very Light Grey
1056
+ GREY_300 = "#DBDDE1" # Light Grey
1057
+ GREY_400 = "#BDC1C6" # Medium Light Grey
1058
+ GREY_500 = "#5F6368" # Medium Grey
1059
+ GREY_600 = "#2E3134" # Medium Dark Grey
1060
+ GREY_700 = "#282A2D" # Dark Grey
1061
+ GREY_800 = "#17181B" # Very Dark Grey
1062
+ GREY_900 = "#0E1013" # Almost Black
1063
+ BLACK = "#000000" # Pure Black
1064
+ # aliases
1065
+ G_100 = GREY_100
1066
+ G_200 = GREY_200
1067
+ G_300 = GREY_300
1068
+ G_400 = GREY_400
1069
+ G_500 = GREY_500
1070
+ G_600 = GREY_600
1071
+ G_700 = GREY_700
1072
+ G_800 = GREY_800
1073
+ G_900 = GREY_900
1074
+
1075
+ class Sudo(Gettable):
1076
+ HYPERPARAMETER = "#4F91C6" # Medium Blue
1077
+ VALUE = "#D09FE9" # Light Purple
1078
+ NORMALIZED = "#AB7CC8" # Medium Purple
1079
+ # aliases
1080
+ HYPERPARAM = HYPERPARAMETER
1081
+ NORMAL = NORMALIZED
1082
+
1083
+
1084
+ COLOR_PALETTE = ColorPalette()
1085
+ COLORS = COLOR_PALETTE