brk-client 0.1.0a6__py3-none-any.whl → 0.1.0b0__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.
brk_client/__init__.py CHANGED
@@ -1,6 +1,8 @@
1
1
  # Auto-generated BRK Python client
2
2
  # Do not edit manually
3
3
 
4
+ from __future__ import annotations
5
+ from dataclasses import dataclass
4
6
  from typing import TypeVar, Generic, Any, Optional, List, Literal, TypedDict, Union, Protocol, overload
5
7
  from http.client import HTTPSConnection, HTTPConnection
6
8
  from urllib.parse import urlparse
@@ -106,13 +108,13 @@ QuarterIndex = int
106
108
  # Transaction locktime
107
109
  RawLockTime = int
108
110
  SemesterIndex = int
109
- # Fixed-size boolean value optimized for on-disk storage (stored as u16)
111
+ # Fixed-size boolean value optimized for on-disk storage (stored as u8)
110
112
  StoredBool = int
111
113
  # Stored 32-bit floating point value
112
114
  StoredF32 = float
113
115
  # Fixed-size 64-bit floating point value optimized for on-disk storage
114
116
  StoredF64 = float
115
- StoredI16 = int
117
+ StoredI8 = int
116
118
  StoredU16 = int
117
119
  # Fixed-size 32-bit unsigned integer optimized for on-disk storage
118
120
  StoredU32 = int
@@ -1039,11 +1041,14 @@ def _p(prefix: str, acc: str) -> str:
1039
1041
  return f"{prefix}_{acc}" if acc else prefix
1040
1042
 
1041
1043
 
1042
- class MetricData(TypedDict, Generic[T]):
1044
+ @dataclass
1045
+ class MetricData(Generic[T]):
1043
1046
  """Metric data with range information."""
1047
+ version: int
1044
1048
  total: int
1045
1049
  start: int
1046
1050
  end: int
1051
+ stamp: str
1047
1052
  data: List[T]
1048
1053
 
1049
1054
 
@@ -1082,8 +1087,9 @@ class _EndpointConfig:
1082
1087
  p = self.path()
1083
1088
  return f"{p}?{query}" if query else p
1084
1089
 
1085
- def get_json(self) -> Any:
1086
- return self.client.get_json(self._build_path())
1090
+ def get_json(self) -> MetricData:
1091
+ data = self.client.get_json(self._build_path())
1092
+ return MetricData(**data)
1087
1093
 
1088
1094
  def get_csv(self) -> str:
1089
1095
  return self.client.get_text(self._build_path(format='csv'))
@@ -1286,7 +1292,7 @@ _i31 = ('loadedaddressindex',)
1286
1292
  _i32 = ('emptyaddressindex',)
1287
1293
  _i33 = ('pairoutputindex',)
1288
1294
 
1289
- def _ep(c: BrkClientBase, n: str, i: Index) -> MetricEndpointBuilder:
1295
+ def _ep(c: BrkClientBase, n: str, i: Index) -> MetricEndpointBuilder[Any]:
1290
1296
  return MetricEndpointBuilder(c, n, i)
1291
1297
 
1292
1298
  # Index accessor classes
@@ -1304,6 +1310,7 @@ class _MetricPattern1By(Generic[T]):
1304
1310
  def yearindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'yearindex')
1305
1311
 
1306
1312
  class MetricPattern1(Generic[T]):
1313
+ by: _MetricPattern1By[T]
1307
1314
  def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern1By(c, n)
1308
1315
  @property
1309
1316
  def name(self) -> str: return self._n
@@ -1322,6 +1329,7 @@ class _MetricPattern2By(Generic[T]):
1322
1329
  def yearindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'yearindex')
1323
1330
 
1324
1331
  class MetricPattern2(Generic[T]):
1332
+ by: _MetricPattern2By[T]
1325
1333
  def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern2By(c, n)
1326
1334
  @property
1327
1335
  def name(self) -> str: return self._n
@@ -1340,6 +1348,7 @@ class _MetricPattern3By(Generic[T]):
1340
1348
  def yearindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'yearindex')
1341
1349
 
1342
1350
  class MetricPattern3(Generic[T]):
1351
+ by: _MetricPattern3By[T]
1343
1352
  def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern3By(c, n)
1344
1353
  @property
1345
1354
  def name(self) -> str: return self._n
@@ -1357,6 +1366,7 @@ class _MetricPattern4By(Generic[T]):
1357
1366
  def yearindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'yearindex')
1358
1367
 
1359
1368
  class MetricPattern4(Generic[T]):
1369
+ by: _MetricPattern4By[T]
1360
1370
  def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern4By(c, n)
1361
1371
  @property
1362
1372
  def name(self) -> str: return self._n
@@ -1369,6 +1379,7 @@ class _MetricPattern5By(Generic[T]):
1369
1379
  def height(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'height')
1370
1380
 
1371
1381
  class MetricPattern5(Generic[T]):
1382
+ by: _MetricPattern5By[T]
1372
1383
  def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern5By(c, n)
1373
1384
  @property
1374
1385
  def name(self) -> str: return self._n
@@ -1380,6 +1391,7 @@ class _MetricPattern6By(Generic[T]):
1380
1391
  def dateindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'dateindex')
1381
1392
 
1382
1393
  class MetricPattern6(Generic[T]):
1394
+ by: _MetricPattern6By[T]
1383
1395
  def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern6By(c, n)
1384
1396
  @property
1385
1397
  def name(self) -> str: return self._n
@@ -1391,6 +1403,7 @@ class _MetricPattern7By(Generic[T]):
1391
1403
  def decadeindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'decadeindex')
1392
1404
 
1393
1405
  class MetricPattern7(Generic[T]):
1406
+ by: _MetricPattern7By[T]
1394
1407
  def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern7By(c, n)
1395
1408
  @property
1396
1409
  def name(self) -> str: return self._n
@@ -1402,6 +1415,7 @@ class _MetricPattern8By(Generic[T]):
1402
1415
  def difficultyepoch(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'difficultyepoch')
1403
1416
 
1404
1417
  class MetricPattern8(Generic[T]):
1418
+ by: _MetricPattern8By[T]
1405
1419
  def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern8By(c, n)
1406
1420
  @property
1407
1421
  def name(self) -> str: return self._n
@@ -1413,6 +1427,7 @@ class _MetricPattern9By(Generic[T]):
1413
1427
  def emptyoutputindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'emptyoutputindex')
1414
1428
 
1415
1429
  class MetricPattern9(Generic[T]):
1430
+ by: _MetricPattern9By[T]
1416
1431
  def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern9By(c, n)
1417
1432
  @property
1418
1433
  def name(self) -> str: return self._n
@@ -1424,6 +1439,7 @@ class _MetricPattern10By(Generic[T]):
1424
1439
  def halvingepoch(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'halvingepoch')
1425
1440
 
1426
1441
  class MetricPattern10(Generic[T]):
1442
+ by: _MetricPattern10By[T]
1427
1443
  def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern10By(c, n)
1428
1444
  @property
1429
1445
  def name(self) -> str: return self._n
@@ -1435,6 +1451,7 @@ class _MetricPattern11By(Generic[T]):
1435
1451
  def height(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'height')
1436
1452
 
1437
1453
  class MetricPattern11(Generic[T]):
1454
+ by: _MetricPattern11By[T]
1438
1455
  def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern11By(c, n)
1439
1456
  @property
1440
1457
  def name(self) -> str: return self._n
