siat 3.4.32__py3-none-any.whl → 3.4.37__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/common.py CHANGED
@@ -3799,8 +3799,9 @@ def df_display_CSS(df,titletxt='',footnote='',facecolor='papayawhip',decimals=2,
3799
3799
  from IPython.display import display
3800
3800
  display(style6)
3801
3801
 
3802
- print(footnote)
3803
- print('') #空一行
3802
+ if not footnote=='':
3803
+ print(footnote)
3804
+ #print('') #空一行
3804
3805
 
3805
3806
  return
3806
3807
 
@@ -3811,7 +3812,7 @@ if __name__=='__main__':
3811
3812
  def upgrade_siat(module_list=['siat','akshare','pandas','pandas_datareader', \
3812
3813
  'yfinance','yahooquery','urllib3','tabulate','twine', \
3813
3814
  'mplfinance','openpyxl','pip','bottleneck','ipywidgets'], \
3814
- pipcmd="pip install --upgrade",alternative=""):
3815
+ pipcmd="python -m pip install --upgrade --user",alternative=""):
3815
3816
  """
3816
3817
  功能:一次性升级siat及其相关插件
3817
3818
 
siat/sector_china.py CHANGED
@@ -198,6 +198,7 @@ def sector_code_china(sector_name):
198
198
 
199
199
  #if found > 0: print(" ")
200
200
  if indicator == "行业": indicator = "证监会行业"
201
+ if indicator == "概念": indicator = "新浪概念"
201
202
 
202
203
  if len(sector_code)>0:
203
204
  """
@@ -575,13 +576,19 @@ if __name__=='__main__':
575
576
  sector="new_dlhy"
576
577
  sector="yysw"
577
578
  sector="xyz"
579
+
580
+ ticker='000661.SZ'; sector="gn_swym"
578
581
 
579
- def sector_position_sina(ticker,sector="new_dlhy"):
582
+ def sector_position_sina(ticker,sector="new_dlhy",return_result=False):
580
583
  """
581
584
  功能:套壳sector_position_china
582
585
  """
583
586
  df=sector_position_china(ticker=ticker,sector=sector)
584
- return df
587
+
588
+ if return_result:
589
+ return df
590
+ else:
591
+ return
585
592
 
586
593
  def sector_position_china(ticker,sector="new_dlhy"):
