siat 3.1.11__py3-none-any.whl → 3.1.12__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.
siat/fund_china.py CHANGED
@@ -20,18 +20,23 @@ from siat.translate import *
20
20
  from siat.grafix import *
21
21
  from siat.bond_base import *
22
22
  #==============================================================================
23
- def compare_fund_holding_china(ticker,quarters,rank=10):
23
+ def compare_fund_holding_china(ticker,quarters,rank=10,font_size='14px'):
24
24
  """
25
25
  功能:套壳函数fund_stock_holding_compare_china
26
26
  """
27
27
  if len(quarters) < 2:
28
28
  print(" #Warning(compare_fund_holding_china): need 2 quarters to compare at",quarters)
29
29
  return None
30
+ """
30
31
  if quarters[0] >= quarters[1]:
31
32
  print(" #Warning(compare_fund_holding_china):",quarters[0],"is supposed to be earlier than",quarters[1])
32
33
  return None
33
-
34
- df=fund_stock_holding_compare_china(fund=ticker,quarter1=quarters[0],quarter2=quarters[1],rank=rank)
34
+ """
35
+ #保证较早的季度排在前面
36
+ quarters.sort()
37
+
38
+ df=fund_stock_holding_compare_china(fund=ticker,quarter1=quarters[0],quarter2=quarters[1], \
39
+ rank=rank,font_size=font_size)
35
40
 
36
41
  return df
37
42
 
@@ -43,13 +48,18 @@ if __name__=='__main__':
43
48
  df=fund_stock_holding_compare_china(fund,quarter1,quarter2,rank=10)
44
49
 
45
50
  #比较两个季度之间的基金持仓变化
46
- def fund_stock_holding_compare_china(fund,quarter1,quarter2,rank=10):
51
+ def fund_stock_holding_compare_china(fund,quarter1,quarter2,rank=10, \
52
+ font_size='14px'):
47
53
  """
48
54
  功能:基金fund在两个季度quarter1和quarter2的持仓股票对比(股数和金额),前rank名股票
49
55
  参数:
50
56
  fund,str,基金代码;
51
57
  quarter1,str,靠前的季度, 格式为 'YYYYQ1',例如: '2021Q2';
52
58
  quarter2,str,靠后的季度, 格式为 'YYYYQ1',例如: '2021Q2';
59
+
60
+ 注意:监管仅要求基金披露前十大重仓股,因此其持仓比例之和一般小于100%;若大于100%,
61
+ 则为基金以其净资产作为抵押加了杠杆融资,买进更多成份股,导致成份股总价值(基金总资产)超过了基金的净资产。
62
+ 基金总资产 = 基金负债 + 基金净资产
53
63
  """
54
64
  print("Searching fund holding info, which may take time, please wait ...\n")
55
65
 
@@ -112,6 +122,7 @@ def fund_stock_holding_compare_china(fund,quarter1,quarter2,rank=10):
112
122
 
113
123
  df1 = df1[['股票代码', '股票名称','持股数','持仓市值','占净值比例']]
114
124
  df1 = df1.rename(columns={'持股数':s1_share,'持仓市值':s1_value,'占净值比例':s1_ratio})
125
+ num1=len(df1)
115
126
 
116
127
  df2 =data[data['季度']==s2]
117
128
  if len(df2)==0:
@@ -120,6 +131,7 @@ def fund_stock_holding_compare_china(fund,quarter1,quarter2,rank=10):
120
131
 
121
132
  df2 = df2[['股票代码', '股票名称','持股数','持仓市值','占净值比例']]
122
133
  df2 = df2.rename(columns={'持股数':s2_share,'持仓市值':s2_value,'占净值比例':s2_ratio})
134
+ num2=len(df2)
123
135
 
124
136
  df_merge = pd.merge(df1,df2,on=['股票代码','股票名称'],how='outer')
125
137
 
@@ -196,16 +208,17 @@ def fund_stock_holding_compare_china(fund,quarter1,quarter2,rank=10):
196
208
  # 替换空值
197
209
  df.fillna('---')
