siat 3.2.45__py3-none-any.whl → 3.2.46__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
@@ -3790,7 +3790,7 @@ if __name__=='__main__':
3790
3790
 
3791
3791
  def upgrade_siat(module_list=['siat','akshare','pandas','pandas_datareader', \
3792
3792
  'yfinance','yahooquery','urllib3','tabulate','twine', \
3793
- 'mplfinance','openpyxl','pip'], \
3793
+ 'mplfinance','openpyxl','pip','bottleneck'], \
3794
3794
  pipcmd="pip install --upgrade",alternative=""):
3795
3795
  """
3796
3796
  功能:一次性升级siat及其相关插件
@@ -3952,17 +3952,25 @@ if __name__=='__main__':
3952
3952
 
3953
3953
  show_df(data,search_mode=False)
3954
3954
  show_df(data,search_mode=True)
3955
+
3956
+ x=5
3957
+ show_df(x)
3955
3958
 
3956
3959
  def show_df(data,search_mode=False):
3957
3960
  """
3958
3961
  功能:在Jupyter中查看dataframe,并可下载成Excel
3959
3962
  """
3960
- df=data.copy()
3961
3963
 
3962
3964
  import pandas as pd
3965
+ if not isinstance(data,pd.DataFrame):
3966
+ print("#Warning: the first parameter must be a dataframe")
3967
+ return
3968
+
3963
3969
  import datetime
3964
3970
  from itables import init_notebook_mode, show
3965
3971
  init_notebook_mode(all_interactive=True)
3972
+
3973
+ df=data.copy()
3966
3974
 
3967
3975
  if not search_mode:
3968
3976
  show(df, buttons=["copyHtml5", "csvHtml5", "excelHtml5"])
siat/security_prices.py CHANGED
@@ -1011,7 +1011,7 @@ def get_price_ak_us(symbol, fromdate, todate, adjust=""):
1011
1011
  df2['ticker']=symbol
1012
1012
  if 'Adj Close' not in list(df2):
1013
1013
  df2['Adj Close']=df2['Close']
1014
- df2['source']='新浪'
1014
+ df2['source']=text_lang('新浪','Sina')
1015
1015
  df2['footnote']=adjust
1016
1016
 
1017
1017
  ptname=ticker_name(symbol,'stock')
@@ -1097,7 +1097,7 @@ def get_price_ak_hk(symbol,fromdate,todate,adjust=""):
1097
1097
  df2['ticker']=symbol
1098
1098
  if 'Adj Close' not in list(df2):
1099
1099
  df2['Adj Close']=df2['Close']
1100
- df2['source']='新浪'
1100
+ df2['source']=text_lang('新浪','Sina')
1101
1101
 
1102
1102
  ptname=ticker_name(symbol,'stock')
1103
1103
  if ptname == symbol: ptname=''
@@ -2343,15 +2343,15 @@ def recent_stock_split(ticker):
2343
2343
 
2344
2344
  divprt=divdf[['Seq','Split Date','Weekday','Splits']]
2345
2345
 
2346
- print("\n=== 近期股票分拆历史 ===")
2347
- print("股票:",ticker,'\b,',ticker)
2348
- print("期间:",fromdate,"to",today)
2349
- divprt.columns=['序号','日期','星期','分拆比例']
2346
+ print(text_lang("\n=== 近期股票分拆历史 ===","\n=== Recent Stock Split ==="))
2347
+ print(text_lang("股票:","Stock:"),ticker,'\b,',ticker)
2348
+ print(text_lang("期间:","Period:"),fromdate,"to",today)
2349
+ divprt.columns=[text_lang('序号','No.'),text_lang('日期','Date'),text_lang('星期','Weekday'),text_lang('分拆比例','Split Ratio')]
2350
2350
  print(divprt.to_string(index=False))
2351
2351
 
2352
2352
  import datetime
2353
2353
  today = datetime.date.today()
2354
- print("数据来源: 综合新浪/yahoo,",today)
2354
+ print(text_lang("数据来源: 综合新浪/yahoo,","Data source: Yahoo Finance,"),today)
2355
2355
 
2356
2356
  return divdf
2357
2357
 
siat/stock.py CHANGED
@@ -1350,7 +1350,7 @@ def comp_2securities_1measure(df1,df2,measure,twinx=False,loc1='upper left', \
1350
1350
  #for c in nouselist: dfcols.remove(c)
1351
1351
 
1352
1352
  if not (measure in dfcols):
1353
- print(" #Error(comp_2securities_1measure): only support measurement types of",dfcols)
1353
+ print(" #Error(comp_2securities_1measure):only support measurement types of",dfcols)
1354
1354
  return
1355
1355
 
1356
1356
  #判断是否绘制水平0线
@@ -1404,13 +1404,33 @@ if __name__ =="__main__":
1404
1404
  df2=stock_ret(ticker2,fromdate,todate,graph=False)
1405
1405
  comp_2securities_1measure(df1,df2,measure)
1406
1406
  #==============================================================================
1407
+ if __name__ =="__main__":
1408
+ tickers=['MSFT','AAPL']
1409
+ measures='Annual Ret Volatility%'
1410
+
1411
+ tickers='MSFT'
1412
+ measures=['Annual Ret Volatility%','Annual Ret%']
1413
+
1414
+ fromdate='2023-1-1'
1415
+ todate='2023-12-31'
1416
+ adjust=''
1417
+ twinx=False
1418
+ loc1='best'
1419
+ loc2='lower left'
1420
+ graph=True
1421
+ source='auto'
1422
+ ticker_type='auto'
1423
+ facecolor='whitesmoke'
1424
+
1407
1425
  def compare_security(tickers,measures,fromdate,todate, \
1408
1426
  adjust='', \
1409
1427
  twinx=False, \
1410
1428
  loc1='best',loc2='lower left',graph=True,source='auto', \
1411
1429
  ticker_type='auto',facecolor='whitesmoke'):
1412
1430
  """
1413
- 功能:函数克隆compare_stock
1431
+ 功能:函数克隆compare_stock,只能处理两个ticker一个measure,或一个ticker两个measure
1432
+ 可以处理twinx=True
1433
+ """
1414
1434
  """
1415
1435
  # 应对导入失灵的函数
1416
1436
  from siat.security_prices import upper_ticker
