analyser_hj3415 3.2.0__py3-none-any.whl → 3.2.2__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.
@@ -6,8 +6,3 @@ env_path = get_env_path()
6
6
  if env_path is None:
7
7
  mylogger.warning(f"환경변수 파일(.env)를 찾을수 없습니다. 기본 설정값으로 프로그램을 실행합니다.")
8
8
  load_dotenv(env_path)
9
-
10
- from analyser_hj3415.analyser import eval
11
- from analyser_hj3415.analyser import compile
12
- from analyser_hj3415.analyser import tsa
13
-
@@ -0,0 +1,12 @@
1
+ MIs = {
2
+ "wti": "CL=F",
3
+ "gold": "GC=F",
4
+ "silver": "SI=F",
5
+ "usdidx": "DX-Y.NYB",
6
+ "usdkrw": "KRW=X",
7
+ "sp500": "^GSPC",
8
+ "kospi": "^KS11",
9
+ "nikkei": "^N225",
10
+ "china": "^HSI",
11
+ "irx": "^IRX",
12
+ }
@@ -5,14 +5,99 @@ from typing import Union
5
5
  from db_hj3415 import myredis,mymongo
6
6
  from utils_hj3415 import tools, setup_logger
7
7
 
8
- from analyser_hj3415.analyser import tsa
9
- from analyser_hj3415.analyser import eval
8
+ from analyser_hj3415.analyser import tsa, eval, MIs
10
9
 
11
10
  mylogger = setup_logger(__name__,'WARNING')
12
11
  expire_time = tools.to_int(os.getenv('DEFAULT_EXPIRE_TIME_H', 48)) * 3600
13
12
 
13
+ class MICompile:
14
+ def __init__(self, mi_type: str):
15
+ assert mi_type in MIs.keys(), f"Invalid MI type ({MIs.keys()})"
16
+ self._mi_type = mi_type
17
+ self.prophet = tsa.MIProphet(mi_type)
18
+ self.lstm = tsa.MILSTM(mi_type)
14
19
 
15
- class Compile:
20
+ @property
21
+ def mi_type(self) -> str:
22
+ return self._mi_type
23
+
24
+ @mi_type.setter
25
+ def mi_type(self, mi_type: str):
26
+ assert mi_type in MIs.keys(), f"Invalid MI type ({MIs.keys()})"
27
+ self._mi_type = mi_type
28
+ self.prophet.mi_type = mi_type
29
+ self.lstm.mi_type = mi_type
30
+
31
+ def get(self, refresh=False) -> dict:
32
+ """
33
+ 특정 MI(Market Index) 타입 데이터를 컴파일하고 반환합니다.
34
+ 데이터를 Redis 캐시에서 가져오거나, 새로 생성하여 캐시에 저장합니다.
35
+
36
+ Args:
37
+ refresh (bool, optional):
38
+ - True: 캐시를 무시하고 데이터를 새로 생성하여 저장.
39
+ - False: 캐시된 데이터를 가져오며, 없을 경우 새로 생성.
40
+ Defaults to False.
41
+
42
+ Returns:
43
+ dict: MI 데이터를 포함하는 딕셔너리로 반환하며, 다음의 키를 포함합니다:
44
+ - 'name' (str): MI 타입 이름.
45
+ - 'trading_action' (str): 예측된 매매 신호 ('buy', 'sell', 'hold').
46
+ - 'prophet_score' (float): Prophet 모델의 예측 점수.
47
+ - 'lstm_grade' (float): LSTM 모델의 최종 예측 점수.
48
+ - 'is_lstm_up' (bool): LSTM 모델이 상승 신호를 나타내는지 여부.
49
+ - 'prophet_html' (str): prophet_html,
50
+ - 'lstm_html' (str): lstm_html ,
51
+ Example:
52
+ {
53
+ 'name': 'example_mi',
54
+ 'trading_action': 'buy',
55
+ 'prophet_score': 0.88,
56
+ 'lstm_grade': 0.92,
57
+ 'is_lstm_up': True,
58
+ 'prophet_html': prophet_html...,
59
+ 'lstm_html': lstm_html...,
60
+ }
61
+ """
62
+ print(f"{self.mi_type}의 compiling을 시작합니다.")
63
+ redis_name = self.mi_type + '_mi_compile'
64
+ print(
65
+ f"redisname: '{redis_name}' / refresh : {refresh} / expire_time : {expire_time / 3600}h")
66
+
67
+ def fetch_mi_compile() -> dict:
68
+ print(f"{self.mi_type}")
69
+ trading_action, prophet_score = self.prophet.scoring()
70
+ prophet_html = self.prophet.export()
71
+ self.lstm.initializing()
72
+ _, lstm_grade = self.lstm.get_final_predictions(refresh=refresh, num=5)
73
+ is_lstm_up = self.lstm.is_lstm_up()
74
+ lstm_html= self.lstm.export()
75
+
76
+ return {
77
+ 'name': self.mi_type,
78
+ 'trading_action': trading_action,
79
+ 'prophet_score': prophet_score,
80
+ 'lstm_grade': lstm_grade,
81
+ 'is_lstm_up': is_lstm_up,
82
+ 'prophet_html': prophet_html,
83
+ 'lstm_html': lstm_html,
84
+ }
85
+
86
+ data_dict = myredis.Base.fetch_and_cache_data(redis_name, refresh, fetch_mi_compile, timer=expire_time)
87
+ return data_dict
88
+
89
+ @staticmethod
90
+ def analyser_lstm_all_mi(refresh: bool):
91
+ mi_lstm = tsa.MILSTM('wti')
92
+ print(f"*** LSTM prediction redis cashing Market Index items ***")
93
+ for mi_type in MIs.keys():
94
+ mi_lstm.mi_type = mi_type
95
+ print(f"{mi_lstm.mi_type}")
96
+ mi_lstm.initializing()
97
+ mi_lstm.get_final_predictions(refresh=refresh, num=5)
98
+
99
+
100
+ class CorpCompile:
16
101
  def __init__(self, code: str, expect_earn=0.06):
