SYMBOL INDEX (63 symbols across 17 files) FILE: api/cbbiinfo_api.py function cbbi_fetch (line 6) | def cbbi_fetch(key: str): FILE: api/coinmetrics_api.py function cm_fetch_asset_metrics (line 6) | def cm_fetch_asset_metrics( FILE: api/coinsoto_api.py function cs_fetch (line 6) | def cs_fetch(path: str, data_selector: str, col_name: str): FILE: fetch_bitcoin_data.py function fetch_coinmetrics_data (line 7) | def fetch_coinmetrics_data(): function fetch_bitcoin_data (line 51) | def fetch_bitcoin_data(): FILE: main.py function get_metrics (line 29) | def get_metrics(): function _json_number (line 46) | def _json_number(value: float | None, *, precision: int = 4): function _write_columns_orient_json (line 56) | def _write_columns_orient_json(df: pl.DataFrame, path: Path, *, precisio... function _add_common_markers (line 73) | def _add_common_markers( function _shade_metric_bounds (line 84) | def _shade_metric_bounds(ax): function run (line 111) | async def run(json_file: str, charts_file: str, output_dir: str | None): function run_and_retry (line 247) | def run_and_retry( FILE: metrics/_common.py function join_left_on_date (line 5) | def join_left_on_date(df: pl.DataFrame, other: pl.DataFrame): function linreg_predict (line 9) | def linreg_predict( FILE: metrics/base_metric.py class BaseMetric (line 12) | class BaseMetric(ABC): method name (line 15) | def name(self) -> str: method description (line 20) | def description(self) -> str: method _calculate (line 24) | def _calculate(self, df: pl.DataFrame, ax: list[Axes]) -> pl.Series: method _fallback (line 27) | def _fallback(self, df: pl.DataFrame): method calculate (line 35) | async def calculate(self, df: pl.DataFrame, ax: list[Axes]): FILE: metrics/mvrv_z_score.py class MVRVMetric (line 11) | class MVRVMetric(BaseMetric): method name (line 13) | def name(self): method description (line 17) | def description(self): method _calculate (line 20) | def _calculate(self, df: pl.DataFrame, ax: list[Axes]): FILE: metrics/pi_cycle.py class PiCycleMetric (line 11) | class PiCycleMetric(BaseMetric): method name (line 13) | def name(self): method description (line 17) | def description(self): method _calculate (line 20) | def _calculate(self, df: pl.DataFrame, ax: list[Axes]): FILE: metrics/puell_multiple.py class PuellMetric (line 10) | class PuellMetric(BaseMetric): method name (line 12) | def name(self): method description (line 16) | def description(self): method _calculate (line 19) | def _calculate(self, df: pl.DataFrame, ax: list[Axes]): FILE: metrics/reserve_risk.py class ReserveRiskMetric (line 11) | class ReserveRiskMetric(BaseMetric): method name (line 13) | def name(self): method description (line 17) | def description(self): method _calculate (line 20) | def _calculate(self, df: pl.DataFrame, ax: list[Axes]): FILE: metrics/rhodl_ratio.py class RHODLMetric (line 11) | class RHODLMetric(BaseMetric): method name (line 13) | def name(self): method description (line 17) | def description(self): method _calculate (line 20) | def _calculate(self, df: pl.DataFrame, ax: list[Axes]): FILE: metrics/rupl.py class RUPLMetric (line 11) | class RUPLMetric(BaseMetric): method name (line 13) | def name(self): method description (line 17) | def description(self): method _calculate (line 20) | def _calculate(self, df: pl.DataFrame, ax: list[Axes]): FILE: metrics/trolololo.py class TrolololoMetric (line 10) | class TrolololoMetric(BaseMetric): method name (line 12) | def name(self): method description (line 16) | def description(self): method _calculate (line 19) | def _calculate(self, df: pl.DataFrame, ax: list[Axes]): FILE: metrics/two_year_moving_average.py class TwoYearMovingAverageMetric (line 10) | class TwoYearMovingAverageMetric(BaseMetric): method name (line 12) | def name(self): method description (line 16) | def description(self): method _calculate (line 19) | def _calculate(self, df: pl.DataFrame, ax: list[Axes]): FILE: metrics/woobull_topcap_cvdd.py function _woocharts_xy_ms_df (line 11) | def _woocharts_xy_ms_df(*, x: list[object], y: list[object], y_name: str): function _fetch_df (line 30) | def _fetch_df(): class WoobullMetric (line 49) | class WoobullMetric(BaseMetric): method name (line 51) | def name(self): method description (line 55) | def description(self): method _calculate (line 58) | def _calculate(self, df: pl.DataFrame, ax: list[Axes]): FILE: utils.py function mark_highs_lows (line 20) | def mark_highs_lows( function mark_days_since (line 92) | def mark_days_since(df: pl.DataFrame, cols: list[str]): function format_percentage (line 119) | def format_percentage(val: float, suffix: str = ' %'): function get_color (line 142) | def get_color(val: float): function send_error_notification (line 171) | async def send_error_notification(exception: Exception):