@@ -1446,6 +1463,7 @@ class _MetricPattern12By(Generic[T]):
1446
1463
  def txinindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'txinindex')
1447
1464
 
1448
1465
  class MetricPattern12(Generic[T]):
1466
+ by: _MetricPattern12By[T]
1449
1467
  def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern12By(c, n)
1450
1468
  @property
1451
1469
  def name(self) -> str: return self._n
@@ -1457,6 +1475,7 @@ class _MetricPattern13By(Generic[T]):
1457
1475
  def monthindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'monthindex')
1458
1476
 
1459
1477
  class MetricPattern13(Generic[T]):
1478
+ by: _MetricPattern13By[T]
1460
1479
  def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern13By(c, n)
1461
1480
  @property
1462
1481
  def name(self) -> str: return self._n
@@ -1468,6 +1487,7 @@ class _MetricPattern14By(Generic[T]):
1468
1487
  def opreturnindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'opreturnindex')
1469
1488
 
1470
1489
  class MetricPattern14(Generic[T]):
1490
+ by: _MetricPattern14By[T]
1471
1491
  def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern14By(c, n)
1472
1492
  @property
1473
1493
  def name(self) -> str: return self._n
@@ -1479,6 +1499,7 @@ class _MetricPattern15By(Generic[T]):
1479
1499
  def txoutindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'txoutindex')
1480
1500
 
1481
1501
  class MetricPattern15(Generic[T]):
1502
+ by: _MetricPattern15By[T]
1482
1503
  def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern15By(c, n)
1483
1504
  @property
1484
1505
  def name(self) -> str: return self._n
@@ -1490,6 +1511,7 @@ class _MetricPattern16By(Generic[T]):
1490
1511
  def p2aaddressindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'p2aaddressindex')
1491
1512
 
1492
1513
  class MetricPattern16(Generic[T]):
1514
+ by: _MetricPattern16By[T]
1493
1515
  def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern16By(c, n)
1494
1516
  @property
1495
1517
  def name(self) -> str: return self._n
@@ -1501,6 +1523,7 @@ class _MetricPattern17By(Generic[T]):
1501
1523
  def p2msoutputindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'p2msoutputindex')
1502
1524
 
1503
1525
  class MetricPattern17(Generic[T]):
1526
+ by: _MetricPattern17By[T]
1504
1527
  def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern17By(c, n)
1505
1528
  @property
1506
1529
  def name(self) -> str: return self._n
@@ -1512,6 +1535,7 @@ class _MetricPattern18By(Generic[T]):
1512
1535
  def p2pk33addressindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'p2pk33addressindex')
1513
1536
 
1514
1537
  class MetricPattern18(Generic[T]):
1538
+ by: _MetricPattern18By[T]
1515
1539
  def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern18By(c, n)
1516
1540
  @property
1517
1541
  def name(self) -> str: return self._n
@@ -1523,6 +1547,7 @@ class _MetricPattern19By(Generic[T]):
1523
1547
  def p2pk65addressindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'p2pk65addressindex')
1524
1548
 
1525
1549
  class MetricPattern19(Generic[T]):
1550
+ by: _MetricPattern19By[T]
1526
1551
  def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern19By(c, n)
1527
1552
  @property
1528
1553
  def name(self) -> str: return self._n
@@ -1534,6 +1559,7 @@ class _MetricPattern20By(Generic[T]):
1534
1559
  def p2pkhaddressindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'p2pkhaddressindex')
1535
1560
 
1536
1561
  class MetricPattern20(Generic[T]):
1562
+ by: _MetricPattern20By[T]
1537
1563
  def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern20By(c, n)
1538
1564
  @property
1539
1565
  def name(self) -> str: return self._n
@@ -1545,6 +1571,7 @@ class _MetricPattern21By(Generic[T]):
1545
1571
  def p2shaddressindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'p2shaddressindex')
1546
1572
 
1547
1573
  class MetricPattern21(Generic[T]):
1574
+ by: _MetricPattern21By[T]
1548
1575
  def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern21By(c, n)
1549
1576
  @property
1550
1577
  def name(self) -> str: return self._n
@@ -1556,6 +1583,7 @@ class _MetricPattern22By(Generic[T]):
1556
1583
  def p2traddressindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'p2traddressindex')
1557
1584
 
1558
1585
  class MetricPattern22(Generic[T]):
1586
+ by: _MetricPattern22By[T]
1559
1587
  def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern22By(c, n)
1560
1588
  @property
1561
1589
  def name(self) -> str: return self._n
@@ -1567,6 +1595,7 @@ class _MetricPattern23By(Generic[T]):
1567
1595
  def p2wpkhaddressindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'p2wpkhaddressindex')
1568
1596
 
1569
1597
  class MetricPattern23(Generic[T]):
1598
+ by: _MetricPattern23By[T]
1570
1599
  def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern23By(c, n)
1571
1600
  @property
1572
1601
  def name(self) -> str: return self._n
@@ -1578,6 +1607,7 @@ class _MetricPattern24By(Generic[T]):
1578
1607
  def p2wshaddressindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'p2wshaddressindex')
1579
1608
 
1580
1609
  class MetricPattern24(Generic[T]):
1610
+ by: _MetricPattern24By[T]
1581
1611
  def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern24By(c, n)
1582
1612
  @property
1583
1613
  def name(self) -> str: return self._n
@@ -1589,6 +1619,7 @@ class _MetricPattern25By(Generic[T]):
1589
1619
  def quarterindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'quarterindex')
1590
1620
 
1591
1621
  class MetricPattern25(Generic[T]):
1622
+ by: _MetricPattern25By[T]
1592
1623
  def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern25By(c, n)
1593
1624
  @property
1594
1625
  def name(self) -> str: return self._n
@@ -1600,6 +1631,7 @@ class _MetricPattern26By(Generic[T]):
1600
1631
  def semesterindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'semesterindex')
1601
1632
 
1602
1633
  class MetricPattern26(Generic[T]):
1634
+ by: _MetricPattern26By[T]
1603
1635
  def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern26By(c, n)
1604
1636
  @property
1605
1637
  def name(self) -> str: return self._n
@@ -1611,6 +1643,7 @@ class _MetricPattern27By(Generic[T]):
1611
1643
  def txindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'txindex')
1612
1644
 
1613
1645
  class MetricPattern27(Generic[T]):
1646
+ by: _MetricPattern27By[T]
1614
1647
  def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern27By(c, n)
1615
1648
  @property
1616
1649
  def name(self) -> str: return self._n
@@ -1622,6 +1655,7 @@ class _MetricPattern28By(Generic[T]):
1622
1655
  def unknownoutputindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'unknownoutputindex')
1623
1656
 
1624
1657
  class MetricPattern28(Generic[T]):
1658
+ by: _MetricPattern28By[T]
1625
1659
  def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern28By(c, n)
1626
1660
  @property
1627
1661
  def name(self) -> str: return self._n
@@ -1633,6 +1667,7 @@ class _MetricPattern29By(Generic[T]):
1633
1667
  def weekindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'weekindex')
1634
1668
 
1635
1669
  class MetricPattern29(Generic[T]):
1670
+ by: _MetricPattern29By[T]
1636
1671
  def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern29By(c, n)
1637
1672
  @property
1638
1673
  def name(self) -> str: return self._n
@@ -1644,6 +1679,7 @@ class _MetricPattern30By(Generic[T]):
1644
1679
  def yearindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'yearindex')