17
102
  assert tools.is_6digit(code), f'Invalid value : {code}'
18
103
  self._code = code
@@ -36,13 +121,43 @@ class Compile:
36
121
  self.prophet.code = code
37
122
 
38
123
  def get(self, refresh=False) -> dict:
124
+ """
125
+ 특정 기업 데이터를 컴파일하여 반환합니다.
126
+ 데이터를 Redis 캐시에서 가져오거나, 새로 생성하여 캐시에 저장합니다.
127
+
128
+ Args:
129
+ refresh (bool, optional):
130
+ - True: 캐시를 무시하고 데이터를 새로 생성하여 저장.
131
+ - False: 캐시된 데이터를 가져오며, 없을 경우 새로 생성.
132
+ Defaults to False.
39
133
 
134
+ Returns:
135
+ dict: 기업 데이터를 포함하는 딕셔너리로 반환되며, 다음의 키를 포함합니다:
136
+ - 'name' (str): 기업 이름.
137
+ - 'red_score' (float): 기업의 Red Score (위험 점수).
138
+ - '이익지표' (float): 기업의 이익 지표.
139
+ - '주주수익률' (float): 주주 수익률.
140
+ - 'trading_action' (str): 예측된 매매 신호 ('buy', 'sell', 'hold').
141
+ - 'prophet_score' (float): Prophet 모델의 예측 점수.
142
+ - 'prophet_html' (str): prophet_html,
143
+
144
+ Example:
145
+ {
146
+ 'name': 'Samsung Electronics',
147
+ 'red_score': 0.85,
148
+ '이익지표': 0.75,
149
+ '주주수익률': 0.10,
150
+ 'trading_action': 'buy',
151
+ 'prophet_score': 0.92,
152
+ 'prophet_html': prophet_html...,
153
+ }
154
+ """
40
155
  print(f"{self.code}/{self.name}의 compiling을 시작합니다.")
41
- redis_name = self.code + '_compile_scores'
156
+ redis_name = self.code + '_corp_compile'
42
157
  print(
43
158
  f"redisname: '{redis_name}' / refresh : {refresh} / expire_time : {expire_time/3600}h")
44
159
 
45
- def fetch_compile_scores() -> dict:
160
+ def fetch_corp_compile() -> dict:
46
161
  mylogger.info("Red score 계산중..")
47
162
  red_score = self.red.get(verbose=False).score
48
163
 
@@ -51,6 +166,7 @@ class Compile:
51
166
 
52
167
  mylogger.info("\tProphet 최근 데이터 조회중..")
53
168
  trading_action, prophet_score = self.prophet.scoring()
169
+ prophet_html = self.prophet.export()
54
170
 
55
171
  return {
56
172
  'name': self.name,
@@ -59,10 +175,44 @@ class Compile:
59
175
  '주주수익률': mil_data.주주수익률,
60
176
  'trading_action': trading_action,
61
177
  'prophet_score': prophet_score,
178
+ 'prophet_html': prophet_html,
62
179
  }
