+
    i                        R t ^ RIHt ^ RIHtHtHtHtHtH	t	H
t
 ]'       d   ^ RIt]	! R4      t ! R R]]],          4      tR tR R	 ltR
 R ltR R ltR R ltR R ltR R ltR# )a  Optional DataFrame conversion for pykalshi objects.

Requires pandas: pip install pykalshi[dataframe]

Usage:
    # Methods return DataFrameList - call .to_dataframe() directly:
    df = client.portfolio.get_positions().to_dataframe()
    df = client.portfolio.get_fills().to_dataframe()
    df = client.get_markets().to_dataframe()

    # Or use the standalone function:
    from pykalshi import to_dataframe
    df = to_dataframe(positions)
)annotations)TYPE_CHECKINGAnyGenericSequenceSupportsIndexTypeVaroverloadNTc                  v   a  ] tR t^tRt]R R l4       t]R R l4       tV 3R ltR R ltR	 V 3R
 lltRt	V ;t
# )DataFrameLista   A list subclass with DataFrame conversion support.

Behaves exactly like a normal list, but adds a .to_dataframe() method
for convenient conversion to pandas DataFrames.

Example:
    positions = client.portfolio.get_positions()  # Returns DataFrameList
    df = positions.to_dataframe()
c                    V ^8  d   QhRRRR/# )   indexr   returnr
    )formats   "Y/home/wkmabra/.openclaw/workspace/venv/lib/python3.14/site-packages/pykalshi/dataframe.py__annotate__DataFrameList.__annotate__&   s    99919    c                	    R # Nr   selfr   s   &&r   __getitem__DataFrameList.__getitem__%   s    69r   c                    V ^8  d   QhRRRR/# )r   r   slicer   zDataFrameList[T]r   )r   s   "r   r   r   (   s    @@@+;@r   c                	    R # r   r   r   s   &&r   r   r   '   s    =@r   c                	h   < \         SV `  V4      p\        V\        4      '       d   \	        V4      # V# r   )superr   
isinstancer   r   )r   r   result	__class__s   && r   r   r   *   s/    $U+eU## ((r   c                   V ^8  d   QhRR/# )r   r   pd.DataFramer   )r   s   "r   r   r   0   s     " "l "r   c                    \        V 4      # )z[Convert this list to a pandas DataFrame.

Requires pandas: pip install pykalshi[dataframe]
)to_dataframe)r   s   &r   r(   DataFrameList.to_dataframe0   s    
 D!!r   c                   V ^8  d   QhRR/# )r   r   strr   )r   s   "r   r   r   7   s     6 6# 6r   c                	(   < R \         SV `  4        R2# )zDataFrameList())r!   __repr__)r   r$   s   &r   r.   DataFrameList.__repr__7   s     0 23155r   r   )__name__
__module____qualname____firstlineno____doc__r	   r   r(   r.   __static_attributes____classcell__)r$   s   @r   r   r      s:     9 9@ @"6 6r   r   c                 F     ^ RI p V #   \         d    \        R4      Rhi ; i)z.Lazy import pandas with helpful error message.Nz]pandas is required for DataFrame conversion. Install it with: pip install pykalshi[dataframe])pandasImportError)pds    r   _import_pandasr;   ;   s5    	 ?
 	s     c                    V ^8  d   QhRRRR/# r   objr   r   r&   r   )r   s   "r   r   r   G   s     -" -"c -"l -"r   c                h   \        4       p^RIHpHp \	        W4      '       d   \        W4      # \	        W4      '       d   \        W4      # \	        V \        4      '       dI   \	        V \        \        34      '       g-   \        V 4      ^ 8X  d   VP                  ! 4       # \        W4      # \        W4      # )a  Convert a pykalshi object or list of objects to a pandas DataFrame.

Supports:
    - Lists of Pydantic models (PositionModel, FillModel, etc.)
    - Lists of domain objects (Market, Order, Event, Series)
    - CandlestickResponse (extracts candlesticks with flattened price data)
    - Single Pydantic models (returns single-row DataFrame)

Args:
    obj: A pykalshi object or list of objects.

Returns:
    A pandas DataFrame with appropriate columns.

Examples:
    >>> positions = client.portfolio.get_positions()
    >>> df = to_dataframe(positions)

    >>> markets = client.get_markets(limit=100)
    >>> df = to_dataframe(markets)

    >>> candles = market.get_candlesticks(start_ts, end_ts)
    >>> df = to_dataframe(candles)
)CandlestickResponseOrderbookResponse)r;   modelsr@   rA   r"   _candlesticks_to_df_orderbook_to_dfr   r+   byteslen	DataFrame_sequence_to_df_single_to_df)r>   r:   r@   rA   s   &   r   r(   r(   G   s    2 
	B ? #++"3++ #))(( #x  C#u)F)Fs8q=<<>!s'' !!r   c                    V ^8  d   QhRRRR/# r=   r   )r   s   "r   r   r   w   s        s  <  r   c                >    \        V 4      pVP                  ! V.4      # )z2Convert a single object to a single-row DataFrame._extract_datarG   )r>   r:   datas   && r   rI   rI   w   s    D<<r   c                    V ^8  d   QhRRRR/# )r   itemsr   r   r&   r   )r   s   "r   r   r   }   s     ! !8 !L !r   c                d    V  Uu. uF  p\        V4      NK  	  ppVP                  ! V4      # u upi )z-Convert a sequence of objects to a DataFrame.rL   )rP   r:   itemrecordss   &&  r   rH   rH   }   s/    /45ut}T"uG5<<   6s   -c                    V ^8  d   QhRRRR/# )r   r>   r   r   dictr   )r   s   "r   r   r      s     I Is It Ir   c                   \        V R4      '       d9   \        V P                  R4      '       d   V P                  P                  RR7      # \        V R4      '       d   V P                  RR7      # \        V \        4      '       d   V # \        V R4      '       dH   V P
                  P                  4        UUu/ uF   w  rVP                  R4      '       d   K  WbK"  	  upp# \        R\        V 4      P                   R24      hu uppi )	zExtract a flat dict from an object.

