neurostats-API 0.0.25rc1__py3-none-any.whl → 1.0.0rc1__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.
- neurostats_API/__init__.py +1 -1
- neurostats_API/async_mode/__init__.py +13 -0
- neurostats_API/async_mode/db/__init__.py +3 -0
- neurostats_API/async_mode/db/base.py +24 -0
- neurostats_API/async_mode/db/tej.py +10 -0
- neurostats_API/async_mode/db/twse.py +8 -0
- neurostats_API/async_mode/db/us.py +9 -0
- neurostats_API/async_mode/db_extractors/__init__.py +20 -0
- neurostats_API/async_mode/db_extractors/base.py +66 -0
- neurostats_API/async_mode/db_extractors/daily/__init__.py +7 -0
- neurostats_API/async_mode/db_extractors/daily/base.py +89 -0
- neurostats_API/async_mode/db_extractors/daily/tej_chip.py +14 -0
- neurostats_API/async_mode/db_extractors/daily/tej_tech.py +12 -0
- neurostats_API/async_mode/db_extractors/daily/twse_chip.py +44 -0
- neurostats_API/async_mode/db_extractors/daily/value.py +93 -0
- neurostats_API/async_mode/db_extractors/daily/yf.py +12 -0
- neurostats_API/async_mode/db_extractors/month_revenue/__init__.py +1 -0
- neurostats_API/async_mode/db_extractors/month_revenue/base.py +140 -0
- neurostats_API/async_mode/db_extractors/month_revenue/twse.py +5 -0
- neurostats_API/async_mode/db_extractors/seasonal/__init__.py +4 -0
- neurostats_API/async_mode/db_extractors/seasonal/balance_sheet.py +19 -0
- neurostats_API/async_mode/db_extractors/seasonal/base.py +159 -0
- neurostats_API/async_mode/db_extractors/seasonal/cashflow.py +10 -0
- neurostats_API/async_mode/db_extractors/seasonal/profit_lose.py +17 -0
- neurostats_API/async_mode/db_extractors/seasonal/tej.py +87 -0
- neurostats_API/async_mode/factory/__init__.py +1 -0
- neurostats_API/async_mode/factory/extractor_factory.py +168 -0
- neurostats_API/async_mode/factory/transformer_factory.py +164 -0
- neurostats_API/async_mode/fetchers/__init__.py +10 -0
- neurostats_API/async_mode/fetchers/balance_sheet.py +31 -0
- neurostats_API/async_mode/fetchers/base.py +48 -0
- neurostats_API/async_mode/fetchers/cash_flow.py +56 -0
- neurostats_API/async_mode/fetchers/finance_overview.py +134 -0
- neurostats_API/async_mode/fetchers/month_revenue.py +35 -0
- neurostats_API/async_mode/fetchers/profit_lose.py +46 -0
- neurostats_API/async_mode/fetchers/tech.py +205 -0
- neurostats_API/async_mode/fetchers/tej.py +88 -0
- neurostats_API/async_mode/fetchers/twse_institution.py +62 -0
- neurostats_API/async_mode/fetchers/twse_margin.py +100 -0
- neurostats_API/async_mode/fetchers/value.py +76 -0
- neurostats_API/config/company_list/ticker_index_industry_map.json +7946 -0
- neurostats_API/config/company_list/us.json +9986 -0
- neurostats_API/{tools → config}/tej_db/tej_db_skip_index.yaml +0 -2
- neurostats_API/{tools → config}/twse/profit_lose.yaml +0 -6
- neurostats_API/fetchers/finance_overview.py +27 -5
- neurostats_API/transformers/__init__.py +40 -0
- neurostats_API/transformers/balance_sheet/__init__.py +2 -0
- neurostats_API/transformers/balance_sheet/base.py +51 -0
- neurostats_API/transformers/balance_sheet/twse.py +76 -0
- neurostats_API/transformers/balance_sheet/us.py +30 -0
- neurostats_API/transformers/base.py +110 -0
- neurostats_API/transformers/cash_flow/__init__.py +2 -0
- neurostats_API/transformers/cash_flow/base.py +114 -0
- neurostats_API/transformers/cash_flow/twse.py +68 -0
- neurostats_API/transformers/cash_flow/us.py +38 -0
- neurostats_API/transformers/daily_chip/__init__.py +1 -0
- neurostats_API/transformers/daily_chip/base.py +5 -0
- neurostats_API/transformers/daily_chip/tej.py +0 -0
- neurostats_API/transformers/daily_chip/twse_chip.py +412 -0
- neurostats_API/transformers/daily_chip/utils/__init__.py +0 -0
- neurostats_API/transformers/daily_chip/utils/institution.py +90 -0
- neurostats_API/transformers/daily_chip/utils/margin_trading.py +2 -0
- neurostats_API/transformers/daily_chip/utils/security_lending.py +0 -0
- neurostats_API/transformers/daily_tech/__init__.py +1 -0
- neurostats_API/transformers/daily_tech/base.py +5 -0
- neurostats_API/transformers/daily_tech/tech.py +84 -0
- neurostats_API/transformers/daily_tech/utils/__init__.py +1 -0
- neurostats_API/transformers/daily_tech/utils/processor.py +251 -0
- neurostats_API/transformers/finance_overview/__init__.py +2 -0
- neurostats_API/transformers/finance_overview/agent_overview.py +55 -0
- neurostats_API/transformers/finance_overview/base.py +824 -0
- neurostats_API/transformers/finance_overview/stats_overview.py +64 -0
- neurostats_API/transformers/month_revenue/__init__.py +1 -0
- neurostats_API/transformers/month_revenue/base.py +60 -0
- neurostats_API/transformers/month_revenue/twse.py +129 -0
- neurostats_API/transformers/profit_lose/__init__.py +2 -0
- neurostats_API/transformers/profit_lose/base.py +82 -0
- neurostats_API/transformers/profit_lose/twse.py +133 -0
- neurostats_API/transformers/profit_lose/us.py +25 -0
- neurostats_API/transformers/tej/__init__.py +1 -0
- neurostats_API/transformers/tej/base.py +149 -0
- neurostats_API/transformers/tej/finance_statement.py +80 -0
- neurostats_API/transformers/value/__init__.py +1 -0
- neurostats_API/transformers/value/base.py +5 -0
- neurostats_API/transformers/value/tej.py +8 -0
- neurostats_API/transformers/value/twse.py +48 -0
- neurostats_API/utils/__init__.py +1 -1
- neurostats_API/utils/data_process.py +10 -6
- neurostats_API/utils/exception.py +8 -0
- neurostats_API/utils/logger.py +21 -0
- neurostats_API-1.0.0rc1.dist-info/METADATA +102 -0
- neurostats_API-1.0.0rc1.dist-info/RECORD +119 -0
- neurostats_API-0.0.25rc1.dist-info/METADATA +0 -858
- neurostats_API-0.0.25rc1.dist-info/RECORD +0 -36
- /neurostats_API/{tools → config}/company_list/tw.json +0 -0
- /neurostats_API/{tools → config}/company_list/us_TradingView_list.json +0 -0
- /neurostats_API/{tools → config}/tej_db/tej_db_index.yaml +0 -0
- /neurostats_API/{tools → config}/tej_db/tej_db_percent_index.yaml +0 -0
- /neurostats_API/{tools → config}/tej_db/tej_db_thousand_index.yaml +0 -0
- /neurostats_API/{tools → config}/twse/balance_sheet.yaml +0 -0
- /neurostats_API/{tools → config}/twse/cash_flow_percentage.yaml +0 -0
- /neurostats_API/{tools → config}/twse/finance_overview_dict.yaml +0 -0
- /neurostats_API/{tools → config}/twse/seasonal_data_field_dict.txt +0 -0
- {neurostats_API-0.0.25rc1.dist-info → neurostats_API-1.0.0rc1.dist-info}/WHEEL +0 -0
- {neurostats_API-0.0.25rc1.dist-info → neurostats_API-1.0.0rc1.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 (len(fetched_data) == 0):
|
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,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 len(daily_data) < 1:
|
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
|
+
}
|
neurostats_API/utils/__init__.py
CHANGED
@@ -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.
|
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.
|
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.
|
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
|
-
|
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
|
104
|
+
sliced_table = total_table.loc[:, desired_order]
|
102
105
|
|
103
106
|
return sliced_table.T
|
104
107
|
|
105
108
|
else:
|
106
|
-
|
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.0rc1
|
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
|
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.0rc1
|
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,119 @@
|
|
1
|
+
neurostats_API/__init__.py,sha256=WELjgN6N6r4KIzw_tmKuk3TIyUBFcnxHUhKY0tBDqSM,323
|
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=pl8vRJuPr0bpSnumGPX28xlyQAp9QuXM86chigccbYI,1375
|
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=3mSoh-zmxx2gc57MD1Uii073_BqGCohwYJJjBbXHz5w,4352
|
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=shPoPjwcKXGmW9dwQr89amkcRnGc1SXlHIukMVgwOpw,510
|
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=4qMnnZCOa3qL9wuch5BatPkt737Q4D6TVtRnhUfuLt0,6704
|
39
|
+
neurostats_API/async_mode/fetchers/tej.py,sha256=PfYA0ap7ebWMpffVT9tmLFdwHWETAU7MKLFxAjOlg-E,2802
|
40
|
+
neurostats_API/async_mode/fetchers/twse_institution.py,sha256=DKyecoIa_2-CUfDXKp2dBFJk0lfCBIr2steVVa-jq9o,2055
|
41
|
+
neurostats_API/async_mode/fetchers/twse_margin.py,sha256=wra84uFh9ooCoyFWhRuV4vP3Uhojc13XHx51UD90uYo,3173
|
42
|
+
neurostats_API/async_mode/fetchers/value.py,sha256=7FpO0_BOOvq4ZlwwaIfSD8xO_s1O8ykxz147fkiZIt4,2883
|
43
|
+
neurostats_API/config/company_list/ticker_index_industry_map.json,sha256=JPSrkMrxOg5GB6HoOhOKeCatznvGAFJpWt92iAhutak,162681
|
44
|
+
neurostats_API/config/company_list/tw.json,sha256=VWaDFvd0ACCVSWItcHHpmVuM_RzP71jLZl9RBHztu-0,51332
|
45
|
+
neurostats_API/config/company_list/us.json,sha256=XtXr6Pm1KO1fPrXtzuvKgI1_wzUzJk5pjXwNJ-lnTWk,445260
|
46
|
+
neurostats_API/config/company_list/us_TradingView_list.json,sha256=SlHgFY5n0dHrEw5vD15NyXNob9pDk181p5wPiXxqlhA,1226883
|
47
|
+
neurostats_API/config/tej_db/tej_db_index.yaml,sha256=lu-cmbB6dhx0eUlBSkyzXWqPKlwRtEvqlMTAh2y0oHs,969
|
48
|
+
neurostats_API/config/tej_db/tej_db_percent_index.yaml,sha256=xSgmamEK0DUBKRllUb94p9TxhJln_BzFoFYK9OJ0fkM,302
|
49
|
+
neurostats_API/config/tej_db/tej_db_skip_index.yaml,sha256=sFn7kMCd3xZOZCkVNLsWaMtveDoUB8L49FnutyMeWHA,234
|
50
|
+
neurostats_API/config/tej_db/tej_db_thousand_index.yaml,sha256=K2YFBSrxqX1V2upy0IUeQ4ung4aPrjtlqYSvCGaaO8I,479
|
51
|
+
neurostats_API/config/twse/balance_sheet.yaml,sha256=6XygNG_Ybb1Xkk1e39LMLKr7ATvaCP3xxuwFbgNl6dA,673
|
52
|
+
neurostats_API/config/twse/cash_flow_percentage.yaml,sha256=fk2Z4eb1JjGFvP134eJatHacB7BgTkBenhDJr83w8RE,1345
|
53
|
+
neurostats_API/config/twse/finance_overview_dict.yaml,sha256=B9nV75StXkrF3yv2-eezzitlJ38eEK86RD_VY6588gQ,2884
|
54
|
+
neurostats_API/config/twse/profit_lose.yaml,sha256=L04XeZ4OjPHIQUbLgTmP9icFfeEc_oqdMX5DJD8-BZQ,2915
|
55
|
+
neurostats_API/config/twse/seasonal_data_field_dict.txt,sha256=X8yc_el6p8BH_3FikTqBVFGsvWdXT6MHXLfKfi44334,8491
|
56
|
+
neurostats_API/fetchers/__init__.py,sha256=WTssemcLX2lUq_mM6yz365N3VULJIfISm30qVPLWdjE,540
|
57
|
+
neurostats_API/fetchers/balance_sheet.py,sha256=5DxcG8Ux2e0WRmPp-7eIK33oiipoQVRlXMtvtH0bknI,6934
|
58
|
+
neurostats_API/fetchers/base.py,sha256=fHdZJtBZ6OD1IUbW6sUTXsPJVWrj41Ay4TOJChp2keI,7236
|
59
|
+
neurostats_API/fetchers/cash_flow.py,sha256=OmimJ1afsU8hyJr5GSBhIWvYjtldnoPLSmjuJ1XXriQ,8003
|
60
|
+
neurostats_API/fetchers/finance_overview.py,sha256=9XWDtpReONYXRVY184uI4ilNT26udVtLm_6vEWortcs,38197
|
61
|
+
neurostats_API/fetchers/institution.py,sha256=YsPRnM2M25plhrgSQ6ckO7gj_toydBXYlR6OtPrp_0o,15380
|
62
|
+
neurostats_API/fetchers/margin_trading.py,sha256=0enMPpq0J55uts0nJFHOylXvLEMWZYSb-gt1BH5_gBM,11430
|
63
|
+
neurostats_API/fetchers/month_revenue.py,sha256=K1WZct6vLU3y_8uaXR3po5jzx2w3EYb2v3XkIX2_pBE,8313
|
64
|
+
neurostats_API/fetchers/profit_lose.py,sha256=MUTPPXHWZhhvcq1YzrY1dalFIXljUUG3UugXQimFy-Y,9170
|
65
|
+
neurostats_API/fetchers/tech.py,sha256=TsS8m25Otc3_2jTYITFe-wNHlDWcfWsHIxhOrqL8qMY,16016
|
66
|
+
neurostats_API/fetchers/tej_finance_report.py,sha256=mlIm2Qzs8-Xlzeb8uET8qGPWD3VGUx3g8qFFcY4UbAw,13022
|
67
|
+
neurostats_API/fetchers/value_invest.py,sha256=QxQS2GcoLIU9ZBDEo8iRK2yHd8YLmBS70Bq42F3IsSw,8295
|
68
|
+
neurostats_API/transformers/__init__.py,sha256=AJ0SkJ9P65gbdHPSygYw1X2I-KRJO20q20lLVP-JViE,676
|
69
|
+
neurostats_API/transformers/base.py,sha256=ju6PCoc9CNo-sdGCYnozQ2_l8KBSHEEe5W2ua8HxzR0,3422
|
70
|
+
neurostats_API/transformers/balance_sheet/__init__.py,sha256=RCScBsR3zeC5UdyuiHD1CGRQufoFL5LkN8WbtI5JeA4,87
|
71
|
+
neurostats_API/transformers/balance_sheet/base.py,sha256=sEap9uHe-nri8F4gPV_FCVm0Qe6KWgpHt6a2ryAPd_8,1676
|
72
|
+
neurostats_API/transformers/balance_sheet/twse.py,sha256=ZJKfRN4HkmmcbJsYY3t1Q6ufq0ri8btba5O9EhREW_g,2710
|
73
|
+
neurostats_API/transformers/balance_sheet/us.py,sha256=WS1JjShLcs9oGov4Bdaggs_eTIzb8SSutVKKKbAK7Ts,897
|
74
|
+
neurostats_API/transformers/cash_flow/__init__.py,sha256=KJs5kfjRV0ahy842ZVLvQuZS02YxT-w0cMNHfU0ngFE,79
|
75
|
+
neurostats_API/transformers/cash_flow/base.py,sha256=6Lt44O-xg658-jEFYBHOF2cgD0PGiKK43257uQMSetk,4392
|
76
|
+
neurostats_API/transformers/cash_flow/twse.py,sha256=_ZIiZrjXSBCxgpXRgXe8MYWFWlDSVQVEb06P90LOezA,2351
|
77
|
+
neurostats_API/transformers/cash_flow/us.py,sha256=nRJajeDz4HNkv42NosoP0Jir4tIA0ybhIZu9zHkjAEM,1304
|
78
|
+
neurostats_API/transformers/daily_chip/__init__.py,sha256=e-yvQ94J3dkzRbhZwOiAkyt_ub9bRQ7pAVDbO-61Grw,43
|
79
|
+
neurostats_API/transformers/daily_chip/base.py,sha256=KBsnpACakJh2W-k4Kvv-dVNnSNbUCGMeqvQsTQkz-aE,184
|
80
|
+
neurostats_API/transformers/daily_chip/tej.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
81
|
+
neurostats_API/transformers/daily_chip/twse_chip.py,sha256=QZlbOCOSRH0ds1NZjJdQWfHhVfmkmAS9G5zM64dhAis,14663
|
82
|
+
neurostats_API/transformers/daily_chip/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
83
|
+
neurostats_API/transformers/daily_chip/utils/institution.py,sha256=1Zj9mxIhvwkmA599a1OYmdorPEAN_U3sl8uhvddxUW0,3384
|
84
|
+
neurostats_API/transformers/daily_chip/utils/margin_trading.py,sha256=oVY_OW63pcSc1TyM_jSPNAoj4HLyZCRshkdsHQsnxyk,38
|
85
|
+
neurostats_API/transformers/daily_chip/utils/security_lending.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
86
|
+
neurostats_API/transformers/daily_tech/__init__.py,sha256=xWOXQlK0Yo0SmH-2twdiOUXgl1w3RYZ-0R4mh7AnAKg,38
|
87
|
+
neurostats_API/transformers/daily_tech/base.py,sha256=95pN3EussgbYbDCwCP8x4aVnJtGpuEe8b1y1W53CTzA,185
|
88
|
+
neurostats_API/transformers/daily_tech/tech.py,sha256=bPAIAm28zxsEBjYvHeGaGHqg8wt7Zv7GtupICT8vJD4,2633
|
89
|
+
neurostats_API/transformers/daily_tech/utils/__init__.py,sha256=QvkOMEvBW5pIMjTKDBiyaJKq4_Z2NtpbLD7fiu_U6XM,36
|
90
|
+
neurostats_API/transformers/daily_tech/utils/processor.py,sha256=9zOjVFyWqzRXD5jIq2YkBGI4WZ8HFrI_ufssZgvKpdc,9314
|
91
|
+
neurostats_API/transformers/finance_overview/__init__.py,sha256=mWFn13YrugExrSQ7oJvnvP95W20_rQ1wOesrZY3XnSU,107
|
92
|
+
neurostats_API/transformers/finance_overview/agent_overview.py,sha256=DA7zLTslqiYCKIzC8wKKJK7f2cz2KpTOhqy-qDQmDrc,1974
|
93
|
+
neurostats_API/transformers/finance_overview/base.py,sha256=uksr5sUhbaL12ZBH3cUtR1Q0NzpQ8C36FwfwluB8uYE,29669
|
94
|
+
neurostats_API/transformers/finance_overview/stats_overview.py,sha256=pRstGTw7flYQ8nDFHA8BioWRGXBTu_T2GBuzm5us0xM,2498
|
95
|
+
neurostats_API/transformers/month_revenue/__init__.py,sha256=fNj-FNJgl7yhYeswd3UFZEcSNoDF4kL6Mkspjom2cSo,47
|
96
|
+
neurostats_API/transformers/month_revenue/base.py,sha256=cDswLIZ7UBJX3insyI3NPunxOva9Pf-6TEW15tHjn4s,1881
|
97
|
+
neurostats_API/transformers/month_revenue/twse.py,sha256=-QhPI3hRc7PPWmFarsbBINauv6LdwXlyR_hIR6alh34,5642
|
98
|
+
neurostats_API/transformers/profit_lose/__init__.py,sha256=oOPyakP1wDnmq7bsxgEm4vu1uWtUR34dd3Oegk9kvq0,83
|
99
|
+
neurostats_API/transformers/profit_lose/base.py,sha256=BJZjE1GmWBI3ayjDkzrtQTrn0vjTSVckPbrQ_u6zEl0,3125
|
100
|
+
neurostats_API/transformers/profit_lose/twse.py,sha256=kpIEk7D309umdt5xRvmMDvNfuwS53CwqpIhczCKwrCo,5402
|
101
|
+
neurostats_API/transformers/profit_lose/us.py,sha256=QzAd2N_1Dqqb2TEPCLkqxsfp62gOMffbSOgr6FFODRM,804
|
102
|
+
neurostats_API/transformers/tej/__init__.py,sha256=WihARZhphkvApsKr4U0--68m1M-Dc_rpV7xoV2fUV7E,61
|
103
|
+
neurostats_API/transformers/tej/base.py,sha256=YD6M3Iok-KXb5EDhqa_fUzJ-zWXLeoXPsavdDJD-ks4,5436
|
104
|
+
neurostats_API/transformers/tej/finance_statement.py,sha256=lTRZKJIrnDBJu4tGvaMBAQ6Ps_yixXWc1FsGJAHsA90,2804
|
105
|
+
neurostats_API/transformers/value/__init__.py,sha256=D8qMk0aLsv7CBBJHo5zsq_UuBKmZYNyqS3s-RWfhvy8,73
|
106
|
+
neurostats_API/transformers/value/base.py,sha256=wR2LDiwGET126mwrPxYoApyl4lwx1MjWxFpOKLso_As,186
|
107
|
+
neurostats_API/transformers/value/tej.py,sha256=csk0kLCrvXN7T_j9KkvXRRJreWZK6t3bYlPEfWcfBTo,244
|
108
|
+
neurostats_API/transformers/value/twse.py,sha256=DbBqnKmaY0ceR1Q7PWiIF6CjI8eLshwQkR9zIj0xQSc,1432
|
109
|
+
neurostats_API/utils/__init__.py,sha256=ZPLgh-MNOhskDhWzabLXAyZIjwJgX-sE5YlWJHEWfUw,222
|
110
|
+
neurostats_API/utils/calculate_value.py,sha256=ioPV5VWitJ2NylBi5vwfs-payAUYxWhAiS7aaJjzQKQ,4305
|
111
|
+
neurostats_API/utils/data_process.py,sha256=cD1Vzv8oDpsd1Y7qCALTyM-AP1nkwqhfOgDY0KQpXec,10442
|
112
|
+
neurostats_API/utils/datetime.py,sha256=XJya4G8b_-ZOaBbMXgQjWh2MC4wc-o6goQ7EQJQMWrQ,773
|
113
|
+
neurostats_API/utils/db_client.py,sha256=OYe6yazcR4Aa6jYmy47JrryUeh2NnKGqY2K_lSZe6i8,455
|
114
|
+
neurostats_API/utils/exception.py,sha256=yv92GVh5uHV1BgRmO4DwJcX_PtE0-TSgQoo3VnZ5hOQ,277
|
115
|
+
neurostats_API/utils/logger.py,sha256=egBiiPGTi5l1FoX_o6EvdGh81R0_k8hFPctSxq8RCoo,693
|
116
|
+
neurostats_API-1.0.0rc1.dist-info/METADATA,sha256=86hApbJb36N44lqvTcbsh2QRV9uvOSXwtruFLt0EWB8,2964
|
117
|
+
neurostats_API-1.0.0rc1.dist-info/WHEEL,sha256=R06PA3UVYHThwHvxuRWMqaGcr-PuniXahwjmQRFMEkY,91
|
118
|
+
neurostats_API-1.0.0rc1.dist-info/top_level.txt,sha256=nSlQPMG0VtXivJyedp4Bkf86EOy2TpW10VGxolXrqnU,15
|
119
|
+
neurostats_API-1.0.0rc1.dist-info/RECORD,,
|