63
- data_dict = myredis.Base.fetch_and_cache_data(redis_name, refresh, fetch_compile_scores, timer=expire_time)
180
+ data_dict = myredis.Base.fetch_and_cache_data(redis_name, refresh, fetch_corp_compile, timer=expire_time)
64
181
  return data_dict
65
182
 
183
+ @staticmethod
184
+ def red_ranking(expect_earn: float = 0.06, refresh=False) -> OrderedDict:
185
+ # 이전 expect earn 과 비교하여 다르거나 없으면 강제 refresh 설정
186
+ redis_name = 'red_ranking_prev_expect_earn'
187
+ pee = tools.to_float(myredis.Base.get_value(redis_name))
188
+ if pee != expect_earn:
189
+ # expect earn의 이전 계산값이 없거나 이전 값과 다르면 새로 계산
190
+ mylogger.warning(
191
+ f"expect earn : {expect_earn} / prev expect earn : {pee} 두 값이 달라 refresh = True"
192
+ )
193
+ myredis.Base.set_value(redis_name, str(expect_earn))
194
+ refresh = True
195
+
196
+ print("**** Start red_ranking... ****")
197
+ redis_name = 'red_ranking'
198
+ print(
199
+ f"redisname: '{redis_name}' / expect_earn: {expect_earn} / refresh : {refresh} / expire_time : {expire_time / 3600}h")
200
+
201
+ def fetch_ranking(refresh_in: bool) -> dict:
202
+ data = {}
203
+ red = eval.Red(code='005930', expect_earn=expect_earn)
204
+ for i, code in enumerate(myredis.Corps.list_all_codes()):
205
+ red.code = code
206
+ red_score = red.get(refresh=refresh_in, verbose=False).score
207
+ if red_score > 0:
208
+ data[code] = red_score
209
+ print(f"{i}: {red} - {red_score}")
210
+ return data
211
+
212
+ data_dict = myredis.Base.fetch_and_cache_data(redis_name, refresh, fetch_ranking, refresh, timer=expire_time)
213
+
214
+ return OrderedDict(sorted(data_dict.items(), key=lambda item: item[1], reverse=True))
215
+
66
216
  @staticmethod
67
217
  def prophet_ranking(refresh=False, top: Union[int, str]='all') -> OrderedDict:
68
218
 
@@ -74,7 +224,7 @@ class Compile:
74
224
 
75
225
  def fetch_ranking() -> dict:
76
226
  data = {}
77
- c = Compile('005930')
227
+ c = CorpCompile('005930')
78
228
  for code in myredis.Corps.list_all_codes():
79
229
  try:
80
230
  c.code = code
@@ -101,7 +251,7 @@ class Compile:
101
251
 
102
252
  @staticmethod
103
253
  def analyse_lstm_topn(refresh: bool, top=40):
104
- ranking_topn = Compile.prophet_ranking(refresh=False, top=top)
254
+ ranking_topn = CorpCompile.prophet_ranking(refresh=False, top=top)
105
255
  mylogger.info(ranking_topn)
106
256
  corp_lstm = tsa.CorpLSTM('005930')
107
257
  print(f"*** LSTM prediction redis cashing top{top} items ***")
@@ -111,46 +261,4 @@ class Compile:
111
261
  corp_lstm.initializing()
112
262
  corp_lstm.get_final_predictions(refresh=refresh, num=5)
113
263
 