1645
1680
 
1646
1681
  class MetricPattern30(Generic[T]):
1682
+ by: _MetricPattern30By[T]
1647
1683
  def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern30By(c, n)
1648
1684
  @property
1649
1685
  def name(self) -> str: return self._n
@@ -1655,6 +1691,7 @@ class _MetricPattern31By(Generic[T]):
1655
1691
  def loadedaddressindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'loadedaddressindex')
1656
1692
 
1657
1693
  class MetricPattern31(Generic[T]):
1694
+ by: _MetricPattern31By[T]
1658
1695
  def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern31By(c, n)
1659
1696
  @property
1660
1697
  def name(self) -> str: return self._n
@@ -1666,6 +1703,7 @@ class _MetricPattern32By(Generic[T]):
1666
1703
  def emptyaddressindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'emptyaddressindex')
1667
1704
 
1668
1705
  class MetricPattern32(Generic[T]):
1706
+ by: _MetricPattern32By[T]
1669
1707
  def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern32By(c, n)
1670
1708
  @property
1671
1709
  def name(self) -> str: return self._n
@@ -1677,6 +1715,7 @@ class _MetricPattern33By(Generic[T]):
1677
1715
  def pairoutputindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'pairoutputindex')
1678
1716
 
1679
1717
  class MetricPattern33(Generic[T]):
1718
+ by: _MetricPattern33By[T]
1680
1719
  def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern33By(c, n)
1681
1720
  @property
1682
1721
  def name(self) -> str: return self._n
@@ -1883,31 +1922,6 @@ class Price111dSmaPattern:
1883
1922
  self.ratio_pct99_usd: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'ratio_pct99_usd'))
1884
1923
  self.ratio_sd: Ratio1ySdPattern = Ratio1ySdPattern(client, _m(acc, 'ratio'))
1885
1924
 
1886
- class PercentilesPattern:
1887
- """Pattern struct for repeated tree structure."""
1888
-
1889
- def __init__(self, client: BrkClientBase, acc: str):
1890
- """Create pattern node with accumulated metric name."""
1891
- self.pct05: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct05'))
1892
- self.pct10: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct10'))
1893
- self.pct15: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct15'))
1894
- self.pct20: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct20'))
1895
- self.pct25: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct25'))
1896
- self.pct30: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct30'))
1897
- self.pct35: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct35'))
1898
- self.pct40: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct40'))
1899
- self.pct45: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct45'))
1900
- self.pct50: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct50'))
1901
- self.pct55: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct55'))
1902
- self.pct60: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct60'))
1903
- self.pct65: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct65'))
1904
- self.pct70: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct70'))
1905
- self.pct75: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct75'))
1906
- self.pct80: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct80'))
1907
- self.pct85: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct85'))
1908
- self.pct90: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct90'))
1909
- self.pct95: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct95'))
1910
-
1911
1925
  class ActivePriceRatioPattern:
1912
1926
  """Pattern struct for repeated tree structure."""
1913
1927
 
@@ -1933,6 +1947,31 @@ class ActivePriceRatioPattern:
1933
1947
  self.ratio_pct99_usd: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct99_usd'))
1934
1948
  self.ratio_sd: Ratio1ySdPattern = Ratio1ySdPattern(client, acc)
1935
1949
 
1950
+ class PercentilesPattern:
1951
+ """Pattern struct for repeated tree structure."""
1952
+
1953
+ def __init__(self, client: BrkClientBase, acc: str):
1954
+ """Create pattern node with accumulated metric name."""
1955
+ self.pct05: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct05'))
1956
+ self.pct10: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct10'))
1957
+ self.pct15: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct15'))
1958
+ self.pct20: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct20'))
1959
+ self.pct25: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct25'))
1960
+ self.pct30: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct30'))
1961
+ self.pct35: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct35'))
1962
+ self.pct40: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct40'))
1963
+ self.pct45: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct45'))
1964
+ self.pct50: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct50'))
1965
+ self.pct55: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct55'))
1966
+ self.pct60: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct60'))
1967
+ self.pct65: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct65'))
1968
+ self.pct70: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct70'))
1969
+ self.pct75: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct75'))
1970
+ self.pct80: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct80'))
1971
+ self.pct85: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct85'))
1972
+ self.pct90: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct90'))
1973
+ self.pct95: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct95'))
1974
+
1936
1975
  class RelativePattern5:
1937
1976
  """Pattern struct for repeated tree structure."""
1938
1977
 
@@ -1971,6 +2010,7 @@ class AaopoolPattern:
1971
2010
  self._24h_blocks_mined: MetricPattern1[StoredU32] = MetricPattern1(client, _m(acc, '24h_blocks_mined'))
1972
2011
  self._24h_dominance: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, '24h_dominance'))
1973
2012
  self.blocks_mined: BlockCountPattern[StoredU32] = BlockCountPattern(client, _m(acc, 'blocks_mined'))
2013
+ self.blocks_since_block: MetricPattern1[StoredU32] = MetricPattern1(client, _m(acc, 'blocks_since_block'))
1974
2014
  self.coinbase: CoinbasePattern2 = CoinbasePattern2(client, _m(acc, 'coinbase'))
1975
2015
  self.days_since_block: MetricPattern4[StoredU16] = MetricPattern4(client, _m(acc, 'days_since_block'))
1976
2016
  self.dominance: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'dominance'))
@@ -2032,6 +2072,24 @@ class PeriodAveragePricePattern(Generic[T]):
2032
2072
  self._6y: MetricPattern4[T] = MetricPattern4(client, _p('6y', acc))
2033
2073
  self._8y: MetricPattern4[T] = MetricPattern4(client, _p('8y', acc))
2034
2074
 
2075
+ class ClassAveragePricePattern(Generic[T]):
2076
+ """Pattern struct for repeated tree structure."""
2077
+
2078
+ def __init__(self, client: BrkClientBase, acc: str):
2079
+ """Create pattern node with accumulated metric name."""
2080
+ self._2015: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2015_average_price'))
2081
+ self._2016: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2016_average_price'))
2082
+ self._2017: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2017_average_price'))
2083
+ self._2018: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2018_average_price'))
2084
+ self._2019: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2019_average_price'))
2085
+ self._2020: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2020_average_price'))
2086
+ self._2021: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2021_average_price'))
2087
+ self._2022: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2022_average_price'))
2088
+ self._2023: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2023_average_price'))
2089
+ self._2024: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2024_average_price'))
2090
+ self._2025: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2025_average_price'))
2091
+ self._2026: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2026_average_price'))
2092
+
2035
2093
  class BitcoinPattern:
2036
2094
  """Pattern struct for repeated tree structure."""
2037
2095
 
@@ -2066,22 +2124,21 @@ class DollarsPattern(Generic[T]):
2066
2124
  self.pct90: MetricPattern6[T] = MetricPattern6(client, _m(acc, 'pct90'))
2067
2125
  self.sum: MetricPattern2[T] = MetricPattern2(client, _m(acc, 'sum'))
2068
2126
 
2069
- class ClassAveragePricePattern(Generic[T]):
2127
+ class RelativePattern2:
2070
2128
  """Pattern struct for repeated tree structure."""
2071
2129
 
2072
2130
  def __init__(self, client: BrkClientBase, acc: str):
2073
2131
  """Create pattern node with accumulated metric name."""
