neurostats-API 0.0.12__py3-none-any.whl → 0.0.14__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
@@ -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,,