
    iJ                     r   d dl mZmZmZ d dlZd dlZd dlZddlm	Z
 ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZmZmZ dd
lmZmZmZ ddlmZ ededej        fd            Zdee         dej        fdZ deeee         f         deej        ej        f         fdZ!dej        fdZ" edg          edej        fd                        Z#	 	 	 	 d$deeee         f         dedede$de$deej        eeej        f         f         fdZdedej        fdZdedej        fd Zd%ded"e$dej        fd#Z	dS )&    )DictListUnionN   )get_deal_detail)get_history_bill)get_quote_history)get_realtime_quotes_by_fs)get_today_bill)EASTMONEY_REQUEST_HEADERSFS_DICTMagicConfig)get_quote_idprocess_dataframe_and_series
to_numeric   )EASTMONEY_BOND_BASE_INFO_FIELDS	bond_codereturnc                    t           }dddddd|  dff}d}t          j        |t          |	                                          }|d
         (t          j        |                                d          S |d
         d         }t          j        |d                                       |          }||                                         }|S )u   
    获取单只债券基本信息

    Parameters
    ----------
    bond_code : str
        债券代码

    Returns
    -------
    Series
        债券的一些基本信息
    
reportNameRPT_BOND_CB_LISTcolumnsALLsourceWEBclientr   filterz(SECURITY_CODE="z")3http://datacenter-web.eastmoney.com/api/data/v1/getheadersparamsresultNobject)indexdtypedatar   )r)   )	r   requestsgetr   jsonpdSeriesvaluesrename)r   r   r&   urljson_responseitemsss          ?/usr/local/lib/python3.11/dist-packages/efinance/bond/getter.pyget_base_info_singler8      s     .G*	3i3334F @CL.v  
dff  X&yw~~//x@@@@(#F+E
	%("""11A	'..

AH    
bond_codesc                     g t           j        dt          ddffd            }| D ]} ||           t          j                     t	          j                  }|S )u   
    获取多只债券基本信息

    Parameters
    ----------
    bond_codes : List[str]
        债券代码构成的字符串列表

    Returns
    -------
    DataFrame
        多只债券信息
    r   r   Nc                 P    t          |           }                    |           d S )N)r8   append)r   r6   sss     r7   startz"get_base_info_multi.<locals>.startE   s#     ++
		!r9   )multitaskingtaskstrwait_for_tasksr/   	DataFrame)r:   r?   r   dfr>   s       @r7   get_base_info_multirF   5   s     
B           	i!!!	b		BIr9   c                     t          | t                    rt          |           S t          | d          rt	          |           S dS )u  
    获取单只或多只债券基本信息

    Parameters
    ----------
    bond_codes : Union[str, List[str]]
        债券代码、名称 或者 债券代码、名称构成的列表

    Returns
    -------
    Union[DataFrame, Series]
        单只或多只债券基本信息

        - ``DataFrame`` : 当 ``bond_codes`` 是字符串列表时
        - ``Series`` : 当 ``bond_codes`` 是字符串时

    Examples
    --------
    >>> import efinance as ef
    >>> # 单只债券
    >>> ef.bond.get_base_info('123111')
    债券代码                                                    123111
    债券名称                                                      东财转3
    正股代码                                                    300059
    正股名称                                                      东方财富
    债券评级                                                       AA+
    申购日期                                       2021-04-07 00:00:00
    发行规模(亿)                                                    158
    网上发行中签率(%)                                             0.05877
    上市日期                                       2021-04-23 00:00:00
    到期日期                                       2027-04-07 00:00:00
    期限(年)                                                        6
    利率说明          第一年0.2%、第二年0.3%、第三年0.4%、第四年0.8%、第五年1.8%、第六年2.0%。
    dtype: object

    >>> 多只债券
    >>> bond_codes = ['123111','113050']
    >>> ef.bond.get_base_info(bond_codes)
        债券代码  债券名称    正股代码  正股名称  ...                 上市日期                 到期日期  期限(年)                                               利率说明
    0  113050  南银转债  601009  南京银行  ...  2021-07-01 00:00:00  2027-06-15 00:00:00      6  第一年0.20%、第二年0.40%、第三年0.70%、第四年1.20%
    、第五年1.70%、第...
    1  123111  东财转3  300059  东方财富  ...  2021-04-23 00:00:00  2027-04-07 00:00:00      6   第一年0.2%、第二年0.3%、第三年0.4%、第四年0.8%、第
    五年1.8%、第六年2.0%。

    __iter__N)
isinstancerB   r8   hasattrrF   )r:   s    r7   get_base_inforK   Q   sO    \ *c"" /#J///	Z	(	( /":.../ /r9   c                     d} g }t           }	 dddd|  fdddd	f}d
}t          j        |t          |                                          }|d         ni|d         d         }t          j        |                              |          |                                         }|	                    |           | dz  } t          j
        |d          }|S )uL  
    获取全部债券基本信息列表

    Returns
    -------
    DataFrame
        债券一些基本信息

    Examples
    --------
    >>> import efinance as ef
    >>> ef.bond.get_all_base_info()
        债券代码   债券名称    正股代码  正股名称 债券评级                 申购日期    发行规模(亿)  网上发行中签率(%)                 上市日期                 到期日期   期限(年)                                               利率说明
    0   123120   隆华转债  300263  隆华科技  AA-  2021-07-30 00:00:00   7.989283         NaN                 None  2027-07-30 00:00:00       6  第一年为0.40%、第二年为0.70%、第三年为1.00%、第四年为1.60%、第五年为2....
    1   110081   闻泰转债  600745  闻泰科技  AA+  2021-07-28 00:00:00  86.000000    0.044030                 None  2027-07-28 00:00:00       6  第一年0.10%、第二年0.20%、第三年0.30%、第四年1.50%、第五年1.80%、第...
    2   118001   金博转债  688598  金博股份   A+  2021-07-23 00:00:00   5.999010    0.001771                 None  2027-07-23 00:00:00       6  第一年0.50%、第二年0.70%、第三年1.20%、第四年1.80%、第五年2.40%、第...
    3   123119   康泰转2  300601  康泰生物   AA  2021-07-15 00:00:00  20.000000    0.014182                 None  2027-07-15 00:00:00       6  第一年为0.30%、第二年为0.50%、第三年为1.00%、第 四年为1.50%、第五年为1....
    4   113627   太平转债  603877   太平鸟   AA  2021-07-15 00:00:00   8.000000    0.000542                 None  2027-07-15 00:00:00       6  第一年0.30%、第二年0.50%、第三年1.00%、第四年1.50%、第五年1.80%、第...
    ..     ...    ...     ...   ...  ...                  ...        ...         ...                  ...                  ...     ...                                                ...
    80  110227   赤化转债  600227   圣济堂  AAA  2007-10-10 00:00:00   4.500000    0.158854  2007-10-23 00:00:00  2009-05-25 00:00:00  1.6192  票面利率和付息日期:本次发行的债券票面利率第一 年为1.5%、第二年为1.8%、第三年为2....
    81  126006  07深高债  600548   深高速  AAA  2007-10-09 00:00:00  15.000000    0.290304  2007-10-30 00:00:00  2013-10-09 00:00:00       6                                               None
    82  110971   恒源转债  600971  恒源煤电  AAA  2007-09-24 00:00:00   4.000000    5.311774  2007-10-12 00:00:00  2009-12-21 00:00:00  2.2484  票面利率为:第一年年利率1.5%,第二年年利率1.8%,第三年年利率2.1%,第四年年利率2...
    83  110567   山鹰转债  600567  山鹰国际   AA  2007-09-05 00:00:00   4.700000    0.496391  2007-09-17 00:00:00  2010-02-01 00:00:00  2.4055  票面利率和付息日期:本次发行的债券票面利率第一年为1.4%,第二年为1.7%,第三年为2....
    84  110026   中海转债  600026  中远海能  AAA  2007-07-02 00:00:00  20.000000    1.333453  2007-07-12 00:00:00  2008-03-27 00:00:00   0.737  票面利率:第一年为1.84%,第二年为2.05%,第三年为2.26%,第四年为2.47%,第...

    r   )sortColumnsPUBLIC_START_DATE)	sortTypesz-1)pageSize500
pageNumberr   r   r   r    r#   r$   r'   Nr+   r   T)ignore_index)r   r,   r-   r   r.   r/   rD   r2   r1   r=   concat)pagedfsr   r&   r3   r4   r+   rE   s           r7   get_all_base_inforX      s    6 D C-G0d9%.	
 D 26
 
 

$&& 	 "*X&v.\$&&w&778H8HI

2	+. 
3T	*	*	*BIr9   u   市场编号)remove_columns_and_indexesc                  j    t          t          d         fi | }|                    dddd           |S )uu	  
    获取沪深市场全部债券实时行情信息

    Returns
    -------
    DataFrame
        沪深市场全部债券实时行情信息

    Examples
    --------
    >>> import efinance as ef
    >>> ef.bond.get_realtime_quotes()
        债券代码  债券名称    涨跌幅      最新价       最高       最低      今开     涨跌额      换手率     量比 动态市盈率      成交量           成交额    昨日收盘         总市值        流通市值      行情ID 市场类型
    0    123051  今天转债  24.03   158.66    165.0    134.0   134.0   30.74   496.74  67.16     -  1388341  2185911136.0  127.92   443443594   443443594  0.123051   深A
    1    123042  银河转债  16.04  219.309    224.0   193.11   194.5  30.309  1833.99   1.34     -  3042265  6402014720.0   189.0   363794813   363794813  0.123042   深A
    2    113034  滨化转债  13.49   247.71   255.62    214.5   214.5   29.45   334.56   2.96     -  1585993  3798255024.0  218.26  1174284861  1174284861  1.113034   沪A
    3    128064  司尔转债  11.29   148.01   150.34  133.007  133.73   15.01   277.06   7.04     -   887301  1305800336.0   133.0   474009426   474009426  0.128064   深A
    4    113027  华钰转债   8.38   129.86    130.2    122.3   123.0   10.04    83.84   4.15     -   272641   346817120.0  119.82   422273164   422273164  1.113027   沪A
    ..      ...   ...    ...      ...      ...      ...     ...     ...      ...    ...   ...      ...           ...     ...         ...         ...       ...  ...
    390  113621  彤程转债  -4.45   188.57   198.22    188.0  196.01   -8.79    29.91   0.47     -   168709   326018848.0  197.36  1063693010  1063693010  1.113621   沪A
    391  128017  金禾转债  -4.86  182.676  204.989   182.61  195.16  -9.324    35.58    2.0     -   196375   375750768.0   192.0  1008366222  1008366222  0.128017   深A
    392  113548  石英转债  -5.16   250.22   267.57   246.56   262.3  -13.61   143.32   0.72     -   175893   452796304.0  263.83   307086749   307086749  1.113548   沪A
    393  128093  百川转债  -5.71  429.042   449.97  426.078   443.1 -25.958   426.86   0.36     -   693261  3032643232.0   455.0   696810974   696810974  0.128093   深A
    394  123066  赛意转债   -6.0   193.08  203.999   193.08   203.0  -12.32   323.13   0.22     -   133317   261546032.0   205.4    79660753    79660753  0.123066   深A

    bond   债券代码   债券名称u   代码u   名称Tr   inplace)r
   r   r2   )kwargsrE   s     r7   get_realtime_quotesrb      sA    : 
#76?	=	=f	=	=BII>JJTXIYYYIr9   1900010120500101e   begendkltfqtc                 ,   t          | f||||d|}t          |t          j                  r|                    dddd           nLt          |t
                    r7|                                D ]"}||                             dddd           #|S )u
  
    获取债券的 K 线数据

    Parameters
    ----------
    bond_codes : Union[str,List[str]]
        债券代码、名称 或者 代码、名称构成的列表
    beg : str, optional
        开始日期，默认为 ``'19000101'`` ，表示 1900年1月1日
    end : str, optional
        结束日期，默认为 ``'20500101'`` ，表示 2050年1月1日
    klt : int, optional
        行情之间的时间间隔，默认为 ``101`` ，可选示例如下

        - ``1`` : 分钟
        - ``5`` : 5 分钟
        - ``15`` : 15 分钟
        - ``30`` : 30 分钟
        - ``60`` : 60 分钟
        - ``101`` : 日
        - ``102`` : 周
        - ``103`` : 月

    fqt : int, optional
        复权方式，默认为 ``1`` ，可选示例如下

        - ``0`` : 不复权
        - ``1`` : 前复权
        - ``2`` : 后复权

    Returns
    -------
    Union[DataFrame, Dict[str, DataFrame]]
        债券的 K 线数据

        - ``DataFrame`` : 当 ``codes`` 是 ``str`` 时
        - ``Dict[str, DataFrame]`` : 当 ``bond_codes`` 是 ``List[str]`` 时

    Examples
    --------
    >>> import efinance as ef
    >>> # 获取单只债券日 K 行情
    >>> ef.bond.get_quote_history('123111')
        债券名称    债券代码          日期       开盘       收盘       最高       最低      成交量           成交额    振幅    涨跌幅     涨跌额    换手率
    0   东财转3  123111  2021-04-23  130.000  130.000  130.000  130.000  1836427  2.387355e+09  0.00  30.00  30.000  11.62
    1   东财转3  123111  2021-04-26  130.353  130.010  133.880  125.110  8610944  1.126033e+10  6.75   0.01   0.010  54.50
    2   东财转3  123111  2021-04-27  129.000  129.600  130.846  128.400  1820766  2.357472e+09  1.88  -0.32  -0.410  11.52
    3   东财转3  123111  2021-04-28  129.100  130.770  131.663  128.903  1467727  1.921641e+09  2.13   0.90   1.170   9.29
    4   东财转3  123111  2021-04-29  130.690  131.208  133.150  130.560  1156934  1.525974e+09  1.98   0.33   0.438   7.32
    ..   ...     ...         ...      ...      ...      ...      ...      ...           ...   ...    ...     ...    ...
    72  东财转3  123111  2021-08-09  159.600  159.300  162.990  158.690   596124  9.585751e+08  2.69  -0.34  -0.550   3.77
    73  东财转3  123111  2021-08-10  159.190  160.950  161.450  157.000   517237  8.234596e+08  2.79   1.04   1.650   3.27
    74  东财转3  123111  2021-08-11  161.110  159.850  162.300  159.400   298906  4.800711e+08  1.80  -0.68  -1.100   1.89
    75  东财转3  123111  2021-08-12  159.110  158.290  160.368  158.010   270641  4.298100e+08  1.48  -0.98  -1.560   1.71
    76  东财转3  123111  2021-08-13  158.000  158.358  160.290  157.850   250059  3.975513e+08  1.54   0.04   0.068   1.58

    )rf   rg   rh   ri   r\   r]   r^   Tr_   )get_quote_history_for_bondrI   r/   rD   r2   dictkeys)r:   rf   rg   rh   ri   ra   rE   r   s           r7   r	   r	      s    B 
$
#3
 
:@
 
B "bl## 
		^~NNX\	]]]]	B		  	 	IyM  #1^LLVZ !     Ir9   c                 X    t          |           }|                    dddd           |S )uP  
    获取单支债券的历史单子流入流出数据

    Parameters
    ----------
    bond_code : str
        债券代码

    Returns
    -------
    DataFrame
        沪深市场单只债券历史单子流入流出数据

    Examples
    --------
    >>> import efinance as ef
    >>> ef.bond.get_history_bill('123111')

    r\   r]   r^   Tr_   )get_history_bill_for_bondr2   r   rE   s     r7   r   r   0  s5    * 
#9	-	-BII>JJTXIYYYIr9   c                 X    t          |           }|                    dddd           |S )ul  
    获取单只债券最新交易日的日内分钟级单子流入流出数据

    Parameters
    ----------
    bond_code : str
        债券代码

    Returns
    -------
    DataFrame
        单只债券最新交易日的日内分钟级单子流入流出数据

    Examples
    --------
    >>> import efinance as ef
    >>> ef.bond.get_today_bill('123111')
        债券名称    债券代码                时间      主力净流入     小单净流入      中单净流入       大单净流入     超大单净流入
    0    东财转3  123111  2021-08-13 09:31  -278046.0  319657.0   -41611.0   -278046.0        0.0
    1    东财转3  123111  2021-08-13 09:32  -988506.0  571643.0   416863.0   -988506.0        0.0
    2    东财转3  123111  2021-08-13 09:33  -990089.0  501980.0   488109.0   -990089.0        0.0
    3    东财转3  123111  2021-08-13 09:34 -1718728.0    9051.0  1709678.0  -1718728.0        0.0
    4    东财转3  123111  2021-08-13 09:35 -1653717.0 -133654.0  1787373.0  -1653717.0        0.0
    ..    ...     ...               ...        ...       ...        ...         ...        ...
    235  东财转3  123111  2021-08-13 14:56  5942063.0 -747717.0 -5194332.0  11700567.0 -5758504.0
    236  东财转3  123111  2021-08-13 14:57  5916755.0 -483170.0 -5433570.0  11963346.0 -6046591.0
    237  东财转3  123111  2021-08-13 14:58  5503692.0 -187241.0 -5316435.0  11757642.0 -6253950.0
    238  东财转3  123111  2021-08-13 14:59  5503692.0 -187241.0 -5316435.0  11757642.0 -6253950.0
    239  东财转3  123111  2021-08-13 15:00  5503692.0 -187241.0 -5316435.0  11757642.0 -6253950.0

    r\   r]   r^   Tr_   )get_today_bill_for_bondr2   rp   s     r7   r   r   J  s6    @ 
!	+	+BII>JJTXIYYYIr9   @B 	max_countc                     d}|                     t          j                  r| }nt          |           }g d}|st	          j        |          S t          ||          }|                    dddd	           |S )
u  
    获取债券最新交易日成交明细

    Parameters
    ----------
    bond_code : str
        债券代码或者名称
    max_count : int, optional
        最近的最大数据条数, 默认为 ``1000000``

    Returns
    -------
    DataFrame
        债券最新交易日成交明细

    Examples
    --------
    >>> import efinance as ef
    >>> ef.bond.get_deal_detail('113050')
        债券名称    债券代码        时间      昨收     成交价  成交量  单数
    0     南银转债  113050  09:15:30  122.44  122.60   21   0
    1     南银转债  113050  09:17:07  122.44  122.60   21   0
    2     南银转债  113050  09:20:52  122.44  122.60   21   0
    3     南银转债  113050  09:22:34  122.44  122.60   21   0
    4     南银转债  113050  09:23:35  122.44  122.56   21   0
    ...    ...     ...       ...     ...     ...  ...  ..
    1720  南银转债  113050  14:58:49  122.44  121.87    1   0
    1721  南银转债  113050  14:58:52  122.44  121.87    5   0
    1722  南银转债  113050  14:59:01  122.44  121.88    4   0
    1723  南银转债  113050  14:59:31  122.44  121.82  130   0
    1724  南银转债  113050  15:00:00  122.44  121.82   50   0

     )r]   r\   u   时间u   昨收u	   成交价u	   成交量u   单数rS   )rt   r\   r]   r^   Tr_   )r-   r   QUOTE_ID_MODEr   r/   rD   get_deal_detail_for_bondr2   )r   rt   ra   quote_idr   rE   s         r7   r   r   p  s    F Hzz++,, +	**fffG -|G,,,,	!(i	@	@	@BII>JJTXIYYYIr9   )rc   rd   re   r   )rs   )%typingr   r   r   r@   pandasr/   r,   commonr   rx   r   ro   r	   rk   r
   r   rr   common.configr   r   r   utilsr   r   r   configr   rB   r0   r8   rD   rF   rK   rX   rb   int r9   r7   <module>r      s   $ $ $ $ $ $ $ $ $ $          @ @ @ @ @ @ B B B B B B D D D D D D . . . . . . > > > > > > K K K K K K K K K K J J J J J J J J J J 3 3 3 3 3 3  C  BI        FDI ",    81/eCcN3 1/blBI>U8V 1/ 1/ 1/ 1/h62< 6 6 6 6r .9IJJJR\     KJD M Mc49n%M	M 
M 
	M
 
M 2<c2</001M M M M`     4#c #bl # # # #L- -s -s -2< - - - - - -r9   