2074
- self._2015: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2015_returns'))
2075
- self._2016: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2016_returns'))
2076
- self._2017: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2017_returns'))
2077
- self._2018: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2018_returns'))
2078
- self._2019: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2019_returns'))
2079
- self._2020: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2020_returns'))
2080
- self._2021: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2021_returns'))
2081
- self._2022: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2022_returns'))
2082
- self._2023: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2023_returns'))
2083
- self._2024: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2024_returns'))
2084
- self._2025: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2025_returns'))
2132
+ self.neg_unrealized_loss_rel_to_own_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'neg_unrealized_loss_rel_to_own_market_cap'))
2133
+ self.neg_unrealized_loss_rel_to_own_total_unrealized_pnl: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'neg_unrealized_loss_rel_to_own_total_unrealized_pnl'))
2134
+ self.net_unrealized_pnl_rel_to_own_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'net_unrealized_pnl_rel_to_own_market_cap'))
2135
+ self.net_unrealized_pnl_rel_to_own_total_unrealized_pnl: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'net_unrealized_pnl_rel_to_own_total_unrealized_pnl'))
2136
+ self.supply_in_loss_rel_to_own_supply: MetricPattern1[StoredF64] = MetricPattern1(client, _m(acc, 'supply_in_loss_rel_to_own_supply'))
2137
+ self.supply_in_profit_rel_to_own_supply: MetricPattern1[StoredF64] = MetricPattern1(client, _m(acc, 'supply_in_profit_rel_to_own_supply'))
2138
+ self.unrealized_loss_rel_to_own_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_loss_rel_to_own_market_cap'))
2139
+ self.unrealized_loss_rel_to_own_total_unrealized_pnl: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_loss_rel_to_own_total_unrealized_pnl'))
2140
+ self.unrealized_profit_rel_to_own_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_profit_rel_to_own_market_cap'))
2141
+ self.unrealized_profit_rel_to_own_total_unrealized_pnl: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_profit_rel_to_own_total_unrealized_pnl'))
2085
2142
 
2086
2143
  class RelativePattern:
2087
2144
  """Pattern struct for repeated tree structure."""
@@ -2099,22 +2156,6 @@ class RelativePattern:
2099
2156
  self.unrealized_loss_rel_to_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_loss_rel_to_market_cap'))
2100
2157
  self.unrealized_profit_rel_to_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_profit_rel_to_market_cap'))
2101
2158
 
2102
- class RelativePattern2:
2103
- """Pattern struct for repeated tree structure."""
2104
-
2105
- def __init__(self, client: BrkClientBase, acc: str):
2106
- """Create pattern node with accumulated metric name."""
2107
- self.neg_unrealized_loss_rel_to_own_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'neg_unrealized_loss_rel_to_own_market_cap'))
2108
- self.neg_unrealized_loss_rel_to_own_total_unrealized_pnl: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'neg_unrealized_loss_rel_to_own_total_unrealized_pnl'))
2109
- self.net_unrealized_pnl_rel_to_own_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'net_unrealized_pnl_rel_to_own_market_cap'))
2110
- self.net_unrealized_pnl_rel_to_own_total_unrealized_pnl: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'net_unrealized_pnl_rel_to_own_total_unrealized_pnl'))
2111
- self.supply_in_loss_rel_to_own_supply: MetricPattern1[StoredF64] = MetricPattern1(client, _m(acc, 'supply_in_loss_rel_to_own_supply'))
2112
- self.supply_in_profit_rel_to_own_supply: MetricPattern1[StoredF64] = MetricPattern1(client, _m(acc, 'supply_in_profit_rel_to_own_supply'))
2113
- self.unrealized_loss_rel_to_own_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_loss_rel_to_own_market_cap'))
2114
- self.unrealized_loss_rel_to_own_total_unrealized_pnl: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_loss_rel_to_own_total_unrealized_pnl'))
2115
- self.unrealized_profit_rel_to_own_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_profit_rel_to_own_market_cap'))
2116
- self.unrealized_profit_rel_to_own_total_unrealized_pnl: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_profit_rel_to_own_total_unrealized_pnl'))
2117
-
2118
2159
  class CountPattern2(Generic[T]):
2119
2160
  """Pattern struct for repeated tree structure."""
2120
2161
 
@@ -2204,18 +2245,31 @@ class PhaseDailyCentsPattern(Generic[T]):
2204
2245
  self.pct75: MetricPattern6[T] = MetricPattern6(client, _m(acc, 'pct75'))
2205
2246
  self.pct90: MetricPattern6[T] = MetricPattern6(client, _m(acc, 'pct90'))
2206
2247
 
2207
- class PeriodCagrPattern:
2248
+ class _10yTo12yPattern:
2208
2249
  """Pattern struct for repeated tree structure."""
2209
2250
 
2210
2251
  def __init__(self, client: BrkClientBase, acc: str):
2211
2252
  """Create pattern node with accumulated metric name."""
2212
- self._10y: MetricPattern4[StoredF32] = MetricPattern4(client, _p('10y', acc))
2213
- self._2y: MetricPattern4[StoredF32] = MetricPattern4(client, _p('2y', acc))
2214
- self._3y: MetricPattern4[StoredF32] = MetricPattern4(client, _p('3y', acc))
2215
- self._4y: MetricPattern4[StoredF32] = MetricPattern4(client, _p('4y', acc))
2216
- self._5y: MetricPattern4[StoredF32] = MetricPattern4(client, _p('5y', acc))
2217
- self._6y: MetricPattern4[StoredF32] = MetricPattern4(client, _p('6y', acc))
2218
- self._8y: MetricPattern4[StoredF32] = MetricPattern4(client, _p('8y', acc))
2253
+ self.activity: ActivityPattern2 = ActivityPattern2(client, acc)
2254
+ self.cost_basis: CostBasisPattern2 = CostBasisPattern2(client, acc)
2255
+ self.outputs: OutputsPattern = OutputsPattern(client, _m(acc, 'utxo_count'))
2256
+ self.realized: RealizedPattern2 = RealizedPattern2(client, acc)
2257
+ self.relative: RelativePattern2 = RelativePattern2(client, acc)
2258
+ self.supply: SupplyPattern2 = SupplyPattern2(client, _m(acc, 'supply'))
2259
+ self.unrealized: UnrealizedPattern = UnrealizedPattern(client, acc)
2260
+
2261
+ class UnrealizedPattern:
2262
+ """Pattern struct for repeated tree structure."""
2263
+
2264
+ def __init__(self, client: BrkClientBase, acc: str):
2265
+ """Create pattern node with accumulated metric name."""
2266
+ self.neg_unrealized_loss: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'neg_unrealized_loss'))
2267
+ self.net_unrealized_pnl: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'net_unrealized_pnl'))
2268
+ self.supply_in_loss: ActiveSupplyPattern = ActiveSupplyPattern(client, _m(acc, 'supply_in_loss'))
2269
+ self.supply_in_profit: ActiveSupplyPattern = ActiveSupplyPattern(client, _m(acc, 'supply_in_profit'))
2270
+ self.total_unrealized_pnl: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'total_unrealized_pnl'))
2271
+ self.unrealized_loss: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'unrealized_loss'))
2272
+ self.unrealized_profit: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'unrealized_profit'))
2219
2273
 
2220
2274
  class _0satsPattern2:
2221
2275
  """Pattern struct for repeated tree structure."""
@@ -2230,29 +2284,29 @@ class _0satsPattern2:
2230
2284
  self.supply: SupplyPattern2 = SupplyPattern2(client, _m(acc, 'supply'))