198
210
  """
199
- print("===== 中国基金持仓股票分析:"+name+','+s1+"对比"+s2,"(按后者持仓比例高低排列,"+order+str(rank)+"名股票) =====\n")
211
+ print("===== 中国基金持仓股票分析:"+name+','+s1+"对比"+s2,"(按后者持仓比例高低排列,"+order+str(rank)+"名重仓股) =====\n")
200
212
  print(df.to_string(index=False))
201
213
  import datetime; today = datetime.date.today()
202
214
  print("\n*** 注:持股数为万股,持仓市值为万元,持仓比例为占基金资产净值比例%,包括A股与非A股")
203
215
  print(" 数据来源:天天基金/东方财富, 期间持仓股票总计"+str(len(df_merge))+"只,",today)
204
216
  """
205
- titletxt="基金持仓转移矩阵:"+name+''+s1+"对比"+s2+"(按后者持仓比例降序排列,"+order+str(rank)+"名成份证券)"
217
+ titletxt="基金持仓转移明细:"+name+'基金,'+s1+"对比"+s2+"(按后者持仓比例降序排列,"+order+str(rank)+"名重仓股)"
206
218
 
207
- footnote1="【注】持仓数为万股,持仓市值为万元,持仓比例为占基金资产净值比例%;"
208
- footnote2="期间内(曾经)持仓证券数合计"+str(len(df_merge))+"只"+'\n'
219
+ footnote1="【注】持仓数单位为万股,持仓市值单位为万元,持仓比例为成份股价值为占基金资产净值%(以最新期间为准列示)\n"
220
+ #footnote2=s1+'/'+s2+"期末持仓证券数"+str(num1)+'/'+str(num2)+"只"+'\n'
221
+ footnote2='监管仅要求披露前十大重仓股,其持仓比例之和一般小于100%;若大于100%则为基金加了杠杆,总资产多于净资产\n'
209
222
  import datetime; todaydt = datetime.date.today()
210
223
  footnote9="数据来源:天天基金/东方财富,"+str(todaydt)+"统计"
211
224
  footnote=footnote1+footnote2+footnote9
@@ -227,21 +240,27 @@ def fund_stock_holding_compare_china(fund,quarter1,quarter2,rank=10):
227
240
  df=df[collist1]
228
241
  """
229
242
  df.replace(0,'---',inplace=True); df.replace('0','---',inplace=True)
243
+
244
+ #确定表格字体大小
245
+ titile_font_size=font_size
246
+ heading_font_size=data_font_size=str(int(font_size.replace('px',''))-2)+'px'
230
247
 
231
248
  df_display_CSS(df,titletxt=titletxt,footnote=footnote,facecolor='papayawhip',decimals=2, \
232
249
  first_col_align='center',second_col_align='left', \
233
250
  last_col_align='right',other_col_align='right', \
234
- titile_font_size='14px',heading_font_size='12px', \
235
- data_font_size='12px')
251
+ titile_font_size=titile_font_size, \
252
+ heading_font_size=heading_font_size, \
253
+ data_font_size=data_font_size)
236
254
 
237
255
  return df_merge
238
256
 
239
257
  #==============================================================================
240
- def fund_holding_china(ticker,rank=10,pastyears=2):
258
+ def fund_holding_china(ticker,rank=10,pastyears=2,reverse=False,font_size='16px'):
241
259
  """
242
260
  功能:套壳函数fund_stock_holding_rank_china
243
261
  """
244
- df,data=fund_stock_holding_rank_china(fund=ticker,rank=rank,year_num=pastyears)
262
+ df,data=fund_stock_holding_rank_china(fund=ticker,rank=rank,year_num=pastyears, \
263
+ reverse=reverse,font_size=font_size)
245
264
 
246
265
  return df,data
247
266
 
@@ -253,8 +272,10 @@ if __name__=='__main__':
253
272
  df=fund_stock_holding_rank_china(fund,year_num=2)
254
273
 
255
274
  # 获取单只基金的十大股票名称信息
256
- def fund_stock_holding_rank_china(fund,rank=10,year_num=2):
275
+ def fund_stock_holding_rank_china(fund,rank=10,year_num=2, \
276
+ reverse=False,font_size='16px'):
257
277
  """
278
+ 基金的成份股持仓转移矩阵
258
279
  比较股票型基金fund近year_num年持仓的前10大股票排名变化