114
- @staticmethod
115
- def analyse_lstm_mis(refresh: bool):
116
- mi_lstm = tsa.MILSTM('wti')
117
- print(f"*** LSTM prediction redis cashing Market Index items ***")
118
- for mi_type in tsa.MIs.keys():
119
- mi_lstm.mi_type = mi_type
120
- print(f"{mi_lstm.mi_type}")
121
- mi_lstm.initializing()
122
- mi_lstm.get_final_predictions(refresh=refresh, num=5)
123
-
124
- @staticmethod
125
- def red_ranking(expect_earn: float = 0.06, refresh=False) -> OrderedDict:
126
- # 이전 expect earn 과 비교하여 다르거나 없으면 강제 refresh 설정
127
- redis_name = 'red_ranking_prev_expect_earn'
128
- pee = tools.to_float(myredis.Base.get_value(redis_name))
129
- if pee != expect_earn:
130
- # expect earn의 이전 계산값이 없거나 이전 값과 다르면 새로 계산
131
- mylogger.warning(
132
- f"expect earn : {expect_earn} / prev expect earn : {pee} 두 값이 달라 refresh = True"
133
- )
134
- myredis.Base.set_value(redis_name, str(expect_earn))
135
- refresh = True
136
-
137
- print("**** Start red_ranking... ****")
138
- redis_name = 'red_ranking'
139
- print(
140
- f"redisname: '{redis_name}' / expect_earn: {expect_earn} / refresh : {refresh} / expire_time : {expire_time / 3600}h")
141
-
142
- def fetch_ranking(refresh_in: bool) -> dict:
143
- data = {}
144
- red = eval.Red(code='005930', expect_earn=expect_earn)
145
- for i, code in enumerate(myredis.Corps.list_all_codes()):
146
- red.code = code
147
- red_score = red.get(refresh=refresh_in, verbose=False).score
148
- if red_score > 0:
149
- data[code] = red_score
150
- print(f"{i}: {red} - {red_score}")
151
- return data
152
-
153
- data_dict = myredis.Base.fetch_and_cache_data(redis_name, refresh, fetch_ranking, refresh, timer=expire_time)
154
-
155
- return OrderedDict(sorted(data_dict.items(), key=lambda item: item[1], reverse=True))
156
264
 
@@ -1,15 +1,3 @@
1
1
  from analyser_hj3415.analyser.tsa.lstm import *
2
2
  from analyser_hj3415.analyser.tsa.prophet import *
3
3
 
4
- MIs = {
5
- "wti": "CL=F",
6
- "gold": "GC=F",
7
- "silver": "SI=F",
8
- "usdidx": "DX-Y.NYB",
9
- "usdkrw": "KRW=X",
10
- "sp500": "^GSPC",
11
- "kospi": "^KS11",
12
- "nikkei": "^N225",
13
- "china": "^HSI",
14
- "irx": "^IRX",
15
- }
@@ -1,6 +1,3 @@
1
- """
2
- Time Series Analysis
3
- """
4
1
  import os
5
2
  import numpy as np
6
3
  import yfinance as yf
@@ -20,6 +17,7 @@ from dataclasses import dataclass
20
17
 
21
18
  from utils_hj3415 import tools, setup_logger
22
19
  from db_hj3415 import myredis
20
+ from analyser_hj3415.analyser import MIs
23
21
 
24
22
 
25
23
  mylogger = setup_logger(__name__,'WARNING')
@@ -702,7 +700,6 @@ class CorpLSTM(MyLSTM):
702
700
 
703
701
  class MILSTM(MyLSTM):
704
702
  def __init__(self, mi_type: str):
705
- from analyser_hj3415.analyser.tsa import MIs
706
703
  assert mi_type in MIs.keys(), f"Invalid MI type ({MIs.keys()})"
707
704
  self._mi_type = mi_type
708
705
  super().__init__(ticker=MIs[mi_type])
@@ -713,7 +710,6 @@ class MILSTM(MyLSTM):
713
710
 
714
711
  @mi_type.setter
715
712
  def mi_type(self, mi_type: str):
716
- from analyser_hj3415.analyser.tsa import MIs
717
713
  assert mi_type in MIs.keys(), f"Invalid MI type ({MIs.keys()})"
718
714
  self._mi_type = mi_type
719
715
  self.ticker = MIs[mi_type]
@@ -11,7 +11,8 @@ from plotly.offline import plot
11
11
  from utils_hj3415 import tools, setup_logger
12
12
  from db_hj3415 import myredis
13
13
 
14
- from analyser_hj3415.analyser import eval
14
+ from analyser_hj3415.analyser import eval, MIs
15
+
15
16
 
16
17
  mylogger = setup_logger(__name__,'WARNING')
17
18
 
@@ -252,7 +253,6 @@ class CorpProphet(MyProphet):
252
253
 
253
254
  class MIProphet(MyProphet):
254
255
  def __init__(self, mi_type: str):
255
- from analyser_hj3415.analyser.tsa import MIs
256
256
  assert mi_type in MIs.keys(), f"Invalid MI type ({MIs.keys()})"
257
257
  self._mi_type = mi_type
258
258
  super().__init__(ticker=MIs[mi_type])
@@ -263,7 +263,6 @@ class MIProphet(MyProphet):
263
263
 
264
264
  @mi_type.setter
265
265
  def mi_type(self, mi_type: str):