587
594
  """
@@ -614,19 +621,21 @@ def sector_position_china(ticker,sector="new_dlhy"):
614
621
  break
615
622
  except:
616
623
  continue
624
+
617
625
  #未找到板块代码
618
626
  if sector_name == '':
619
- print(" #Error(sector_position_china): unsupported sector code",sector)
627
+ print(" #Warning(sector_position_china): unsupported sector code",sector)
620
628
  return None
621
629
 
622
630
  #板块成份股
623
631
  try:
624
- #启明星行业分类没有成份股明细
632
+ #注意:启明星行业分类没有成份股明细
625
633
  df = ak.stock_sector_detail(sector=sector)
626
634
  except:
627
- print(" #Error(sector_position_china): sector detail not available for",sector,'by',indicator)
628
- print(" Possible reason: data source is self-updating.")
629
- print(" Solution: have a breath of fresh air and try later.")
635
+ print(" #Warning(sector_position_china): sector detail not available for",sector,'by',indicator)
636
+ if indicator !="启明星行业":
637
+ print(" Possible reason: data source is self-updating.")
638
+ print(" Solution: have a breath of fresh air and try later.")
630
639
  return None
631
640
 
632
641
  #清洗原始数据: #可能同时含有数值和字符串,强制转换成数值
@@ -641,32 +650,40 @@ def sector_position_china(ticker,sector="new_dlhy"):
641
650
  #检查股票代码是否存在
642
651
  sdf=df[df['code']==ticker1]
643
652
  if len(sdf) == 0:
644
- print(" #Error(sector_position_china): retrieving",ticker,"failed in sector",sector,sector_name)
645
- print(" Try later if network responses slowly.")
653
+ print(" #Warning(sector_position_china): retrieving",ticker,"failed in sector",sector,sector_name)
654
+ print(" Solution: make sure stock code correct, try later if network is slow")
646
655
  return None
647
656
  sname=list(sdf['name'])[0]
648
657
 
649
658
  #确定比较范围
650
659
  complist=['changepercent','turnoverratio','settlement','per','pb','nmc','mktcap']
660
+ vminlist=['settlement','per','pb','nmc','mktcap'] #板块最小值若为零需要标记的列
651
661
  compnames=['涨跌幅%','换手率%','收盘价(元)','市盈率','市净率','流通市值(亿元)','总市值(亿元)']
652
- compdf=pd.DataFrame(columns=['指标名称','指标数值','板块分位数%','板块中位数','板块最小值','板块最大值'])
662
+ compdf=pd.DataFrame(columns=['指标名称','指标数值','板块排名','板块分位数%','板块中位数','板块最小值','板块最大值'])
653
663
 
654
664
  from scipy.stats import percentileofscore
655
665
 
656
666
  for c in complist:
657
667
  v=list(sdf[c])[0]
658
- vlist=list(set(list(df[c])))
659
- vlist.sort()
668
+ #vlist=list(set(list(df[c])))
669
+ vlist=list(df[c])
670
+ vlist.sort() #升序
660
671
  vmin=round(min(vlist),2)
672
+ if vmin==0.00 and c in vminlist:
673
+ vmin='--'
674
+
661
675
  vmax=round(max(vlist),2)
662
676
  vmedian=round(np.median(vlist),2)
663
677
 
664
678
  pos=vlist.index(v)
665
679
  #pct=round((pos+1)/len(vlist)*100,2)
680
+ #sector_rank=str(len(vlist)-pos)+'/'+str(len(vlist))
681
+ sector_rank=str(len(vlist)-pos)
682
+
666
683
  pct=percentileofscore(vlist,v)
667
684
 
668
685
  s=pd.Series({'指标名称':compnames[complist.index(c)], \
669
- '指标数值':v,'板块分位数%':pct,'板块中位数':vmedian, \
686
+ '指标数值':v,'板块排名':sector_rank,'板块分位数%':pct,'板块中位数':vmedian, \
670
687
  '板块最小值':vmin,'板块最大值':vmax})
671
688
  try:
672
689
  compdf=compdf.append(s,ignore_index=True)
@@ -695,13 +712,13 @@ def sector_position_china(ticker,sector="new_dlhy"):
695
712
  """
696
713
  if indicator=="行业": indicator="证监会行业"
697
714
 
698
- titletxt="上市公司地位分析:"+sname+","+sector_name+"行业/板块("+indicator+"分类)"
715
+ titletxt="\n上市公司地位分析:"+sname+","+sector_name+"行业/板块("+indicator+"分类)"
699
716
  import datetime; stoday = datetime.date.today()
700
717
  footnote1=""
701
718
  footnote2="成分股总数:"+str(len(df))+",数据来源:新浪财经,"+str(stoday)+"(截至昨日)"
702
719
  footnote=footnote1+footnote2
703
720
 
