
    ic                         S SK Jr  S SKJrJr  S SKJrJrJr  S SK	J
r
JrJrJr  SSKJr     SS\S	\S
\S\S\S\S\S\4S jjrg)    )isnan)	DataFrameSeries)DictLikeIntIntFloat)v_offsetv_pos_defaultv_scalarv_series   )tsiNclosefastslowsignalscalaroffsetkwargsreturnc                 r   [        US5      n[        US5      n[        US5      nX!:  a  X!p!X#-   S-   n[        X5      n U c  g[        US5      n[        U5      n[	        XX#US9nUc  gUR
                  SS2S4   n	UR
                  SS2S4   n
[        [        U
5      5      (       a  gX-
  nUS:w  a3  U	R                  U5      n	U
R                  U5      n
UR                  U5      nSU;   a9  U	R                  US   SS	9  U
R                  US   SS	9  UR                  US   SS	9  S
U S
U S
U S
U 3nSU 3U	l
        SU 3U
l
        SU 3Ul
        S=U	l        =U
l        Ul        U	R                  XR                  XR                  U0n[        XR                  S9nSU 3Ul
        U	R                  Ul        U$ )a  SMI Ergodic Indicator

This indicator, by William Blau, is the same as the TSI except the SMI
includes a signal line. A trend is considered bullish when crossing above
zero and bearish when crossing below zero. This implementation includes
both the SMI Ergodic Indicator and SMI Ergodic Oscillator.

Sources:
    * [motivewave](https://www.motivewave.com/studies/smi_ergodic_indicator.htm)
    * [tradingview A](https://www.tradingview.com/script/Xh5Q0une-SMI-Ergodic-Oscillator/)
    * [tradingview B](https://www.tradingview.com/script/cwrgy4fw-SMIIO/)

Parameters:
    close (Series): ```close``` Series
    fast (int): The short period. Default: ```5```
    slow (int): The long period. Default: ```20```
    signal (int): Signal period. Default: ```5```
    scalar (float): Scalar. Default: ```1```
    offset (int): Post shift. Default: ```0```

Other Parameters:
    fillna (value): ```pd.DataFrame.fillna(value)```

Returns:
    (DataFrame): 3 columns
      r   N)r   r   r   r   r   fillnaT)inplace_SMISMIsSMIomomentum)index)r
   r   r   r	   r   ilocallr   shiftr   namecategoryr   r!   )r   r   r   r   r   r   r   _lengthtsi_dfsmisignalmaosc_propsdatadfs                  Q/var/www/html/trading/venv/lib/python3.13/site-packages/pandas_ta/momentum/smi.pyr)   r)   
   s   @ q!Dr"D61%F{dmaGU$E}fa FfF FKF~
++ad
C{{1a4 H
5?
.C {ii>>&)ii 6

6(#T
2x($7

6(#T
2 avQvhax0FVH~CH6(OHMfXCH6@@CL@8$s|HHc==(HHcBD	4{{	+BF8nBG,,BKI    )NNNNN)numpyr   pandasr   r   pandas_ta._typingr   r   r   pandas_ta.utilsr	   r
   r   r   r   r)    r0   r/   <module>r6      sy     $ 5 5 G G 
 26+/RRR+.RR (R R #+R 	Rr0   