Handles:
    - Domain objects with .data attribute (Market, Order, Event, Series)
    - Pydantic models with .model_dump()
    - Plain dicts

Uses mode='json' to serialize enums as their string values.
rN   
model_dumpjson)mode__dict___zCannot convert z to DataFrame)hasattrrN   rW   r"   rU   rZ   rP   
startswith	TypeErrortyper0   )r>   kvs   &  r   rM   rM      s     sF, ? ?xx"""// sL!!~~6~** #t
 sJ!$!3!3!5O!5Q\\#=N!5OO
od3i&8&8%9G
HH Ps   6DDc                    V ^8  d   QhRRRR/# r   responser   r   r&   r   )r   s   "r   r   r      s      # l r   c           	        . pV P                    F  pRV P                  RVP                  RVP                  RVP                  /pVP
                  '       d+   R	 F$  p\        VP
                  VR4      pVf   K   WdV&   K&  	  VP                  V4       K  	  VP                  ! V4      pRVP                  9   d/   \        V4      ^ 8  d   VP                  ! VR,          RR7      VR&   V# )
zFConvert CandlestickResponse to DataFrame with flattened price columns.tickerend_period_tsvolumeopen_interestNs)unit	timestamp)openhighlowclosemean)candlesticksrf   rg   rh   ri   pricegetattrappendrG   columnsrF   to_datetime)rd   r:   rS   candlerecordfieldvaluedfs   &&      r   rC   rC      s    G''hooV11fmmV11	
 <<<AeT:$$)5M B
 	v (" 
g	B "**$R1..O)<3G;Ir   c                    V ^8  d   QhRRRR/# rc   r   )r   s   "r   r   r      s      s < r   c           	        . pV P                   P                  '       d7   V P                   P                   F  w  r4VP                  RRRVRV/4       K  	  V P                   P                  '       d7   V P                   P                   F  w  r4VP                  RRRVRV/4       K  	  VP                  ! V4      p\        V4      ^ 8  d(   VP                  RR.RR.R7      P                  RR	7      pV# )
zConvert OrderbookResponse to DataFrame with price levels.

Returns DataFrame with columns: side, price, quantity
Sorted by price descending within each side.
sideyesrs   quantitynoF)	ascendingT)drop)	orderbookr   ru   r   rG   rF   sort_valuesreset_index)rd   r:   rS   rs   r   r|   s   &&    r   rD   rD      s     G'1155OENNFE7E:xPQ  6 '1144OENNFD'5*hOP  5 
g	B
2w{^^Wen  
 +4+
  	
 Ir   )r4   
__future__r   typingr   r   r   r   r   r   r	   r8   r:   r
   listr   r;   r(   rI   rH   rM   rC   rD   r   r   r   <module>r      s_    # Z Z ZCL6D'!* 6B	-"` !I::r   