@@ -1421,9 +1441,159 @@ def compare_security(tickers,measures,fromdate,todate, \
1421
1441
  twinx=twinx, \
1422
1442
  loc1=loc1,loc2=loc2,graph=graph,source=source, \
1423
1443
  ticker_type=ticker_type,facecolor=facecolor)
1444
+
1424
1445
  return result
1446
+ """
1447
+ #调试开关
1448
+ DEBUG=False
1449
+ # 应对导入失灵的函数
1450
+ from siat.common import upper_ticker
1451
+ tickers=upper_ticker(tickers)
1452
+
1453
+ #判断证券代码个数
1454
+ #如果tickers只是一个字符串
1455
+ security_num = 0
1456
+ if isinstance(tickers,str):
1457
+ security_num = 1
1458
+ ticker1 = tickers
1459
+ #如果tickers是一个列表
1460
+ if isinstance(tickers,list):
1461
+ security_num = len(tickers)
1462
+ if security_num == 0:
1463
+ print(" #Error(compare_security):security code/codes needed.")
1464
+ return None,None
1465
+ if security_num >= 1: ticker1 = tickers[0]
1466
+ if security_num >= 2: ticker2 = tickers[1]
1467
+
1468
+ #判断测度个数
1469
+ #如果measures只是一个字符串
1470
+ measure_num = 0
1471
+ if isinstance(measures,str):
1472
+ measure_num = 1
1473
+ measure1 = measures
1474
+ #如果measures是一个列表
1475
+ if isinstance(measures,list):
1476
+ measure_num = len(measures)
1477
+ if measure_num == 0:
1478
+ print(" #Error(compare_security): a measurement indicator needed.")
1479
+ return None,None
1480
+ if measure_num >= 1: measure1 = measures[0]
1481
+ if measure_num >= 2: measure2 = measures[1]
1482
+
1483
+ #解析ticker_type
1484
+ if isinstance(ticker_type,str):
1485
+ ticker_type1=ticker_type2=ticker_type
1486
+ if isinstance(ticker_type,list) and len(ticker_type)==1:
1487
+ ticker_type1=ticker_type2=ticker_type[0]
1488
+ if isinstance(ticker_type,list) and len(ticker_type) > 1:
1489
+ ticker_type1=ticker_type[0]
1490
+ ticker_type2=ticker_type[1]
1491
+ ticker_type_list=[ticker_type1,ticker_type2]
1492
+
1493
+ #单一证券代码+两个测度指标
1494
+ if (security_num == 1) and (measure_num >= 2):
1495
+ #复权价判断
1496
+ if (('Adj' in measure1) or ('Adj' in measure2)) and (adjust ==''):
1497
+ adjust='qfq'
1425
1498
 
1499
+ pltdf1=compare_msecurity(tickers=ticker1,measure=measure1, \
1500
+ start=fromdate,end=todate, \
1501
+ adjust=adjust, \
1502
+ graph=False, \
1503
+ source=source, \
1504
+ ticker_type=ticker_type_list[0])
1505
+ pltdf1.rename(columns={list(pltdf1)[0]:measure1},inplace=True)
1506
+
1507
+ pltdf2=compare_msecurity(tickers=ticker1,measure=measure2, \
1508
+ start=fromdate,end=todate, \
1509
+ adjust=adjust, \
1510
+ graph=False, \
1511
+ source=source, \
1512
+ ticker_type=ticker_type_list[0])
1513
+ pltdf2.rename(columns={list(pltdf2)[0]:measure2},inplace=True)
1514
+
1515
+ pltdf=pd.merge(pltdf1,pltdf2,left_index=True,right_index=True)
1516
+ pltdf['ticker']=ticker1
1517
+
1518
+ #绘制单个证券的双指标对比图
1519
+ if graph:
1520
+ comp_1security_2measures(pltdf,measure1,measure2,twinx=twinx, \
1521
+ loc1=loc1,loc2=loc2,graph=graph, \
1522
+ ticker_type=ticker_type[0],facecolor=facecolor)
1523
+
1524
+ try:
1525
+ result1=pltdf1[[measure1]]
1526
+ except:
1527
+ return None,None
1528
+ try:
1529
+ result2=pltdf1[[measure2]]
1530
+ except:
1531
+ return result1,None
1532
+ else:
1533
+ return result1,result2
1534
+
1535
+ elif (security_num >= 2) and (measure_num >= 1):
1536
+ #双证券+单个测度指标
1537
+ if ('Adj' in measure1) and (adjust ==''):
1538
+ adjust='qfq'
1539
+
1540
+ pltdf1=compare_msecurity(tickers=ticker1,measure=measure1, \
1541
+ start=fromdate,end=todate, \
1542
+ adjust=adjust, \
1543
+ graph=False, \
1544
+ source=source, \
1545
+ ticker_type=ticker_type_list[0])
1546
+ pltdf1.rename(columns={list(pltdf1)[0]:measure1},inplace=True)
1547
+ pltdf1['ticker']=ticker1
1548
+
1549
+ pltdf2=compare_msecurity(tickers=ticker2,measure=measure1, \
1550
+ start=fromdate,end=todate, \
1551
+ adjust=adjust, \
1552
+ graph=False, \
1553
+ source=source, \
1554
+ ticker_type=ticker_type_list[1])
1555
+ pltdf2.rename(columns={list(pltdf2)[0]:measure1},inplace=True)
1556
+ pltdf2['ticker']=ticker2
1557
+
1558
+ #绘制双证券单指标对比图
1559
+ if graph:
1560
+
1561
+ comp_2securities_1measure(pltdf1,pltdf2,measure1,twinx=twinx, \
1562
+ loc1=loc1,loc2=loc2,graph=graph, \
1563
+ ticker_type=ticker_type_list,facecolor=facecolor)
1564
+
1565
+ try:
1566
+ result1=pltdf1[[measure1]]
1567
+ result2=pltdf2[[measure1]]
1568
+ except:
1569
+ print(" #Error(compare_secuirty): measure",measure1,"not found")
1570
+ return None,None
1571
+ else:
1572
+ return result1,result2
1573
+
1574
+ else:
1575
+ print(" #Error(compare_secuirty):no idea on what to compare.")
1576
+ return None,None
1577
+
1578
+ return result1,result2
1579
+
1580
+
1426
1581
  #==============================================================================
1582
+ if __name__ =="__main__":
1583
+ tickers=['MSFT','AAPL']
1584
+ measures='Annual Ret Volatility%'
1585
+ fromdate='2023-1-1'
1586
+ todate='2023-12-31'
1587
+ adjust=''
1588
+ twinx=False
1589
+ loc1='best'
1590
+ loc2='lower left'
1591
+ graph=True
1592
+ source='auto'
1593
+ ticker_type='auto'
1594
+ facecolor='whitesmoke'
1595
+
1596
+
1427
1597
  def compare_stock(tickers,measures,fromdate,todate, \
1428
1598
  adjust='', \
1429
1599
  twinx=False, \
@@ -1442,6 +1612,8 @@ def compare_stock(tickers,measures,fromdate,todate, \
1442
1612
  开始日期fromdate,结束日期todate。
1443
1613
  输出:绘制证券价格折线图,手动指定是否使用单轴或双轴坐标。
1444
1614
  返回:无
1615
+
1616
+ 打算废弃?
1445
1617
  """