259
280
  """
260
281
  print("Searching fund stock holding info, which takes time, please wait ...\n")
@@ -373,21 +394,27 @@ def fund_stock_holding_rank_china(fund,rank=10,year_num=2):
373
394
  name=get_fund_name_china2(fund)
374
395
 
375
396
  #print("=== 基金持仓股票排行分析:"+name+",按照占净值比例高低排列 ===\n")
376
- titletxt="基金持仓转移详情:"+name+",按照占净值比例降序排列,前"+str(rank)+"名成份证券"
397
+ titletxt="基金持仓转移矩阵:"+name+"基金,按照占净值比例降序排列,前"+str(rank)+"名重仓股"
377
398
  import datetime; todaydt = datetime.date.today()
378
399
  #print("\n*** 注:包括A股与非A股。持股结构:股票简称(占净值比例%,持股数万股),",str(todaydt))
379
400
  footnote="【注】持仓结构:证券简称(占净值比例%,持仓数万股),"+str(todaydt)+"统计"
380
401
 
381
- #最新的日期方前面
382
- collist=list(df)
383
- collist.sort(reverse=True)
384
- df=df[collist]
402
+ if reverse:
403
+ #最新的日期放前面
404
+ collist=list(df)
405
+ collist.sort(reverse=True)
406
+ df=df[collist]
407
+
408
+ #确定表格字体大小
409
+ titile_font_size=font_size
410
+ heading_font_size=data_font_size=str(int(font_size.replace('px',''))-1)+'px'
385
411
 
386
412
  df_display_CSS(df,titletxt=titletxt,footnote=footnote,facecolor='papayawhip',decimals=3, \
387
413
  first_col_align='center',second_col_align='left', \
388
414
  last_col_align='left',other_col_align='left', \
389
- titile_font_size='16px',heading_font_size='15px', \
390
- data_font_size='15px')
415
+ titile_font_size=titile_font_size, \
416
+ heading_font_size=heading_font_size, \
417
+ data_font_size=data_font_size)
391
418
 
392
419
  """
393
420
  alignlist=['center']+['left']*(len(list(df))-1)