2231
2285
  self.unrealized: UnrealizedPattern = UnrealizedPattern(client, acc)
2232
2286
 
2233
- class _10yPattern:
2287
+ class PeriodCagrPattern:
2234
2288
  """Pattern struct for repeated tree structure."""
2235
2289
 
2236
2290
  def __init__(self, client: BrkClientBase, acc: str):
2237
2291
  """Create pattern node with accumulated metric name."""
2238
- self.activity: ActivityPattern2 = ActivityPattern2(client, acc)
2239
- self.cost_basis: CostBasisPattern = CostBasisPattern(client, acc)
2240
- self.outputs: OutputsPattern = OutputsPattern(client, _m(acc, 'utxo_count'))
2241
- self.realized: RealizedPattern4 = RealizedPattern4(client, acc)
2242
- self.relative: RelativePattern = RelativePattern(client, acc)
2243
- self.supply: SupplyPattern2 = SupplyPattern2(client, _m(acc, 'supply'))
2244
- self.unrealized: UnrealizedPattern = UnrealizedPattern(client, acc)
2292
+ self._10y: MetricPattern4[StoredF32] = MetricPattern4(client, _p('10y', acc))
2293
+ self._2y: MetricPattern4[StoredF32] = MetricPattern4(client, _p('2y', acc))
2294
+ self._3y: MetricPattern4[StoredF32] = MetricPattern4(client, _p('3y', acc))
2295
+ self._4y: MetricPattern4[StoredF32] = MetricPattern4(client, _p('4y', acc))
2296
+ self._5y: MetricPattern4[StoredF32] = MetricPattern4(client, _p('5y', acc))
2297
+ self._6y: MetricPattern4[StoredF32] = MetricPattern4(client, _p('6y', acc))
2298
+ self._8y: MetricPattern4[StoredF32] = MetricPattern4(client, _p('8y', acc))
2245
2299
 
2246
- class _10yTo12yPattern:
2300
+ class _10yPattern:
2247
2301
  """Pattern struct for repeated tree structure."""
2248
2302
 
2249
2303
  def __init__(self, client: BrkClientBase, acc: str):
2250
2304
  """Create pattern node with accumulated metric name."""
2251
2305
  self.activity: ActivityPattern2 = ActivityPattern2(client, acc)
2252
- self.cost_basis: CostBasisPattern2 = CostBasisPattern2(client, acc)
2306
+ self.cost_basis: CostBasisPattern = CostBasisPattern(client, acc)
2253
2307
  self.outputs: OutputsPattern = OutputsPattern(client, _m(acc, 'utxo_count'))
2254
- self.realized: RealizedPattern2 = RealizedPattern2(client, acc)
2255
- self.relative: RelativePattern2 = RelativePattern2(client, acc)
2308
+ self.realized: RealizedPattern4 = RealizedPattern4(client, acc)
2309
+ self.relative: RelativePattern = RelativePattern(client, acc)
2256
2310
  self.supply: SupplyPattern2 = SupplyPattern2(client, _m(acc, 'supply'))
2257
2311
  self.unrealized: UnrealizedPattern = UnrealizedPattern(client, acc)
2258
2312
 
@@ -2269,19 +2323,6 @@ class _100btcPattern:
2269
2323
  self.supply: SupplyPattern2 = SupplyPattern2(client, _m(acc, 'supply'))
2270
2324
  self.unrealized: UnrealizedPattern = UnrealizedPattern(client, acc)
2271
2325
 
2272
- class UnrealizedPattern:
2273
- """Pattern struct for repeated tree structure."""
2274
-
2275
- def __init__(self, client: BrkClientBase, acc: str):
2276
- """Create pattern node with accumulated metric name."""
2277
- self.neg_unrealized_loss: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'neg_unrealized_loss'))
2278
- self.net_unrealized_pnl: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'net_unrealized_pnl'))
2279
- self.supply_in_loss: ActiveSupplyPattern = ActiveSupplyPattern(client, _m(acc, 'supply_in_loss'))
2280
- self.supply_in_profit: ActiveSupplyPattern = ActiveSupplyPattern(client, _m(acc, 'supply_in_profit'))
2281
- self.total_unrealized_pnl: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'total_unrealized_pnl'))
2282
- self.unrealized_loss: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'unrealized_loss'))
2283
- self.unrealized_profit: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'unrealized_profit'))
2284
-
2285
2326
  class ActivityPattern2:
2286
2327
  """Pattern struct for repeated tree structure."""
2287
2328
 
@@ -2303,14 +2344,14 @@ class SplitPattern2(Generic[T]):
2303
2344
  self.low: MetricPattern1[T] = MetricPattern1(client, _m(acc, 'low'))
2304
2345
  self.open: MetricPattern1[T] = MetricPattern1(client, _m(acc, 'open'))
2305
2346
 
2306
- class CostBasisPattern2:
2347
+ class UnclaimedRewardsPattern:
2307
2348
  """Pattern struct for repeated tree structure."""
2308
2349
 
2309
2350
  def __init__(self, client: BrkClientBase, acc: str):
2310
2351
  """Create pattern node with accumulated metric name."""
2311
- self.max: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'max_cost_basis'))
2312
- self.min: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'min_cost_basis'))
2313
- self.percentiles: PercentilesPattern = PercentilesPattern(client, _m(acc, 'cost_basis'))
2352
+ self.bitcoin: BitcoinPattern2[Bitcoin] = BitcoinPattern2(client, _m(acc, 'btc'))
2353
+ self.dollars: BlockCountPattern[Dollars] = BlockCountPattern(client, _m(acc, 'usd'))
2354
+ self.sats: BlockCountPattern[Sats] = BlockCountPattern(client, acc)
2314
2355
 
2315
2356
  class CoinbasePattern:
2316
2357
  """Pattern struct for repeated tree structure."""
@@ -2321,32 +2362,32 @@ class CoinbasePattern:
2321
2362
  self.dollars: DollarsPattern[Dollars] = DollarsPattern(client, _m(acc, 'usd'))
2322
2363
  self.sats: DollarsPattern[Sats] = DollarsPattern(client, acc)
2323
2364
 
2324
- class ActiveSupplyPattern:
2365
+ class SegwitAdoptionPattern:
2325
2366
  """Pattern struct for repeated tree structure."""
2326
2367
 
2327
2368
  def __init__(self, client: BrkClientBase, acc: str):
2328
2369
  """Create pattern node with accumulated metric name."""
2329
- self.bitcoin: MetricPattern1[Bitcoin] = MetricPattern1(client, _m(acc, 'btc'))
2330
- self.dollars: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'usd'))
2331
- self.sats: MetricPattern1[Sats] = MetricPattern1(client, acc)
2370
+ self.base: MetricPattern11[StoredF32] = MetricPattern11(client, acc)
2371
+ self.cumulative: MetricPattern2[StoredF32] = MetricPattern2(client, _m(acc, 'cumulative'))
2372
+ self.sum: MetricPattern2[StoredF32] = MetricPattern2(client, _m(acc, 'sum'))
2332
2373
 
2333
- class UnclaimedRewardsPattern:
2374
+ class CostBasisPattern2:
2334
2375
  """Pattern struct for repeated tree structure."""
2335
2376
 
2336
2377
  def __init__(self, client: BrkClientBase, acc: str):
2337
2378
  """Create pattern node with accumulated metric name."""