266
- from analyser_hj3415.analyser.tsa import MIs
267
266
  assert mi_type in MIs.keys(), f"Invalid MI type ({MIs.keys()})"
268
267
  self._mi_type = mi_type
269
268
  self.ticker = MIs[mi_type]
analyser_hj3415/cli.py CHANGED
@@ -2,12 +2,11 @@ import argparse
2
2
  import pprint
3
3
 
4
4
  from utils_hj3415 import tools
5
- from analyser_hj3415.analyser import eval, tsa, compile
5
+ from analyser_hj3415.analyser import eval, tsa, compile, MIs
6
6
  from db_hj3415 import myredis, mymongo
7
7
 
8
8
 
9
9
  def analyser_manager():
10
- from analyser_hj3415.analyser.tsa import MIs
11
10
  parser = argparse.ArgumentParser(description="Analyser Commands")
12
11
  type_subparsers = parser.add_subparsers(dest='type', help='분석 타입')
13
12
 
@@ -99,9 +98,9 @@ def analyser_manager():
99
98
  mymongo.Logs.save('cli', 'INFO', 'run >> analyser red ranking')
100
99
  try:
101
100
  if args.expect_earn is None:
102
- result = compile.Compile.red_ranking(refresh=args.refresh)
101
+ result = compile.CorpCompile.red_ranking(refresh=args.refresh)
103
102
  else:
104
- result = compile.Compile.red_ranking(expect_earn=args.expect_earn, refresh=args.refresh)
103
+ result = compile.CorpCompile.red_ranking(expect_earn=args.expect_earn, refresh=args.refresh)
105
104
  print(result)
106
105
  except Exception as e:
107
106
  print(e)
@@ -171,7 +170,7 @@ def analyser_manager():
171
170
  if args.command == 'ranking':
172
171
  mymongo.Logs.save('cli', 'INFO', 'run >> analyser prophet ranking')
173
172
  try:
174
- result = compile.Compile.prophet_ranking(refresh=args.refresh)
173
+ result = compile.CorpCompile.prophet_ranking(refresh=args.refresh)
175
174
  print(result)
176
175
  except Exception as e:
177
176
  print(e)
@@ -191,10 +190,10 @@ def analyser_manager():
191
190
  mymongo.Logs.save('cli', 'INFO', f'run >> analyser lstm caching')
192
191
  try:
193
192
  if args.top:
194
- compile.Compile.analyse_lstm_topn(refresh=args.refresh, top=args.top)
193
+ compile.CorpCompile.analyse_lstm_topn(refresh=args.refresh, top=args.top)
195
194
  else:
196
- compile.Compile.analyse_lstm_topn(refresh=args.refresh)
197
- compile.Compile.analyse_lstm_mis(refresh=args.refresh)
195
+ compile.CorpCompile.analyse_lstm_topn(refresh=args.refresh)
196
+ compile.MICompile.analyser_lstm_all_mi(refresh=args.refresh)
198
197
  except Exception as e:
199
198
  print(e)
200
199
  mymongo.Logs.save('cli','ERROR', f'analyser lstm caching 실행중 에러 - {e}')
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: analyser_hj3415
3
- Version: 3.2.0
3
+ Version: 3.2.2
4
4
  Summary: Stock analyser and database processing programs
5
5
  Requires-Python: >=3.6
6
6
  Description-Content-Type: text/markdown
@@ -1,22 +1,22 @@
1
- analyser_hj3415/__init__.py,sha256=f2E9Neh7Nzkhvdj7HWWlgxZK2sB95rBtaIgWEHzxK9E,450
2
- analyser_hj3415/cli.py,sha256=MIdk_0JVnx4M1la-2ifF09JLMXsZzS0mrvsPMQ1C-1g,11798
3
- analyser_hj3415/analyser/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- analyser_hj3415/analyser/compile.py,sha256=J2kSNC9xCWJ0l0A-nV6eUnBULP77xwdlaerVhXqDGvc,6153
1
+ analyser_hj3415/__init__.py,sha256=jqHEUoBeihYOMaS0bPOe3nRVXBufZ0clxc6M6jxPY0o,320
2
+ analyser_hj3415/cli.py,sha256=E4ElTT5QRuxlbBecayzjFgL32JKHRacBoy3OCyes_n8,11780
3
+ analyser_hj3415/analyser/__init__.py,sha256=rAY-FS6d1MtK3ShIYtuBAV5fk-GFlzxGF8c7JaGwD5Y,227
4
+ analyser_hj3415/analyser/compile.py,sha256=KmU4CD5xrjwcNbkZomju3eOWqElKSJdU5sO1TTAcEiE,10775
5
5
  analyser_hj3415/analyser/eval/__init__.py,sha256=IP1d0Q3nOCAD3zK1qxrC685MkJQfUh-qaXc7xptTxk8,80
