From e3498427df97080197f7ce28c97bb8183041a79c Mon Sep 17 00:00:00 2001 From: Marcus Read Date: Mon, 23 Sep 2024 09:42:41 +0100 Subject: [PATCH] Revise typing Revises type annotations to reflect new minimum Python version as 3.10. --- src/market_analy/analysis.py | 12 ++++++------ src/market_analy/cases.py | 2 -- src/market_analy/charts.py | 19 ++++++++----------- src/market_analy/gui_parts.py | 2 -- src/market_analy/standalone.py | 11 +++++------ src/market_analy/trends/charts.py | 2 -- src/market_analy/utils/bq_utils.py | 2 -- src/market_analy/utils/ipyvuetify_utils.py | 4 +--- src/market_analy/utils/ipywidgets_utils.py | 2 -- src/market_analy/utils/list_utils.py | 2 -- src/market_analy/utils/maths_utils.py | 2 -- src/market_analy/utils/mkt_prices_utils.py | 2 -- src/market_analy/utils/pandas_utils.py | 2 -- tests/conftest.py | 2 -- tests/test_analysis.py | 4 +--- 15 files changed, 21 insertions(+), 49 deletions(-) diff --git a/src/market_analy/analysis.py b/src/market_analy/analysis.py index c6d7ab0..0240fa9 100644 --- a/src/market_analy/analysis.py +++ b/src/market_analy/analysis.py @@ -85,7 +85,7 @@ from abc import ABCMeta from collections.abc import Callable, Sequence from datetime import datetime -from typing import TYPE_CHECKING, Any, Literal, Union +from typing import TYPE_CHECKING, Any, Literal import market_prices as mp import matplotlib as mpl @@ -113,9 +113,9 @@ from .trends.guis import TrendsGui, TrendsGuiBase from .trends.analy import Trends -Date = Union[str, datetime, None] -Calendar = Union[str, ExchangeCalendar] -Symbols = Union[str, list[str]] +Date = str | datetime | None +Calendar = str | ExchangeCalendar +Symbols = str | list[str] ChartEngine = Literal["bqplot", "matplotlib"] @@ -184,8 +184,8 @@ def add_summary( return pd.concat([rtrn, summary_column], axis=1) -SummaryRowFuncDef = tuple[str, Union[str, list[str]]] -SummaryRowDef = Union[SummaryRowFuncDef, list[SummaryRowFuncDef]] +SummaryRowFuncDef = tuple[str, str | list[str]] +SummaryRowDef = SummaryRowFuncDef | list[SummaryRowFuncDef] def add_summary_row( diff --git a/src/market_analy/cases.py b/src/market_analy/cases.py index c0276fd..0b2c4bb 100644 --- a/src/market_analy/cases.py +++ b/src/market_analy/cases.py @@ -20,8 +20,6 @@ navigating between cases. """ -from __future__ import annotations - from abc import ABC, abstractmethod from collections.abc import Sequence from dataclasses import dataclass diff --git a/src/market_analy/charts.py b/src/market_analy/charts.py index 597ee2b..bc50c47 100644 --- a/src/market_analy/charts.py +++ b/src/market_analy/charts.py @@ -27,8 +27,6 @@ Bar Chart displaying precentage changes of multiple instruments. """ -from __future__ import annotations - from abc import ABCMeta, abstractmethod from collections import defaultdict from collections.abc import Callable, Sequence @@ -36,8 +34,7 @@ import enum from functools import lru_cache, partialmethod import itertools -import typing -from typing import Any, Literal +from typing import Any, Literal, TYPE_CHECKING import bqplot as bq import IPython @@ -93,17 +90,17 @@ class Groups(enum.Enum): CASES_GROUPS = set([Groups.CASES_SCATTERS]) | CASES_OTHER # type aliases -AddedMarkKeys = typing.Union[ - str, - Literal[ +AddedMarkKeys = ( + str + | Literal[ Groups.CASE, Groups.PERSIST, Groups.CASES_SCATTERS, Groups.CASES_OTHER_0, Groups.CASES_OTHER_1, Groups.CASES_OTHER_2, - ], -] + ] +) AddedMarks = dict[AddedMarkKeys, list[bq.Mark]] AxesKwargs = dict[ubq.ScaleKeys, dict[str, Any]] @@ -162,7 +159,7 @@ class Base(metaclass=ABCMeta): Data represented by x-axis. Subclass can optionally expose via more concrete property. - _y_data: Union[DataFrame, Series] + _y_data: DataFrame | Series Data represented by y-axis. Subclass can optionally expose via more concrete property. @@ -3123,7 +3120,7 @@ def get_next_case(self) -> CaseSupportsChartAnaly: case = self.current_case i = 0 if case is None else self.cases.get_index(case) + 1 if i == len(self.cases.cases): - if typing.TYPE_CHECKING: + if TYPE_CHECKING: assert case is not None return case # current case is last case return self.cases.cases[i] diff --git a/src/market_analy/gui_parts.py b/src/market_analy/gui_parts.py index 439246b..2828ceb 100644 --- a/src/market_analy/gui_parts.py +++ b/src/market_analy/gui_parts.py @@ -43,8 +43,6 @@ Percent change bar chart options for multiple instruments. """ -from __future__ import annotations - from collections.abc import Callable import re diff --git a/src/market_analy/standalone.py b/src/market_analy/standalone.py index 8ebb4dd..83b4014 100644 --- a/src/market_analy/standalone.py +++ b/src/market_analy/standalone.py @@ -3,7 +3,6 @@ from __future__ import annotations import datetime -from typing import Union import pandas as pd import valimp @@ -100,7 +99,7 @@ def net_of(data: pd.DataFrame, rebase: bool = True) -> pd.DataFrame: return pd.DataFrame({col: mapping[col] for col in df.columns}) -def get_ath(data: Union[pd.Series, pd.DataFrame]) -> Union[pd.Series, pd.DataFrame]: +def get_ath(data: pd.Series | pd.DataFrame) -> pd.Series | pd.DataFrame: """Return all-time high as at each timestamp. Returns ATH as at end of period represented by corresponding @@ -129,10 +128,10 @@ def get_ath(data: Union[pd.Series, pd.DataFrame]) -> Union[pd.Series, pd.DataFra @valimp.parse def get_period_high( - data: Union[pd.Series, pd.DataFrame], - window: Union[int, str, datetime.timedelta], + data: pd.Series | pd.DataFrame, + window: int | str | datetime.timedelta, include_current: bool = True, -) -> Union[pd.Series, pd.DataFrame]: +) -> pd.Series | pd.DataFrame: """Return 52wk high as at each timestamp. NB: For sessions within the first 52 weeks of data, the high will @@ -186,7 +185,7 @@ def get_period_high( @valimp.parse def get_pct_off_high( data: pd.DataFrame, - window: Union[int, str, datetime.timedelta, None], + window: int | str | datetime.timedelta | None, include_current: bool = True, ) -> pd.DataFrame: """Return percent off high as at each timestamp. diff --git a/src/market_analy/trends/charts.py b/src/market_analy/trends/charts.py index a4f572e..f08f45c 100644 --- a/src/market_analy/trends/charts.py +++ b/src/market_analy/trends/charts.py @@ -1,7 +1,5 @@ """Charts for trend analysis.""" -from __future__ import annotations - import typing from collections.abc import Callable from functools import cached_property, partialmethod diff --git a/src/market_analy/utils/bq_utils.py b/src/market_analy/utils/bq_utils.py index e71716b..7b0ce06 100644 --- a/src/market_analy/utils/bq_utils.py +++ b/src/market_analy/utils/bq_utils.py @@ -1,7 +1,5 @@ """Utility constants, functions and classes for bqplot.""" -from __future__ import annotations - from collections.abc import Iterable from copy import copy from itertools import cycle diff --git a/src/market_analy/utils/ipyvuetify_utils.py b/src/market_analy/utils/ipyvuetify_utils.py index f64f2c8..25a4fac 100644 --- a/src/market_analy/utils/ipyvuetify_utils.py +++ b/src/market_analy/utils/ipyvuetify_utils.py @@ -1,7 +1,5 @@ """Utility functions and classes for ipyvuetify library.""" -from __future__ import annotations - from collections.abc import Callable from typing import Literal @@ -402,7 +400,7 @@ class ToggleIcons(SelectableList): Attributes ---------- - contain_me: List[Union[IconBut, vue.Tooltip]] + contain_me: List[IconBut | vue.Tooltip] To house `ToggleIcons` in a parent component, pass `.contain_me` to parent component's children attribute. diff --git a/src/market_analy/utils/ipywidgets_utils.py b/src/market_analy/utils/ipywidgets_utils.py index 71d7511..e28b9af 100644 --- a/src/market_analy/utils/ipywidgets_utils.py +++ b/src/market_analy/utils/ipywidgets_utils.py @@ -23,8 +23,6 @@ Double handled slider to select date ranges. """ -from __future__ import annotations - import asyncio from collections.abc import Callable from contextlib import contextmanager diff --git a/src/market_analy/utils/list_utils.py b/src/market_analy/utils/list_utils.py index 1053808..d454993 100644 --- a/src/market_analy/utils/list_utils.py +++ b/src/market_analy/utils/list_utils.py @@ -1,7 +1,5 @@ """Utility functions and classes for lists.""" -from __future__ import annotations - from typing import Any, Literal from copy import copy diff --git a/src/market_analy/utils/maths_utils.py b/src/market_analy/utils/maths_utils.py index ad2e6f6..348a8ba 100644 --- a/src/market_analy/utils/maths_utils.py +++ b/src/market_analy/utils/maths_utils.py @@ -1,7 +1,5 @@ """Mathematics utility functions and classes.""" -from __future__ import annotations - import math diff --git a/src/market_analy/utils/mkt_prices_utils.py b/src/market_analy/utils/mkt_prices_utils.py index 7d1b201..cf93e3d 100644 --- a/src/market_analy/utils/mkt_prices_utils.py +++ b/src/market_analy/utils/mkt_prices_utils.py @@ -1,7 +1,5 @@ """Utility funcions for market_prices library.""" -from __future__ import annotations - import pandas as pd import market_prices as mp diff --git a/src/market_analy/utils/pandas_utils.py b/src/market_analy/utils/pandas_utils.py index c6438e7..6e4dcad 100644 --- a/src/market_analy/utils/pandas_utils.py +++ b/src/market_analy/utils/pandas_utils.py @@ -1,7 +1,5 @@ """Utilities for operating on pandas DataFrame and Series.""" -from __future__ import annotations - from typing import Any, Literal from zoneinfo import ZoneInfo diff --git a/tests/conftest.py b/tests/conftest.py index 0c41407..99abdaa 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,7 +1,5 @@ """Common pytest fixtures and test utility functions.""" -from __future__ import annotations - from collections import abc import pathlib import pickle diff --git a/tests/test_analysis.py b/tests/test_analysis.py index ea8e87d..b9a40d7 100644 --- a/tests/test_analysis.py +++ b/tests/test_analysis.py @@ -4,8 +4,6 @@ return from one or two specific calls against hard-coded expected returns. """ -from __future__ import annotations - from collections import abc import contextlib import io @@ -828,7 +826,7 @@ def test_max_dec(self, analy, daily_pp, tz): def test_corr(self, analy, analy_other): f = analy.corr rtrn = f(analy_other, style=False, end="2022-12-31", days=20) - assert rtrn == 0.49620301268372446 + assert round(rtrn, 11) == 0.49620301268 rtrn = f(analy_other, end="2022-12-31", days=20) expected = "\\begin{table}\n\\caption{Correlation 20D to 2022-12-31 (2022-12-01 to 30)}\n\\begin{tabular}{lr}\n & BARC.L \\\\\nAZN.L & \\background-color#6bacd1 \\color#f1f1f1 0.50 \\\\\n\\end{tabular}\n\\end{table}\n"