2338
- self.bitcoin: BitcoinPattern2[Bitcoin] = BitcoinPattern2(client, _m(acc, 'btc'))
2339
- self.dollars: BlockCountPattern[Dollars] = BlockCountPattern(client, _m(acc, 'usd'))
2340
- self.sats: BlockCountPattern[Sats] = BlockCountPattern(client, acc)
2379
+ self.max: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'max_cost_basis'))
2380
+ self.min: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'min_cost_basis'))
2381
+ self.percentiles: PercentilesPattern = PercentilesPattern(client, _m(acc, 'cost_basis'))
2341
2382
 
2342
- class CoinbasePattern2:
2383
+ class ActiveSupplyPattern:
2343
2384
  """Pattern struct for repeated tree structure."""
2344
2385
 
2345
2386
  def __init__(self, client: BrkClientBase, acc: str):
2346
2387
  """Create pattern node with accumulated metric name."""
2347
- self.bitcoin: BlockCountPattern[Bitcoin] = BlockCountPattern(client, _m(acc, 'btc'))
2348
- self.dollars: BlockCountPattern[Dollars] = BlockCountPattern(client, _m(acc, 'usd'))
2349
- self.sats: BlockCountPattern[Sats] = BlockCountPattern(client, acc)
2388
+ self.bitcoin: MetricPattern1[Bitcoin] = MetricPattern1(client, _m(acc, 'btc'))
2389
+ self.dollars: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'usd'))
2390
+ self.sats: MetricPattern1[Sats] = MetricPattern1(client, acc)
2350
2391
 
2351
2392
  class _2015Pattern:
2352
2393
  """Pattern struct for repeated tree structure."""
@@ -2357,14 +2398,14 @@ class _2015Pattern:
2357
2398
  self.dollars: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'usd'))
2358
2399
  self.sats: MetricPattern4[Sats] = MetricPattern4(client, acc)
2359
2400
 
2360
- class SegwitAdoptionPattern:
2401
+ class CoinbasePattern2:
2361
2402
  """Pattern struct for repeated tree structure."""
2362
2403
 
2363
2404
  def __init__(self, client: BrkClientBase, acc: str):
2364
2405
  """Create pattern node with accumulated metric name."""
2365
- self.base: MetricPattern11[StoredF32] = MetricPattern11(client, acc)
2366
- self.cumulative: MetricPattern2[StoredF32] = MetricPattern2(client, _m(acc, 'cumulative'))
2367
- self.sum: MetricPattern2[StoredF32] = MetricPattern2(client, _m(acc, 'sum'))
2406
+ self.bitcoin: BlockCountPattern[Bitcoin] = BlockCountPattern(client, _m(acc, 'btc'))
2407
+ self.dollars: BlockCountPattern[Dollars] = BlockCountPattern(client, _m(acc, 'usd'))
2408
+ self.sats: BlockCountPattern[Sats] = BlockCountPattern(client, acc)
2368
2409
 
2369
2410
  class _1dReturns1mSdPattern:
2370
2411
  """Pattern struct for repeated tree structure."""
@@ -2382,21 +2423,21 @@ class CostBasisPattern:
2382
2423
  self.max: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'max_cost_basis'))
2383
2424
  self.min: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'min_cost_basis'))
2384
2425
 
2385
- class RelativePattern4:
2426
+ class SupplyPattern2:
2386
2427
  """Pattern struct for repeated tree structure."""
2387
2428
 
2388
2429
  def __init__(self, client: BrkClientBase, acc: str):
2389
2430
  """Create pattern node with accumulated metric name."""
2390
- self.supply_in_loss_rel_to_own_supply: MetricPattern1[StoredF64] = MetricPattern1(client, _m(acc, 'loss_rel_to_own_supply'))
2391
- self.supply_in_profit_rel_to_own_supply: MetricPattern1[StoredF64] = MetricPattern1(client, _m(acc, 'profit_rel_to_own_supply'))
2431
+ self.halved: ActiveSupplyPattern = ActiveSupplyPattern(client, _m(acc, 'halved'))
2432
+ self.total: ActiveSupplyPattern = ActiveSupplyPattern(client, acc)
2392
2433
 
2393
- class SupplyPattern2:
2434
+ class RelativePattern4:
2394
2435
  """Pattern struct for repeated tree structure."""
2395
2436
 
2396
2437
  def __init__(self, client: BrkClientBase, acc: str):
2397
2438
  """Create pattern node with accumulated metric name."""
2398
- self.halved: ActiveSupplyPattern = ActiveSupplyPattern(client, _m(acc, 'halved'))
2399
- self.total: ActiveSupplyPattern = ActiveSupplyPattern(client, acc)
2439
+ self.supply_in_loss_rel_to_own_supply: MetricPattern1[StoredF64] = MetricPattern1(client, _m(acc, 'loss_rel_to_own_supply'))
2440
+ self.supply_in_profit_rel_to_own_supply: MetricPattern1[StoredF64] = MetricPattern1(client, _m(acc, 'profit_rel_to_own_supply'))
2400
2441
 
2401
2442
  class BitcoinPattern2(Generic[T]):
2402
2443
  """Pattern struct for repeated tree structure."""
@@ -2411,8 +2452,8 @@ class SatsPattern(Generic[T]):
2411
2452
 
2412
2453
  def __init__(self, client: BrkClientBase, acc: str):
2413
2454
  """Create pattern node with accumulated metric name."""
2414
- self.ohlc: MetricPattern1[T] = MetricPattern1(client, _m(acc, 'ohlc_sats'))
2415
- self.split: SplitPattern2[T] = SplitPattern2(client, _m(acc, 'sats'))
2455
+ self.ohlc: MetricPattern1[T] = MetricPattern1(client, _m(acc, 'ohlc'))
2456
+ self.split: SplitPattern2[T] = SplitPattern2(client, acc)
2416
2457
 
2417
2458
  class BlockCountPattern(Generic[T]):
2418
2459
  """Pattern struct for repeated tree structure."""
@@ -2615,6 +2656,14 @@ class MetricsTree_Cointime_Pricing:
2615
2656
  self.vaulted_price: MetricPattern1[Dollars] = MetricPattern1(client, 'vaulted_price')
2616
2657
  self.vaulted_price_ratio: ActivePriceRatioPattern = ActivePriceRatioPattern(client, 'vaulted_price_ratio')
2617
2658
 
2659
+ class MetricsTree_Cointime_ReserveRisk:
2660
+ """Metrics tree node."""
2661
+
2662
+ def __init__(self, client: BrkClientBase, base_path: str = ''):
2663
+ self.hodl_bank: MetricPattern6[StoredF64] = MetricPattern6(client, 'hodl_bank')
2664
+ self.reserve_risk: MetricPattern4[StoredF64] = MetricPattern4(client, 'reserve_risk')
2665
+ self.vocdd_365d_sma: MetricPattern6[StoredF64] = MetricPattern6(client, 'vocdd_365d_sma')
2666
+
2618
2667
  class MetricsTree_Cointime_Supply:
2619
2668
  """Metrics tree node."""
2620
2669
 
@@ -2629,6 +2678,7 @@ class MetricsTree_Cointime_Value:
2629
2678
  self.cointime_value_created: BlockCountPattern[StoredF64] = BlockCountPattern(client, 'cointime_value_created')
2630
2679
  self.cointime_value_destroyed: BlockCountPattern[StoredF64] = BlockCountPattern(client, 'cointime_value_destroyed')
2631
2680
  self.cointime_value_stored: BlockCountPattern[StoredF64] = BlockCountPattern(client, 'cointime_value_stored')