siat/sector_china.py CHANGED
@@ -3033,49 +3033,46 @@ def industry_scan_china(sw_level='F', \
3033
3033
 
3034
3034
  return df2
3035
3035
 
3036
+
3036
3037
  #==============================================================================
3037
3038
  if __name__=='__main__':
3038
3039
  ticker='600791.SS'
3039
- find_industry_sw(ticker)
3040
-
3041
- def find_industry_sw(ticker):
3040
+ ticker='东阿阿胶'
3041
+
3042
+ contains_chinese(ticker)
3043
+
3044
+ def contains_chinese(text):
3042
3045
  """
3043
- 功能:寻找一只股票所属的申万行业,细分行业
3046
+ 功能:判断字符串是否含有汉字
3044
3047
  """
3045
- ticker6=ticker[:6]
3046
-
3047
- import akshare as ak
3048
- #df3 = ak.sw_index_third_info()
3049
- df2 = ak.sw_index_second_info()
3050
- df2['industry_code']=df2['行业代码'].apply(lambda x: x[:6])
3051
- industry_list=list(df2['industry_code'])
3052
-
3053
- for i in industry_list:
3054
- cdf = ak.index_component_sw(i)
3055
- component_list=list(cdf)
3056
-
3057
- if ticker6 in component_list:
3058
- stock_name=cdf[cdf["证券代码"]==ticker6]['证券名称'].values[0]
3059
- print("股票:",ticker,",",stock_name)
3060
-
3061
- isi=i+'.SI'
3062
- industry_name=df3[df3[行业代码]==isi]['行业名称'].values[0]
3063
- print("申万三级行业代码:",i+".SW",",",industry_name)
3064
-
3065
- break
3066
-
3067
- return
3048
+ import re
3049
+ return re.search(r'[\u4e00-\u9fff]', text) is not None
3068
3050
 
3069
3051
  #==============================================================================
3070
3052
  if __name__=='__main__':
3071
3053
  ticker='600791.SS'
3054
+
3055
+ ticker=['600791.SS','东阿阿胶']
3056
+ level='1'
3057
+
3072
3058
  find_industry_sw(ticker)
3073
3059
 
3074
- def find_industry_sw(ticker,level='2'):
3060
+ def find_industry_sw(ticker,level='1',ticker_order=True):
3075
3061
  """
3076
3062
  功能:寻找一只股票所属的申万行业
3077
3063
  """
3078
- ticker6=ticker[:6]
3064
+ print(" Searching shenwan industries for securities ... ...")
3065
+
3066
+ if isinstance(ticker,str):
3067
+ ticker=[ticker]
3068
+
3069
+ tickerlist=[]
3070
+ for t in ticker:
3071
+ if not contains_chinese(t):
3072
+ tt=t[:6]
3073
+ tickerlist=tickerlist+[tt]
3074
+ else:
3075
+ tickerlist=tickerlist+[t]
3079
3076
 
3080
3077
  import akshare as ak
3081
3078
  if level == '3':
@@ -3088,8 +3085,13 @@ def find_industry_sw(ticker,level='2'):
3088
3085
  df['industry_code']=df['行业代码'].apply(lambda x: x[:6])
3089
3086
  industry_list=list(df['industry_code'])
3090
3087
 
3088
+ import pandas as pd; import random; import time
3089
+ result=pd.DataFrame(columns=['序号','证券名称','证券代码','行业名称','行业代码'])
3090
+
3091
3091
  for i in industry_list:
3092
- print_progress_percent2(i,industry_list,steps=10,leading_blanks=0)
3092
+ print_progress_percent2(i,industry_list,steps=10,leading_blanks=2)
3093
+
3094
+ iname=df[df['industry_code']==i]['行业名称'].values[0]
3093
3095
 
3094
3096
  try:
3095
3097
  cdf = ak.index_component_sw(i)
@@ -3097,7 +3099,7 @@ def find_industry_sw(ticker,level='2'):
3097
3099
  print(" #Warning(find_industry_sw): server banned this ip becos of too many requests")
3098
3100
  print(" Solution: change to another ip or another computer, or try a few hours later.")
3099
3101
  return
3100
-
3102
+ """
3101
3103
  component_list=list(cdf['证券代码'])
3102
3104
 
3103
3105
  if ticker6 in component_list:
@@ -3109,8 +3111,70 @@ def find_industry_sw(ticker,level='2'):
3109
3111
  print("申万"+str(level)+"级行业代码:"+i+".SW,"+industry_name)
3110
3112
 
3111
3113
  break
3114
+ """
3115
+ for t in tickerlist:
3116
+ torder=tickerlist.index(t)+1
3117
+
3118
+ if not contains_chinese(t):
3119
+ dft=cdf[cdf['证券代码']==t]
3120
+ if len(dft)==0: continue
3121
+ else:
3122
+ tname=cdf[cdf['证券代码']==t]['证券名称'].values[0]
3123
+ s=pd.Series({'序号':torder,'证券名称':tname,'证券代码':t,'行业名称':iname,'行业代码':i})
3124
+ try:
3125
+ result=result.append(s,ignore_index=True)
3126
+ except:
3127
+ result=result._append(s,ignore_index=True)
3128
+ else:
3129
+ dft=cdf[cdf['证券名称']==t]
3130
+ if len(dft)==0: continue
3131
+ else:
3132
+ tcode=cdf[cdf['证券名称']==t]['证券代码'].values[0]
3133
+ s=pd.Series({'序号':torder,'证券名称':t,'证券代码':tcode,'行业名称':iname,'行业代码':i})
3134
+ try:
3135
+ result=result.append(s,ignore_index=True)
3136
+ except:
3137
+ result=result._append(s,ignore_index=True)
3138
+
3139
+ #是否都找到了?
3140
+ if len(result) == len(tickerlist): break
3112
3141
 
3113
- return
3142
+ #生成随机数睡眠,试图防止被反爬虫,不知是否管用!
3143
+ random_int=random.randint(1,5)
3144
+ time.sleep(random_int)
3145
+
3146
+ #排序
3147
+ if not ticker_order:
3148
+ #按行业代码排序
3149
+ result.sort_values(by='行业代码',inplace=True)
3150
+ else:
3151
+ #按ticker顺序排序
3152
+ result.sort_values(by='序号',inplace=True)
3153
+ """
3154
+ if contains_chinese(tickerlist[0]):
3155
+ result.sort_values(by='证券名称',key=lambda x: x.map(dict(zip(tickerlist,range(len(tickerlist))))))
3156
+ else:
3157
+ result.sort_values(by='证券代码',key=lambda x: x.map(dict(zip(tickerlist,range(len(tickerlist))))))
3158
+ """
3159
+ #result.reset_index(drop=True,inplace=True)
3160
+
3161
+ #显示结果
3162
+ titletxt="证券所属行业:申万"+str(level)+"级行业"
3163
+ import datetime; todaydt = datetime.date.today()
3164
+ footnote="数据来源:申万宏源,"+str(todaydt)+"统计"
3165
+ """
3166
+ collist=list(result)
3167
+ result['序号']=result.index+1
3168
+ result=result[['序号']+collist]
3169
+ """
3170
+ print('')
3171
+ df_display_CSS(result,titletxt=titletxt,footnote=footnote,facecolor='papayawhip',decimals=2, \
3172
+ first_col_align='center',second_col_align='left', \
3173
+ last_col_align='left',other_col_align='left', \
3174
+ titile_font_size='16px',heading_font_size='15px', \
3175
+ data_font_size='15px')
3176
+
3177
+ return result
3114
3178
 
3115
3179
  #==============================================================================
3116
3180
  #==============================================================================
siat/stock_technical.py CHANGED
@@ -2009,7 +2009,7 @@ def security_bollinger(ticker,fromdate,todate,boll_days=20, \
2009
2009
  print(" #Error(security_bollinger): price info not found for",ticker)
2010
2010
  return None
2011
2011
  if found not in ['Found']:
2012
- print(" #Error(): ticker info either inaccessible or not found for",ticker)
2012
+ print(" #Error(security_bollinger): ticker info either inaccessible or not found for",ticker)
2013
2013
  return None
2014
2014
 
2015
2015
  # 滚动均值与标准差
@@ -2045,7 +2045,7 @@ def security_bollinger(ticker,fromdate,todate,boll_days=20, \
2045
2045
  data_label=False,resample_freq='6H',smooth=smooth, \
2046
2046
  date_range=date_range,date_freq=date_freq,date_fmt='%Y-%m-%d', \
2047
2047
  colorlist=colorlist,lslist=lslist,lwlist=lwlist, \
2048
- band_area=['上(压力)线','下(支撑)线'],mark_end=mark_end)
2048
+ band_area=['上(压力)线','下(支撑)线'],mark_end=mark_end,loc=loc)
2049
2049
 
2050
2050
  return df1
2051
2051
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: siat
3
- Version: 3.1.11
3
+ Version: 3.1.12
4
4
  Summary: Securities Investment Analysis Tools (siat)
5
5
  Home-page: https://pypi.org/project/siat/
6
6
  Author: Prof. WANG Dehong, International Business School, Beijing Foreign Studies University
@@ -52,7 +52,7 @@ siat/financials_test.py,sha256=HJ3CPo_Xckz2wXi3AEP6ZNWCF1Duc1pLi0Y10USiImc,23829
52
52
  siat/fred_test.py,sha256=KF50ssSbsfpa_kT6iuomD0vG4eXztAcOasZxg1OGX5w,1201
53
53
  siat/fund.py,sha256=wMDORsCBV8ZXfgwbtq-0bu3qqWY66dHnbqgllW0gWCo,24637
54
54
  siat/fund_china.pickle,sha256=QI3IjV46EeJ5ryO3xocmByc-6b_6_nDxgcXDhBHzop0,2380915
55
- siat/fund_china.py,sha256=Sa9_s1A_dTT_sBu_pYYw2WaNZF0MIrNy-5X2FO4Lm00,97528
55
+ siat/fund_china.py,sha256=5ZgF4G9GFQa7hPufqol-qDg_EZj8CtmYd0UR9L2zIDI,99025
56
56
  siat/fund_china_test.py,sha256=-Bh6m0J0GPpIbYXx-H2vpzJoNFI6pE2C2jVPa8DazgE,6649
57
57
  siat/fund_test.py,sha256=V4ADb8Gsp8gyeFTwcgRsJBpnUih_O-Q2V1ILc5oKjK8,1116
58
58
  siat/future_china.py,sha256=F-HsIf2Op8Z22RzTjet1g8COzldgnMjFNSXsAkeGyWo,17595
@@ -91,7 +91,7 @@ siat/risk_evaluation.py,sha256=I6B3gty-t--AkDCO0tKF-291YfpnF-IkXcFjqNKCt9I,76286
91
91
  siat/risk_evaluation_test.py,sha256=YEXM96gKzTfwN4U61AS4Rr1tV7KgUvn4rRC6f3iMw9s,3731
92
92
  siat/risk_free_rate.py,sha256=ZMr4cHikPvXvywr54gGqiI3Nvb69am6tq3zj2hwzANE,12384
93
93
  siat/risk_free_rate_test.py,sha256=CpmhUf8aEAEZeNu4gvWP2Mz2dLoIgBX5bI41vfUBEr8,4285
94
- siat/sector_china.py,sha256=ijczadqHt4wEvNYjzDFllanxBLfXJy10v5th09KBEpI,115049
94
+ siat/sector_china.py,sha256=o8t4amM6NKGwYiT4N1Vqb3UdDpky_JY_jQwL-Q2Ygd8,117754
95
95
  siat/sector_china_test.py,sha256=1wq7ef8Bb_L8F0h0W6FvyBrIcBTEbrTV7hljtpj49U4,5843
96
96
  siat/security_price.py,sha256=2oHskgiw41KMGfqtnA0i2YjNNV6cYgtlUK0j3YeuXWs,29185
97
97
  siat/security_price2.py,sha256=kuYh0V5cqclkM6MjZUd-N361fv3oxGVVerYINuTzZrE,24622
@@ -112,7 +112,7 @@ siat/stock_list_china_test.py,sha256=gv14UwMMvkZqtb6G7DCTSuehIwVHuVwu7w60p6gyHoo
112
112
  siat/stock_prices_kneighbors.py,sha256=WfZvo5EyeBsm-T37zDj7Sl9dPSRq5Bx4JxIJ9IUum6s,36738
113
113
  siat/stock_prices_linear.py,sha256=-OUKRr27L2aStQgJSlJOrJ4gay_G7P-m-7t7cU2Yoqk,13991
114
114
  siat/stock_profile.py,sha256=B3eIwzEmiCqiCaxIlhfdEPsQBoW1PFOe1hkiY3mVF6Y,26038
115
- siat/stock_technical.py,sha256=c9kv_ih1BxxBGk2bcfkFUfKxy3I4_1jNFfoYMk-j0gY,112833
115
+ siat/stock_technical.py,sha256=YGfvsV5Uu9xaZgJO7dwl1FsvszwX3jsGyJxqJgNamQk,112859
116
116
  siat/stock_test.py,sha256=E9YJAvOw1VEGJSDI4IZuEjl0tGoisOIlN-g9UqA_IZE,19475
117
117
  siat/stooq.py,sha256=dOc_S5HLrYg48YAKTCs1eX8UTJOOkPM8qLL2KupqlLY,2470
118
118
  siat/temp.py,sha256=gbJ0ioauuo4koTPH6WKUkqcXiQPafnbhU5eKJ6lpdLA,1571
@@ -132,7 +132,7 @@ siat/valuation.py,sha256=NKfeZMdDJOW42oLVHob6eSVBXUqlN1OCnnzwyGAst8c,48855
132
132
  siat/valuation_china.py,sha256=Tde2LzPDQy3Z7xOQQDw4ckQMPdROp_z0-GjFE6Z5_lI,67639
133
133
  siat/valuation_market_china_test.py,sha256=gbJ0ioauuo4koTPH6WKUkqcXiQPafnbhU5eKJ6lpdLA,1571
134
134
  siat/var_model_validation.py,sha256=f-oDewg7bPzyNanz_Y_jLH68NowAA3gXFehW_weKGG0,14898
135
- siat-3.1.11.dist-info/METADATA,sha256=lFu29swamLdB_jdSJNZqMhgIwlHI80JQffc5qHAj7f4,1448
136
- siat-3.1.11.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
137
- siat-3.1.11.dist-info/top_level.txt,sha256=r1cVyL7AIKqeAmEJjNR8FMT20OmEzufDstC2gv3NvEY,5
138
- siat-3.1.11.dist-info/RECORD,,
135
+ siat-3.1.12.dist-info/METADATA,sha256=rgKgLVsy_yr30SZbLNHZCCzjVMz2_TOVSuGIV2HVOAM,1448
136
+ siat-3.1.12.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
137
+ siat-3.1.12.dist-info/top_level.txt,sha256=r1cVyL7AIKqeAmEJjNR8FMT20OmEzufDstC2gv3NvEY,5
138
+ siat-3.1.12.dist-info/RECORD,,
File without changes