neurostats-API 0.0.12__py3-none-any.whl → 0.0.14__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.
@@ -1 +1 @@
1
- __version__='0.0.12'
1
+ __version__='0.0.14'
@@ -164,25 +164,26 @@ class InstitutionFetcher(StatsFetcher):
164
164
  latest_daily_data['volume'])
165
165
  }
166
166
  # 一年內法人
167
- annual_dates = [data['date'].strftime("%Y-%m-%d") for data in daily_datas]
167
+ annual_dates = [
168
+ data['date'].strftime("%Y-%m-%d") for data in daily_datas
169
+ ]
168
170
  annual_closes = {
169
- data['date'].strftime("%Y-%m-%d") : data['close']
171
+ data['date'].strftime("%Y-%m-%d"): data['close']
170
172
  for data in daily_datas
171
173
  if (data['date'].strftime("%Y-%m-%d") in annual_dates)
172
174
  }
173
175
  annual_volumes = {
174
- data['date'].strftime("%Y-%m-%d") : data['volume']
176
+ data['date'].strftime("%Y-%m-%d"): data['volume']
175
177
  for data in daily_datas
176
178
  if (data['date'].strftime("%Y-%m-%d") in annual_dates)
177
179
  }
178
180
  annual_trading = {
179
- data['date'].strftime("%Y-%m-%d") : data
181
+ data['date'].strftime("%Y-%m-%d"): data
180
182
  for data in institution_tradings
181
- }
183
+ }
182
184
 