2681
+ self.vocdd: BlockCountPattern[StoredF64] = BlockCountPattern(client, 'vocdd')
2632
2682
 
2633
2683
  class MetricsTree_Cointime:
2634
2684
  """Metrics tree node."""
@@ -2638,6 +2688,7 @@ class MetricsTree_Cointime:
2638
2688
  self.adjusted: MetricsTree_Cointime_Adjusted = MetricsTree_Cointime_Adjusted(client)
2639
2689
  self.cap: MetricsTree_Cointime_Cap = MetricsTree_Cointime_Cap(client)
2640
2690
  self.pricing: MetricsTree_Cointime_Pricing = MetricsTree_Cointime_Pricing(client)
2691
+ self.reserve_risk: MetricsTree_Cointime_ReserveRisk = MetricsTree_Cointime_ReserveRisk(client)
2641
2692
  self.supply: MetricsTree_Cointime_Supply = MetricsTree_Cointime_Supply(client)
2642
2693
  self.value: MetricsTree_Cointime_Value = MetricsTree_Cointime_Value(client)
2643
2694
 
@@ -2659,10 +2710,10 @@ class MetricsTree_Constants:
2659
2710
  self.constant_61_8: MetricPattern1[StoredF32] = MetricPattern1(client, 'constant_61_8')
2660
2711
  self.constant_70: MetricPattern1[StoredU16] = MetricPattern1(client, 'constant_70')
2661
2712
  self.constant_80: MetricPattern1[StoredU16] = MetricPattern1(client, 'constant_80')
2662
- self.constant_minus_1: MetricPattern1[StoredI16] = MetricPattern1(client, 'constant_minus_1')
2663
- self.constant_minus_2: MetricPattern1[StoredI16] = MetricPattern1(client, 'constant_minus_2')
2664
- self.constant_minus_3: MetricPattern1[StoredI16] = MetricPattern1(client, 'constant_minus_3')
2665
- self.constant_minus_4: MetricPattern1[StoredI16] = MetricPattern1(client, 'constant_minus_4')
2713
+ self.constant_minus_1: MetricPattern1[StoredI8] = MetricPattern1(client, 'constant_minus_1')
2714
+ self.constant_minus_2: MetricPattern1[StoredI8] = MetricPattern1(client, 'constant_minus_2')
2715
+ self.constant_minus_3: MetricPattern1[StoredI8] = MetricPattern1(client, 'constant_minus_3')
2716
+ self.constant_minus_4: MetricPattern1[StoredI8] = MetricPattern1(client, 'constant_minus_4')
2666
2717
 
2667
2718
  class MetricsTree_Distribution_AddressCohorts_AmountRange:
2668
2719
  """Metrics tree node."""
@@ -3269,21 +3320,22 @@ class MetricsTree_Market_Ath:
3269
3320
  self.price_drawdown: MetricPattern3[StoredF32] = MetricPattern3(client, 'price_drawdown')
3270
3321
  self.years_since_price_ath: MetricPattern4[StoredF32] = MetricPattern4(client, 'years_since_price_ath')
3271
3322
 
3272
- class MetricsTree_Market_Dca_ClassAveragePrice:
3323
+ class MetricsTree_Market_Dca_ClassReturns:
3273
3324
  """Metrics tree node."""
3274
3325
 
3275
3326
  def __init__(self, client: BrkClientBase, base_path: str = ''):
3276
- self._2015: MetricPattern4[Dollars] = MetricPattern4(client, 'dca_class_2015_average_price')
3277
- self._2016: MetricPattern4[Dollars] = MetricPattern4(client, 'dca_class_2016_average_price')
3278
- self._2017: MetricPattern4[Dollars] = MetricPattern4(client, 'dca_class_2017_average_price')
3279
- self._2018: MetricPattern4[Dollars] = MetricPattern4(client, 'dca_class_2018_average_price')
3280
- self._2019: MetricPattern4[Dollars] = MetricPattern4(client, 'dca_class_2019_average_price')
3281
- self._2020: MetricPattern4[Dollars] = MetricPattern4(client, 'dca_class_2020_average_price')
3282
- self._2021: MetricPattern4[Dollars] = MetricPattern4(client, 'dca_class_2021_average_price')
3283
- self._2022: MetricPattern4[Dollars] = MetricPattern4(client, 'dca_class_2022_average_price')
3284
- self._2023: MetricPattern4[Dollars] = MetricPattern4(client, 'dca_class_2023_average_price')
3285
- self._2024: MetricPattern4[Dollars] = MetricPattern4(client, 'dca_class_2024_average_price')
3286
- self._2025: MetricPattern4[Dollars] = MetricPattern4(client, 'dca_class_2025_average_price')
3327
+ self._2015: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2015_returns')
3328
+ self._2016: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2016_returns')
3329
+ self._2017: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2017_returns')
3330
+ self._2018: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2018_returns')
3331
+ self._2019: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2019_returns')
3332
+ self._2020: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2020_returns')
3333
+ self._2021: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2021_returns')
3334
+ self._2022: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2022_returns')
3335
+ self._2023: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2023_returns')
3336
+ self._2024: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2024_returns')
3337
+ self._2025: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2025_returns')
3338
+ self._2026: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2026_returns')
3287
3339
 
3288
3340
  class MetricsTree_Market_Dca_ClassStack:
3289
3341
  """Metrics tree node."""
@@ -3300,13 +3352,14 @@ class MetricsTree_Market_Dca_ClassStack:
3300
3352
  self._2023: _2015Pattern = _2015Pattern(client, 'dca_class_2023_stack')
3301
3353
  self._2024: _2015Pattern = _2015Pattern(client, 'dca_class_2024_stack')
3302
3354
  self._2025: _2015Pattern = _2015Pattern(client, 'dca_class_2025_stack')
3355
+ self._2026: _2015Pattern = _2015Pattern(client, 'dca_class_2026_stack')
3303
3356
 
3304
3357
  class MetricsTree_Market_Dca:
3305
3358
  """Metrics tree node."""
3306
3359
 
3307
3360
  def __init__(self, client: BrkClientBase, base_path: str = ''):
3308
- self.class_average_price: MetricsTree_Market_Dca_ClassAveragePrice = MetricsTree_Market_Dca_ClassAveragePrice(client)
3309
- self.class_returns: ClassAveragePricePattern[StoredF32] = ClassAveragePricePattern(client, 'dca_class')
3361
+ self.class_average_price: ClassAveragePricePattern[Dollars] = ClassAveragePricePattern(client, 'dca_class')
3362
+ self.class_returns: MetricsTree_Market_Dca_ClassReturns = MetricsTree_Market_Dca_ClassReturns(client)
3310
3363
  self.class_stack: MetricsTree_Market_Dca_ClassStack = MetricsTree_Market_Dca_ClassStack(client)
3311
3364
  self.period_average_price: PeriodAveragePricePattern[Dollars] = PeriodAveragePricePattern(client, 'dca_average_price')
3312
3365
  self.period_cagr: PeriodCagrPattern = PeriodCagrPattern(client, 'dca_cagr')
@@ -3675,7 +3728,11 @@ class MetricsTree_Price_Oracle:
3675
3728
  """Metrics tree node."""
3676
3729
 
3677
3730
  def __init__(self, client: BrkClientBase, base_path: str = ''):