6
6
  analyser_hj3415/analyser/eval/blue.py,sha256=fq_eln7-EdwICNQ2sMXAfZKXGhQ29EaJwsGvn7xA29U,7632
7
7
  analyser_hj3415/analyser/eval/common.py,sha256=wcWJg_jNgr02i1U62oZGgLt2iscdle9X-u4aMnZl89Q,14127
8
8
  analyser_hj3415/analyser/eval/growth.py,sha256=OXuBuPzVw3q6kpelNigiX7xvJNUP1gv26DNetc4aews,3315
9
9
  analyser_hj3415/analyser/eval/mil.py,sha256=wN1jPu5zLJjoDk3kL7piL-4jWhpsAMeQpsTZll0a2dw,10568
10
10
  analyser_hj3415/analyser/eval/red.py,sha256=rJbidKlo2s2EJHBGn4HDbfCDcEGP5Rst8iQeJ6jlzNA,10988
11
- analyser_hj3415/analyser/tsa/__init__.py,sha256=0XIpMgYIiyDrSE3sp9S0J0gXwW4cpk6nQmxSjC3KkY4,371
12
- analyser_hj3415/analyser/tsa/lstm.py,sha256=22Rd1PTBeDAvITb1zw65Y51lLB76w6MyWXNKku6RzjM,29975
13
- analyser_hj3415/analyser/tsa/prophet.py,sha256=jHaOufe7FAJanPXgPh0YxvQ4OiATJue_7cDyfHnq1hc,10156
11
+ analyser_hj3415/analyser/tsa/__init__.py,sha256=OSl4eQUw0dN0del3-KF746jj-ouhNFtSaLUA5iC1JXs,100
12
+ analyser_hj3415/analyser/tsa/lstm.py,sha256=LuxpW9cQoQeSfYkqEtIelVb8QBNhujXOphu5VB2Ag3E,29881
13
+ analyser_hj3415/analyser/tsa/prophet.py,sha256=1qOyXHlupzto1wurOt80k_I6_-J7qWcEkWGhopgnAYI,10056
14
14
  analyser_hj3415/workroom/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
15
  analyser_hj3415/workroom/mysklearn.py,sha256=wJXKz5MqqTzADdG2mqRMMzc_G9RzwYjj5_j4gyOopxQ,2030
16
16
  analyser_hj3415/workroom/mysklearn2.py,sha256=1lIy6EWEQHkOzDS-av8U0zQH6DuCLKWMI73dnJx5KRs,1495
17
17
  analyser_hj3415/workroom/score.py,sha256=P6nHBJYmyhigGtT4qna4BmNtvt4B93b7SKyzdstJK24,17376
18
18
  analyser_hj3415/workroom/trash.py,sha256=zF-W0piqkGr66UP6-iybo9EXh2gO0RP6R1FnIpsGkl8,12262
19
- analyser_hj3415-3.2.0.dist-info/entry_points.txt,sha256=ZfjPnJuH8SzvhE9vftIPMBIofsc65IAWYOhqOC_L5ck,65
20
- analyser_hj3415-3.2.0.dist-info/WHEEL,sha256=CpUCUxeHQbRN5UGRQHYRJorO5Af-Qy_fHMctcQ8DSGI,82
21
- analyser_hj3415-3.2.0.dist-info/METADATA,sha256=rByJ0JDeAVZprcztSyaBD9cM-Qupq4hhdltooDtbSmY,6777
22
- analyser_hj3415-3.2.0.dist-info/RECORD,,
19
+ analyser_hj3415-3.2.2.dist-info/entry_points.txt,sha256=ZfjPnJuH8SzvhE9vftIPMBIofsc65IAWYOhqOC_L5ck,65
20
+ analyser_hj3415-3.2.2.dist-info/WHEEL,sha256=CpUCUxeHQbRN5UGRQHYRJorO5Af-Qy_fHMctcQ8DSGI,82
21
+ analyser_hj3415-3.2.2.dist-info/METADATA,sha256=Dtq5P_Uy1wwtvdg8oh7AcIbjF1p2XakhGO38ByLDII4,6777
22
+ analyser_hj3415-3.2.2.dist-info/RECORD,,