1446
1618
  #调试开关
1447
1619
  DEBUG=False
@@ -1479,27 +1651,30 @@ def compare_stock(tickers,measures,fromdate,todate, \
1479
1651
  if measure_num >= 1: measure1 = measures[0]
1480
1652
  if measure_num >= 2: measure2 = measures[1]
1481
1653
 
1654
+ #延伸开始日期
1655
+ fromdate1=date_adjust(fromdate,adjust=-365)
1656
+
1482
1657
  #单一证券代码+两个测度指标
1483
1658
  if (security_num == 1) and (measure_num >= 2):
1484
1659
  if (('Adj' in measure1) or ('Adj' in measure2)) and (adjust ==''):
1485
1660
  adjust='qfq'
1486
1661
 
1487
1662
  #证券ticker1:抓取行情,并计算其各种期间的收益率
1488
- df1a=stock_ret(ticker1,fromdate,todate,adjust=adjust,graph=False,source=source,ticker_type=ticker_type)
1663
+ df1a=stock_ret(ticker1,fromdate1,todate,adjust=adjust,graph=False,source=source,ticker_type=ticker_type)
1489
1664
  if df1a is None: return None,None
1490
1665
  if DEBUG: print("compare|df1a first date:",df1a.index[0])
1491
1666
  #加入价格波动指标
1492
- df1b=price_volatility2(df1a,ticker1,fromdate,todate,graph=False,ticker_type=ticker_type)
1667
+ df1b=price_volatility2(df1a,ticker1,fromdate1,todate,graph=False,ticker_type=ticker_type)
1493
1668
  if DEBUG: print("compare|df1b first date:",df1b.index[0])
1494
1669
  #加入收益率波动指标
1495
- df1c=ret_volatility2(df1b,ticker1,fromdate,todate,graph=False,ticker_type=ticker_type)
1670
+ df1c=ret_volatility2(df1b,ticker1,fromdate1,todate,graph=False,ticker_type=ticker_type)
1496
1671
  if DEBUG: print("compare|df1c first date:",df1c.index[0])
1497
1672
  #加入收益率下偏标准差指标
1498
- df1d=ret_lpsd2(df1c,ticker1,fromdate,todate,graph=False,ticker_type=ticker_type)
1673
+ df1d=ret_lpsd2(df1c,ticker1,fromdate1,todate,graph=False,ticker_type=ticker_type)
1499
1674
  if DEBUG: print("compare|df1d first date:",df1d.index[0])
1500
1675
 
1501
1676
  #去掉开始日期以前的数据
1502
- pltdf1=df1d[df1d.index >= fromdate]
1677
+ pltdf1=df1d[df1d.index >= fromdate1]
1503
1678
  #绘制单个证券的双指标对比图
1504
1679
  if graph:
1505
1680
  comp_1security_2measures(pltdf1,measure1,measure2,twinx=twinx, \
@@ -1531,24 +1706,24 @@ def compare_stock(tickers,measures,fromdate,todate, \
1531
1706
  ticker_type_list=[ticker_type1,ticker_type2]
1532
1707
 
1533
1708
  #证券ticker1:抓取行情,并计算其各种期间的收益率
1534
- df1a=stock_ret(ticker1,fromdate,todate,adjust=adjust,graph=False,source=source,ticker_type=ticker_type1)
1709
+ df1a=stock_ret(ticker1,fromdate1,todate,adjust=adjust,graph=False,source=source,ticker_type=ticker_type1)
1535
1710
  if df1a is None: return None,None
1536
1711
  #加入价格波动指标
1537
- df1b=price_volatility2(df1a,ticker1,fromdate,todate,graph=False,ticker_type=ticker_type1)
1712
+ df1b=price_volatility2(df1a,ticker1,fromdate1,todate,graph=False,ticker_type=ticker_type1)
1538
1713
  #加入收益率波动指标
1539
- df1c=ret_volatility2(df1b,ticker1,fromdate,todate,graph=False,ticker_type=ticker_type1)
1714
+ df1c=ret_volatility2(df1b,ticker1,fromdate1,todate,graph=False,ticker_type=ticker_type1)
1540
1715
  #加入收益率下偏标准差指标
1541
- df1d=ret_lpsd2(df1c,ticker1,fromdate,todate,graph=False,ticker_type=ticker_type1)
1716
+ df1d=ret_lpsd2(df1c,ticker1,fromdate1,todate,graph=False,ticker_type=ticker_type1)
1542
1717
  #去掉开始日期以前的数据
1543
- pltdf1=df1d[df1d.index >= fromdate]
1718
+ pltdf1=df1d[df1d.index >= fromdate1]
1544
1719
 
1545
1720
  #证券ticker2:
1546
- df2a=stock_ret(ticker2,fromdate,todate,adjust=adjust,graph=False,source=source,ticker_type=ticker_type2)
1721
+ df2a=stock_ret(ticker2,fromdate1,todate,adjust=adjust,graph=False,source=source,ticker_type=ticker_type2)
1547
1722
  if df2a is None: return None,None
1548
- df2b=price_volatility2(df2a,ticker2,fromdate,todate,graph=False,ticker_type=ticker_type2)
1549
- df2c=ret_volatility2(df2b,ticker2,fromdate,todate,graph=False,ticker_type=ticker_type2)
1550
- df2d=ret_lpsd2(df2c,ticker2,fromdate,todate,graph=False,ticker_type=ticker_type2)
1551
- pltdf2=df2d[df2d.index >= fromdate]
1723
+ df2b=price_volatility2(df2a,ticker2,fromdate1,todate,graph=False,ticker_type=ticker_type2)
1724
+ df2c=ret_volatility2(df2b,ticker2,fromdate1,todate,graph=False,ticker_type=ticker_type2)
1725
+ df2d=ret_lpsd2(df2c,ticker2,fromdate1,todate,graph=False,ticker_type=ticker_type2)
1726
+ pltdf2=df2d[df2d.index >= fromdate1]
1552
1727
 
1553
1728
  #绘制双证券单指标对比图
1554
1729
  if graph:
@@ -1647,16 +1822,19 @@ def compare_msecurity(tickers,measure,start,end, \
1647
1822
  # 应对导入失灵的函数
1648
1823
  from siat.common import upper_ticker
1649
1824
  tickers=upper_ticker(tickers)
1825
+ if not isinstance(tickers,list):
1826
+ tickers=[tickers]
1827
+
1650
1828
  # 去掉重复代码:有必要,重复代码将导致后续处理出错KeyError: 0!
1651
1829
  tickers=list(set(tickers))
1830
+ """
1652
1831
  num=len(tickers)
1653
1832
  if num <2:
1654
1833
  print(" #Error(compare_msecurity): need more tickers")
1655
1834
  return None
1656
-
1657
- if not isinstance(measure,str):
1658
- print(" #Error(compare_msecurity): support only one measure")
1659
- return None
1835
+ """
1836
+ if isinstance(measure,list):
1837
+ measure=measure[0]
1660
1838
 
1661
1839
  print(" Searching for multiple security for",measure,"...")
1662
1840
  #屏蔽函数内print信息输出的类
@@ -2329,7 +2507,10 @@ def stock_dividend(ticker,start,end,facecolor='whitesmoke',fontcolor='black'):
2329
2507
  divdf['Weekdayiso']= divdf['Index Date'].apply(weekdayfmt)
2330
2508
  #wdlist=['Mon','Tue','Wed','Thu','Fri','Sat','Sun']
2331
2509
  #wdlist=['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']
2332
- wdlist=['星期一','星期二','星期三','星期四','星期五','星期六','星期日']
2510
+ #wdlist=['星期一','星期二','星期三','星期四','星期五','星期六','星期日']
2511
+ wdlist=[text_lang('星期一','Mon'),text_lang('星期二','Tue'),text_lang('星期三','Wed'), \
2512
+ text_lang('星期四','Thu'),text_lang('星期五','Fri'),text_lang('星期六','Sat'),text_lang('星期日','Sun')]
2513
+
2333
2514
  wdfmt=lambda x : wdlist[x-1]
2334
2515
  divdf['Weekday']= divdf['Weekdayiso'].apply(wdfmt)
2335
2516
 
@@ -2343,20 +2524,13 @@ def stock_dividend(ticker,start,end,facecolor='whitesmoke',fontcolor='black'):
2343
2524
  fromdatey2md=startdt.strftime('%y/%m/%d')
2344
2525
  todatey2md=enddt.strftime('%y/%m/%d')
2345
2526
 
2346
- if lang == 'English':
2347
- titletxt=texttranslate("股票分红历史")+': '+tname
2348
- periodtxt=texttranslate("历史期间:")+' '+fromdatey2md+"-"+todatey2md
2349
- sourcetxt=texttranslate("数据来源: 雅虎财经,")
2350
-
2351
- #修改列命为英文
2352
- divprt.columns = [texttranslate('序号'),texttranslate('日期'),texttranslate('星期'),texttranslate('股息')]
2353
- else:
2354
- titletxt="股票分红历史:"+tname
2355
- periodtxt="期间: "+fromdatey2md+"-"+todatey2md
2356
- sourcetxt="数据来源: 雅虎,"
2357
-
2358
- #修改列命为中文
2359
- divprt.columns = ['序号','日期','星期','每股派息']
2527
+ titletxt=text_lang("股票分红历史","Stock Dividend")+': '+tname
2528
+ periodtxt=text_lang("历史期间:","Period:")+' '+fromdatey2md+"-"+todatey2md
2529
+ sourcetxt=text_lang("数据来源: 雅虎财经,","Data source: Yahoo Finance,")
2530
+
2531
+ #修改列命为英文
2532
+ divprt.columns = [text_lang('序号','No.'),text_lang('日期','Date'),text_lang('星期','Weekday'),text_lang('股息','Dividend')]
2533
+
2360
2534
  """
2361
2535
  print(divprt.to_string(index=False))
2362
2536
  """
@@ -2454,7 +2628,8 @@ def stock_split(ticker,start,end,facecolor='whitesmoke',fontcolor='black'):
2454
2628
  weekdayfmt=lambda x : x.isoweekday()
2455
2629
  divdf['Weekdayiso']= divdf['Index Date'].apply(weekdayfmt)
2456
2630
  #wdlist=['Mon','Tue','Wed','Thu','Fri','Sat','Sun']
2457
- wdlist=['星期一','星期二','星期三','星期四','星期五','星期六','星期日']
2631
+ wdlist=[text_lang('星期一','Mon'),text_lang('星期二','Tue'),text_lang('星期三','Wed'), \
2632
+ text_lang('星期四','Thu'),text_lang('星期五','Fri'),text_lang('星期六','Sat'),text_lang('星期日','Sun')]
2458
2633
  wdfmt=lambda x : wdlist[x-1]
2459
2634
  divdf['Weekday']= divdf['Weekdayiso'].apply(wdfmt)
2460
2635
 
@@ -2495,25 +2670,25 @@ def stock_split(ticker,start,end,facecolor='whitesmoke',fontcolor='black'):
2495
2670
  fromdatey2md=startdt.strftime('%y/%m/%d')
2496
2671
  todatey2md=enddt.strftime('%y/%m/%d')
2497
2672
 
2498
- if lang == 'English':
2499
- titletxt=texttranslate("股票分拆历史")+': '+tname
2500
- periodtxt=texttranslate("历史期间:")+' '+fromdatey2md+"-"+todatey2md
2501
- sourcetxt=texttranslate("数据来源: 雅虎财经,")
2502
-
2503
- #修改列命为英文
2504
- divprt.columns = [texttranslate('序号'),texttranslate('日期'),texttranslate('星期'),texttranslate('股息')]
2505
- else:
2506
- titletxt="股票分拆历史:"+tname
2507
- periodtxt="期间: "+fromdatey2md+"-"+todatey2md
2508
- sourcetxt="数据来源: 雅虎,"
2509
-
2510
- #修改列命为中文
2511
- divprt.columns = ['序号','日期','星期','分拆比例']
2673
+ titletxt=text_lang("股票分拆历史","Stock Split")+': '+tname
2674
+ periodtxt=text_lang("历史期间:","Period:")+' '+fromdatey2md+"-"+todatey2md
2675
+
2676
+ import datetime; todaydt=datetime.date.today(); todayy2md=str(todaydt.strftime('%y/%m/%d'))
2677
+ #sourcetxt=text_lang("数据来源: 雅虎财经, ","Data source: Yahoo Finance, ")+todayy2md
2678
+ sourcetxt=text_lang("数据来源: 雅虎财经","Data source: Yahoo Finance")
2679
+ footnote=periodtxt+'\n'+ sourcetxt
2680
+
2681
+ #修改列命为英文
2682
+ divprt.columns = [text_lang('序号','No.'),text_lang('日期','Date'),text_lang('星期','Weekday'),text_lang('分拆比例','Split Ratio')]
2512
2683
  """
2513
2684
  print(divprt.to_string(index=False))
2514
2685
  """
2515
2686
  print(' ') #空一行
2516
2687
 
2688
+ df_display_CSS(divprt,titletxt=titletxt,footnote=footnote,facecolor='papayawhip',decimals=2, \
2689
+ first_col_align='center',second_col_align='center', \
2690
+ last_col_align='right',other_col_align='center')
2691
+ """
2517
2692
  disph=divprt.style.hide() #不显示索引列
2518
2693
  dispp=disph.format(precision=4) #设置带有小数点的列精度调整为小数点后2位
2519
2694
  #设置标题/列名
@@ -2534,6 +2709,7 @@ def stock_split(ticker,start,end,facecolor='whitesmoke',fontcolor='black'):
2534
2709
  import datetime; todaydt=datetime.date.today(); todayy2md=todaydt.strftime('%y/%m/%d')
2535
2710
  #print('\n*** '+sourcetxt,today)
2536
2711
  print(sourcetxt,todayy2md)
2712
+ """
2537
2713
 
2538
2714
  return divdf
2539
2715
 
siat/translate.py CHANGED
@@ -58,9 +58,9 @@ def ectranslate_c(eword):
58
58
  ['Quarterly Ret%','季度收益率%'],['Quarterly Adj Ret','季度调整收益率'],
59
59
  ['Quarterly Adj Ret%','季度调整收益率%'],['Annual Ret','年收益率'],
60
60
  ['Annual Ret%','年收益率%'],['Annual Adj Ret','年调整收益率'],
61
- ['Annual Adj Ret%','年调整收益率%'],['Exp Ret','投资收益率'],
62
- ['Exp Ret%','投资收益率%'],['Exp Adj Ret','持有调整收益率'],
63
- ['Exp Adj Ret%','持有调整收益率%'],
61
+ ['Annual Adj Ret%','年调整收益率%'],['Exp Ret','持有期资本利得率'],
62
+ ['Exp Ret%','持有期资本利得%'],['Exp Adj Ret','持有期收益率'],
63
+ ['Exp Adj Ret%','持有期收益率%'],
64
64
 
65
65
  ['Weekly Price Volatility','周股价波动风险'],
66
66
  ['Weekly Adj Price Volatility','周调整股价波动风险'],
@@ -70,8 +70,8 @@ def ectranslate_c(eword):
70
70
  ['Quarterly Adj Price Volatility','季调整股价波动风险'],
71
71
  ['Annual Price Volatility','年股价波动风险'],
72
72
  ['Annual Adj Price Volatility','年调整股价波动风险'],
73
- ['Exp Price Volatility','持有股价波动风险'],
74
- ['Exp Adj Price Volatility','持有调整股价波动风险'],
73
+ ['Exp Price Volatility','持有期股价波动风险'],
74
+ ['Exp Adj Price Volatility','持有期复权价波动风险'],
75
75
 
76
76
  ['Weekly Ret Volatility','周收益率波动风险'],
77
77
  ['Weekly Ret Volatility%','周收益率波动风险%'],
@@ -89,31 +89,31 @@ def ectranslate_c(eword):
89
89
  ['Annual Ret Volatility%','年收益率波动风险%'],
90
90
  ['Annual Adj Ret Volatility','年调整收益率波动风险'],
91
91
  ['Annual Adj Ret Volatility%','年调整收益率波动风险%'],
92
- ['Exp Ret Volatility','投资收益率波动风险'],
93
- ['Exp Ret Volatility%','投资收益率波动风险%'],
94
- ['Exp Adj Ret Volatility','调整投资收益率波动风险'],
95
- ['Exp Adj Ret Volatility%','调整投资收益率波动风险%'],
96
-
97
- ['Weekly Ret LPSD','周收益率波动损失风险'],
98
- ['Weekly Ret LPSD%','周收益率波动损失风险%'],
99
- ['Weekly Adj Ret LPSD','周调整收益率波动损失风险'],
100
- ['Weekly Adj Ret LPSD%','周调整收益率波动损失风险%'],
101
- ['Monthly Ret LPSD','月收益率波动损失风险'],
102
- ['Monthly Ret LPSD%','月收益率波动损失风险%'],
103
- ['Monthly Adj Ret LPSD','月调整收益波动损失风险'],
104
- ['Monthly Adj Ret LPSD%','月调整收益波动损失风险%'],
105
- ['Quarterly Ret LPSD','季收益率波动损失风险'],
106
- ['Quarterly Ret LPSD%','季收益率波动损失风险%'],
107
- ['Quarterly Adj Ret LPSD','季调整收益率波动损失风险'],
108
- ['Quarterly Adj Ret LPSD%','季调整收益率波动损失风险%'],
109
- ['Annual Ret LPSD','年收益率波动损失风险'],
110
- ['Annual Ret LPSD%','年收益率波动损失风险%'],
111
- ['Annual Adj Ret LPSD','年调整收益率波动损失风险'],
112
- ['Annual Adj Ret LPSD%','年调整收益率波动损失风险%'],
113
- ['Exp Ret LPSD','投资损失风险'],
114
- ['Exp Ret LPSD%','投资损失风险%'],
115
- ['Exp Adj Ret LPSD','调整投资损失风险'],
116
- ['Exp Adj Ret LPSD%','调整投资损失风险%'],
92
+ ['Exp Ret Volatility','持有期资本利得风险'],
93
+ ['Exp Ret Volatility%','持有期资本利得风险%'],
94
+ ['Exp Adj Ret Volatility','持有期收益率风险'],
95
+ ['Exp Adj Ret Volatility%','持有期收益率风险%'],
96
+
97
+ ['Weekly Ret LPSD','周收益损失风险'],
98
+ ['Weekly Ret LPSD%','周收益损失风险%'],
99
+ ['Weekly Adj Ret LPSD','周复权收益损失风险'],
100
+ ['Weekly Adj Ret LPSD%','周复权收益损失风险%'],
101
+ ['Monthly Ret LPSD','月收益损失风险'],
102
+ ['Monthly Ret LPSD%','月收益损失风险%'],
103
+ ['Monthly Adj Ret LPSD','月复权收益损失风险'],
104
+ ['Monthly Adj Ret LPSD%','月复权收益损失风险%'],
105
+ ['Quarterly Ret LPSD','季收益损失风险'],
106
+ ['Quarterly Ret LPSD%','季收益损失风险%'],
107
+ ['Quarterly Adj Ret LPSD','季复权收益损失风险'],
108
+ ['Quarterly Adj Ret LPSD%','季复权收益损失风险%'],
109
+ ['Annual Ret LPSD','年收益损失风险'],
110
+ ['Annual Ret LPSD%','年收益损失风险%'],
111
+ ['Annual Adj Ret LPSD','年复权收益损失风险'],
112
+ ['Annual Adj Ret LPSD%','年复权收益损失风险%'],
113
+ ['Exp Ret LPSD','持有期资本损失风险'],
114
+ ['Exp Ret LPSD%','持有期资本损失风险%'],
115
+ ['Exp Adj Ret LPSD','持有期收益损失风险'],
116
+ ['Exp Adj Ret LPSD%','持有期收益损失风险%'],
117
117
 
118
118
  ['roll_spread','罗尔价差比率'],['amihud_illiquidity','阿米胡德非流动性'],
119
119
  ['ps_liquidity','P-S流动性'],
@@ -353,9 +353,9 @@ def ectranslate_e(eword):
353
353
  ['Quarterly Ret%','Quarterly Return%'],['Quarterly Adj Ret','Quarterly Adjusted Return'],
354
354
  ['Quarterly Adj Ret%','Quarterly Adjusted Return%'],['Annual Ret','Annual Return'],
355
355
  ['Annual Ret%','Annual Return%'],['Annual Adj Ret','Annual Adjusted Return'],
356
- ['Annual Adj Ret%','Annual Adjusted Return%'],['Exp Ret','Holding Return'],
357
- ['Exp Ret%','Holding Return%'],['Exp Adj Ret','Holding Adjusted Return'],
358
- ['Exp Adj Ret%','Holding Adjusted Return%'],
356
+ ['Annual Adj Ret%','Annual Adjusted Return%'],['Exp Ret','Holding Period Capital Gain Rate'],
357
+ ['Exp Ret%','Holding Period Capital Gain%'],['Exp Adj Ret','Holding Period Return'],
358
+ ['Exp Adj Ret%','Holding Period Return%'],
359
359
 
360
360
  ['Weekly Price Volatility','Weekly Price Volatility'],
361
361
  ['Weekly Adj Price Volatility','Weekly Adjusted Price Volatility'],
@@ -384,31 +384,31 @@ def ectranslate_e(eword):
384
384
  ['Annual Ret Volatility%','Annual Return Volatility%'],
385
385
  ['Annual Adj Ret Volatility','Annual Adjusted Return Volatility'],
386
386
  ['Annual Adj Ret Volatility%','Annual Adjusted Return Volatility%'],
387
- ['Exp Ret Volatility','Holding Return Volatility'],
388
- ['Exp Ret Volatility%','Holding Return Volatility%'],
389
- ['Exp Adj Ret Volatility','Holding Adjusted Return Volatility'],
390
- ['Exp Adj Ret Volatility%','Holding Adjusted Return Volatility%'],
391
-
392
- ['Weekly Ret LPSD','Weekly Return LPSD'],
393
- ['Weekly Ret LPSD%','Weekly Return LPSD%'],
394
- ['Weekly Adj Ret LPSD','Weekly Adjusted Return LPSD'],
395
- ['Weekly Adj Ret LPSD%','Weekly Adjusted Return LPSD%'],
396
- ['Monthly Ret LPSD','Monthly Return LPSD'],
397
- ['Monthly Ret LPSD%','Monthly Return LPSD%'],
398
- ['Monthly Adj Ret LPSD','Monthly Adjusted Return LPSD'],
399
- ['Monthly Adj Ret LPSD%','Monthly Adjusted Return LPSD%'],
400
- ['Quarterly Ret LPSD','Quarterly Return LPSD'],
401
- ['Quarterly Ret LPSD%','Quarterly Return LPSD%'],
402
- ['Quarterly Adj Ret LPSD','Quarterly Adjusted Return LPSD'],
403
- ['Quarterly Adj Ret LPSD%','Quarterly Adjusted Return LPSD%'],
404
- ['Annual Ret LPSD','Annual Return LPSD'],
405
- ['Annual Ret LPSD%','Annual Return LPSD%'],
406
- ['Annual Adj Ret LPSD','Annual Adjusted Return LPSD'],
407
- ['Annual Adj Ret LPSD%','Annual Adjusted Return LPSD%'],
408
- ['Exp Ret LPSD','Holding Return LPSD'],
409
- ['Exp Ret LPSD%','Holding Return LPSD%'],
410
- ['Exp Adj Ret LPSD','Holding Adjusted Return LPSD'],
411
- ['Exp Adj Ret LPSD%','Holding Adjusted Return LPSD%'],
387
+ ['Exp Ret Volatility','Holding Period Capital Gain Volatility'],
388
+ ['Exp Ret Volatility%','Holding Period Capital Gain Volatility%'],
389
+ ['Exp Adj Ret Volatility','Holding Period Return Volatility'],
390
+ ['Exp Adj Ret Volatility%','Holding Period Return Volatility%'],
391
+
392
+ ['Weekly Ret LPSD','Weekly Loss Risk'],
393
+ ['Weekly Ret LPSD%','Weekly Loss Risk%'],
394
+ ['Weekly Adj Ret LPSD','Weekly Adjusted Loss Risk'],
395
+ ['Weekly Adj Ret LPSD%','Weekly Adjusted Loss Risk%'],
396
+ ['Monthly Ret LPSD','Monthly Loss Risk'],
397
+ ['Monthly Ret LPSD%','Monthly Loss Risk%'],
398
+ ['Monthly Adj Ret LPSD','Monthly Adjusted Loss Risk'],
399
+ ['Monthly Adj Ret LPSD%','Monthly Adjusted Loss Risk%'],
400
+ ['Quarterly Ret LPSD','Quarterly Loss Risk'],
401
+ ['Quarterly Ret LPSD%','Quarterly Loss Risk%'],
402
+ ['Quarterly Adj Ret LPSD','Quarterly Adjusted Loss Risk'],
403
+ ['Quarterly Adj Ret LPSD%','Quarterly Adjusted Loss Risk%'],
404
+ ['Annual Ret LPSD','Annual Loss Risk'],
405
+ ['Annual Ret LPSD%','Annual Loss Risk%'],
406
+ ['Annual Adj Ret LPSD','Annual Adjusted Loss Risk'],
407
+ ['Annual Adj Ret LPSD%','Annual Adjusted Loss Risk%'],
408
+ ['Exp Ret LPSD','Holding Period Capital Loss Risk'],
409
+ ['Exp Ret LPSD%','Holding Period Capital Loss Risk%'],
410
+ ['Exp Adj Ret LPSD','Holding Period Loss Risk'],
411
+ ['Exp Adj Ret LPSD%','Holding Period Loss Risk%'],
412
412
 
413
413
  ['roll_spread','Roll Spread'],['amihud_illiquidity','Amihud Illiquidity'],
414
414
  ['ps_liquidity','P-S Liquidity'],
@@ -607,8 +607,12 @@ def codetranslate(codelist):
607
607
  #==============================================================================
608
608
  if __name__=='__main__':
609
609
  codelist=['601398.SS','01398.HK']
610
+ codelist='PDD'
611
+
610
612
  code='601398.SS'
611
613
  code='01398.HK'
614
+
615
+ codetranslate_e(codelist)
612
616
 
613
617
  #在common中定义
614
618
  #SUFFIX_LIST_CN=['SS','SZ','BJ','NQ']
@@ -1813,7 +1817,7 @@ def codetranslate1(code):
1813
1817
  ['EBAY','eBay'],['eBay','eBay'],['META','META'],['ZM','ZOOM'],
1814
1818
  ['GOOG','Google'],['TWTR','Twitter'],
1815
1819
  ['VIPS','Vipshop'],['Vipshop','Vipshop'],
1816
- ['PDD','Pinduoduo'],['Pinduoduo','Pinduoduo'],
1820
+ ['PDD','PDD(US)'],['Pinduoduo','Pinduoduo'],
1817
1821
  ['BABA','Alibaba(US)'],['Alibaba','Alibaba'],
1818
1822
  ['JD','JD(US)'],
1819
1823
  ['SINA','Sina'],['BIDU','Baidu'],['NTES','Netease'],
@@ -1967,9 +1971,10 @@ def codetranslate1(code):
1967
1971
  ['000022.SS','SSE Corpbond Index'],['000061.SS','SSE Entbond30 Index'],
1968
1972
  ['000116.SS','SSE Creditbond100 Index'],['000101.SS','SSE 5-year Creditbond Index'],
1969
1973
 
1970
- ['002594.SZ','BYD Auto (A)'],['01211.HK','BYD Auto (HK)'],['81211.HK','BYD Auto (HK RMB)'],
1974
+ ['002594.SZ','BYD Auto(A)'],['01211.HK','BYD Auto(HK)'],['81211.HK','BYD Auto(HK RMB)'],
1971
1975
  ['600941.SS','China Mobile'],['00941.HK','China Mobile (HK)'],['80941.HK','China Mobile (HK RMB)'],
1972
1976
  ['ULVR.UK','Unilever (UK)'],['605011.SS','Hangzou Power'],['000723.SZ','Meijin Energy'],
1977
+ ['EL','Estee Lauder'],['LOR.DE','L\'Oreal(DE)'],
1973
1978
 
1974
1979
  ['^GSPC','S&P500 Index'],['^DJI','Dow Jones Index'],
1975
1980
  ['WISGP.SI','FTSE Singapore Index'], ['^STI','Straits Times Index'],
@@ -1977,6 +1982,7 @@ def codetranslate1(code):
1977
1982
  ['^N100','Euronext 100 Index'],['^FMIB','FTSE Italy Index'],
1978
1983
  ['^TSX','Toronto Composite Index'],['^MXX','Mexico IPC Index'],
1979
1984
  ['^SNX','India SENSEX 30 Index'],['^FTM','UK FTSE 250 Index'],
1985
+ ['^KLCI','Kuala Lumpur Composite Index'],['^KLSE','Kuala Lumpur Composite Index'],
1980
1986
 
1981
1987
  ['FVTT.FGI','FTSE Viernam Index'],['^RUT','Russell 2000 Index'],
1982
1988
  ['^HSI','Hang Seng Index'],['^N225','Nikkei 225 Index'],
@@ -2218,6 +2224,8 @@ def get_names(symbol):
2218
2224
  if __name__=='__main__':
2219
2225
  symbol='00700.HK'
2220
2226
  symbol='001979.SZ'
2227
+ symbol='PDD'
2228
+
2221
2229
  get_names0(symbol)
2222
2230
 
2223
2231
  def get_names0(symbol):
@@ -2755,7 +2763,7 @@ def texttranslate(code):
2755
2763
  ['数据来源: 新浪/stooq,','Source: sina/stooq,'],['数据来源: 雅虎财经,','Source: Yahoo Finance,'],
2756
2764
  ["证券快照:","证券快照:"],
2757
2765
  ["证券价格走势图:","证券价格走势图:"],
2758
- ["证券收益率波动损失风险走势图:","证券收益率波动损失风险走势图:"],
2766
+ ["证券收益率损失风险走势图:","证券收益率损失风险走势图:"],
2759
2767
  ["证券指标走势对比图:","证券指标走势对比图:"],
2760
2768
  ["证券价格走势蜡烛图演示:","证券价格走势蜡烛图演示:"],
2761
2769
  ["股票分红历史","Stock Dividend History"],
@@ -3213,6 +3221,7 @@ if __name__=='__main__':
3213
3221
  ticker='010107.SS' #债券/基金重码
3214
3222
  ticker='sh010303' #国债/基金重码
3215
3223
  ticker='sh018001' #金融债
3224
+ ticker='PDD'
3216
3225
 
3217
3226
  ticker_type='auto'
3218
3227
  ticker_type='bond'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: siat
3
- Version: 3.2.45
3
+ Version: 3.2.46
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
@@ -33,6 +33,7 @@ Requires-Dist: luddite
33
33
  Requires-Dist: pendulum
34
34
  Requires-Dist: itables
35
35
  Requires-Dist: py-trans
36
+ Requires-Dist: bottleneck
36
37
 
37
38
  # Welcome to the Magic World of siat
38
39
 
@@ -18,7 +18,7 @@ siat/capm_beta.py,sha256=cxXdRVBQBllhbfz1LeTJAIWvyRYhW54nhtNUXv4HwS0,29063
18
18
  siat/capm_beta2.py,sha256=07y3q4nJdkM-anpZepj4gK0gvTKj-BB0ppDDI5-TCcY,26904
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=_PkuAzT9fNJazC1p3NIQDqLduzfBFcLsV3KPteo377I,149963
21
+ siat/common.py,sha256=bag64Mm_b09lxtnlvtQnIMeTtjNFZlzjShRxr5m3OwI,150142
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
@@ -98,14 +98,14 @@ siat/sector_china.py,sha256=nP6kfYsnaQWZj8dK-zklwSDW8FDS-obZWp_zL0ec2Ig,118603
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=NKlk5VRA-WeSK8dU960PRfWUOzj4BQ4HbUw3t4j9cv8,25955
101
- siat/security_prices.py,sha256=ChiVcubRiPzUvYm8a5X5qjxWtawRQdYHFQXLIevGFC4,105328
101
+ siat/security_prices.py,sha256=E4lYVHKtepPS_oymYHUKn2tZj-LyFa-hMMPNgdbvTj0,105569
102
102
  siat/security_prices_test.py,sha256=OEphoJ87NPKoNow1QA8EU_5MUYrJF-qKoWKNapVfZNI,10779
103
103
  siat/security_trend.py,sha256=o0vpWdrJkmODCP94X-Bvn-w7efHhj9HpUYBHtLl55D0,17240
104
104
  siat/security_trend2-20240620.py,sha256=QVnEcb7AyVbO77jVqfFsJffGXrX8pgJ9xCfoAKmWBPk,24854
105
105
  siat/security_trend2.py,sha256=WOygSyWSynNmk5gpOA8n1738-nWqfDzuyMjwriB3eP4,25284
106
106
  siat/setup.py,sha256=up65rQGLmTBkhtaMLowjoQXYmIsnycnm4g1SYmeQS6o,1335
107
107
  siat/shenwan index history test.py,sha256=JCVAzOSEldHalhSFa3pqD8JI_8_djPMQOxpkuYU-Esg,1418
108
- siat/stock.py,sha256=lk3Cvbm2ieFk-ISoy2nX0rEoqnnAGuX3lNiT6iskTjg,143914
108
+ siat/stock.py,sha256=klgcv0v54uDN7iEg1NXhM08qDOS1G54wyquTQBJodFM,150367
109
109
  siat/stock_advice_linear.py,sha256=-twT7IGP-NEplkL1WPSACcNJjggRB2j4mlAQCkzOAuo,31655
110
110
  siat/stock_base.py,sha256=uISvbRyOGy8p9QREA96CVydgflBkn5L3OXOGKl8oanc,1312
111
111
  siat/stock_china.py,sha256=zyUyghIrkkkYWlHRRP7Hoblxzfp-jrck60pTJpwMahg,91553
@@ -131,14 +131,14 @@ siat/transaction_test.py,sha256=Z8g1LJCN4-mnUByXMUMoFmN0t105cbmsz2QmvSuIkbU,1858
131
131
  siat/translate-20230125.py,sha256=NPPSXhT38s5t9fzMvl_fvi4ckSB73ThLmZetVI-xGdU,117953
132
132
  siat/translate-20230206.py,sha256=-vtI125WyaJhmPotOpDAmclt_XnYVaWU9ByLWZ6FyYE,118133
133
133
  siat/translate-20230215.py,sha256=TJgtPE3n8IjljmZ4Pefy8dmHoNdFF-1zpML6BhA9FKE,121657
134
- siat/translate.py,sha256=YoC7OzzGUxT-7EEIU-GYWz0A9CBQ4aIQjlparfVJYSQ,216156
134
+ siat/translate.py,sha256=5o7hSMeNOdyenqiyB5oZwFvIpFvt3yGgp25KZNbqy9o,216309
135
135
  siat/translate_20240606.py,sha256=63IyHWEU3Uz9mjwyuAX3fqY4nUMdwh0ICQAgmgPXP7Y,215121
136
136
  siat/universal_test.py,sha256=CDAOffW1Rvs-TcNN5giWVvHMlch1w4dp-w5SIV9jXL0,3936
137
137
  siat/valuation.py,sha256=NKfeZMdDJOW42oLVHob6eSVBXUqlN1OCnnzwyGAst8c,48855
138
138
  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
- siat-3.2.45.dist-info/METADATA,sha256=a1zRvc3eoGiRhfDYBCgHd6iE9YgNmlj83jV1Alrq7Cc,7283
142
- siat-3.2.45.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
143
- siat-3.2.45.dist-info/top_level.txt,sha256=r1cVyL7AIKqeAmEJjNR8FMT20OmEzufDstC2gv3NvEY,5
144
- siat-3.2.45.dist-info/RECORD,,
141
+ siat-3.2.46.dist-info/METADATA,sha256=gZ8jTNIstNWw0UbcwTQ9S41tm9_aUi65_Pqhiu9pH8M,7310
142
+ siat-3.2.46.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
143
+ siat-3.2.46.dist-info/top_level.txt,sha256=r1cVyL7AIKqeAmEJjNR8FMT20OmEzufDstC2gv3NvEY,5
144
+ siat-3.2.46.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.38.4)
2
+ Generator: bdist_wheel (0.41.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5