neurostats-API 0.0.25__py3-none-any.whl → 1.0.0__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 (107) hide show
  1. neurostats_API/__init__.py +15 -1
  2. neurostats_API/async_mode/__init__.py +13 -0
  3. neurostats_API/async_mode/db/__init__.py +3 -0
  4. neurostats_API/async_mode/db/base.py +24 -0
  5. neurostats_API/async_mode/db/tej.py +10 -0
  6. neurostats_API/async_mode/db/twse.py +8 -0
  7. neurostats_API/async_mode/db/us.py +9 -0
  8. neurostats_API/async_mode/db_extractors/__init__.py +20 -0
  9. neurostats_API/async_mode/db_extractors/base.py +66 -0
  10. neurostats_API/async_mode/db_extractors/daily/__init__.py +7 -0
  11. neurostats_API/async_mode/db_extractors/daily/base.py +89 -0
  12. neurostats_API/async_mode/db_extractors/daily/tej_chip.py +14 -0
  13. neurostats_API/async_mode/db_extractors/daily/tej_tech.py +12 -0
  14. neurostats_API/async_mode/db_extractors/daily/twse_chip.py +49 -0
  15. neurostats_API/async_mode/db_extractors/daily/value.py +93 -0
  16. neurostats_API/async_mode/db_extractors/daily/yf.py +12 -0
  17. neurostats_API/async_mode/db_extractors/month_revenue/__init__.py +1 -0
  18. neurostats_API/async_mode/db_extractors/month_revenue/base.py +140 -0
  19. neurostats_API/async_mode/db_extractors/month_revenue/twse.py +5 -0
  20. neurostats_API/async_mode/db_extractors/seasonal/__init__.py +4 -0
  21. neurostats_API/async_mode/db_extractors/seasonal/balance_sheet.py +19 -0
  22. neurostats_API/async_mode/db_extractors/seasonal/base.py +152 -0
  23. neurostats_API/async_mode/db_extractors/seasonal/cashflow.py +10 -0
  24. neurostats_API/async_mode/db_extractors/seasonal/profit_lose.py +17 -0
  25. neurostats_API/async_mode/db_extractors/seasonal/tej.py +87 -0
  26. neurostats_API/async_mode/factory/__init__.py +1 -0
  27. neurostats_API/async_mode/factory/extractor_factory.py +168 -0
  28. neurostats_API/async_mode/factory/transformer_factory.py +164 -0
  29. neurostats_API/async_mode/fetchers/__init__.py +10 -0
  30. neurostats_API/async_mode/fetchers/balance_sheet.py +31 -0
  31. neurostats_API/async_mode/fetchers/base.py +48 -0
  32. neurostats_API/async_mode/fetchers/cash_flow.py +56 -0
  33. neurostats_API/async_mode/fetchers/finance_overview.py +134 -0
  34. neurostats_API/async_mode/fetchers/month_revenue.py +35 -0
  35. neurostats_API/async_mode/fetchers/profit_lose.py +46 -0
  36. neurostats_API/async_mode/fetchers/tech.py +205 -0
  37. neurostats_API/async_mode/fetchers/tej/__init__.py +2 -0
  38. neurostats_API/async_mode/fetchers/tej/seasonal_data.py +88 -0
  39. neurostats_API/async_mode/fetchers/tej/tech.py +34 -0
  40. neurostats_API/async_mode/fetchers/twse_institution.py +62 -0
  41. neurostats_API/async_mode/fetchers/twse_margin.py +100 -0
  42. neurostats_API/async_mode/fetchers/value.py +76 -0
  43. neurostats_API/config/company_list/ticker_index_industry_map.json +7946 -0
  44. neurostats_API/config/company_list/us.json +9986 -0
  45. neurostats_API/{tools → config}/tej_db/tej_db_skip_index.yaml +0 -2
  46. neurostats_API/{tools → config}/twse/profit_lose.yaml +0 -6
  47. neurostats_API/fetchers/finance_overview.py +22 -2
  48. neurostats_API/transformers/__init__.py +40 -0
  49. neurostats_API/transformers/balance_sheet/__init__.py +2 -0
  50. neurostats_API/transformers/balance_sheet/base.py +51 -0
  51. neurostats_API/transformers/balance_sheet/twse.py +81 -0
  52. neurostats_API/transformers/balance_sheet/us.py +38 -0
  53. neurostats_API/transformers/base.py +158 -0
  54. neurostats_API/transformers/cash_flow/__init__.py +2 -0
  55. neurostats_API/transformers/cash_flow/base.py +114 -0
  56. neurostats_API/transformers/cash_flow/twse.py +70 -0
  57. neurostats_API/transformers/cash_flow/us.py +38 -0
  58. neurostats_API/transformers/daily_chip/__init__.py +1 -0
  59. neurostats_API/transformers/daily_chip/base.py +5 -0
  60. neurostats_API/transformers/daily_chip/tej.py +0 -0
  61. neurostats_API/transformers/daily_chip/twse_chip.py +415 -0
  62. neurostats_API/transformers/daily_chip/utils/__init__.py +0 -0
  63. neurostats_API/transformers/daily_chip/utils/institution.py +90 -0
  64. neurostats_API/transformers/daily_chip/utils/margin_trading.py +2 -0
  65. neurostats_API/transformers/daily_chip/utils/security_lending.py +0 -0
  66. neurostats_API/transformers/daily_tech/__init__.py +1 -0
  67. neurostats_API/transformers/daily_tech/base.py +5 -0
  68. neurostats_API/transformers/daily_tech/tech.py +84 -0
  69. neurostats_API/transformers/daily_tech/utils/__init__.py +1 -0
  70. neurostats_API/transformers/daily_tech/utils/processor.py +251 -0
  71. neurostats_API/transformers/finance_overview/__init__.py +2 -0
  72. neurostats_API/transformers/finance_overview/agent_overview.py +55 -0
  73. neurostats_API/transformers/finance_overview/base.py +824 -0
  74. neurostats_API/transformers/finance_overview/stats_overview.py +79 -0
  75. neurostats_API/transformers/month_revenue/__init__.py +1 -0
  76. neurostats_API/transformers/month_revenue/base.py +60 -0
  77. neurostats_API/transformers/month_revenue/twse.py +134 -0
  78. neurostats_API/transformers/profit_lose/__init__.py +2 -0
  79. neurostats_API/transformers/profit_lose/base.py +82 -0
  80. neurostats_API/transformers/profit_lose/twse.py +133 -0
  81. neurostats_API/transformers/profit_lose/us.py +26 -0
  82. neurostats_API/transformers/tej/__init__.py +1 -0
  83. neurostats_API/transformers/tej/base.py +149 -0
  84. neurostats_API/transformers/tej/finance_statement.py +80 -0
  85. neurostats_API/transformers/value/__init__.py +1 -0
  86. neurostats_API/transformers/value/base.py +5 -0
  87. neurostats_API/transformers/value/tej.py +8 -0
  88. neurostats_API/transformers/value/twse.py +48 -0
  89. neurostats_API/utils/__init__.py +1 -1
  90. neurostats_API/utils/data_process.py +10 -6
  91. neurostats_API/utils/exception.py +8 -0
  92. neurostats_API/utils/logger.py +21 -0
  93. neurostats_API-1.0.0.dist-info/METADATA +102 -0
  94. neurostats_API-1.0.0.dist-info/RECORD +121 -0
  95. neurostats_API-0.0.25.dist-info/METADATA +0 -858
  96. neurostats_API-0.0.25.dist-info/RECORD +0 -36
  97. /neurostats_API/{tools → config}/company_list/tw.json +0 -0
  98. /neurostats_API/{tools → config}/company_list/us_TradingView_list.json +0 -0
  99. /neurostats_API/{tools → config}/tej_db/tej_db_index.yaml +0 -0
  100. /neurostats_API/{tools → config}/tej_db/tej_db_percent_index.yaml +0 -0
  101. /neurostats_API/{tools → config}/tej_db/tej_db_thousand_index.yaml +0 -0
  102. /neurostats_API/{tools → config}/twse/balance_sheet.yaml +0 -0
  103. /neurostats_API/{tools → config}/twse/cash_flow_percentage.yaml +0 -0
  104. /neurostats_API/{tools → config}/twse/finance_overview_dict.yaml +0 -0
  105. /neurostats_API/{tools → config}/twse/seasonal_data_field_dict.txt +0 -0
  106. {neurostats_API-0.0.25.dist-info → neurostats_API-1.0.0.dist-info}/WHEEL +0 -0
  107. {neurostats_API-0.0.25.dist-info → neurostats_API-1.0.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,80 @@
1
+ from .base import BaseTEJTransformer
2
+ from neurostats_API.utils import StatsProcessor, NoCompanyError, NoDataError
3
+ import pandas as pd
4
+
5
+
6
+ class TEJFinanceStatementTransformer(BaseTEJTransformer):
7
+
8
+ def __init__(self, ticker, company_name, zone, target_column="Q"):
9
+ super().__init__(ticker, company_name, zone)
10
+ self.target_column = target_column
11
+
12
+ index_files = [
13
+ "tej_db/tej_db_index.yaml", "tej_db/tej_db_thousand_index.yaml",
14
+ "tej_db/tej_db_percent_index.yaml", "tej_db/tej_db_skip_index.yaml"
15
+ ]
16
+
17
+ self.index_dict, self.thousand_dict, self.percent_dict, skip_index_dict = [
18
+ StatsProcessor.load_yaml(file) for file in index_files
19
+ ]
20
+
21
+ self.check_index = set(self.index_dict.get("TWN/AINVFQ1", []))
22
+ self.skip_index = set(
23
+ self.percent_dict.get("TWN/AINVFQ1", []) + skip_index_dict.get("TWN/AINVFQ1", [])
24
+ )
25
+ self.thousand_index_list = list(
26
+ self.thousand_dict.get("TWN/AINVFQ1", [])
27
+ )
28
+ self.percent_index_list = list(self.percent_dict.get("TWN/AINVFQ1", []))
29
+
30
+ def process_transform(
31
+ self,
32
+ fetched_data,
33
+ start_date,
34
+ fetch_mode='QoQ',
35
+ use_cal=True,
36
+ indexes=None
37
+ ):
38
+ if (not fetched_data):
39
+ raise NoDataError(f"No data found in collection: TEJ_finance_statement, ticker={self.ticker}")
40
+
41
+ target_season = fetched_data[-1]['season']
42
+ start_col = self._find_start_season(fetched_data, start_date)
43
+ fetched_data = self._process_data_to_tej_format(
44
+ fetched_data, target_key=self.target_column
45
+ )
46
+
47
+ if (indexes):
48
+ fetched_data = pd.DataFrame.from_dict(fetched_data)
49
+ fetched_data = fetched_data.loc[indexes, :]
50
+ fetched_data = fetched_data.to_dict()
51
+
52
+ if (fetch_mode == 'QoQ'):
53
+ data = self._get_QoQ_data(data=fetched_data, use_cal=use_cal)
54
+ data = data.iloc[:, start_col:]
55
+ else:
56
+ data = self._get_YoY_data(
57
+ data=fetched_data, target_season=target_season, use_cal=use_cal
58
+ )
59
+
60
+ data = data.iloc[:, start_col:]
61
+ target_season_col = data.columns.str.endswith(f"{target_season}")
62
+ data = data.loc[:, target_season_col]
63
+
64
+ return data
65
+
66
+ def _find_start_season(self, fetched_data, start_date):
67
+ """
68
+ 找出開始的年或季度所在的index
69
+ """
70
+ start_year = start_date.year
71
+ start_season = (start_date.month - 1 // 3) + 1
72
+
73
+ start_col = 0
74
+ for data in fetched_data:
75
+ if ((start_year, start_season) < (data['year'], data['season'])):
76
+ break
77
+ else:
78
+ start_col += 1
79
+
80
+ return start_col
@@ -0,0 +1 @@
1
+ from .twse import TWSEAnnualValueTransformer, TWSEHistoryValueTransformer
@@ -0,0 +1,5 @@
1
+ from ..base import BaseTransformer
2
+
3
+ class BaseValueTransformer(BaseTransformer):
4
+ def __init__(self, ticker, company_name, zone):
5
+ super().__init__(ticker, company_name, zone)
@@ -0,0 +1,8 @@
1
+ from .base import BaseValueTransformer
2
+
3
+ class TEJValueTransformer(BaseValueTransformer):
4
+ def __init__(self, ticker, company_name, zone):
5
+ super().__init__(ticker, company_name, zone)
6
+
7
+ def process_transform(self):
8
+ pass
@@ -0,0 +1,48 @@
1
+ from .base import BaseValueTransformer
2
+ import pandas as pd
3
+
4
+ class TWSEValueTransformer(BaseValueTransformer):
5
+ def __init__(self, ticker, company_name, zone):
6
+ super().__init__(ticker, company_name, zone)
7
+
8
+ def process_transform(self, fetched_data):
9
+ pass
10
+
11
+ class TWSEAnnualValueTransformer(TWSEValueTransformer):
12
+ def __init__(self, ticker, company_name, zone):
13
+ super().__init__(ticker, company_name, zone)
14
+
15
+ def process_transform(self, annual_data):
16
+ annual_df = pd.DataFrame(annual_data)
17
+
18
+ return annual_df
19
+
20
+ class TWSEHistoryValueTransformer(TWSEValueTransformer):
21
+ def __init__(self, ticker, company_name, zone):
22
+ super().__init__(ticker, company_name, zone)
23
+ self.column = [
24
+ "P_E", "P_FCF", "P_B", "P_S",
25
+ "EV_OPI", "EV_EBIT", "EV_EBITDA", "EV_S", "close"
26
+ ]
27
+
28
+ def process_transform(self, daily_data):
29
+ history_df = pd.DataFrame(daily_data).set_index("date")
30
+ return_dict = {}
31
+
32
+ for key in self.column:
33
+ return_dict[key] = history_df.loc[:, [key]]
34
+
35
+ return return_dict
36
+
37
+ def process_latest(self, daily_data):
38
+ if (not daily_data):
39
+ return self._get_empty_structure()
40
+
41
+ daily_data = daily_data[-1]
42
+
43
+ return daily_data
44
+
45
+ def _get_empty_structure(self):
46
+ return {
47
+ key: None for key in self.column
48
+ }
@@ -2,4 +2,4 @@ from .datetime import StatsDateTime
2
2
  from .db_client import DBClient
3
3
  from .data_process import StatsProcessor
4
4
  from .calculate_value import YoY_Calculator
5
- from .exception import NoCompanyError
5
+ from .exception import NoCompanyError, NoDataError, NotSupportedError
@@ -24,14 +24,14 @@ class StatsProcessor:
24
24
 
25
25
  @classmethod
26
26
  def load_txt(cls, filename, json_load=True):
27
- txt_path = files('neurostats_API.tools').joinpath(filename)
27
+ txt_path = files('neurostats_API.config').joinpath(filename)
28
28
  with open(txt_path, 'r', encoding='utf-8') as f:
29
29
  data = json.load(f) if (json_load) else f.read()
30
30
  return data
31
31
 
32
32
  @classmethod
33
33
  def load_yaml(cls, filename):
34
- yaml_path = files('neurostats_API.tools').joinpath(filename)
34
+ yaml_path = files('neurostats_API.config').joinpath(filename)
35
35
  with open(yaml_path, 'r', encoding='utf-8') as f:
36
36
  data = yaml.safe_load(f)
37
37
 
@@ -39,7 +39,7 @@ class StatsProcessor:
39
39
 
40
40
  @classmethod
41
41
  def load_json(cls, filename):
42
- json_path = files('neurostats_API.tools').joinpath(filename)
42
+ json_path = files('neurostats_API.config').joinpath(filename)
43
43
  with open(json_path, 'r', encoding='utf-8') as f:
44
44
  data = json.load(f)
45
45
 
@@ -57,7 +57,10 @@ class StatsProcessor:
57
57
  # Append the expanded columns to the new DataFrame
58
58
  expanded_columns[col] = expanded_df
59
59
 
60
- expanded_df = pd.concat(expanded_columns.values(), axis=1)
60
+ try:
61
+ expanded_df = pd.concat(expanded_columns.values(), axis=1)
62
+ except ValueError: # No values to concat
63
+ expanded_df = pd.DataFrame(columns = list(expanded_columns.keys()))
61
64
 
62
65
  return expanded_df
63
66
 
@@ -98,12 +101,13 @@ class StatsProcessor:
98
101
  desired_order = []
99
102
  for index_name in target_index:
100
103
  desired_order += [f"{index_name}_{metric_name}" for metric_name in target_metrics]
101
- sliced_table = total_table.loc[desired_order, :].T
104
+ sliced_table = total_table.loc[:, desired_order]
102
105
 
103
106
  return sliced_table.T
104
107
 
105
108
  else:
106
- return total_table
109
+ target_columns = total_table.columns.str.endswith(tuple(target_metrics))
110
+ return total_table.loc[:, target_columns]
107
111
 
108
112
  @classmethod
109
113
  def slice_multi_col_table(
@@ -1,3 +1,11 @@
1
1
  class NoCompanyError(Exception):
2
+ def __init__(self, msg):
3
+ super().__init__(msg)
4
+
5
+ class NoDataError(Exception):
6
+ def __init__(self, msg):
7
+ super().__init__(msg)
8
+
9
+ class NotSupportedError(Exception):
2
10
  def __init__(self, msg):
3
11
  super().__init__(msg)
@@ -0,0 +1,21 @@
1
+ import logging
2
+ from functools import wraps
3
+
4
+ class StatsLogger:
5
+
6
+ @classmethod
7
+ def exception_log(cls, default_return=None, level='error'):
8
+ def decorator(func):
9
+ @wraps(func)
10
+ def wrapper(*args, **kwargs):
11
+ try:
12
+ return func(*args, **kwargs)
13
+ except Exception as e:
14
+ log_fn = getattr(logging, level, logging.error)
15
+ log_fn(
16
+ f"{func.__name__} failed | args={args}, kwargs={kwargs} | error={e}",
17
+ exc_info=True
18
+ )
19
+ return default_return
20
+ return wrapper
21
+ return decorator
@@ -0,0 +1,102 @@
1
+ Metadata-Version: 2.1
2
+ Name: neurostats_API
3
+ Version: 1.0.0
4
+ Summary: The service of NeuroStats website
5
+ Home-page: https://github.com/NeurowattStats/NeuroStats_API.git
6
+ Author: JasonWang@Neurowatt
7
+ Author-email: jason@neurowatt.ai
8
+ Requires-Python: >=3.6
9
+ Description-Content-Type: text/markdown
10
+ Requires-Dist: numpy
11
+ Requires-Dist: pandas
12
+ Requires-Dist: pymongo
13
+ Requires-Dist: pytz
14
+ Requires-Dist: python-dotenv
15
+ Requires-Dist: yfinance
16
+ Requires-Dist: holidays==0.70
17
+
18
+ # neurostats_API
19
+
20
+ - [檔案架構](#檔案架構)
21
+ - [下載](#下載)
22
+ - [使用方法](#使用方法)
23
+
24
+ ## 檔案架構
25
+
26
+ ```
27
+ ./neurostats_API
28
+ ├── async_mode
29
+ │ ├── db
30
+ │ ├── db_extractors
31
+ │ │ ├── daily
32
+ │ │ ├── month_revenue
33
+ │ │ └── seasonal
34
+ │ ├── factory
35
+ │ └── fetchers
36
+ ├── config
37
+ │ ├── company_list
38
+ │ ├── tej_db
39
+ │ └── twse
40
+ ├── fetchers
41
+ ├── transformers
42
+ │ ├── balance_sheet
43
+ │ ├── cash_flow
44
+ │ ├── daily_chip
45
+ │ │ └── utils
46
+ │ ├── daily_tech
47
+ │ │ └── utils
48
+ │ ├── finance_overview
49
+ │ ├── month_revenue
50
+ │ ├── profit_lose
51
+ │ ├── tej
52
+ │ └── value
53
+ └── utils
54
+ ```
55
+ - `neurostats_API`: 主要的package運行內容
56
+ - `async_mode`: \[新版新增\]以非同步方式進行DB資料的取得以及回傳資料
57
+ - `/db`: 連接到伺服器下的特定db
58
+ - `/db_extractor`: 決定取得db下的哪個collection的檔案,以及取得檔案內容
59
+ ` `/factory`: 使extractor的初始化變得通用
60
+ - `/fetchers`: 開發者將此套件用於其他專案的接口
61
+ - `fetchers`: (舊版)回傳service內容的fetcher檔案夾
62
+ - `transformers`: \[新版新增\] 處理從DB取出的資料,以dictionary的方式回傳需要的資料
63
+ - `config`: 【新舊通用】存放各種設定檔的dictionary,例如公司名單、各項指標對應的計算欄位、每個項目屬於哪份財報等設定
64
+ - `utils`: 【新舊通用】class之間通用的函式,例如讀取檔案、計算成長率函式、轉換格式與進位等
65
+
66
+ ## 下載
67
+ ```
68
+ pip install neurostats-API
69
+ ```
70
+ ### 確認下載成功
71
+ ```Python
72
+ >>> import neurostats_API
73
+ >>> print(neurostats_API.__version__)
74
+ 1.0.0
75
+ ```
76
+
77
+ ### 下載舊版
78
+ ```
79
+ pip install neurostats-API==0.0.25
80
+ ```
81
+
82
+ ## 使用方式 (以Balance_Sheet為例)
83
+ ### Async Mode
84
+ ```
85
+ from neurostats_API.async_mode.fetchers import AsyncBalanceSheetFetcher
86
+ from pymongo import AsyncMongoClient
87
+
88
+ db_client = AsyncMongoClient("<伺服器的MONGO_URI>")
89
+ ticker = "2330"
90
+
91
+ fetcher = AsyncBalanceSheetFetcher(ticker, db_client)
92
+
93
+ data = await fetcher.query_data()
94
+
95
+ print(data)
96
+ ```
97
+ 詳細各個fetcher的使用法請到[async_mode的fetchers資料夾下觀看](./neurostats_API/async_mode/fetchers/README.md)
98
+
99
+ ### Sync Mode
100
+ (#TODO)
101
+
102
+ > 舊版使用方法請到[fetchers資料夾下觀看](./neurostats_API/fetchers/README.md)
@@ -0,0 +1,121 @@
1
+ neurostats_API/__init__.py,sha256=PUd1fgRb8wSqCnfGirDJ3EdCyNNlRCpeTC19gBipANs,672
2
+ neurostats_API/cli.py,sha256=UJSWLIw03P24p-gkBb6JSEI5dW5U12UvLf1L8HjQD-o,873
3
+ neurostats_API/main.py,sha256=QcsfmWivg2Dnqw3MTJWiI0QvEiRs0VuH-BjwQHFCv00,677
4
+ neurostats_API/async_mode/__init__.py,sha256=arSINQm3O3g-IwfOSLsGraEj2icJbkuW0t5HLPQ4Xk8,348
5
+ neurostats_API/async_mode/db/__init__.py,sha256=7g0OJXgPsIDWRmH25h666cLlvVYpEDyWGXAVCHsNht0,86
6
+ neurostats_API/async_mode/db/base.py,sha256=63kW2cKBSrs0B4RJaX_3Jv12UYD2APH8sRh2UEVKucw,676
7
+ neurostats_API/async_mode/db/tej.py,sha256=ku7CfhrSJ8gfUQ_NRjyjSz-OFmqyCGGnXz8Tpue5gP0,324
8
+ neurostats_API/async_mode/db/twse.py,sha256=YZA-NUZ01EAUKPsaNEaZn3cuzeL9n1fi03aBiHUJGAA,220
9
+ neurostats_API/async_mode/db/us.py,sha256=SgoU_OpSkpmrlBiNvy5xgyssb7-xK8ptezi4SR00t4I,271
10
+ neurostats_API/async_mode/db_extractors/__init__.py,sha256=KAjeAL3XanXIhsPz_1uVAsvAoezL9KHdYjO8WEsNxPQ,452
11
+ neurostats_API/async_mode/db_extractors/base.py,sha256=3Xgdl6A5x93Qg7zMyJJFdE9ZMxsSDFtmXQ-i3gmnpjQ,1831
12
+ neurostats_API/async_mode/db_extractors/daily/__init__.py,sha256=crXYyPT-LnEWsMFMoOtW3iD4VDXe8EHfYH_IcdfLoRs,232
13
+ neurostats_API/async_mode/db_extractors/daily/base.py,sha256=U7cxKHIqSITEoDxqShN-3k7_pzLW-VnKLSsXo-eQh0s,2925
14
+ neurostats_API/async_mode/db_extractors/daily/tej_chip.py,sha256=Ywc0iIIPWw1VdtVc2_s1CNrgj0_G1wOaGzrgyVTN2k8,414
15
+ neurostats_API/async_mode/db_extractors/daily/tej_tech.py,sha256=M3k1pmv48DfiUaIfDKx5gk85C5JpmuXdQhRcNzgOhPI,349
16
+ neurostats_API/async_mode/db_extractors/daily/twse_chip.py,sha256=WICwcsy2m_2ua9UnIjs_SZGFq7m2-UByx9x7TCk_rlY,1490
17
+ neurostats_API/async_mode/db_extractors/daily/value.py,sha256=j5QjFOhmvVum0D10prcZZ7_sxrojA-b8sP72Ge9lOnY,2859
18
+ neurostats_API/async_mode/db_extractors/daily/yf.py,sha256=GewIRJ7_baBc9QL7BHVdnxQ0uXYpFNeiPuwKxzByULg,377
19
+ neurostats_API/async_mode/db_extractors/month_revenue/__init__.py,sha256=VXjEn4xnXsPpt8lq7egSM_3sLnhtOIQG2lNedDC_Shw,50
20
+ neurostats_API/async_mode/db_extractors/month_revenue/base.py,sha256=pXK6MEQtwChZl3J3yGIFmGDbKaoS4tJFjgSEUkqjGQw,4271
21
+ neurostats_API/async_mode/db_extractors/month_revenue/twse.py,sha256=54HT6ISZYC9uFx-YAcWQN4r3rKuZN0fbC5zgsJE46Ic,197
22
+ neurostats_API/async_mode/db_extractors/seasonal/__init__.py,sha256=sotZHTbuGH2am48hb0bIGVs3K_14PgMKsO-FEQzF0dI,236
23
+ neurostats_API/async_mode/db_extractors/seasonal/balance_sheet.py,sha256=67OzGUxZbt7LQ9m3uTcnPPhEYQ17ygEH-Kv1eaR1X2Y,560
24
+ neurostats_API/async_mode/db_extractors/seasonal/base.py,sha256=VwaZ5fzZ40lHjo8xR_SumD7hTDwnIxiWrtY3fHm3kMA,4662
25
+ neurostats_API/async_mode/db_extractors/seasonal/cashflow.py,sha256=2yOIOMFic9DTeEyhD2xD_tGrtSWb-LirUnN1a5ka_3A,293
26
+ neurostats_API/async_mode/db_extractors/seasonal/profit_lose.py,sha256=AMKMVIVIBWTRk2b_A33OUuTLrCwc-xYj5fIL4YjLnug,564
27
+ neurostats_API/async_mode/db_extractors/seasonal/tej.py,sha256=SqObDqR3uOnxXGF12VQz7Rzw7B5YAimY1-nR0ImLkaY,2591
28
+ neurostats_API/async_mode/factory/__init__.py,sha256=7dw36HPjV9JHfEBF7n1pA8i4f-07ACKREnGMUHxh7KY,45
29
+ neurostats_API/async_mode/factory/extractor_factory.py,sha256=6dV_-zAtLj6WDbc0N0hRPy7RWl-4ppAyAy1YCbWii0M,4530
30
+ neurostats_API/async_mode/factory/transformer_factory.py,sha256=atw_-wPz2JZpJscPVE2jvFB6QNwwmcRNKQH9iai-13E,4942
31
+ neurostats_API/async_mode/fetchers/__init__.py,sha256=AM8P6YQG4_5OI49GcfoKd3GiLL1y4MfaafDnkk2v52Q,536
32
+ neurostats_API/async_mode/fetchers/balance_sheet.py,sha256=wzlXW5gPh5S5MD5jIUB_yeEL_aW2_CeX2DNKBio0-EA,1129
33
+ neurostats_API/async_mode/fetchers/base.py,sha256=fWlPmvsQWHcgv8z36BsXj8Y92-VKmr8cUW1EjkqI3_8,1785
34
+ neurostats_API/async_mode/fetchers/cash_flow.py,sha256=uj2JEbilgn595yJcMNvlTZHdkvu7E9y2e7rqs_ne270,2130
35
+ neurostats_API/async_mode/fetchers/finance_overview.py,sha256=nBjKPqrzhXrYvBMbhvzCygRpKR2xV3tPvNX5foiuBSY,4570
36
+ neurostats_API/async_mode/fetchers/month_revenue.py,sha256=GDrFrjTe81uAzeKvd5HghH9iPXouXL8JTt8hfaFkig4,1258
37
+ neurostats_API/async_mode/fetchers/profit_lose.py,sha256=-YMqO6hEbGntAeAf9y66LX56fj6VrHWr1_IIbQ_bUBQ,1483
38
+ neurostats_API/async_mode/fetchers/tech.py,sha256=xj6LRnexMePi4Nc9P0lduAjJwjcVOp1xInIFjrRMrbM,6686
39
+ neurostats_API/async_mode/fetchers/twse_institution.py,sha256=DKyecoIa_2-CUfDXKp2dBFJk0lfCBIr2steVVa-jq9o,2055
40
+ neurostats_API/async_mode/fetchers/twse_margin.py,sha256=wra84uFh9ooCoyFWhRuV4vP3Uhojc13XHx51UD90uYo,3173
41
+ neurostats_API/async_mode/fetchers/value.py,sha256=7FpO0_BOOvq4ZlwwaIfSD8xO_s1O8ykxz147fkiZIt4,2883
42
+ neurostats_API/async_mode/fetchers/tej/__init__.py,sha256=QNXGg1gE_bnkZWybulRZXtcCPWV6Aj1nLz7r0Mo4BN0,93
43
+ neurostats_API/async_mode/fetchers/tej/seasonal_data.py,sha256=oeMpj4GMzw22KHjVDTcVO2hwVfxmnO291N6O_dKp0sw,2836
44
+ neurostats_API/async_mode/fetchers/tej/tech.py,sha256=0wG2bep_nJp3kBS0nIzH6191R5bwEeS-upK40DTGpjU,1110
45
+ neurostats_API/config/company_list/ticker_index_industry_map.json,sha256=JPSrkMrxOg5GB6HoOhOKeCatznvGAFJpWt92iAhutak,162681
46
+ neurostats_API/config/company_list/tw.json,sha256=VWaDFvd0ACCVSWItcHHpmVuM_RzP71jLZl9RBHztu-0,51332
47
+ neurostats_API/config/company_list/us.json,sha256=XtXr6Pm1KO1fPrXtzuvKgI1_wzUzJk5pjXwNJ-lnTWk,445260
48
+ neurostats_API/config/company_list/us_TradingView_list.json,sha256=SlHgFY5n0dHrEw5vD15NyXNob9pDk181p5wPiXxqlhA,1226883
49
+ neurostats_API/config/tej_db/tej_db_index.yaml,sha256=lu-cmbB6dhx0eUlBSkyzXWqPKlwRtEvqlMTAh2y0oHs,969
50
+ neurostats_API/config/tej_db/tej_db_percent_index.yaml,sha256=xSgmamEK0DUBKRllUb94p9TxhJln_BzFoFYK9OJ0fkM,302
51
+ neurostats_API/config/tej_db/tej_db_skip_index.yaml,sha256=sFn7kMCd3xZOZCkVNLsWaMtveDoUB8L49FnutyMeWHA,234
52
+ neurostats_API/config/tej_db/tej_db_thousand_index.yaml,sha256=K2YFBSrxqX1V2upy0IUeQ4ung4aPrjtlqYSvCGaaO8I,479
53
+ neurostats_API/config/twse/balance_sheet.yaml,sha256=6XygNG_Ybb1Xkk1e39LMLKr7ATvaCP3xxuwFbgNl6dA,673
54
+ neurostats_API/config/twse/cash_flow_percentage.yaml,sha256=fk2Z4eb1JjGFvP134eJatHacB7BgTkBenhDJr83w8RE,1345
55
+ neurostats_API/config/twse/finance_overview_dict.yaml,sha256=B9nV75StXkrF3yv2-eezzitlJ38eEK86RD_VY6588gQ,2884
56
+ neurostats_API/config/twse/profit_lose.yaml,sha256=L04XeZ4OjPHIQUbLgTmP9icFfeEc_oqdMX5DJD8-BZQ,2915
57
+ neurostats_API/config/twse/seasonal_data_field_dict.txt,sha256=X8yc_el6p8BH_3FikTqBVFGsvWdXT6MHXLfKfi44334,8491
58
+ neurostats_API/fetchers/__init__.py,sha256=WTssemcLX2lUq_mM6yz365N3VULJIfISm30qVPLWdjE,540
59
+ neurostats_API/fetchers/balance_sheet.py,sha256=5DxcG8Ux2e0WRmPp-7eIK33oiipoQVRlXMtvtH0bknI,6934
60
+ neurostats_API/fetchers/base.py,sha256=fHdZJtBZ6OD1IUbW6sUTXsPJVWrj41Ay4TOJChp2keI,7236
61
+ neurostats_API/fetchers/cash_flow.py,sha256=OmimJ1afsU8hyJr5GSBhIWvYjtldnoPLSmjuJ1XXriQ,8003
62
+ neurostats_API/fetchers/finance_overview.py,sha256=GRjcO5JCjnSrOwBKUCgtCe3OlUSGJIgIFf2qcWs9tVs,38162
63
+ neurostats_API/fetchers/institution.py,sha256=YsPRnM2M25plhrgSQ6ckO7gj_toydBXYlR6OtPrp_0o,15380
64
+ neurostats_API/fetchers/margin_trading.py,sha256=0enMPpq0J55uts0nJFHOylXvLEMWZYSb-gt1BH5_gBM,11430
65
+ neurostats_API/fetchers/month_revenue.py,sha256=K1WZct6vLU3y_8uaXR3po5jzx2w3EYb2v3XkIX2_pBE,8313
66
+ neurostats_API/fetchers/profit_lose.py,sha256=MUTPPXHWZhhvcq1YzrY1dalFIXljUUG3UugXQimFy-Y,9170
67
+ neurostats_API/fetchers/tech.py,sha256=TsS8m25Otc3_2jTYITFe-wNHlDWcfWsHIxhOrqL8qMY,16016
68
+ neurostats_API/fetchers/tej_finance_report.py,sha256=mlIm2Qzs8-Xlzeb8uET8qGPWD3VGUx3g8qFFcY4UbAw,13022
69
+ neurostats_API/fetchers/value_invest.py,sha256=QxQS2GcoLIU9ZBDEo8iRK2yHd8YLmBS70Bq42F3IsSw,8295
70
+ neurostats_API/transformers/__init__.py,sha256=AJ0SkJ9P65gbdHPSygYw1X2I-KRJO20q20lLVP-JViE,676
71
+ neurostats_API/transformers/base.py,sha256=gFRuLmFzZl0HObEtMr78oscFP3ePBseMW7tB4s51-_c,4795
72
+ neurostats_API/transformers/balance_sheet/__init__.py,sha256=RCScBsR3zeC5UdyuiHD1CGRQufoFL5LkN8WbtI5JeA4,87
73
+ neurostats_API/transformers/balance_sheet/base.py,sha256=sEap9uHe-nri8F4gPV_FCVm0Qe6KWgpHt6a2ryAPd_8,1676
74
+ neurostats_API/transformers/balance_sheet/twse.py,sha256=ghQWvacJvJSEqu7RtNqICE5gK_N_AKWSvpfYv5Eioiw,2800
75
+ neurostats_API/transformers/balance_sheet/us.py,sha256=v1QUsI6bt8_AZV-oB5NEddjJYO3N1hs6zTbi7J3ZGME,1054
76
+ neurostats_API/transformers/cash_flow/__init__.py,sha256=KJs5kfjRV0ahy842ZVLvQuZS02YxT-w0cMNHfU0ngFE,79
77
+ neurostats_API/transformers/cash_flow/base.py,sha256=6Lt44O-xg658-jEFYBHOF2cgD0PGiKK43257uQMSetk,4392
78
+ neurostats_API/transformers/cash_flow/twse.py,sha256=srrmTmFheJig3el5jQIW8YBgpZVUOq-Af2zM4NxLm7s,2432
79
+ neurostats_API/transformers/cash_flow/us.py,sha256=nRJajeDz4HNkv42NosoP0Jir4tIA0ybhIZu9zHkjAEM,1304
80
+ neurostats_API/transformers/daily_chip/__init__.py,sha256=e-yvQ94J3dkzRbhZwOiAkyt_ub9bRQ7pAVDbO-61Grw,43
81
+ neurostats_API/transformers/daily_chip/base.py,sha256=KBsnpACakJh2W-k4Kvv-dVNnSNbUCGMeqvQsTQkz-aE,184
82
+ neurostats_API/transformers/daily_chip/tej.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
83
+ neurostats_API/transformers/daily_chip/twse_chip.py,sha256=miMu5Si0tFndznf7E_T26c1hYtNqwHplbuB3htVzeGQ,14655
84
+ neurostats_API/transformers/daily_chip/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
85
+ neurostats_API/transformers/daily_chip/utils/institution.py,sha256=1Zj9mxIhvwkmA599a1OYmdorPEAN_U3sl8uhvddxUW0,3384
86
+ neurostats_API/transformers/daily_chip/utils/margin_trading.py,sha256=oVY_OW63pcSc1TyM_jSPNAoj4HLyZCRshkdsHQsnxyk,38
87
+ neurostats_API/transformers/daily_chip/utils/security_lending.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
88
+ neurostats_API/transformers/daily_tech/__init__.py,sha256=xWOXQlK0Yo0SmH-2twdiOUXgl1w3RYZ-0R4mh7AnAKg,38
89
+ neurostats_API/transformers/daily_tech/base.py,sha256=95pN3EussgbYbDCwCP8x4aVnJtGpuEe8b1y1W53CTzA,185
90
+ neurostats_API/transformers/daily_tech/tech.py,sha256=bPAIAm28zxsEBjYvHeGaGHqg8wt7Zv7GtupICT8vJD4,2633
91
+ neurostats_API/transformers/daily_tech/utils/__init__.py,sha256=QvkOMEvBW5pIMjTKDBiyaJKq4_Z2NtpbLD7fiu_U6XM,36
92
+ neurostats_API/transformers/daily_tech/utils/processor.py,sha256=9zOjVFyWqzRXD5jIq2YkBGI4WZ8HFrI_ufssZgvKpdc,9314
93
+ neurostats_API/transformers/finance_overview/__init__.py,sha256=mWFn13YrugExrSQ7oJvnvP95W20_rQ1wOesrZY3XnSU,107
94
+ neurostats_API/transformers/finance_overview/agent_overview.py,sha256=DA7zLTslqiYCKIzC8wKKJK7f2cz2KpTOhqy-qDQmDrc,1974
95
+ neurostats_API/transformers/finance_overview/base.py,sha256=uksr5sUhbaL12ZBH3cUtR1Q0NzpQ8C36FwfwluB8uYE,29669
96
+ neurostats_API/transformers/finance_overview/stats_overview.py,sha256=ml-u6BHCSKaTebvDAOBgyJfT6o3LCmluCfneABn1ysw,2884
97
+ neurostats_API/transformers/month_revenue/__init__.py,sha256=fNj-FNJgl7yhYeswd3UFZEcSNoDF4kL6Mkspjom2cSo,47
98
+ neurostats_API/transformers/month_revenue/base.py,sha256=cDswLIZ7UBJX3insyI3NPunxOva9Pf-6TEW15tHjn4s,1881
99
+ neurostats_API/transformers/month_revenue/twse.py,sha256=sXCI2KBfMenEShtK3MUdIn7ZmiAJMUnqD1GAqpV31xM,5862
100
+ neurostats_API/transformers/profit_lose/__init__.py,sha256=oOPyakP1wDnmq7bsxgEm4vu1uWtUR34dd3Oegk9kvq0,83
101
+ neurostats_API/transformers/profit_lose/base.py,sha256=BJZjE1GmWBI3ayjDkzrtQTrn0vjTSVckPbrQ_u6zEl0,3125
102
+ neurostats_API/transformers/profit_lose/twse.py,sha256=RwAJWQBdsjFaLlW-HL6oUGxLAd8jXPpp6ljVB8uOfhQ,5400
103
+ neurostats_API/transformers/profit_lose/us.py,sha256=q7Vbxp_xzB0SUsxIqQYENi3RayfqR6Nfynvt7p-KHlI,847
104
+ neurostats_API/transformers/tej/__init__.py,sha256=WihARZhphkvApsKr4U0--68m1M-Dc_rpV7xoV2fUV7E,61
105
+ neurostats_API/transformers/tej/base.py,sha256=YD6M3Iok-KXb5EDhqa_fUzJ-zWXLeoXPsavdDJD-ks4,5436
106
+ neurostats_API/transformers/tej/finance_statement.py,sha256=rE-Kc94hzW8-xcKn6ry8LwwT8dSoGRKGsmvd5W4_SUs,2798
107
+ neurostats_API/transformers/value/__init__.py,sha256=D8qMk0aLsv7CBBJHo5zsq_UuBKmZYNyqS3s-RWfhvy8,73
108
+ neurostats_API/transformers/value/base.py,sha256=wR2LDiwGET126mwrPxYoApyl4lwx1MjWxFpOKLso_As,186
109
+ neurostats_API/transformers/value/tej.py,sha256=csk0kLCrvXN7T_j9KkvXRRJreWZK6t3bYlPEfWcfBTo,244
110
+ neurostats_API/transformers/value/twse.py,sha256=uNGLkxCIfQhzRkalSn6o2kgPT-uw41KGTL6s3e7SneI,1429
111
+ neurostats_API/utils/__init__.py,sha256=pmOZSjSJ8434GbofV1Wx4GAzcDabOK80LFVS4y3T6-A,223
112
+ neurostats_API/utils/calculate_value.py,sha256=ioPV5VWitJ2NylBi5vwfs-payAUYxWhAiS7aaJjzQKQ,4305
113
+ neurostats_API/utils/data_process.py,sha256=cD1Vzv8oDpsd1Y7qCALTyM-AP1nkwqhfOgDY0KQpXec,10442
114
+ neurostats_API/utils/datetime.py,sha256=XJya4G8b_-ZOaBbMXgQjWh2MC4wc-o6goQ7EQJQMWrQ,773
115
+ neurostats_API/utils/db_client.py,sha256=OYe6yazcR4Aa6jYmy47JrryUeh2NnKGqY2K_lSZe6i8,455
116
+ neurostats_API/utils/exception.py,sha256=yv92GVh5uHV1BgRmO4DwJcX_PtE0-TSgQoo3VnZ5hOQ,277
117
+ neurostats_API/utils/logger.py,sha256=egBiiPGTi5l1FoX_o6EvdGh81R0_k8hFPctSxq8RCoo,693
118
+ neurostats_API-1.0.0.dist-info/METADATA,sha256=FmP1isKAhWzzxvvCQnbsuNeOsWaRgdKSb-A9Vi0juIs,2964
119
+ neurostats_API-1.0.0.dist-info/WHEEL,sha256=R06PA3UVYHThwHvxuRWMqaGcr-PuniXahwjmQRFMEkY,91
120
+ neurostats_API-1.0.0.dist-info/top_level.txt,sha256=nSlQPMG0VtXivJyedp4Bkf86EOy2TpW10VGxolXrqnU,15
121
+ neurostats_API-1.0.0.dist-info/RECORD,,