183
185
  annual_trading = {
184
186
  date: {
185
-
186
187
  "close": annual_closes[date],
187
188
  "volume": annual_volumes[date],
188
189
  **annual_trading[date]
@@ -217,13 +218,18 @@ class InstitutionFetcher(StatsFetcher):
217
218
  self.target_institution(latest_trading,
218
219
  latest_table['institutional_investor'],
219
220
  key, volume)
220
-
221
- for trade_type in ['buy', 'sell']:
222
- for unit in ['stock', 'percentage']:
223
- latest_table['institutional_investor'][trade_type][
224
- unit] = (latest_table['foreign'][trade_type][unit] +
225
- latest_table['prop'][trade_type][unit] +
226
- latest_table['mutual'][trade_type][unit])
221
+ # 計算合計
222
+ for unit in ['stock', 'percentage']:
223
+ # 買進總和
224
+ latest_table['institutional_investor']['buy'][unit] = (
225
+ latest_table['foreign']['buy'][unit] +
226
+ latest_table['prop']['buy'][unit] +
227
+ latest_table['mutual']['buy'][unit])
228
+ # 賣出總和
229
+ latest_table['institutional_investor']['sell'][unit] = (
230
+ latest_table['foreign']['sell'][unit] +
231
+ latest_table['prop']['sell'][unit] +
232
+ latest_table['mutual']['sell'][unit])
227
233
 
228
234
  frames = []
229
235
  for category, trades in latest_table.items():
@@ -21,12 +21,6 @@ class ProfitLoseFetcher(StatsFetcher):
21
21
  def prepare_query(self, target_season):
22
22
  pipeline = super().prepare_query()
23
23
 
24
- target_query = {
25
- "year": "$$target_season_data.year",
26
- "season": "$$target_season_data.season",
27
- "balance_sheet": "$$$$target_season_data.balance_sheet"
28
- }
29
-
30
24
  pipeline.append({
31
25
  "$project": {
32
26
  "_id": 0,
@@ -121,6 +115,9 @@ class ProfitLoseFetcher(StatsFetcher):
121
115
  elif ('YoY' in item_name):
122
116
  if (isinstance(item, (float, int))):
123
117
  item = StatsProcessor.cal_percentage(item)
118
+ elif ('每股盈餘' in index_name):
119
+ if (isinstance(item, (float, int))):
120
+ item = StatsProcessor.cal_non_percentage(item, postfix="元")
124
121
  else:
125
122
  if (isinstance(item, (float, int))):
126
123
  item = StatsProcessor.cal_non_percentage(item, postfix="千元")
@@ -153,6 +150,9 @@ class ProfitLoseFetcher(StatsFetcher):
153
150
  target_index=target_index)
154
151
  break
155
152
  except Exception as e:
156
- continue
153
+ return_dict[name] = StatsProcessor.slice_multi_col_table(
154
+ total_table=total_table,
155
+ mode=setting['mode'],
156
+ target_index=target_index)
157
157
 
158
158
  return return_dict
@@ -79,6 +79,78 @@ class ValueFetcher(StatsFetcher):
79
79
  )
80
80
 
81
81
  return fetched_data
82
+
83
+ def query_value_serie(self):
84
+ """
85
+ 回傳指定公司的歷來評價
86
+ return : Dict[pd.DataFrame]
87
+ Dict中包含以下八個key, 每個key對應DataFrame
88
+ {
89
+ P_E,
90
+ P_FCF,
91
+ P_S,
92
+ P_B,
93
+ EV_OPI,
94
+ EV_EBIT,
95
+ EV_EBITDA,
96
+ EV_S
97
+ }
98
+ """
99
+
100
+ pipeline = [
101
+ {
102
+ "$match": {
103
+ "ticker": self.ticker,
104
+ }
105
+ },
106
+ {
107
+ "$project": {
108
+ "_id": 0,
109
+ "ticker": 1,
110
+ "company_name": 1,
111
+ "daily_data": {
112
+ "$map": {
113
+ "input": "$daily_data", # 正確地指定要處理的陣列
114
+ "as": "daily", # 每個元素的名稱
115
+ "in": {
116
+ "date": "$$daily.date",
117
+ "P_E": "$$daily.P_E",
118
+ "P_FCF": "$$daily.P_FCF",
119
+ "P_B": "$$daily.P_B",
120
+ "P_S": "$$daily.P_S",
121
+ "EV_OPI": "$$daily.EV_OPI",
122
+ "EV_EBIT": "$$daily.EV_EBIT",
123
+ "EV_EBITDA": "$$daily.EV_EBITDA",
124
+ "EV_S": "$$daily.EV_S"
125
+ }
126
+ }
127
+ }
128
+ }
129
+ }
130
+ ]
131
+
132
+ fetched_data = self.collection.aggregate(pipeline).to_list()
133
+ fetched_data = fetched_data[0]
134
+
135
+ value_keys = ["P_E", "P_FCF", "P_B", "P_S", "EV_OPI", "EV_EBIT", "EV_EVITDA", "EV_S"]
136
+ return_dict = {
137
+ value_key: dict() for value_key in value_keys
138
+ }
139
+
140
+ for value_key in value_keys:
141
+ for data in fetched_data['daily_data']:
142
+ if (value_key not in data.keys()):
143
+ continue
144
+ else:
145
+ return_dict[value_key].update({
146
+ data['date']: data[value_key]
147
+ })
148
+
149
+ return_dict = {
150
+ value_key: pd.DataFrame.from_dict(value_dict, orient = 'index', columns = [value_key])
151
+ for value_key, value_dict in return_dict.items()
152
+ }
153
+ return return_dict
82
154
 
83
155
 
84
156
  class ValueProcessor(StatsProcessor):
@@ -21,6 +21,7 @@ current_debt:
21
21
  mode: value_and_percentage
22
22
  target_index:
23
23
  - 流動負債合計
24
+ - 流動負債總額
24
25
 
25
26
  non_current_debt:
26
27
  mode: value_and_percentage
@@ -3,38 +3,45 @@ profit_lose: # 總營收表
3
3
 
4
4
  grand_total_profit_lose:
5
5
  mode: grand_total_values
6
-
6
+
7
7
  revenue:
8
8
  mode: growth
9
9
  target_index:
10
10
  - 營業收入合計
11
+ - 收入合計
11
12
  - 利息收入
12
13
 
13
14
  grand_total_revenue:
14
15
  mode: grand_total_growth
15
16
  target_index:
16
17
  - 營業收入合計
18
+ - 收入合計
17
19
  - 利息收入
18
20
 
19
21
  gross_profit:
20
22
  mode: growth
21
23
  target_index:
22
24
  - 營業毛利(毛損)淨額
25
+ - 利息淨收益
23
26
 
24
27
  grand_total_gross_profit:
25
28
  mode: grand_total_growth
26
29
  target_index:
27
30
  - 營業毛利(毛損)淨額
28
-
31
+ - 利息淨收益
32
+
29
33
  gross_profit_percentage:
30
34
  mode: percentage
31
35
  target_index:
32
36
  - 營業毛利(毛損)淨額
37
+ - 利息淨收益
33
38
 
34
39
  grand_total_gross_profit_percentage:
35
40
  mode: grand_total_percentage
36
41
  target_index:
37
42
  - 營業毛利(毛損)淨額
43
+ - 利息淨收益
44
+
38
45
  # 營利
39
46
  operating_income:
40
47
  mode: growth
@@ -55,46 +62,61 @@ grand_total_operating_income_percentage:
55
62
  mode: grand_total_percentage
56
63
  target_index:
57
64
  - 營業利益(損失)
65
+
58
66
  # 稅前淨利
59
67
  net_income_before_tax:
60
68
  mode: growth
61
69
  target_index:
62
70
  - 稅前淨利(淨損)
71
+ - 繼續營業單位稅前損益
72
+ - 繼續營業單位稅前淨利(淨損)
63
73
 
64
74
  grand_total_net_income_before_tax:
65
75
  mode: grand_total_growth
66
76
  target_index:
67
77
  - 稅前淨利(淨損)
78
+ - 繼續營業單位稅前損益
79
+ - 繼續營業單位稅前淨利(淨損)
68
80
 
69
81
  net_income_before_tax_percentage:
70
82
  mode: percentage
71
83
  target_index:
72
84
  - 稅前淨利(淨損)
85
+ - 繼續營業單位稅前損益
86
+ - 繼續營業單位稅前淨利(淨損)
73
87
 
74
88
  grand_total_net_income_before_tax_percentage:
75
89
  mode: grand_total_percentage
76
90
  target_index:
77
91
  - 稅前淨利(淨損)
92
+ - 繼續營業單位稅前損益
93
+ - 繼續營業單位稅前淨利(淨損)
94
+
78
95
  # 本期淨利
79
96
  net_income:
80
97
  mode: growth
81
98
  target_index:
82
99
  - 本期淨利(淨損)
100
+ - 本期稅後淨利(淨損)
83
101
 
84
102
  grand_total_net_income:
85
103
  mode: grand_total_growth
86
104
  target_index:
87
105
  - 本期淨利(淨損)
106
+ - 本期稅後淨利(淨損)
88
107
 
89
108
  net_income_percentage:
90
109
  mode: percentage
91
110
  target_index:
92
111
  - 本期淨利(淨損)
112
+ - 本期稅後淨利(淨損)
93
113
 
94
114
  grand_total_income_percentage:
95
115
  mode: grand_total_percentage
96
116
  target_index:
97
117
  - 本期淨利(淨損)
118
+ - 本期稅後淨利(淨損)
119
+
98
120
  # EPS
99
121
  EPS:
100
122
  mode: value
@@ -118,4 +140,4 @@ grand_total_EPS_growth:
118
140
  mode: grand_total_growth
119
141
  target_index:
120
142
  - 基本每股盈餘
121
- - 基本每股盈餘合計
143
+ - 基本每股盈餘合計
@@ -97,20 +97,47 @@ class StatsProcessor:
97
97
  """
98
98
  對Multicolumn的dataframe切出目標的index
99
99
  """
100
- times = total_table.columns.get_level_values(0).unique()
101
100
  try:
102
101
  target_metrics = target_metric_dict[mode]
103
102
  except KeyError as e:
104
103
  return f"mode Error: Get mode should be {list(target_metric_dict.keys())} but get {mode}"
105
104
 
105
+ times = total_table.columns.get_level_values(0).unique()
106
106
  desired_order = [(time, value_name) for time in times
107
107
  for value_name in target_metrics]
108
108
 
109
109
  if (target_index):
110
110
  target_index = target_index.split()
111
- sliced_table = total_table.loc[
112
- target_index, pd.IndexSlice[:,
113
- target_metrics]][desired_order].T
111
+ try:
112
+ sliced_table = total_table.loc[
113
+ target_index,
114
+ pd.IndexSlice[:, target_metrics]][desired_order].T
115
+
116
+ except Exception as e: # 沒辦法完整取得表格
117
+ # 先設立空表格
118
+ empty_index = pd.Index(desired_order)
119
+ empty_columns = pd.Index(target_index)
120
+ sliced_table = pd.DataFrame(index=empty_index,
121
+ columns=empty_columns)
122
+
123
+ try:
124
+ # 提取有效的部分資料
125
+ partial_table = total_table.loc[
126
+ total_table.index.intersection(target_index),
127
+ pd.IndexSlice[:, target_metrics]
128
+ ]
129
+
130
+ # 遍歷 partial_table 的索引和值,手動填入 sliced_table
131
+ for row_index in partial_table.index:
132
+ for col_index in partial_table.columns:
133
+ if col_index in desired_order and row_index in target_index:
134
+ sliced_table.loc[col_index, row_index] = partial_table.loc[row_index, col_index]
135
+
136
+ # 確保 `sliced_table` 的排序符合 `desired_order`
137
+ sliced_table = sliced_table.reindex(index=desired_order, columns=target_index)
138
+ except Exception as sub_e:
139
+ pass
140
+
114
141
  if (mode == 'value_and_percentage'): # 因應balance_sheet 頁面的格式
115
142
  return_table = sliced_table.T
116
143
  return_table.columns = [
@@ -146,7 +173,7 @@ class StatsProcessor:
146
173
  @classmethod
147
174
  def cal_percentage(cls, value, postfix="%"):
148
175
  if (isinstance(value, (float, int))):
149
- value = np.round(value * 100 , 2).item()
176
+ value = np.round(value * 100, 2).item()
150
177
  value = f"{value:.2f}{postfix}"
151
178
 
152
179
  return value
@@ -157,7 +184,7 @@ class StatsProcessor:
157
184
  @classmethod
158
185
  def cal_non_percentage(cls, value, to_str=False, postfix="元"):
159
186
  if (isinstance(value, (float, int))):
160
-
187
+
161
188
  value = np.round(value, 2).item()
162
189
  if (postfix == "千元"):
163
190
  value *= 1000
@@ -178,7 +205,7 @@ class StatsProcessor:
178
205
 
179
206
  else:
180
207
  return value
181
-
208
+
182
209
  @classmethod
183
210
  def cal_round_int(cls, value):
184
211
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: neurostats_API
3
- Version: 0.0.12
3
+ Version: 0.0.14
4
4
  Summary: The service of NeuroStats website
5
5
  Home-page: https://github.com/NeurowattStats/NeuroStats_API.git
6
6
  Author: JasonWang@Neurowatt
@@ -14,6 +14,7 @@ Description-Content-Type: text/markdown
14
14
  - [使用方法](#使用方法)
15
15
  - [下載](#下載)
16
16
  - [價值投資](#得到最新一期的評價資料與歷年評價)
17
+ - [歷史評價](#得到指定公司的歷來評價)
17
18
  - [財務分析-重要指標](#財務分析-重要指標)
18
19
  - [月營收表](#回傳月營收表)
19
20
  - [損益表](#損益表)
@@ -82,7 +83,7 @@ pip install neurostats-API
82
83
  ```Python
83
84
  >>> import neurostats_API
84
85
  >>> print(neurostats_API.__version__)
85
- 0.0.10
86
+ 0.0.14
86
87
  ```
87
88
 
88
89
  ### 得到最新一期的評價資料與歷年評價
@@ -127,6 +128,69 @@ fetcher.query_data()
127
128
  ```
128
129
  > 這裡有Nan是因為本益比與P/B等資料沒有爬到最新的時間
129
130
 
131
+ ### 得到指定公司的歷來評價
132
+ ``` Python
133
+ from neurostats_API.utils import ValueFetcher, DBClient
134
+ db_client = DBClient("<連接的DB位置>").get_client()
135
+ ticker = "2330" # 換成tw50內任意ticker
136
+ fetcher = ValueFetcher(ticker, db_client)
137
+
138
+ fetcher.query_value_serie()
139
+ ```
140
+ #### 回傳(2330為例)
141
+ ```Python
142
+ {
143
+ 'EV_EBIT': EV_EBIT
144
+ 2014-01-02 NaN
145
+ 2014-01-03 NaN
146
+ ... ...
147
+ 2024-12-12 15.021431
148
+ 2024-12-13 15.088321
149
+ ,
150
+ 'EV_OPI': EV_OPI
151
+ 2014-01-03 NaN
152
+ ... ...
153
+ 2024-12-12 15.999880
154
+ 2024-12-13 16.071128
155
+ ,
156
+ 'EV_S': EV_S
157
+ 2014-01-02 NaN
158
+ 2014-01-03 NaN
159
+ ... ...
160
+ 2024-12-12 6.945457
161
+ 2024-12-13 6.976385
162
+ ,
163
+ 'P_B': P_B
164
+ 2014-01-02 NaN
165
+ 2014-01-03 NaN
166
+ ... ...
167
+ 2024-12-12 6.79
168
+ 2024-12-13 6.89
169
+ ,
170
+ 'P_E': P_E
171
+ 2014-01-02 NaN
172
+ 2014-01-03 NaN
173
+ ... ...
174
+ 2024-12-12 26.13
175
+ 2024-12-13 26.50
176
+ ,
177
+ 'P_FCF': P_FCF
178
+ 2014-01-02 NaN
179
+ 2014-01-03 NaN
180
+ ... ...
181
+ 2024-12-12 45.302108
182
+ 2024-12-13 45.515797
183
+ ,
184
+ 'P_S': P_S
185
+ 2014-01-02 NaN
186
+ 2014-01-03 NaN
187
+ ... ...
188
+ 2024-12-12 6.556760
189
+ 2024-12-13 6.587688
190
+ }
191
+ ```
192
+
193
+
130
194
  ### 回傳月營收表
131
195
  ``` Python
132
196
  from neurostats_API.fetchers import MonthRevenueFetcher, DBClient
@@ -604,6 +668,19 @@ fetcher.query()
604
668
  請注意`range`, `last_range`, `52week_range`這三個項目型態為字串,其餘為float
605
669
 
606
670
  ## 版本紀錄
671
+ ## 0.0.14
672
+ - 修改部分財報資料錯誤的乘以1000的問題
673
+
674
+ - 新增例外處理: 若資料庫對於季資料一部分index缺失的情況下仍會盡可能去將資料蒐集並呈現
675
+
676
+ ### 0.0.13
677
+ - value_fetcher 新增獲得一序列評價的功能
678
+
679
+ ### 0.0.12
680
+ - 新增資券變化(margin trading)
681
+
682
+ - 修改法人買賣(institution_trading)的query方式
683
+
607
684
  ### 0.0.11
608
685
  - 修復財務分析的千元計算問題
609
686
 
@@ -1,4 +1,4 @@
1
- neurostats_API/__init__.py,sha256=9UMAkivMiZfppwpwVdBxJI652ZiB-ir2iX3yh0Gxu9M,20
1
+ neurostats_API/__init__.py,sha256=zDrZHoj7CyPMzwVv9Yxva_-e95Gd1sRJSB99gLu9kXU,20
2
2
  neurostats_API/cli.py,sha256=UJSWLIw03P24p-gkBb6JSEI5dW5U12UvLf1L8HjQD-o,873
3
3
  neurostats_API/main.py,sha256=QcsfmWivg2Dnqw3MTJWiI0QvEiRs0VuH-BjwQHFCv00,677
4
4
  neurostats_API/fetchers/__init__.py,sha256=ylYEySHQxcAhUUWEOCGZfmaAg7Mir5MfuEhOjk3POJg,406
@@ -6,23 +6,23 @@ neurostats_API/fetchers/balance_sheet.py,sha256=sQv4Gk5uoKURLEdh57YknOQWiyVwaXJ2
6
6
  neurostats_API/fetchers/base.py,sha256=NW2SFzrimyAIrdJx1LVmTazelyZOAtcj54kJKHc4Vaw,1662
7
7
  neurostats_API/fetchers/cash_flow.py,sha256=TY7VAWVXkj5-mzH5Iu0sIE-oV8MvGmmDy0URNotNV1E,7614
8
8
  neurostats_API/fetchers/finance_overview.py,sha256=PxUdWY0x030olYMLcCHDBn068JLmCE2RTOce1dxs5vM,27753
9
- neurostats_API/fetchers/institution.py,sha256=rEcs5-JKbWjg8lSjG1V3YdHJQuPSN1GntnxvedESCeo,10984
9
+ neurostats_API/fetchers/institution.py,sha256=UrcBc6t7u7CnEwUsf6YmLbbJ8VncdWpq8bCz17q2dgs,11168
10
10
  neurostats_API/fetchers/margin_trading.py,sha256=lQImtNdvaBoSlKhJvQ3DkH3HjSSgKRJz4ZZpyR5-Z4I,10433
11
11
  neurostats_API/fetchers/month_revenue.py,sha256=nixX2llzjCFr2m2YVjxrSfkBusnZPrPb2dRDq1XLGhw,4251
12
- neurostats_API/fetchers/profit_lose.py,sha256=xlLNsGSy4Azf4HyZyYaX3dFad-ACO-vuQToBooZi1_w,5698
12
+ neurostats_API/fetchers/profit_lose.py,sha256=EN9Y0iamcAaHMZdjHXO6b_2buLnORssf8ZS7A0hi74s,5896
13
13
  neurostats_API/fetchers/tech.py,sha256=wH1kkqiETQhF0HAhk-UIiucnZ3EiL85Q-yMWCcVOiFM,11395
14
- neurostats_API/fetchers/value_invest.py,sha256=O5IKC8Nl7p5-E-1zoyAyWtiDznaxNemeabanmaHDdJs,3327
15
- neurostats_API/tools/balance_sheet.yaml,sha256=yTxrWh7m4K3LnaNunETidfNzl6S4Bf58VIg9U38XShQ,648
14
+ neurostats_API/fetchers/value_invest.py,sha256=_eQxuEnIYvksb06QHixGK29Gnwr_3xmI6Tu7dv4J__E,5769
15
+ neurostats_API/tools/balance_sheet.yaml,sha256=6XygNG_Ybb1Xkk1e39LMLKr7ATvaCP3xxuwFbgNl6dA,673
16
16
  neurostats_API/tools/cash_flow_percentage.yaml,sha256=fk2Z4eb1JjGFvP134eJatHacB7BgTkBenhDJr83w8RE,1345
17
17
  neurostats_API/tools/finance_overview_dict.yaml,sha256=B9nV75StXkrF3yv2-eezzitlJ38eEK86RD_VY6588gQ,2884
18
- neurostats_API/tools/profit_lose.yaml,sha256=dcO-0J0BC4p06XBNuowu8ux0NTbyZiOkGfy6szHF6fw,2402
18
+ neurostats_API/tools/profit_lose.yaml,sha256=iyp9asYJ04vAxk_HBUDse_IBy5oVvYHpwsyACg5YEeg,3029
19
19
  neurostats_API/tools/seasonal_data_field_dict.txt,sha256=X8yc_el6p8BH_3FikTqBVFGsvWdXT6MHXLfKfi44334,8491
20
20
  neurostats_API/utils/__init__.py,sha256=FTYKRFzW2XVXdnSHXnS3mQQaHlKF9xGqrMsgZZ2kroc,142
21
- neurostats_API/utils/data_process.py,sha256=2yrO0iP1LHhF0uhXZ442PHQBI-Zd2xIqNItkNf5hKIc,6339
21
+ neurostats_API/utils/data_process.py,sha256=YKfk3fXkcmwFS_8YxOV2uRLnt9NX3cYPV_XxrCgk8Yo,7597
22
22
  neurostats_API/utils/datetime.py,sha256=XJya4G8b_-ZOaBbMXgQjWh2MC4wc-o6goQ7EQJQMWrQ,773
23
23
  neurostats_API/utils/db_client.py,sha256=OYe6yazcR4Aa6jYmy47JrryUeh2NnKGqY2K_lSZe6i8,455
24
24
  neurostats_API/utils/fetcher.py,sha256=VbrUhjA-GG5AyjPX2SHtFIbZM4dm3jo0RgZzuCbb_Io,40927
25
- neurostats_API-0.0.12.dist-info/METADATA,sha256=-1MqxrAVp-6u25PFIMmrMv5ad6RrWwguHiONp0worpc,24008
26
- neurostats_API-0.0.12.dist-info/WHEEL,sha256=R06PA3UVYHThwHvxuRWMqaGcr-PuniXahwjmQRFMEkY,91
27
- neurostats_API-0.0.12.dist-info/top_level.txt,sha256=nSlQPMG0VtXivJyedp4Bkf86EOy2TpW10VGxolXrqnU,15
28
- neurostats_API-0.0.12.dist-info/RECORD,,
25
+ neurostats_API-0.0.14.dist-info/METADATA,sha256=MeV1goaFbTQI0ddvr-TvElrggROHEiAixNCqP_gyLkI,25935
26
+ neurostats_API-0.0.14.dist-info/WHEEL,sha256=R06PA3UVYHThwHvxuRWMqaGcr-PuniXahwjmQRFMEkY,91
27
+ neurostats_API-0.0.14.dist-info/top_level.txt,sha256=nSlQPMG0VtXivJyedp4Bkf86EOy2TpW10VGxolXrqnU,15
28
+ neurostats_API-0.0.14.dist-info/RECORD,,