704
- print("") #空一行
721
+ #print("") #空一行
705
722
  df_display_CSS(compdf,titletxt=titletxt,footnote=footnote,facecolor='papayawhip',decimals=2, \
706
723
  first_col_align='left',second_col_align='right', \
707
724
  last_col_align='right',other_col_align='right', \
@@ -932,7 +949,7 @@ if __name__=='__main__':
932
949
 
933
950
  print_industry_component_sw(iname,numberPerLine=5,colalign='right')
934
951
 
935
- def print_industry_component_sw(iname,numberPerLine=5,colalign='left'):
952
+ def print_industry_component_sw(iname,numberPerLine=5,colalign='left',return_result=False):
936
953
  """
937
954
  打印申万行业的成分股,名称(代码)
938
955
  """
@@ -955,12 +972,15 @@ def print_industry_component_sw(iname,numberPerLine=5,colalign='left'):
955
972
  import datetime as dt; stoday=dt.date.today()
956
973
  ilist=list(cdf['name_code'])
957
974
 
958
- titletxt="行业板块"+iname+"("+icode+")成分股:计"+str(len(ilist))+'只,按行业指数权重降序排列,'+str(stoday)
975
+ titletxt=iname+"("+icode+")行业/板块成分股:计"+str(len(ilist))+'只,按行业指数权重降序排列,'+str(stoday)
959
976
  print("\n"+titletxt,end='')
960
977
  #表格
961
978
  printInLine_md(ilist,numberPerLine=numberPerLine,colalign=colalign)
962
979
 
963
- return
980
+ if return_result:
981
+ return ilist
982
+ else:
983
+ return
964
984
 
965
985
  #==============================================================================
966
986
  if __name__=='__main__':
@@ -981,8 +1001,10 @@ def print_industry_component_sw2(icode,numberPerLine=5,colalign='left'):
981
1001
 
982
1002
  clist,cdf=industry_stock_sw(icode,top=1000)
983
1003
  if cdf is None:
984
- print(" Error(print_industry_component_sw2): Shenwan industry component info tentatively inaccessible")
985
- print(" Try later, or change to another computer and try again")
1004
+ print(" #Error(print_industry_component_sw2): failed to retrieve industry for",icode)
1005
+ print(" Solution: make sure the industry code correct")
1006
+ print(" If the code is correct, upgrade akshare, restart jupyter and try again")
1007
+
986
1008
  return
987
1009
 
988
1010
  #cdf['icode']=cdf['证券代码'].apply(lambda x: x+'.SS' if x[:1] in ['6'] else (x+'.SZ' if x[:1] in ['0','3'] else x+'.BJ' ))
@@ -1289,7 +1311,7 @@ if __name__=='__main__':
1289
1311
  period="day"
1290
1312
  industry_list='all'
1291
1313
 
1292
- def get_industry_sw(itype='1',period="day",industry_list='all',max_sleep=8):
1314
+ def get_industry_sw(itype='1',period="day",industry_list='all',max_sleep=15):
1293
1315
  """
1294
1316
  功能:遍历某类申万指数,下载数据
1295
1317
  itype: F表征指数,n=1/2/3行业指数,S风格指数,B大类风格,C金创类
@@ -1333,7 +1355,7 @@ def get_industry_sw(itype='1',period="day",industry_list='all',max_sleep=8):
1333
1355
  total=len(ilist)
1334
1356
  fail_list=[]
1335
1357
  for i in ilist:
1336
- print_progress_percent2(i,ilist,steps=5,leading_blanks=4)
1358
+ #print_progress_percent2(i,ilist,steps=5,leading_blanks=4)
1337
1359
  #print(" Retrieving information for industry",i)
1338
1360
 
1339
1361
  #抓取指数价格
@@ -1365,6 +1387,7 @@ def get_industry_sw(itype='1',period="day",industry_list='all',max_sleep=8):
1365
1387
  current=ilist.index(i)
1366
1388
  #print_progress_percent(current,total,steps=steps,leading_blanks=2)
1367
1389
 
1390
+ print_progress_percent2(i,ilist,steps=steps,leading_blanks=4)
1368
1391
  #生成随机数睡眠,试图防止被反爬虫,不知是否管用!
1369
1392
  random_int=random.randint(1,max_sleep)
1370
1393
  time.sleep(random_int)
@@ -1398,7 +1421,7 @@ if __name__=='__main__':
1398
1421
  industry_list=['850831.SW','801785.SW','801737.SW','801194.SW',
1399
1422
  '801784.SW','801783.SW','801782.SW']
1400
1423
 
1401
- def get_industry_sw2(industry_list,period="day",max_sleep=8):
1424
+ def get_industry_sw2(industry_list,period="day",max_sleep=15):
1402
1425
  """
1403
1426
  功能:遍历指定的申万指数列表,下载数据
1404
1427
  period="day"; choice of {"day", "week", "month"}
@@ -2234,8 +2257,8 @@ def industry_stock_sw(industry='801270.SW',top=5,printout=False):
2234
2257
  try:
2235
2258
  cdf = ak.index_component_sw(industry)
2236
2259
  except:
2237
- print(" #Warning(industry_stock_sw): internal failure on component stocks for Shenwan industry",industry)
2238
- print(" Possible solution: upgrade akshare and then try again (good luck but no guarantee)")
2260
+ print(" #Warning(industry_stock_sw): failed to retrieve component info for",industry)
2261
+ print(" Solution: upgrade akshare, restart jupyter and try again")
2239
2262
  return None,None
2240
2263
 
2241
2264
  # 删除'证券名称'为None的行
@@ -2956,6 +2979,7 @@ if __name__ =="__main__":
2956
2979
 
2957
2980
 
2958
2981
  def industry_scan_china(sw_level='F', \
2982
+ indicator='Exp Ret%', \
2959
2983
  start='MRY',end='default', \
2960
2984
  RF=0, \
2961
2985
  printout='smart', \
@@ -2969,7 +2993,7 @@ def industry_scan_china(sw_level='F', \
2969
2993
  筛选方式printout:smart--收益前10名与后10名(默认),winner--仅限收益为正的行业,
2970
2994
  loser--仅限收益为负的行业,50--收益前50名,-10--收益后10名,all--所有行业
2971
2995
  """
2972
- indicator='Exp Ret%'
2996
+ #indicator='Exp Ret%'
2973
2997
 
2974
2998
  print(" Collecting industry info, it may take very long time ... ...")
2975
2999
 
@@ -3125,7 +3149,7 @@ def industry_scan_china(sw_level='F', \
3125
3149
  if printout=='all':
3126
3150
  printout_txt='所有指数'
3127
3151
  elif printout=='smart':
3128
- printout_txt='收益最高最低者各十名'
3152
+ printout_txt='前/后十个行业'
3129
3153
  if len(df2) <=20:
3130
3154
  printout_txt='所有指数'
3131
3155
  elif printout=='winner':
@@ -3146,7 +3170,8 @@ def industry_scan_china(sw_level='F', \
3146
3170
  printout_txt='未知筛选方式'
3147
3171
 
3148
3172
  #titletxt="申万行业业绩排行榜:"+sw_level_txt+',共'+str(len(df_prt))+"个指数符合条件"
3149
- titletxt="行业业绩排行榜:"+sw_level_txt+',筛选方式:'+printout_txt
3173
+ #titletxt="行业业绩排行榜:"+sw_level_txt+','+ectranslate(indicator)+',筛选方式:'+printout_txt
3174
+ titletxt="中国股市板块表现排行榜:"+sw_level_txt+','+printout_txt
3150
3175
  #print("\n***",titletxt,'\n')
3151
3176
  """
3152
3177
  alignlist=['center']+['left']*(len(list(df_prt))-1)
@@ -3154,7 +3179,7 @@ def industry_scan_china(sw_level='F', \
3154
3179
  """
3155
3180
  #print("\n *** 数据来源:综合申万宏源/东方财富/新浪财经,",todaydt,"\b;分析期间:",fromdate+'至'+todate)
3156
3181
  #footnote1="筛选方式:all-所有,smart-收益最高最低各10个,winner-收益为正,loser-收益为负"
3157
- footnote2="数据来源:综合申万宏源/东方财富/新浪财经,"+str(fromdate)+'至'+str(todate)+"。"+str(todaydt)+"统计"
3182
+ footnote2="数据来源:申万宏源,统计期间:"+str(fromdate)+'至'+str(todate)+"(截至昨日)。"+str(todaydt)+"制表"
3158
3183
  #footnote=footnote1+'\n'+footnote2
3159
3184
  footnote=footnote2
3160
3185
 
@@ -3162,10 +3187,25 @@ def industry_scan_china(sw_level='F', \
3162
3187
  titile_font_size=font_size
3163
3188
  heading_font_size=data_font_size=str(int(font_size.replace('px',''))-1)+'px'
3164
3189
 
3190
+ df_prt['序号']=df_prt.index
3191
+ if indicator=='Exp Ret%':
3192
+ df_prt=df_prt[['序号','行业名称','行业代码','投资收益率%','投资收益波动率%','投资收益损失风险%','夏普比率','索替诺比率']]
3193
+ elif indicator=='Exp Ret Volatility%':
3194
+ df_prt=df_prt[['序号','行业名称','行业代码','投资收益波动率%','投资收益率%','投资收益损失风险%','夏普比率','索替诺比率']]
3195
+ elif indicator=='Exp Ret LPSD%':
3196
+ df_prt=df_prt[['序号','行业名称','行业代码','投资收益损失风险%','投资收益波动率%','投资收益率%','夏普比率','索替诺比率']]
3197
+ elif indicator=='sharpe':
3198
+ df_prt=df_prt[['序号','行业名称','行业代码','夏普比率','索替诺比率','投资收益率%','投资收益波动率%','投资收益损失风险%']]
3199
+ elif indicator=='sortino':
3200
+ df_prt=df_prt[['序号','行业名称','行业代码','索替诺比率','夏普比率','投资收益率%','投资收益波动率%','投资收益损失风险%']]
3201
+
3202
+
3203
+
3165
3204
  df_display_CSS(df_prt,titletxt=titletxt,footnote=footnote,facecolor=facecolor, \
3166
- first_col_align='left',second_col_align='left', \
3205
+ first_col_align='center',second_col_align='left', \
3206
+ last_col_align='center',other_col_align='center', \
3167
3207
  titile_font_size=titile_font_size,heading_font_size=heading_font_size, \
3168
- data_font_size=data_font_size)
3208
+ data_font_size=data_font_size)
3169
3209
 
3170
3210
  return df2
3171
3211
 
@@ -3653,7 +3693,7 @@ def get_stock_industry_sw(ticker):
3653
3693
 
3654
3694
  return industry
3655
3695
  else:
3656
- return ticker
3696
+ return ''
3657
3697
 
3658
3698
  #==============================================================================
3659
3699
  if __name__ == '__main__':
@@ -3670,28 +3710,49 @@ def stock_peers_sw(ticker):
3670
3710
  try:
3671
3711
  hangye=get_stock_industry_sw(ticker)
3672
3712
  except:
3673
- print(" #Warning(stock_peers_sw): stock not found for",ticker)
3713
+ print(" #Warning(stock_peers_sw): industry info not found for",ticker)
3674
3714
  return
3675
3715
 
3716
+ if hangye=='':
3717
+ print(" #Warning(stock_peers_sw): found empty industry for",ticker)
3718
+ return
3719
+
3720
+ ilist=[]; hangye_final=''
3676
3721
  #三级行业优先
3677
3722
  hangye3=hangye+'Ⅲ'
3678
3723
  try:
3679
- print_industry_component_sw(iname=hangye3)
3724
+ ilist=print_industry_component_sw(iname=hangye3,return_result=True)
3725
+ hangye_final=hangye3
3680
3726
  except:
3681
3727
  #二级行业次优先
3682
3728
  hangye2=hangye+'Ⅱ'
3683
3729
  try:
3684
- print_industry_component_sw(iname=hangye2)
3730
+ ilist=print_industry_component_sw(iname=hangye2,return_result=True)
3731
+ hangye_final=hangye2
3685
3732
  except:
3686
3733
  try:
3687
- print_industry_component_sw(iname=hangye)
3734
+ ilist=print_industry_component_sw(iname=hangye,return_result=True)
3735
+ hangye_final=hangye
3688
3736
  except:
3689
3737
  print("\n #Warning(stock_peers_sw): failed to search peers for",ticker)
3690
3738
  print(" Possible solutions:")
3691
- print(" 1. If siat is outdated, uninstall and then reinstall")
3692
- print(" 2. Try upgrade pandas and akshare if outdated")
3693
- print(" 3. If anaconda is outdated, uninstall and install a newer one")
3694
-
3739
+ print(" Try first: upgrade akshare, restart Jupyter and try again")
3740
+ print(" If not working, uninstall anaconda and reinstall a newer version")
3741
+
3742
+ #查找股票在行业板块中的位置
3743
+ if not ilist=='':
3744
+ ticker6=ticker[:6]
3745
+ for i in ilist:
3746
+ if ticker6 in i:
3747
+ ticker_item=i
3748
+ ticker_pos=ilist.index(i)+1
3749
+ break
3750
+
3751
+ footnote0="注:"
3752
+ footnote1=ticker_item+"在申万行业"+hangye_final+"指数中的权重排名为"+str(ticker_pos)+'/'+str(len(ilist))
3753
+ footnote2="该指数的权重排名依据主要包括公司的市值规模、流动性以及市场代表性"
3754
+ footnote=footnote0+'\n'+footnote1+'\n'+footnote2
3755
+ print(footnote)
3695
3756
  return
3696
3757
 
3697
3758
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: siat
3
- Version: 3.4.32
3
+ Version: 3.4.37
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
@@ -18,7 +18,7 @@ siat/capm_beta.py,sha256=cxXdRVBQBllhbfz1LeTJAIWvyRYhW54nhtNUXv4HwS0,29063
18
18
  siat/capm_beta2.py,sha256=lUuCPVSxebkA2yye1PXu1V2Jd2UKEwD_kIA25DCIDTs,29750
19
19
  siat/capm_beta_test.py,sha256=ImR0c5mc4hIl714XmHztdl7qg8v1E2lycKyiqnFj6qs,1745
20
20
  siat/cmat_commons.py,sha256=Nj9Kf0alywaztVoMVeVVL_EZk5jRERJy8R8kBw88_Tg,38116
21
- siat/common.py,sha256=O9-IYeP7z1KHO2YFr-auc_HzBf78nPb-1LY3byb5Avo,151723
21
+ siat/common.py,sha256=OQ1Bh2hHVvdraOLBeUAhPC3Wlx38p7n2COknmtJALZQ,151771
22
22
  siat/compare_cross.py,sha256=3iP9TH2h3w27F2ARZc7FjKcErYCzWRc-TPiymOyoVtw,24171
23
23
  siat/compare_cross_test.py,sha256=xra5XYmQGEtfIZL2h-GssdH2hLdFIhG3eoCrkDrL3gY,3473
24
24
  siat/concepts_iwencai.py,sha256=m1YEDtECRT6FqtzlKm91pt2I9d3Z_XoP59BtWdRdu8I,3061
@@ -94,7 +94,7 @@ siat/risk_evaluation.py,sha256=I6B3gty-t--AkDCO0tKF-291YfpnF-IkXcFjqNKCt9I,76286
94
94
  siat/risk_evaluation_test.py,sha256=YEXM96gKzTfwN4U61AS4Rr1tV7KgUvn4rRC6f3iMw9s,3731
95
95
  siat/risk_free_rate.py,sha256=ZMr4cHikPvXvywr54gGqiI3Nvb69am6tq3zj2hwzANE,12384
96
96
  siat/risk_free_rate_test.py,sha256=CpmhUf8aEAEZeNu4gvWP2Mz2dLoIgBX5bI41vfUBEr8,4285
97
- siat/sector_china.py,sha256=A2252BymgpV1LEdZ4DU6SJue7ZMrW4GU8fBfhuqp09w,137485
97
+ siat/sector_china.py,sha256=SV1YVue8Z5U-fkCok1U3VCIqUvmULfCOw0ao9IqjfQE,140528
98
98
  siat/sector_china_test.py,sha256=1wq7ef8Bb_L8F0h0W6FvyBrIcBTEbrTV7hljtpj49U4,5843
99
99
  siat/security_price.py,sha256=2oHskgiw41KMGfqtnA0i2YjNNV6cYgtlUK0j3YeuXWs,29185
100
100
  siat/security_price2.py,sha256=Y4suVC-4koUSI_n8kY0l0y4lo_CTcoeM_kwTHiIFzyM,26291
@@ -139,8 +139,8 @@ siat/valuation_china.py,sha256=EkZQaVkoBjM0c4MCNbaX-bMnlG0e3FXeaWczZDnkptU,67784
139
139
  siat/valuation_market_china_test.py,sha256=gbJ0ioauuo4koTPH6WKUkqcXiQPafnbhU5eKJ6lpdLA,1571
140
140
  siat/var_model_validation.py,sha256=R0caWnuZarrRg9939hxh3vJIIpIyPfvelYmzFNZtPbo,14910
141
141
  siat/yf_name.py,sha256=9U_XfEeMlS3TrCrO3Bww21nuFgghbnO-cqDJMhQWqew,16193
142
- siat-3.4.32.dist-info/LICENSE,sha256=NTEMMROY9_4U1szoKC3N2BLHcDd_o5uTgqdVH8tbApw,1071
143
- siat-3.4.32.dist-info/METADATA,sha256=-WEvTLN8wDtXLa77mhBGt9tMIXvoxwAfku48zsdom0s,8010
144
- siat-3.4.32.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
145
- siat-3.4.32.dist-info/top_level.txt,sha256=r1cVyL7AIKqeAmEJjNR8FMT20OmEzufDstC2gv3NvEY,5
146
- siat-3.4.32.dist-info/RECORD,,
142
+ siat-3.4.37.dist-info/LICENSE,sha256=NTEMMROY9_4U1szoKC3N2BLHcDd_o5uTgqdVH8tbApw,1071
143
+ siat-3.4.37.dist-info/METADATA,sha256=pLBbjRdg6Rh44OSiG0qTvjJkpPtp-3MraR6Yy77FPPk,8010
144
+ siat-3.4.37.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
145
+ siat-3.4.37.dist-info/top_level.txt,sha256=r1cVyL7AIKqeAmEJjNR8FMT20OmEzufDstC2gv3NvEY,5
146
+ siat-3.4.37.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.43.0)
2
+ Generator: bdist_wheel (0.38.4)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
File without changes