3731
+ self.close_ohlc_cents: MetricPattern6[OHLCCents] = MetricPattern6(client, 'close_ohlc_cents')
3732
+ self.close_ohlc_dollars: MetricPattern6[OHLCDollars] = MetricPattern6(client, 'close_ohlc_dollars')
3678
3733
  self.height_to_first_pairoutputindex: MetricPattern11[PairOutputIndex] = MetricPattern11(client, 'height_to_first_pairoutputindex')
3734
+ self.mid_ohlc_cents: MetricPattern6[OHLCCents] = MetricPattern6(client, 'mid_ohlc_cents')
3735
+ self.mid_ohlc_dollars: MetricPattern6[OHLCDollars] = MetricPattern6(client, 'mid_ohlc_dollars')
3679
3736
  self.ohlc_cents: MetricPattern6[OHLCCents] = MetricPattern6(client, 'oracle_ohlc_cents')
3680
3737
  self.ohlc_dollars: MetricPattern6[OHLCDollars] = MetricPattern6(client, 'oracle_ohlc')
3681
3738
  self.output0_value: MetricPattern33[Sats] = MetricPattern33(client, 'pair_output0_value')
@@ -3702,12 +3759,12 @@ class MetricsTree_Price_Oracle:
3702
3759
  self.price_cents: MetricPattern11[Cents] = MetricPattern11(client, 'oracle_price_cents')
3703
3760
  self.tx_count: MetricPattern6[StoredU32] = MetricPattern6(client, 'oracle_tx_count')
3704
3761
 
3705
- class MetricsTree_Price_Usd:
3762
+ class MetricsTree_Price_Sats:
3706
3763
  """Metrics tree node."""
3707
3764
 
3708
3765
  def __init__(self, client: BrkClientBase, base_path: str = ''):
3709
- self.ohlc: MetricPattern1[OHLCDollars] = MetricPattern1(client, 'price_ohlc')
3710
- self.split: SplitPattern2[Dollars] = SplitPattern2(client, 'price')
3766
+ self.ohlc: MetricPattern1[OHLCSats] = MetricPattern1(client, 'price_ohlc_sats')
3767
+ self.split: SplitPattern2[Sats] = SplitPattern2(client, 'price_sats')
3711
3768
 
3712
3769
  class MetricsTree_Price:
3713
3770
  """Metrics tree node."""
@@ -3715,8 +3772,8 @@ class MetricsTree_Price:
3715
3772
  def __init__(self, client: BrkClientBase, base_path: str = ''):
3716
3773
  self.cents: MetricsTree_Price_Cents = MetricsTree_Price_Cents(client)
3717
3774
  self.oracle: MetricsTree_Price_Oracle = MetricsTree_Price_Oracle(client)
3718
- self.sats: SatsPattern[OHLCSats] = SatsPattern(client, 'price')
3719
- self.usd: MetricsTree_Price_Usd = MetricsTree_Price_Usd(client)
3775
+ self.sats: MetricsTree_Price_Sats = MetricsTree_Price_Sats(client)
3776
+ self.usd: SatsPattern[OHLCDollars] = SatsPattern(client, 'price')
3720
3777
 
3721
3778
  class MetricsTree_Scripts_Count:
3722
3779
  """Metrics tree node."""
@@ -3854,6 +3911,7 @@ class MetricsTree_Transactions_Volume:
3854
3911
  self.annualized_volume: _2015Pattern = _2015Pattern(client, 'annualized_volume')
3855
3912
  self.inputs_per_sec: MetricPattern4[StoredF32] = MetricPattern4(client, 'inputs_per_sec')
3856
3913
  self.outputs_per_sec: MetricPattern4[StoredF32] = MetricPattern4(client, 'outputs_per_sec')
3914
+ self.received_sum: ActiveSupplyPattern = ActiveSupplyPattern(client, 'received_sum')
3857
3915
  self.sent_sum: ActiveSupplyPattern = ActiveSupplyPattern(client, 'sent_sum')
3858
3916
  self.tx_per_sec: MetricPattern4[StoredF32] = MetricPattern4(client, 'tx_per_sec')
3859
3917
 
@@ -3900,7 +3958,7 @@ class MetricsTree:
3900
3958
  class BrkClient(BrkClientBase):
3901
3959
  """Main BRK client with metrics tree and API methods."""
3902
3960
 
3903
- VERSION = "v0.1.0-alpha.3"
3961
+ VERSION = "v0.1.0-alpha.6"
3904
3962
 
3905
3963
  INDEXES = [
3906
3964
  "dateindex",
@@ -1,26 +1,30 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: brk-client
3
- Version: 0.1.0a6
3
+ Version: 0.1.0b0
4
4
  Summary: Python client for the Bitcoin Research Kit
5
5
  Project-URL: Homepage, https://bitcoinresearchkit.org
6
6
  Project-URL: Repository, https://github.com/bitcoinresearchkit/brk
7
7
  License-Expression: MIT
8
8
  Keywords: analytics,bitcoin,blockchain,on-chain
9
- Classifier: Development Status :: 3 - Alpha
9
+ Classifier: Development Status :: 4 - Beta
10
10
  Classifier: Intended Audience :: Developers
11
11
  Classifier: License :: OSI Approved :: MIT License
12
12
  Classifier: Programming Language :: Python :: 3
13
+ Classifier: Programming Language :: Python :: 3.9
14
+ Classifier: Programming Language :: Python :: 3.10
13
15
  Classifier: Programming Language :: Python :: 3.11
14
16
  Classifier: Programming Language :: Python :: 3.12
15
17
  Classifier: Programming Language :: Python :: 3.13
16
18
  Classifier: Typing :: Typed
17
- Requires-Python: >=3.11
19
+ Requires-Python: >=3.9
18
20
  Description-Content-Type: text/markdown
19
21
 
20
22
  # brk-client
21
23
 
22
24
  Python client for the [Bitcoin Research Kit](https://github.com/bitcoinresearchkit/brk) API.
23
25
 
26
+ Requires Python 3.9+. Zero dependencies.
27
+
24
28
  [PyPI](https://pypi.org/project/brk-client/) | [API Reference](https://github.com/bitcoinresearchkit/brk/blob/main/packages/brk_client/DOCS.md)
25
29
 
26
30
  ## Installation
@@ -31,6 +35,8 @@ pip install brk-client
31
35
  uv add brk-client
32
36
  ```
33
37
 
38
+ Or just copy [`brk_client/__init__.py`](./brk_client/__init__.py) into your project - it's a single file with no dependencies.
39
+
34
40
  ## Quick Start
35
41
 
36
42
  ```python
@@ -0,0 +1,4 @@
1
+ brk_client/__init__.py,sha256=M-3Y5Nh35vg4rHdNY79qpcutkeQ7pAHT9sFAj0TjhJ8,265531
2
+ brk_client-0.1.0b0.dist-info/METADATA,sha256=AbE_LbMGi3iatnWej9ZKsRwJvxiIycurO5lLJPHTImA,1924
3
+ brk_client-0.1.0b0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
4
+ brk_client-0.1.0b0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.28.0
2
+ Generator: hatchling 1.27.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -1,4 +0,0 @@
1
- brk_client/__init__.py,sha256=l_PZBNKhZzUfgZHsqXT11MWT4qsm5ES8knJd8HcGAKw,262908
2
- brk_client-0.1.0a6.dist-info/METADATA,sha256=QrrLHR6-ser_hBS9Y2Pk1o7LaVro3eVqA048JUyHnQc,1655
3
- brk_client-0.1.0a6.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
4
- brk_client-0.1.0a6.dist-info/RECORD,,