Ë
    £�DjìÑ  ã                   ó  — d dl mZmZmZmZ d dlmZmZ d dlZ	d dl
mZmZ d dlmZmZ d dlZd dlZd dlmZ d dlmZ d dlmZmZmZmZ d d	lmZ ee	j                  ej>                  ej@                  f   Z!ee"ejF                  f   Z$d
Z% G d„ de«      Z& G d„ de&e«      Z' G d„ de'«      Z( G d„ de&«      Z) G d„ de&e«      Z* G d„ de*«      Z+ G d„ de&e«      Z, G d„ de,e*«      Z- G d„ de,«      Z. G d„ de,e'«      Z/ G d„ d «      Z0y)!é    )ÚPD_LT_2_2_0ÚAppenderÚis_int_indexÚto_numpy)ÚABCÚabstractmethodN)ÚOptionalÚUnion)ÚHashableÚSequence)Úqr)Úd_or_f)Ú	bool_likeÚ
float_likeÚrequired_int_likeÚstring_like)Úfreq_to_periodz�start is less than the first observation in the index. Values can only be created for observations after the start of the index.
c            
       ó   — e Zd ZdZdZedefd„«       Zede	e
   dej                  fd„«       Ze	 ddede	e
   d	ee	e
      dej                  fd
„«       Zedefd„«       Zdefd„Zeedee
df   fd„«       «       Zede	e
   dej.                  fd„«       Ze	 ddej.                  ded	ee	e
      dej.                  fd„«       Zdefd„Zdedefd„Zy)ÚDeterministicTermz/Abstract Base Class for all Deterministic TermsFÚreturnc                 ó   — | j                   S )z?Flag indicating whether the values produced are dummy variables)Ú	_is_dummy©Úselfs    úaC:\Crop_Prediction\Backend\crop-ai-system\venv\Lib\site-packages\statsmodels\tsa\deterministic.pyÚis_dummyzDeterministicTerm.is_dummy*   ó   € ð �~‰~Ðó    Úindexc                  ó   — y)aR  
        Produce deterministic trends for in-sample fitting.

        Parameters
        ----------
        index : index_like
            An index-like object. If not an index, it is converted to an
            index.

        Returns
        -------
        DataFrame
            A DataFrame containing the deterministic terms.
        N© ©r   r   s     r   Ú	in_samplezDeterministicTerm.in_sample/   ó   � r   NÚstepsÚforecast_indexc                  ó   — y)a1  
        Produce deterministic trends for out-of-sample forecasts

        Parameters
        ----------
        steps : int
            The number of steps to forecast
        index : index_like
            An index-like object. If not an index, it is converted to an
            index.
        forecast_index : index_like
            An Index or index-like object to use for the forecasts. If
            provided must have steps elements.

        Returns
        -------
        DataFrame
            A DataFrame containing the deterministic terms.
        Nr!   )r   r%   r   r&   s       r   Úout_of_samplezDeterministicTerm.out_of_sample@   r$   r   c                  ó   — y)z.A meaningful string representation of the termNr!   r   s    r   Ú__str__zDeterministicTerm.__str__[   r$   r   c                 ó^   — t        | «      j                  f}t        || j                  z   «      S ©N)ÚtypeÚ__name__ÚhashÚ_eq_attr)r   Únames     r   Ú__hash__zDeterministicTerm.__hash___   s(   € Ü&*¨4£j×&9Ñ&9Ð%;ˆÜ�D˜4Ÿ=™=Ñ(Ó)Ð)r   .c                  ó   — y)z9tuple of attributes that are used for equality comparisonNr!   r   s    r   r0   zDeterministicTerm._eq_attrc   r$   r   c                 ó–   — t        | t        j                  «      r| S 	 t        j                  | «      S # t        $ r t	        d«      ‚w xY w)Nz*index must be a pandas Index or index-like)Ú
isinstanceÚpdÚIndexÚ	ExceptionÚ	TypeError©r   s    r   Ú_index_likezDeterministicTerm._index_likeh   sF   € ä�eœRŸX™XÔ&ØˆLð	JÜ—8‘8˜E“?Ð"øÜò 	JÜÐHÓIÐIð	Jús	   ž3 ³Ac                 óê  — |�dt         j                  |«      }t        |t        j                  «      sJ ‚|j
                  d   |k7  rt        d|j
                  d   › d|› d�«      ‚|S t        | t        j                  «      r(t        j                  | d   dz   || j                  ¬«      S t        | t        j                  «      rV| j                  �Jt        j                  | d   | j                  d	¬
«      d   }t        j                  || j                  |¬
«      S t        | t        j                  «      rUt        | t        j                  «      sJ ‚	 | j                  }| j                  }|||z  z   }t        j                  |||¬«      S t#        | «      ret%        j&                  t%        j(                  | «      dk(  «      r:t%        j*                  | d   dz   | d   |z   dz   «      }t        j                  |«      S ddl}|j/                  dt0        d	¬«       | j
                  d   }	t        j                  |	dz   |	|z   dz   «      S # t        $ r' t!        | «      dkD  r| d   | d   z
  nd}| d   |z   }Y �Œ	w xY w)zExtend the forecast indexNr   z(The number of values in forecast_index (z) must match steps (z).éÿÿÿÿé   ©ÚperiodsÚfreqé   ©rA   r@   éþÿÿÿ©ÚstepzÃOnly PeriodIndexes, DatetimeIndexes with a frequency set, RangesIndexes, and Index with a unit increment support extending. The index is set will contain the position relative to the data length.)Ú
stacklevel)r   r;   r5   r6   r7   ÚshapeÚ
ValueErrorÚPeriodIndexÚperiod_rangerA   ÚDatetimeIndexÚ
date_rangeÚ
RangeIndexrF   ÚstopÚAttributeErrorÚlenr   ÚnpÚallÚdiffÚarangeÚwarningsÚwarnÚUserWarning)
r   r%   r&   Únext_obsrF   ÚstartrO   Úidx_arrrV   Únobss
             r   Ú_extend_indexzDeterministicTerm._extend_indexq   s4  € ð Ð%Ü.×:Ñ:¸>ÓJˆNÜ˜n¬b¯h©hÔ7Ñ7Ø×#Ñ# AÑ&¨%Ò/Ü ðØ&×,Ñ,¨QÑ/Ð0Ð0DÀUÀGÈ2ðOóð ð "Ð!Ü�eœRŸ^™^Ô,Ü—?‘?Ø�b‘	˜A‘ u°5·:±:ôð ô ˜œr×/Ñ/Ô0°U·Z±ZÐ5KÜ—}‘} U¨2¡Y°U·Z±ZÈÔKÈAÑNˆHÜ—=‘= °·
±
ÀEÔJÐJÜ˜œrŸ}™}Ô-Ü˜e¤R§]¡]Ô3Ñ3ð)Ø—z‘z�ØŸ
™
�ð
 ˜4 %™<Ñ'ˆDÜ—=‘= ¨°4Ô8Ð8Ü˜%Ô ¤R§V¡V¬B¯G©G°E«N¸aÑ,?Ô%@Ü—i‘i  b¡	¨A¡¨u°R©y¸5Ñ/@À1Ñ/DÓEˆGÜ—8‘8˜GÓ$Ð$ãà�‰ð"ô Øð 	ô 	
ð �{‰{˜1‰~ˆÜ�}‰}˜T A™X t¨e¡|°aÑ'7Ó8Ð8øô+ "ò )ä03°E³
¸Q²�u˜R‘y 5¨¡9Ò,ÀA�Ø˜b™	 DÑ(“ð)ús   ÅI É,I2É1I2c                 óB   — | j                  «       dt        | «      d›�z   S )Nz at 0xÚ0x)r*   Úidr   s    r   Ú__repr__zDeterministicTerm.__repr__¤   s    € Ø�|‰|‹~ &¬¨D«°"¨Ð 6Ñ6Ð6r   Úotherc                 óð   — t        |t        | «      «      r[| j                  }|j                  }t        |«      t        |«      k7  ryt	        t        ||«      D ��cg c]
  \  }}||k(  ‘Œ c}}«      S yc c}}w )NF)r5   r-   r0   rQ   rS   Úzip)r   rb   Úown_attrÚoth_attrÚaÚbs         r   Ú__eq__zDeterministicTerm.__eq__§   sc   € Ü�eœT $›ZÔ(Ø—}‘}ˆHØ—~‘~ˆHÜ�8‹}¤ H£Ò-ØÜ¬3¨x¸Ó+B×C¡4 1 a˜˜Q›ÓCÓDÐDàùó Ds   ÁA2
r,   )r.   Ú
__module__Ú__qualname__Ú__doc__r   ÚpropertyÚboolr   r   r   r   r6   Ú	DataFramer#   Úintr	   r(   Ústrr*   r2   Útupler0   Ústaticmethodr7   r;   r]   ra   Úobjectri   r!   r   r   r   r   $   s–  „ Ù9ð €Iàð˜$ò ó ðð ð˜x¨Ñ1ð °b·l±lò ó ðð  ð
 8<ñ	àðð ˜Ñ!ðð ! ¨(Ñ!3Ñ4ð	ð
 
�‰òó ðð4 ð=˜ò =ó ð=ð*˜#ó *ð ØðH˜% ¨# Ñ.ò Hó ó ðHð ðJ˜8 HÑ-ð J°"·(±(ò Jó ðJð ð 8<ñ09Ø�x‰xð09àð09ð ! ¨(Ñ!3Ñ4ð09ð 
�‰ò	09ó ð09ðd7˜#ó 7ð˜Fð  tô r   r   c                   ó²   — e Zd ZdZddededdfd„Zedefd„«       Zedefd„«       Z	ede
e   fd	„«       Zd
ej                  dej                  fd„Zdefd„Zy)ÚTimeTrendDeterministicTermz:Abstract Base Class for all Time Trend Deterministic TermsÚconstantÚorderr   Nc                 óH   — t        |d«      | _        t        |d«      | _        y )Nrw   rx   )r   Ú	_constantr   Ú_order)r   rw   rx   s      r   Ú__init__z#TimeTrendDeterministicTerm.__init__µ   s   € Ü" 8¨ZÓ8ˆŒÜ'¨¨wÓ7ˆ�r   c                 ó   — | j                   S )z+Flag indicating that a constant is included)rz   r   s    r   rw   z#TimeTrendDeterministicTerm.constant¹   r   r   c                 ó   — | j                   S )zOrder of the time trend©r{   r   s    r   rx   z TimeTrendDeterministicTerm.order¾   ó   € ð �{‰{Ðr   c                 óæ   — g }ddddœ}| j                   r|j                  d«       t        d| j                  dz   «      D ]/  }||v r|j                  ||   «       Œ|j                  d|› �«       Œ1 |S )NÚtrendÚtrend_squaredÚtrend_cubed)r>   rB   é   Úconstr>   ztrend**)rz   ÚappendÚranger{   )r   ÚcolumnsÚtrend_namesÚpowers       r   Ú_columnsz#TimeTrendDeterministicTerm._columnsÃ   sw   € àˆØ! o¸-ÑHˆØ�>Š>Ø�N‰N˜7Ô#Ü˜1˜dŸk™k¨A™oÓ.ò 	2ˆEØ˜Ñ#Ø—‘˜{¨5Ñ1Õ2à—‘ ¨¨Ð0Õ1ð		2ð
 ˆr   Úlocsc                 ó8  — t        | j                  «      | j                  z   }t        j                  |d|f«      }t        j
                  d|ft         ¬«      }t        j                  d| j                  dz   «      |dt        | j                  «      d …f<   ||z  }|S )Nr>   ©Údtyper   )rp   rz   r{   rR   ÚtileÚzerosrU   )r   r�   ÚntermsÚtermsr‹   s        r   Ú
_get_termsz%TimeTrendDeterministicTerm._get_termsÐ   s}   € Ü�T—^‘^Ó$ t§{¡{Ñ2ˆÜ—‘˜˜q &˜kÓ*ˆÜ—‘˜!˜V˜¬CÔ0ˆÜ*,¯)©)°A°t·{±{ÀQ±Ó*Gˆˆa”�T—^‘^Ó$Ñ&Ð&Ñ'Ø�%‰ˆØˆr   c                 óÒ   — g }| j                   r|j                  d«       | j                  r!|j                  d| j                  dz   › �«       |sdg}dj                  |«      }d|› d�S )NÚConstantzPowers 1 to r>   ÚEmptyú,z
TimeTrend(ú))rz   r‡   r{   Újoin)r   r”   Ú	terms_strs      r   r*   z"TimeTrendDeterministicTerm.__str__Ø   sc   € ØˆØ�>Š>Ø�L‰L˜Ô$Ø�;Š;Ø�L‰L˜<¨¯©°a©Ð'8Ð9Ô:ÙØ�IˆEØ—H‘H˜U“Oˆ	Ø˜I˜; aÐ(Ð(r   ©Tr   )r.   rj   rk   rl   rn   rp   r|   rm   rw   rx   Úlistrq   rŒ   rR   Úndarrayr•   r*   r!   r   r   rv   rv   ²   s›   „ ÙDñ8 ð 8°Sð 8Àó 8ð ð˜$ò ó ðð ð�sò ó ðð ð
˜$˜s™)ò 
ó ð
ð˜rŸz™zð ¨b¯j©jó ð	)˜ô 	)r   rv   c            
       ó�  ‡ — e Zd ZdZddededdfˆ fd„Zededd fd„«       Z	 e
ej                  j                  «      d	eee   ej"                  f   dej$                  fd
„«       Z e
ej&                  j                  «      	 dded	eee   ej"                  f   deee      dej$                  fd„«       Zedeedf   fd„«       Zˆ xZS )Ú	TimeTrendao  
    Constant and time trend determinstic terms

    Parameters
    ----------
    constant : bool
        Flag indicating whether a constant should be included.
    order : int
        A non-negative int containing the powers to include (1, 2, ..., order).

    See Also
    --------
    DeterministicProcess
    Seasonality
    Fourier
    CalendarTimeTrend

    Examples
    --------
    >>> from statsmodels.datasets import sunspots
    >>> from statsmodels.tsa.deterministic import TimeTrend
    >>> data = sunspots.load_pandas().data
    >>> trend_gen = TimeTrend(True, 3)
    >>> trend_gen.in_sample(data.index)
    rw   rx   r   Nc                 ó&   •— t         ‰| �  ||«       y r,   )Úsuperr|   )r   rw   rx   Ú	__class__s      €r   r|   zTimeTrend.__init__ÿ   s   ø€ Ü‰Ñ˜ 5Õ)r   r‚   c                 óV   — |j                  d«      }d}d|v rd}nd|v rd} | ||¬«      S )aY  
        Create a TimeTrend from a string description.

        Provided for compatibility with common string names.

        Parameters
        ----------
        trend : {"n", "c", "t", "ct", "ctt"}
            The string representation of the time trend. The terms are:

            * "n": No trend terms
            * "c": A constant only
            * "t": Linear time trend only
            * "ct": A constant and a time trend
            * "ctt": A constant, a time trend and a quadratic time trend

        Returns
        -------
        TimeTrend
            The TimeTrend instance.
        Úcr   ÚttrB   Útr>   ©rw   rx   ©Ú
startswith)Úclsr‚   rw   rx   s       r   Úfrom_stringzTimeTrend.from_string  s>   € ð. ×#Ñ# CÓ(ˆØˆØ�5‰=Ø‰EØ�E‰\ØˆEÙ˜H¨EÔ2Ð2r   r   c                 ó  — | j                  |«      }|j                  d   }t        j                  d|dz   t        j                  ¬«      d d …d f   }| j                  |«      }t        j                  || j                  |¬«      S ©Nr   r>   r�   ©r‰   r   )	r;   rH   rR   rU   Údoubler•   r6   ro   rŒ   )r   r   r\   r�   r”   s        r   r#   zTimeTrend.in_sample!  si   € ð × Ñ  Ó'ˆØ�{‰{˜1‰~ˆÜ�y‰y˜˜D 1™H¬B¯I©IÔ6²q¸$°wÑ?ˆØ—‘ Ó%ˆÜ�|‰|˜E¨4¯=©=ÀÔFÐFr   r%   r&   c                 ó:  — | j                  |«      }|j                  d   }| j                  |||«      }t        j                  |dz   ||z   dz   t        j
                  ¬«      d d …d f   }| j                  |«      }t        j                  || j                  |¬«      S r¯   )
r;   rH   r]   rR   rU   r±   r•   r6   ro   rŒ   )r   r%   r   r&   r\   Úfcast_indexr�   r”   s           r   r(   zTimeTrend.out_of_sample+  s†   € ð × Ñ  Ó'ˆØ�{‰{˜1‰~ˆØ×(Ñ(¨°°~ÓFˆÜ�y‰y˜ ™ 4¨%¡<°!Ñ#3¼2¿9¹9ÔEÂaÈÀgÑNˆØ—‘ Ó%ˆÜ�|‰|˜E¨4¯=©=ÀÔLÐLr   .c                 ó2   — | j                   | j                  fS r,   )rz   r{   r   s    r   r0   zTimeTrend._eq_attr9  s   € à�~‰~˜tŸ{™{Ð*Ð*r   r�   r,   )r.   rj   rk   rl   rn   rp   r|   Úclassmethodrq   r­   r   r   r#   r
   r   r   r6   r7   ro   r(   r	   rm   rr   r0   Ú__classcell__©r¤   s   @r   r¡   r¡   ä   s1  ø„ ññ4* ð *°Sð *Àõ *ð ð3 ð 3¨ò 3ó ð3ñ< Ð×)Ñ)×1Ñ1Ó2ðGØ˜8 HÑ-¨r¯x©xÐ7Ñ8ðGà	�‰òGó 3ðGñ Ð×-Ñ-×5Ñ5Ó6ð
 8<ñ	MàðMð �X˜hÑ'¨¯©Ð1Ñ2ðMð ! ¨(Ñ!3Ñ4ð	Mð
 
�‰òMó 7ðMð ð+˜% ¨# Ñ.ò +ó ô+r   r¡   c            
       ó  — e Zd ZdZdZddededdfd„Zedefd„«       Zedefd	„«       Z	e
d
eee   ej                  ej                   f   dd fd„«       Zedeedf   fd„«       Zdefd„Zedee   fd„«       Z eej4                  j                  «      d
eee   ej6                  f   dej8                  fd„«       Z eej:                  j                  «      	 dded
eee   ej6                  f   deee      dej8                  fd„«       Zy)ÚSeasonalitya   
    Seasonal dummy deterministic terms

    Parameters
    ----------
    period : int
        The length of a full cycle. Must be >= 2.
    initial_period : int
        The seasonal index of the first observation. 1-indexed so must
        be in {1, 2, ..., period}.

    See Also
    --------
    DeterministicProcess
    TimeTrend
    Fourier
    CalendarSeasonality

    Examples
    --------
    Solar data has an 11-year cycle

    >>> from statsmodels.datasets import sunspots
    >>> from statsmodels.tsa.deterministic import Seasonality
    >>> data = sunspots.load_pandas().data
    >>> seas_gen = Seasonality(11)
    >>> seas_gen.in_sample(data.index)

    To start at a season other than 1

    >>> seas_gen = Seasonality(11, initial_period=4)
    >>> seas_gen.in_sample(data.index)
    TÚperiodÚinitial_periodr   Nc                 óÀ   — t        |d«      | _        t        |d«      | _        |dk  rt        d«      ‚d| j                  cxk  r|k  st        d«      ‚ t        d«      ‚y )Nrº   r»   rB   zperiod must be >= 2r>   z-initial_period must be in {1, 2, ..., period})r   Ú_periodÚ_initial_periodrI   )r   rº   r»   s      r   r|   zSeasonality.__init__c  sm   € Ü(¨°Ó:ˆŒÜ0ØÐ,ó 
ˆÔð �AŠ:ÜÐ2Ó3Ð3Ø�D×(Ñ(Ô2¨FÒ2ÜÐLÓMÐMð 3ÜÐLÓMÐMð 3r   c                 ó   — | j                   S )zThe period of the seasonality©r½   r   s    r   rº   zSeasonality.periodm  ó   € ð �|‰|Ðr   c                 ó   — | j                   S )z+The seasonal index of the first observation)r¾   r   s    r   r»   zSeasonality.initial_periodr  s   € ð ×#Ñ#Ð#r   r   c                 óH  — | j                  |«      }t        |t        j                  «      r|j                  }nJt        |t        j
                  «      r%|j                  r|j                  n|j                  }nt        d«      ‚|€t        d«      ‚t        |«      } | |¬«      S )aF  
        Construct a seasonality directly from an index using its frequency.

        Parameters
        ----------
        index : {DatetimeIndex, PeriodIndex}
            An index with its frequency (`freq`) set.

        Returns
        -------
        Seasonality
            The initialized Seasonality instance.
        z,index must be a DatetimeIndex or PeriodIndexz+index must have a freq or inferred_freq set)rº   )
r;   r5   r6   rJ   rA   rL   Úinferred_freqr9   rI   r   )r¬   r   rA   rº   s       r   Ú
from_indexzSeasonality.from_indexw  s‚   € ð" —‘ Ó&ˆÜ�eœRŸ^™^Ô,Ø—:‘:‰DÜ˜œr×/Ñ/Ô0Ø!&§¢�5—:’:°×1DÑ1D‰DäÐJÓKÐKØˆ<ÜÐJÓKÐKÜ Ó%ˆÙ˜&Ô!Ð!r   .c                 ó2   — | j                   | j                  fS r,   )r½   r¾   r   s    r   r0   zSeasonality._eq_attr”  s   € à�|‰|˜T×1Ñ1Ð1Ð1r   c                 ó"   — d| j                   › d�S )NzSeasonality(period=rš   rÀ   r   s    r   r*   zSeasonality.__str__˜  s   € Ø$ T§\¡\ N°!Ð4Ð4r   c                 óz   — | j                   }g }t        d|dz   «      D ]  }|j                  d|› d|› d�«       Œ |S )Nr>   ús(r™   rš   )r½   rˆ   r‡   )r   rº   r‰   Úis       r   rŒ   zSeasonality._columns›  sJ   € à—‘ˆØˆÜ�q˜& 1™*Ó%ò 	/ˆAØ�N‰N˜R ˜s ! F 8¨1Ð-Õ.ð	/àˆr   c                 ó.  — | j                  |«      }|j                  d   }| j                  }t        j                  ||f«      }| j
                  dz
  }t        |«      D ]  }||z   |z  }d||d |…|f<   Œ t        j                  || j                  |¬«      S ©Nr   r>   r°   )
r;   rH   r½   rR   r’   r¾   rˆ   r6   ro   rŒ   )r   r   r\   rº   ÚtermÚoffsetrÊ   Úcols           r   r#   zSeasonality.in_sample£  sš   € ð × Ñ  Ó'ˆØ�{‰{˜1‰~ˆØ—‘ˆÜ�x‰x˜˜v˜Ó'ˆØ×%Ñ%¨Ñ)ˆÜ�v“ò 	%ˆAØ�v‘: Ñ'ˆCØ#$ˆD���F�˜C�Ò ð	%ô �|‰|˜D¨$¯-©-¸uÔEÐEr   r%   r&   c                 óZ  — | j                  |«      }| j                  |||«      }|j                  d   }| j                  }t	        j
                  ||f«      }| j                  dz
  }t        |«      D ]  }	||z   |	z   |z  }
d||	d |…|
f<   Œ t        j                  || j                  |¬«      S rÌ   )r;   r]   rH   r½   rR   r’   r¾   rˆ   r6   ro   rŒ   )r   r%   r   r&   r³   r\   rº   rÍ   rÎ   rÊ   Úcol_locs              r   r(   zSeasonality.out_of_sample±  s´   € ð × Ñ  Ó'ˆØ×(Ñ(¨°°~ÓFˆØ�{‰{˜1‰~ˆØ—‘ˆÜ�x‰x˜ ˜Ó(ˆØ×%Ñ%¨Ñ)ˆÜ�v“ò 	)ˆAØ˜f‘} qÑ(¨FÑ2ˆGØ'(ˆD���F�˜GÐ#Ò$ð	)ô �|‰|˜D¨$¯-©-¸{ÔKÐKr   )r>   r,   )r.   rj   rk   rl   r   rp   r|   rm   rº   r»   rµ   r
   r   r   r6   rL   rJ   rÅ   rr   r0   rq   r*   rž   rŒ   r   r   r#   r7   ro   r(   r	   r!   r   r   r¹   r¹   >  sº  „ ñ ðD €IñN˜sð N°Cð NÀó Nð ð˜ò ó ðð ð$ ò $ó ð$ð ð"Ø˜( 8Ñ,¨b×.>Ñ.>ÀÇÁÐNÑOð"à	ò"ó ð"ð8 ð2˜% ¨# Ñ.ò 2ó ð2ð5˜ó 5ð ð˜$˜s™)ò ó ðñ Ð×)Ñ)×1Ñ1Ó2ðFØ˜8 HÑ-¨r¯x©xÐ7Ñ8ðFà	�‰òFó 3ðFñ Ð×-Ñ-×5Ñ5Ó6ð
 8<ñ	LàðLð �X˜hÑ'¨¯©Ð1Ñ2ðLð ! ¨(Ñ!3Ñ4ð	Lð
 
�‰òLó 7ñLr   r¹   c                   ón   — e Zd ZdZdeddfd„Zedefd„«       Zdej                  dej                  fd„Z
y)	ÚFourierDeterministicTermz7Abstract Base Class for all Fourier Deterministic Termsrx   r   Nc                 ó&   — t        |d«      | _        y ©Nr”   )r   r{   )r   rx   s     r   r|   z!FourierDeterministicTerm.__init__Ç  s   € Ü'¨¨wÓ7ˆ�r   c                 ó   — | j                   S )z'The order of the Fourier terms includedr   r   s    r   rx   zFourierDeterministicTerm.orderÊ  r€   r   r�   c                 óš  — dt         j                  z  |j                  t         j                  «      z  }t        j                  |j
                  d   d| j                  z  f«      }t        | j                  «      D ]N  }t        t         j                  t         j                  f«      D ]   \  }} ||dz   |z  «      |d d …d|z  |z   f<   Œ" ŒP |S )NrB   r   r>   )rR   ÚpiÚastyper±   ÚemptyrH   r{   rˆ   Ú	enumerateÚsinÚcos)r   r�   r”   rÊ   ÚjÚfuncs         r   r•   z#FourierDeterministicTerm._get_termsÏ  s«   € Ø”2—5‘5‰y˜4Ÿ;™;¤r§y¡yÓ1Ñ1ˆÜ—‘˜$Ÿ*™* Q™-¨¨T¯[©[©Ð9Ó:ˆÜ�t—{‘{Ó#ò 	;ˆAÜ$¤b§f¡f¬b¯f©fÐ%5Ó6ò ;‘��4Ù&*¨A°©E°T©>Ó&:�’a˜˜Q™ ™�lÒ#ñ;ð	;ð ˆr   )r.   rj   rk   rl   rp   r|   rm   rx   rR   rŸ   r•   r!   r   r   rÓ   rÓ   Ä  sN   „ ÙAð8˜cð 8 dó 8ð ð�sò ó ðð˜rŸz™zð ¨b¯j©jô r   rÓ   c            
       ó²  ‡ — e Zd ZdZdZdedefˆ fd„Zedefd„«       Z	ede
e   fd„«       Z eej                  j                  «      d	eee   ej(                  f   dej*                  fd
„«       Z eej,                  j                  «      	 dded	eee   ej(                  f   deee      dej*                  fd„«       Zedeedf   fd„«       Zdefd„Zˆ xZS )ÚFouriera™  
    Fourier series deterministic terms

    Parameters
    ----------
    period : int
        The length of a full cycle. Must be >= 2.
    order : int
        The number of Fourier components to include. Must be <= 2*period.

    See Also
    --------
    DeterministicProcess
    TimeTrend
    Seasonality
    CalendarFourier

    Notes
    -----
    Both a sine and a cosine term are included for each i=1, ..., order

    .. math::

       f_{i,s,t} & = \sin\left(2 \pi i \times \frac{t}{m} \right)  \\
       f_{i,c,t} & = \cos\left(2 \pi i \times \frac{t}{m} \right)

    where m is the length of the period.

    Examples
    --------
    Solar data has an 11-year cycle

    >>> from statsmodels.datasets import sunspots
    >>> from statsmodels.tsa.deterministic import Fourier
    >>> data = sunspots.load_pandas().data
    >>> fourier_gen = Fourier(11, order=2)
    >>> fourier_gen.in_sample(data.index)
    Frº   rx   c                 ó”   •— t         ‰| �  |«       t        |d«      | _        d| j                  z  | j                  kD  rt        d«      ‚y )Nrº   rB   z2 * order must be <= period)r£   r|   r   r½   r{   rI   )r   rº   rx   r¤   s      €r   r|   zFourier.__init__  sC   ø€ Ü‰Ñ˜ÔÜ! &¨(Ó3ˆŒØˆt�{‰{‰?˜TŸ\™\Ò)ÜÐ:Ó;Ð;ð *r   r   c                 ó   — | j                   S )zThe period of the Fourier termsrÀ   r   s    r   rº   zFourier.period  rÁ   r   c           
      óÒ   — | j                   }t        |«      j                  «       }g }t        d| j                  dz   «      D ]#  }dD ]  }|j                  |› d|› d|› d�«       Œ Œ% |S )Nr>   ©rÜ   rÝ   ú(r™   rš   )r½   r   Ústriprˆ   r{   r‡   )r   rº   Ú
fmt_periodr‰   rÊ   Útyps         r   rŒ   zFourier._columns  su   € à—‘ˆÜ˜F“^×)Ñ)Ó+ˆ
ØˆÜ�q˜$Ÿ+™+¨™/Ó*ò 	;ˆAØ%ò ;�Ø—‘ #  a¨ s¨!¨J¨<°qÐ9Õ:ñ;ð	;ð ˆr   r   c                 óè   — | j                  |«      }|j                  d   }| j                  t        j                  |«      | j
                  z  «      }t        j                  ||| j                  ¬«      S ©Nr   ©r   r‰   )	r;   rH   r•   rR   rU   r½   r6   ro   rŒ   )r   r   r\   r”   s       r   r#   zFourier.in_sample  sW   € ð × Ñ  Ó'ˆØ�{‰{˜1‰~ˆØ—‘¤§	¡	¨$£°$·,±,Ñ >Ó?ˆÜ�|‰|˜E¨¸¿¹ÔFÐFr   r%   r&   c                 ó  — | j                  |«      }| j                  |||«      }|j                  d   }| j                  t	        j
                  |||z   «      | j                  z  «      }t        j                  ||| j                  ¬«      S rë   )
r;   r]   rH   r•   rR   rU   r½   r6   ro   rŒ   )r   r%   r   r&   r³   r\   r”   s          r   r(   zFourier.out_of_sample  sr   € ð × Ñ  Ó'ˆØ×(Ñ(¨°°~ÓFˆØ�{‰{˜1‰~ˆØ—‘¤§	¡	¨$°°u±Ó =ÀÇÁÑ LÓMˆÜ�|‰|˜E¨¸d¿m¹mÔLÐLr   .c                 ó2   — | j                   | j                  fS r,   ©r½   r{   r   s    r   r0   zFourier._eq_attr,  s   € à�|‰|˜TŸ[™[Ð(Ð(r   c                 ó<   — d| j                   › d| j                  › d�S )NzFourier(period=ú, order=rš   rï   r   s    r   r*   zFourier.__str__0  s   € Ø  §¡ ¨h°t·{±{°mÀ1ÐEÐEr   r,   )r.   rj   rk   rl   r   Úfloatrp   r|   rm   rº   rž   rq   rŒ   r   r   r#   r
   r   r   r6   r7   ro   r(   r	   rr   r0   r*   r¶   r·   s   @r   rá   rá   Ø  sX  ø„ ñ%ðL €Ið<˜uð <¨Sõ <ð ð˜ò ó ðð ð˜$˜s™)ò ó ðñ Ð×)Ñ)×1Ñ1Ó2ðGØ˜8 HÑ-¨r¯x©xÐ7Ñ8ðGà	�‰òGó 3ðGñ Ð×-Ñ-×5Ñ5Ó6ð
 8<ñ	
Màð
Mð �X˜hÑ'¨¯©Ð1Ñ2ð
Mð ! ¨(Ñ!3Ñ4ð	
Mð
 
�‰ò
Mó 7ð
Mð ð)˜% ¨# Ñ.ò )ó ð)ðF˜÷ Fr   rá   c            	       ó*  — e Zd ZdZdeddfd„Zedefd„«       Zdee	j                  e	j                  f   dej                  fd„Ze	j                  e	j                  ffde	j                  d	eeeed
f   f   dee	j                  e	j                  f   fd„Zy)ÚCalendarDeterministicTermz4Abstract Base Class for calendar deterministic termsrA   r   Nc                 óˆ   — 	 t        j                  d|d¬«      }|j                  | _        y # t        $ r t	        d«      ‚w xY w)Nz
2020-01-01r>   rC   z freq is not understood by pandas)r6   rM   rA   Ú_freqrI   )r   rA   r   s      r   r|   z"CalendarDeterministicTerm.__init__7  sB   € ð	AÜ—M‘M ,°TÀ1ÔEˆEØŸ™ˆD�JøÜò 	AÜÐ?Ó@Ð@ð	Aús	   ‚), ¬Ac                 ó.   — | j                   j                  S ©z(The frequency of the deterministic terms©rö   Úfreqstrr   s    r   rA   zCalendarDeterministicTerm.freq>  ó   € ð �z‰z×!Ñ!Ð!r   r   c                 óZ  — t        |t        j                  «      r|j                  «       }||j	                  | j
                  «      j                  «       z
  }|j	                  | j
                  «      }|dz   j                  «       |j                  «       z
  }t        |«      t        |«      z  S )Nr>   )r5   r6   rJ   Úto_timestampÚ	to_periodrö   r   )r   r   ÚdeltarØ   Úgaps        r   Ú_compute_ratioz(CalendarDeterministicTerm._compute_ratioC  sƒ   € ô �eœRŸ^™^Ô,Ø×&Ñ&Ó(ˆEØ˜Ÿ™¨¯
©
Ó3×@Ñ@ÓBÑBˆØ�_‰_˜TŸZ™ZÓ(ˆØ�A‰v×#Ñ#Ó%¨¯©Ó(9Ñ9ˆÜ˜‹¤¨#£Ñ.Ð.r   Úallowed.c                 ó®  — t        |t        «      r|f}t        ||«      s‰t        |«      dk(  rd|d   j                  z   }nCdj	                  d„ |d d D «       «      }t        |«      dkD  r|dz  }|d	|d   j                  z   z  }t        | «      j                  › d
|› �}t        |«      ‚t        |t        j                  t        j                  f«      sJ ‚|S )Nr>   za r   z, c              3   ó4   K  — | ]  }|j                   –— Œ y ­wr,   )r.   )Ú.0rg   s     r   ú	<genexpr>z>CalendarDeterministicTerm._check_index_type.<locals>.<genexpr>[  s   è ø€ Ò)K¸¨!¯*­*Ñ)Kùs   ‚r=   rB   r™   z and z! terms can only be computed from )	r5   r-   rQ   r.   r›   r9   r6   rL   rJ   )r   r   r  Úallowed_typesÚmsgs        r   Ú_check_index_typez+CalendarDeterministicTerm._check_index_typeM  s×   € ô �gœtÔ$Ø�jˆGÜ˜% Ô)Ü�7‹|˜qÒ Ø $ w¨q¡z×':Ñ':Ñ :‘à $§	¡	Ñ)K¸gÀcÀr¸lÔ)KÓ K�Ü�w“< !Ò#Ø! SÑ(�MØ ¨7°2©;×+?Ñ+?Ñ!?Ñ?�ä˜“:×&Ñ&Ð'Ð'HØ �/ð#ð ô ˜C“.Ð Ü˜%¤"×"2Ñ"2´B·N±NÐ!CÔDÑDØˆr   )r.   rj   rk   rl   rq   r|   rm   rA   r
   r6   rL   rJ   rR   rŸ   r  r7   r-   rr   r	  r!   r   r   rô   rô   4  sÆ   „ Ù>ðA˜Sð A Tó Að ð"�cò "ó ð"ð/Ø˜2×+Ñ+¨R¯^©^Ð;Ñ<ð/à	�‰ó/ð ×ÑØ�N‰Nð2
ñà�x‰xðð �t˜U 4¨ 9Ñ-Ð-Ñ.ðð 
ˆr×Ñ §¡Ð/Ñ	0ôr   rô   c            
       óœ  ‡ — e Zd ZdZdededdfˆ fd„Zedee   fd„«       Z	 e
ej                  j                  «      deee   ej"                  f   dej$                  fd	„«       Z e
ej&                  j                  «      	 dd
edeee   ej"                  f   deee      dej$                  fd„«       Zedeedf   fd„«       Zdefd„Zˆ xZS )ÚCalendarFouriera…  
    Fourier series deterministic terms based on calendar time

    Parameters
    ----------
    freq : str
        A string convertible to a pandas frequency.
    order : int
        The number of Fourier components to include. Must be <= 2*period.

    See Also
    --------
    DeterministicProcess
    CalendarTimeTrend
    CalendarSeasonality
    Fourier

    Notes
    -----
    Both a sine and a cosine term are included for each i=1, ..., order

    .. math::

       f_{i,s,t} & = \sin\left(2 \pi i \tau_t \right)  \\
       f_{i,c,t} & = \cos\left(2 \pi i \tau_t \right)

    where m is the length of the period and :math:`\tau_t` is the frequency
    normalized time.  For example, when freq is "D" then an observation with
    a timestamp of 12:00:00 would have :math:`\tau_t=0.5`.

    Examples
    --------
    Here we simulate irregularly spaced hourly data and construct the calendar
    Fourier terms for the data.

    >>> import numpy as np
    >>> import pandas as pd
    >>> base = pd.Timestamp("2020-1-1")
    >>> gen = np.random.default_rng()
    >>> gaps = np.cumsum(gen.integers(0, 1800, size=1000))
    >>> times = [base + pd.Timedelta(gap, unit="s") for gap in gaps]
    >>> index = pd.DatetimeIndex(pd.to_datetime(times))

    >>> from statsmodels.tsa.deterministic import CalendarFourier
    >>> cal_fourier_gen = CalendarFourier("D", 2)
    >>> cal_fourier_gen.in_sample(index)
    rA   rx   r   Nc                 ór   •— t         ‰| �  |«       t        j                  | |«       t        |d«      | _        y rÕ   )r£   r|   rÓ   r   r{   )r   rA   rx   r¤   s      €r   r|   zCalendarFourier.__init__™  s.   ø€ Ü‰Ñ˜ÔÜ ×)Ñ)¨$°Ô6Ü'¨¨wÓ7ˆ�r   c           
      ó°   — g }t        d| j                  dz   «      D ]7  }dD ]0  }|j                  |› d|› d| j                  j                  › d�«       Œ2 Œ9 |S )Nr>   rå   ræ   z,freq=rš   )rˆ   r{   r‡   rö   rú   )r   r‰   rÊ   ré   s       r   rŒ   zCalendarFourier._columnsž  si   € àˆÜ�q˜$Ÿ+™+¨™/Ó*ò 	HˆAØ%ò H�Ø—‘ #  a¨ s¨&°·±×1CÑ1CÐ0DÀAÐFÕGñHð	Hð ˆr   r   c                 óÎ   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }t	        j
                  ||| j                  ¬«      S ©Nrì   )r;   r	  r  r•   r6   ro   rŒ   )r   r   Úratior”   s       r   r#   zCalendarFourier.in_sample¦  sY   € ð × Ñ  Ó'ˆØ×&Ñ& uÓ-ˆà×#Ñ# EÓ*ˆØ—‘ Ó&ˆÜ�|‰|˜E¨¸¿¹ÔFÐFr   r%   r&   c                 óL  — | j                  |«      }| j                  |||«      }| j                  |«       t        |t        j
                  t        j                  f«      sJ ‚| j                  |«      }| j                  |«      }t	        j                  ||| j                  ¬«      S r  )r;   r]   r	  r5   r6   rL   rJ   r  r•   ro   rŒ   )r   r%   r   r&   r³   r  r”   s          r   r(   zCalendarFourier.out_of_sample±  s‡   € ð × Ñ  Ó'ˆØ×(Ñ(¨°°~ÓFˆØ×Ñ˜{Ô+Ü˜+¬×(8Ñ(8¼"¿.¹.Ð'IÔJÑJØ×#Ñ# KÓ0ˆØ—‘ Ó&ˆÜ�|‰|˜E¨¸d¿m¹mÔLÐLr   .c                 óF   — | j                   j                  | j                  fS r,   ©rö   rú   r{   r   s    r   r0   zCalendarFourier._eq_attrÀ  s   € à�z‰z×!Ñ! 4§;¡;Ð.Ð.r   c                 óP   — d| j                   j                  › d| j                  › d�S )NzFourier(freq=rñ   rš   r  r   s    r   r*   zCalendarFourier.__str__Ä  s&   € Ø˜tŸz™z×1Ñ1Ð2°(¸4¿;¹;¸-ÀqÐIÐIr   r,   )r.   rj   rk   rl   rq   rp   r|   rm   rž   rŒ   r   r   r#   r
   r   r   r6   r7   ro   r(   r	   rr   r0   r*   r¶   r·   s   @r   r  r  h  s=  ø„ ñ.ð`8˜Sð 8¨ð 8°õ 8ð
 ð˜$˜s™)ò ó ðñ Ð×)Ñ)×1Ñ1Ó2ðGØ˜8 HÑ-¨r¯x©xÐ7Ñ8ðGà	�‰òGó 3ðGñ Ð×-Ñ-×5Ñ5Ó6ð
 8<ñ	MàðMð �X˜hÑ'¨¯©Ð1Ñ2ðMð ! ¨(Ñ!3Ñ4ð	Mð
 
�‰òMó 7ðMð ð/˜% ¨# Ñ.ò /ó ð/ðJ˜÷ Jr   r  c            
       óô  ‡ — e Zd ZdZdZerdddddœdddœd	d	d
œddd
œddddœdœZn ddddœddid	d	dœddddœddddœdd	idddœdœZdededdfˆ fd„Ze	defd„«       Z
e	defd„«       Zdeej                  ej                  f   dej"                  fd„Zdeej                  ej                  f   dej"                  fd„Zdeej                  ej                  f   dej"                  fd „Zdeej                  ej                  f   dej"                  fd!„Zdeej                  ej                  f   dej"                  fd"„Ze	dee   fd#„«       Z eej6                  j                  «      deee   ej<                  f   dej>                  fd$„«       Z eej@                  j                  «      	 d+d%e!deee   ej<                  f   d&e"ee      dej>                  fd'„«       Z e	de#ed(f   fd)„«       Z$defd*„Z%ˆ xZ&S ),ÚCalendarSeasonalitya¾  
    Seasonal dummy deterministic terms based on calendar time

    Parameters
    ----------
    freq : str
        The frequency of the seasonal effect.
    period : str
        The pandas frequency string describing the full period.

    See Also
    --------
    DeterministicProcess
    CalendarTimeTrend
    CalendarFourier
    Seasonality

    Examples
    --------
    Here we simulate irregularly spaced data (in time) and hourly seasonal
    dummies for the data.

    >>> import numpy as np
    >>> import pandas as pd
    >>> base = pd.Timestamp("2020-1-1")
    >>> gen = np.random.default_rng()
    >>> gaps = np.cumsum(gen.integers(0, 1800, size=1000))
    >>> times = [base + pd.Timedelta(gap, unit="s") for gap in gaps]
    >>> index = pd.DatetimeIndex(pd.to_datetime(times))

    >>> from statsmodels.tsa.deterministic import CalendarSeasonality
    >>> cal_seas_gen = CalendarSeasonality("H", "D")
    >>> cal_seas_gen.in_sample(index)
    Té   é   é¨   )ÚBÚDÚhÚHé   ©r  r  r…   )ÚMSÚMé   é   )r   ÚQr!  )ÚWr  r$  ÚAÚY)r  r  r  r  )r   ÚME)r   r(  ÚQEr(  )r(  r)  )r%  r  r$  r&  r'  r)  ÚYErA   rº   r   Nc           	      ó  •— t        «       } |j                  | j                  j                  «       D �cg c]  }t	        |j                  «       «      ‘Œ c}Ž  t        | j                  j                  «       «      }t        |dt        |«      d¬«      }t        |d|d¬«      }|| j                  |   vrt        d|› d|› d�«      ‚t        ‰| �)  |«       || _        | j                  j                  j                  d«      d	   | _        y c c}w )
NrA   F)ÚoptionsÚlowerrº   zThe combination of freq=z and period=z is not supported.ú-r   )ÚsetÚupdateÚ
_supportedÚvaluesrž   Úkeysrr   r   rI   r£   r|   r½   rö   rú   ÚsplitÚ	_freq_str)r   rA   rº   Úfreq_optionsÚvalÚperiod_optionsr¤   s         €r   r|   zCalendarSeasonality.__init__  sü   ø€ Ü!$£ˆØˆ×ÑØ*.¯/©/×*@Ñ*@Ó*BÖC 3Œd�3—8‘8“:ÕÒCñ	
ô ˜tŸ™×3Ñ3Ó5Ó6ˆäØ�&¤%¨Ó"5¸Uô
ˆô Ø�H n¸Eô
ˆð �t—‘ vÑ.Ñ.ÜØ*¨4¨&ð 1Ø ˜Ð!3ð5óð ô 	‰Ñ˜ÔØˆŒØŸ™×+Ñ+×1Ñ1°#Ó6°qÑ9ˆ�ùò# Ds   ´ D	c                 ó.   — | j                   j                  S rø   rù   r   s    r   rA   zCalendarSeasonality.freq  rû   r   c                 ó   — | j                   S )zThe full periodrÀ   r   s    r   rº   zCalendarSeasonality.period  rÁ   r   r   c                 ó‚  — | j                   j                  dv r|j                  d|j                  z  z   S | j                   j                  dk(  r|j                  S t	        j
                  dd¬«      j                  j                  «       }|j                  }|j                  |«      j                  «       st        d«      ‚|S )Nr  r  r  z2000-1-1é
   )r@   z=freq is B but index contains days that are not business days.)
rö   rú   ÚhourÚ	dayofweekr6   Úbdate_rangeÚuniqueÚisinrS   rI   )r   r   ÚbdaysÚlocs       r   Ú_weekly_to_locz"CalendarSeasonality._weekly_to_loc"  sŸ   € ð �:‰:×Ñ Ñ+Ø—:‘:  U§_¡_Ñ 4Ñ4Ð4Ø�Z‰Z×Ñ 3Ò&Ø—?‘?Ð"ä—N‘N :°rÔ:×DÑD×KÑKÓMˆEØ—/‘/ˆCØ—8‘8˜E“?×&Ñ&Ô(Ü ðóð ð ˆJr   c                 ó   — |j                   S r,   )r=  r"   s     r   Ú_daily_to_locz!CalendarSeasonality._daily_to_loc3  s   € ð �z‰zÐr   c                 ó&   — |j                   dz
  dz  S )Nr>   r…   )Úmonthr"   s     r   Ú_quarterly_to_locz%CalendarSeasonality._quarterly_to_loc8  s   € ð —‘˜a‘ 1Ñ$Ð$r   c                 ón   — | j                   j                  dv r|j                  dz
  S |j                  dz
  S )N)r!  r(  r   r>   )rö   rú   rH  Úquarterr"   s     r   Ú_annual_to_locz"CalendarSeasonality._annual_to_loc=  s4   € ð �:‰:×ÑÐ!2Ñ2Ø—;‘; ‘?Ð"à—=‘= 1Ñ$Ð$r   c                 óÎ  — | j                   dk(  r| j                  |«      }nR| j                   dk(  r| j                  |«      }n1| j                   dv r| j                  |«      }n| j	                  |«      }| j
                  | j                      | j                     }t        j                  |j                  d   |f«      }d|t        j                  |j                  d   «      |f<   |S )Nr  r%  )r$  r)  r   r>   )r½   rF  rD  rI  rL  r1  r5  rR   r’   rH   rU   )r   r   r�   Ú
full_cycler”   s        r   r•   zCalendarSeasonality._get_termsE  sÃ   € ð �<‰<˜3ÒØ×%Ñ% eÓ,‰DØ�\‰\˜SÒ Ø×&Ñ& uÓ-‰DØ�\‰\˜[Ñ(Ø×)Ñ)¨%Ó0‰Dà×&Ñ& uÓ-ˆDØ—_‘_ T§\¡\Ñ2°4·>±>ÑBˆ
Ü—‘˜$Ÿ*™* Q™-¨Ð4Ó5ˆØ01ˆŒb�i‰i˜Ÿ
™
 1™Ó&¨Ð,Ñ-Øˆr   c           
      óÚ   — g }| j                   | j                     | j                     }t        |«      D ]4  }|j	                  d| j                  › d|dz   › d| j                  › d�«       Œ6 |S )NrÉ   ú=r>   z	, period=rš   )r1  r½   r5  rˆ   r‡   )r   r‰   ÚcountrÊ   s       r   rŒ   zCalendarSeasonality._columnsU  sm   € àˆØ—‘ §¡Ñ-¨d¯n©nÑ=ˆÜ�u“ò 	ˆAØ�N‰NØ�T—^‘^Ð$ A a¨!¡e W¨I°d·l±l°^À1ÐEõð	ð ˆr   c                 ó¬   — | j                  |«      }| j                  |«      }| j                  |«      }t        j                  ||| j
                  ¬«      S r  )r;   r	  r•   r6   ro   rŒ   )r   r   r”   s      r   r#   zCalendarSeasonality.in_sample_  sI   € ð × Ñ  Ó'ˆØ×&Ñ& uÓ-ˆØ—‘ Ó&ˆä�|‰|˜E¨¸¿¹ÔFÐFr   r%   r&   c                 ó*  — | j                  |«      }| j                  |||«      }| j                  |«       t        |t        j
                  t        j                  f«      sJ ‚| j                  |«      }t	        j                  ||| j                  ¬«      S r  )
r;   r]   r	  r5   r6   rL   rJ   r•   ro   rŒ   )r   r%   r   r&   r³   r”   s         r   r(   z!CalendarSeasonality.out_of_samplei  sw   € ð × Ñ  Ó'ˆØ×(Ñ(¨°°~ÓFˆØ×Ñ˜{Ô+Ü˜+¬×(8Ñ(8¼"¿.¹.Ð'IÔJÑJØ—‘ Ó,ˆÜ�|‰|˜E¨¸d¿m¹mÔLÐLr   .c                 ó2   — | j                   | j                  fS r,   )r½   r5  r   s    r   r0   zCalendarSeasonality._eq_attrw  s   € à�|‰|˜TŸ^™^Ð+Ð+r   c                 ó"   — d| j                   › d�S )NzSeasonal(freq=rš   )r5  r   s    r   r*   zCalendarSeasonality.__str__{  s   € Ø §¡Ð/¨qÐ1Ð1r   r,   )'r.   rj   rk   rl   r   r   r1  rq   r|   rm   rA   rº   r
   r6   rL   rJ   rR   rŸ   rD  rF  rI  rL  r•   rž   rŒ   r   r   r#   r   r   r7   ro   r(   rp   r	   rr   r0   r*   r¶   r·   s   @r   r  r  È  sØ  ø„ ñ!ðF €Iñ à˜q v°FÑ;Ø Ñ#Ø Ñ"Ø Ñ$Ø ¨Ñ,ñ
‰
ð ˜q vÑ.Ø�r�Ø Ñ#Ø "¨AÑ.Ø "¨AÑ.Ø˜�)Ø 1Ñ%ñ
ˆ
ð:˜Sð :¨#ð :°$õ :ð, ð"�cò "ó ð"ð ð˜ò ó ððØ˜2×+Ñ+¨R¯^©^Ð;Ñ<ðà	�‰óð"Ø˜2×+Ñ+¨R¯^©^Ð;Ñ<ðà	�‰óð
%Ø˜2×+Ñ+¨R¯^©^Ð;Ñ<ð%à	�‰ó%ð
%Ø˜2×+Ñ+¨R¯^©^Ð;Ñ<ð%à	�‰ó%ðØ˜2×+Ñ+¨R¯^©^Ð;Ñ<ðà	�‰óð  ð˜$˜s™)ò ó ðñ Ð×)Ñ)×1Ñ1Ó2ðGØ˜8 HÑ-¨r¯x©xÐ7Ñ8ðGà	�‰òGó 3ðGñ Ð×-Ñ-×5Ñ5Ó6ð
 8<ñ	MàðMð �X˜hÑ'¨¯©Ð1Ñ2ðMð ! ¨(Ñ!3Ñ4ð	Mð
 
�‰òMó 7ðMð ð,˜% ¨# Ñ.ò ,ó ð,ð2˜÷ 2r   r  c                   ód  ‡ — e Zd ZdZ	 	 dddœdedededeeee	f      ddf
ˆ fd	„Z
edee   fd
„«       Ze	 ddededeeee	f      dd fd„«       Zdeej                   ej"                  f   dej&                  dej(                  fd„Z eej0                  j                  «      deee   ej6                  f   dej(                  fd„«       Z eej8                  j                  «      	 ddedeee   ej6                  f   deee      dej(                  fd„«       Zedeedf   fd„«       Zdefd„Zˆ xZ S )ÚCalendarTimeTrenda
  
    Constant and time trend determinstic terms based on calendar time

    Parameters
    ----------
    freq : str
        A string convertible to a pandas frequency.
    constant : bool
        Flag indicating whether a constant should be included.
    order : int
        A non-negative int containing the powers to include (1, 2, ..., order).
    base_period : {str, pd.Timestamp}, default None
        The base period to use when computing the time stamps. This value is
        treated as 1 and so all other time indices are defined as the number
        of periods since or before this time stamp. If not provided, defaults
        to pandas base period for a PeriodIndex.

    See Also
    --------
    DeterministicProcess
    CalendarFourier
    CalendarSeasonality
    TimeTrend

    Notes
    -----
    The time stamp, :math:`\tau_t`, is the number of periods that have elapsed
    since the base_period. :math:`\tau_t` may be fractional.

    Examples
    --------
    Here we simulate irregularly spaced hourly data and construct the calendar
    time trend terms for the data.

    >>> import numpy as np
    >>> import pandas as pd
    >>> base = pd.Timestamp("2020-1-1")
    >>> gen = np.random.default_rng()
    >>> gaps = np.cumsum(gen.integers(0, 1800, size=1000))
    >>> times = [base + pd.Timedelta(gap, unit="s") for gap in gaps]
    >>> index = pd.DatetimeIndex(pd.to_datetime(times))

    >>> from statsmodels.tsa.deterministic import CalendarTimeTrend
    >>> cal_trend_gen = CalendarTimeTrend("D", True, order=1)
    >>> cal_trend_gen.in_sample(index)

    Next, we normalize using the first time stamp

    >>> cal_trend_gen = CalendarTimeTrend("D", True, order=1,
    ...                                   base_period=index[0])
    >>> cal_trend_gen.in_sample(index)
    N©Úbase_periodrA   rw   rx   rY  r   c                ó  •— t         ‰| �  |«       t        j                  | ||¬«       d| _        |�6t	        j
                  |d| j                  ¬«      }|j                  d   | _        |€d | _	        y t        |«      | _	        y )Nr©   r   r>   r?   )
r£   r|   rv   Ú_ref_i8r6   rK   rö   Úasi8rq   Ú_base_period)r   rA   rw   rx   rY  Úprr¤   s         €r   r|   zCalendarTimeTrend.__init__µ  sy   ø€ ô 	‰Ñ˜ÔÜ"×+Ñ+Ø˜8¨5ð 	,ô 	
ð ˆŒØÐ"Ü—‘ °a¸d¿j¹jÔIˆBØŸ7™7 1™:ˆDŒLØ$/Ð$7˜DˆÕ¼SÀÓ=MˆÕr   c                 ó   — | j                   S )zThe base period)r]  r   s    r   rY  zCalendarTimeTrend.base_periodÇ  s   € ð × Ñ Ð r   r‚   c                 óZ   — |j                  d«      }d}d|v rd}nd|v rd} | ||||¬«      S )a  
        Create a TimeTrend from a string description.

        Provided for compatibility with common string names.

        Parameters
        ----------
        freq : str
            A string convertible to a pandas frequency.
        trend : {"n", "c", "t", "ct", "ctt"}
            The string representation of the time trend. The terms are:

            * "n": No trend terms
            * "c": A constant only
            * "t": Linear time trend only
            * "ct": A constant and a time trend
            * "ctt": A constant, a time trend and a quadratic time trend
        base_period : {str, pd.Timestamp}, default None
            The base period to use when computing the time stamps. This value
            is treated as 1 and so all other time indices are defined as the
            number of periods since or before this time stamp. If not
            provided, defaults to pandas base period for a PeriodIndex.

        Returns
        -------
        TimeTrend
            The TimeTrend instance.
        r¦   r   r§   rB   r¨   r>   rX  rª   )r¬   rA   r‚   rY  rw   rx   s         r   r­   zCalendarTimeTrend.from_stringÌ  sC   € ðF ×#Ñ# CÓ(ˆØˆØ�5‰=Ø‰EØ�E‰\ØˆEÙ�4˜ 5°kÔBÐBr   r   r  c                 ód  — t        |t        j                  «      r|j                  | j                  «      }|j
                  }|| j                  z
  dz   }|j                  t        j                  «      |z   }|d d …d f   }| j                  |«      }t        j                  || j                  |¬«      S )Nr>   r°   )r5   r6   rL   rþ   rö   r\  r[  rÙ   rR   r±   r•   ro   rŒ   )r   r   r  Úindex_i8Útimer”   s         r   Ú_termszCalendarTimeTrend._terms÷  s‹   € ô �eœR×-Ñ-Ô.Ø—O‘O D§J¡JÓ/ˆEà—:‘:ˆØ˜dŸl™lÑ*¨QÑ.ˆØ�‰œrŸy™yÓ)¨EÑ1ˆØ’A�t�G‰}ˆØ—‘ Ó%ˆÜ�|‰|˜E¨4¯=©=ÀÔFÐFr   c                 óŒ   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  ||«      S r,   )r;   r	  r  rd  )r   r   r  s      r   r#   zCalendarTimeTrend.in_sample  sE   € ð × Ñ  Ó'ˆØ×&Ñ& uÓ-ˆØ×#Ñ# EÓ*ˆØ�{‰{˜5 %Ó(Ð(r   r%   r&   c                 ó
  — | j                  |«      }| j                  |||«      }| j                  |«       t        |t        j
                  t        j                  f«      sJ ‚| j                  |«      }| j                  ||«      S r,   )	r;   r]   r	  r5   r6   rJ   rL   r  rd  )r   r%   r   r&   r³   r  s         r   r(   zCalendarTimeTrend.out_of_sample  ss   € ð × Ñ  Ó'ˆØ×(Ñ(¨°°~ÓFˆØ×Ñ˜{Ô+Ü˜+¬¯©¼×8HÑ8HÐ'IÔJÑJØ×#Ñ# KÓ0ˆØ�{‰{˜;¨Ó.Ð.r   .c                 ó˜   — | j                   | j                  | j                  j                  f}| j                  �|| j                  fz  }|S r,   )rz   r{   rö   rú   r]  )r   Úattrs     r   r0   zCalendarTimeTrend._eq_attr  sL   € ð �N‰NØ�K‰KØ�J‰J×Ñð&
ˆð
 ×ÑÐ(Ø�T×&Ñ&Ð(Ñ(ˆDØˆr   c                 óº   — t         j                  | «      }d|d d z   d| j                  j                  › d�z   }| j                  �|d d d| j                  › d�z   }|S )NÚCalendarr=   z, freq=rš   zbase_period=)rv   r*   rö   rú   r]  )r   Úvalues     r   r*   zCalendarTimeTrend.__str__&  sl   € Ü*×2Ñ2°4Ó8ˆØ˜U 3 B˜ZÑ'¨G°D·J±J×4FÑ4FÐ3GÀqÐ*IÑIˆØ×ÑÐ(Ø˜#˜2�J <°×0AÑ0AÐ/BÀ!Ð!DÑDˆEØˆr   r�   r,   )!r.   rj   rk   rl   rq   rn   rp   r	   r
   ÚDateLiker|   rm   rY  rµ   r­   r6   rL   rJ   rR   rŸ   ro   rd  r   r   r#   r   r   r7   r(   rr   r0   r*   r¶   r·   s   @r   rW  rW    s  ø„ ñ3ðp Øð	Nð 7;òNàðNð ðNð ð	Nð ˜e C¨ MÑ2Ñ3ðNð 
õNð$ ð!˜X c™]ò !ó ð!ð ð
 7;ñ	(Càð(Cð ð(Cð ˜e C¨ MÑ2Ñ3ð	(Cð
 
ò(Có ð(CðTGØ˜2×+Ñ+¨R¯^©^Ð;Ñ<ðGØEGÇZÁZðGà	�‰óGñ Ð×)Ñ)×1Ñ1Ó2ð)Ø˜8 HÑ-¨r¯x©xÐ7Ñ8ð)à	�‰ò)ó 3ð)ñ Ð×-Ñ-×5Ñ5Ó6ð
 8<ñ	/àð/ð �X˜hÑ'¨¯©Ð1Ñ2ð/ð ! ¨(Ñ!3Ñ4ð	/ð
 
�‰ò/ó 7ð/ð ð˜% ¨# Ñ.ò ó ðð˜÷ r   rW  c                   ó|  — e Zd ZdZddddddddœdeee   ej                  f   de	ee
ef      d	ed
edededee   defd„Zedej                  fd„«       Zedee   fd„«       Zdeej&                     deej&                     fd„Zdej&                  dej&                  fd„Z eej.                  j                  «      dej&                  fd„«       Z eej0                  j                  «      	 d%dede	eee   ej                  f      dej&                  fd„«       Zdej2                  deej4                  ej6                  f   fd„Zdededej&                  fd„Zdej2                  dej2                  dej&                  fd„Zded edej2                  fd!„Z dee!e"ef   dee!e"ef   dej&                  fd"„Z#d&d#„Z$d$„ Z%y)'ÚDeterministicProcessa”  
    Container class for deterministic terms.

    Directly supports constants, time trends, and either seasonal dummies or
    fourier terms for a single cycle. Additional deterministic terms beyond
    the set that can be directly initialized through the constructor can be
    added.

    Parameters
    ----------
    index : {Sequence[Hashable], pd.Index}
        The index of the process. Should usually be the "in-sample" index when
        used in forecasting applications.
    period : {float, int}, default None
        The period of the seasonal or fourier components. Must be an int for
        seasonal dummies. If not provided, freq is read from index if
        available.
    constant : bool, default False
        Whether to include a constant.
    order : int, default 0
        The order of the tim trend to include. For example, 2 will include
        both linear and quadratic terms. 0 exclude time trend terms.
    seasonal : bool = False
        Whether to include seasonal dummies
    fourier : int = 0
        The order of the fourier terms to included.
    additional_terms : Sequence[DeterministicTerm]
        A sequence of additional deterministic terms to include in the process.
    drop : bool, default False
        A flag indicating to check for perfect collinearity and to drop any
        linearly dependent terms.

    See Also
    --------
    TimeTrend
    Seasonality
    Fourier
    CalendarTimeTrend
    CalendarSeasonality
    CalendarFourier

    Notes
    -----
    See the notebook `Deterministic Terms in Time Series Models
    <../examples/notebooks/generated/deterministics.html>`__ for an overview.

    Examples
    --------
    >>> from statsmodels.tsa.deterministic import DeterministicProcess
    >>> from pandas import date_range
    >>> index = date_range("2000-1-1", freq="M", periods=240)

    First a determinstic process with a constant and quadratic time trend.

    >>> dp = DeterministicProcess(index, constant=True, order=2)
    >>> dp.in_sample().head(3)
                const  trend  trend_squared
    2000-01-31    1.0    1.0            1.0
    2000-02-29    1.0    2.0            4.0
    2000-03-31    1.0    3.0            9.0

    Seasonal dummies are included by setting seasonal to True.

    >>> dp = DeterministicProcess(index, constant=True, seasonal=True)
    >>> dp.in_sample().iloc[:3,:5]
                const  s(2,12)  s(3,12)  s(4,12)  s(5,12)
    2000-01-31    1.0      0.0      0.0      0.0      0.0
    2000-02-29    1.0      1.0      0.0      0.0      0.0
    2000-03-31    1.0      0.0      1.0      0.0      0.0

    Fourier components can be used to alternatively capture seasonal patterns,

    >>> dp = DeterministicProcess(index, constant=True, fourier=2)
    >>> dp.in_sample().head(3)
                const  sin(1,12)  cos(1,12)  sin(2,12)  cos(2,12)
    2000-01-31    1.0   0.000000   1.000000   0.000000        1.0
    2000-02-29    1.0   0.500000   0.866025   0.866025        0.5
    2000-03-31    1.0   0.866025   0.500000   0.866025       -0.5

    Multiple Seasonalities can be captured using additional terms.

    >>> from statsmodels.tsa.deterministic import Fourier
    >>> index = date_range("2000-1-1", freq="D", periods=5000)
    >>> fourier = Fourier(period=365.25, order=1)
    >>> dp = DeterministicProcess(index, period=3, constant=True,
    ...                           seasonal=True, additional_terms=[fourier])
    >>> dp.in_sample().head(3)
                const  s(2,3)  s(3,3)  sin(1,365.25)  cos(1,365.25)
    2000-01-01    1.0     0.0     0.0       0.000000       1.000000
    2000-01-02    1.0     1.0     0.0       0.017202       0.999852
    2000-01-03    1.0     0.0     1.0       0.034398       0.999408
    NFr   r!   ©rº   rw   rx   ÚseasonalÚfourierÚadditional_termsÚdropr   rº   rw   rx   rp  rq  rr  rs  c                ó  — t        |t        j                  «      st        j                  |«      }|| _        g | _        d| _        d | _        | j                  «        t        |dd¬«      }t        |d«      x| _
        }t        |d«      | _        t        |d«      x| _        }t        |d«      | _        t        |«      }d | _        t        |d	«      | _        || _        |s|r%| j                  j'                  t)        ||«      «       |r|rt+        d
«      ‚|s|r |€|€t-        | j                  «      x| _        }|r1t        |d«      }| j                  j'                  t1        |«      «       n8|r6t        |d«      }|€J ‚| j                  j'                  t3        ||¬«      «       |D ]Q  }	t        |	t4        «      st7        d«      ‚|	| j                  vr| j                  j'                  |	«       ŒHt+        d«      ‚ || _        d | _        y )NFrº   T)Úoptionalrw   rx   rp  rq  rs  zÂseasonal and fourier can be initialized through the constructor since these will be necessarily perfectly collinear. Instead, you can pass additional components using the additional_terms input.)rx   zJAll additional terms must be instances of subsclasses of DeterministicTermzuOne or more terms in additional_terms has been added through the parameters of the constructor. Terms must be unique.)r5   r6   r7   Ú_indexÚ_deterministic_termsÚ_extendableÚ_index_freqÚ_validate_indexr   r   rz   r   r{   Ú	_seasonalÚ_fourierrr   Ú_cached_in_sampleÚ_dropÚ_additional_termsr‡   r¡   rI   r   r½   r¹   rá   r   r9   Ú_retain_cols)
r   r   rº   rw   rx   rp  rq  rr  rs  rÍ   s
             r   r|   zDeterministicProcess.__init__Œ  sñ  € ô ˜%¤§¡Ô*Ü—H‘H˜U“OˆEØˆŒØ=?ˆÔ!Ø ˆÔØˆÔØ×ÑÔÜ˜F H°tÔ<ˆÜ$-¨h¸
Ó$CÐCˆŒ˜Ü'¨¨wÓ7ˆŒÜ$-¨h¸
Ó$CÐCˆŒ˜Ü)¨'°9Ó=ˆŒÜ Ð!1Ó2ÐØ!%ˆÔÜ˜t VÓ,ˆŒ
Ø!1ˆÔÙ‘uØ×%Ñ%×,Ñ,¬Y°xÀÓ-GÔHÙ™ÜðHóð ñ
 ™ V ^Øˆ~Ü(6°t×7GÑ7GÓ(HÐH�”˜vÙÜ& v¨xÓ8ˆFØ×%Ñ%×,Ñ,¬[¸Ó-@ÕAÙÜ ¨Ó1ˆFØÐ%Ñ%Ø×%Ñ%×,Ñ,¬W°VÀ7Ô-KÔLØ$ò 	ˆDÜ˜dÔ$5Ô6Üð+óð ð ˜4×4Ñ4Ñ4Ø×)Ñ)×0Ñ0°Õ6ä ð!óð ð	ð ˆŒØ6:ˆÕr   r   c                 ó   — | j                   S )zThe index of the process)rv  r   s    r   r   zDeterministicProcess.indexË  r€   r   c                 ó   — | j                   S )z/The deterministic terms included in the process)rw  r   s    r   r”   zDeterministicProcess.termsÐ  s   € ð ×(Ñ(Ð(r   r”   c                 ó¾  — d }| j                   D ])  }t        |t        t        f«      sŒ|xs |j                  }Œ+ |€Pd}|D ]I  }||j
                  d   k(  j                  «       |j
                  d   dk7  z  }|xs |j                  «       }ŒK |}t        | j                   «      D ]6  \  }}|j                  }|r|r||   j
                  d d …dd …f   ||<   |xs |}Œ8 |S )NFr   r>   )
rw  r5   r¡   rW  rw   ÚilocrS   ÚanyrÛ   r   )	r   r”   Ú	has_constÚdtermrÍ   Ú	const_colÚ
drop_firstrÊ   r   s	            r   Ú_adjust_dummiesz$DeterministicProcess._adjust_dummiesÕ  só   € Ø$(ˆ	Ø×.Ñ.ò 	8ˆEÜ˜%¤)Ô->Ð!?Õ@Ø%Ò7¨¯©‘	ð	8ð ÐØˆIØò 9�Ø! T§Y¡Y¨q¡\Ñ1×6Ñ6Ó8¸D¿I¹IÀa¹LÈAÑ<MÑN�	Ø%Ò8¨¯©«‘	ð9ð ˆ
Ü! $×";Ñ";Ó<ò 	0‰HˆAˆuØ—~‘~ˆHÙ™Jà  ™8Ÿ=™=ª¨A©B¨Ñ/��a‘Ø#Ò/ x‰Jð	0ð ˆr   c                 óT  — t        j                  |dk(  d¬«      }t        j                  |«      r|j                  d d …| f   }|j	                  d¬«      |j                  d¬«      k(  }t        j                  |«      dkD  r'||j                  «       z  }|j                  d d …| f   }|S )Nr   ©Úaxisr>   )rR   rS   r…  rC  ÚmaxÚminÚsumÚ
duplicated)r   r”   Úall_zeroÚis_constantÚsurplus_constss        r   Ú_remove_zeros_onesz'DeterministicProcess._remove_zeros_onesè  s”   € Ü—6‘6˜% 1™*¨1Ô-ˆÜ�6‰6�(ÔØ—I‘Iša ( ˜lÑ+ˆEØ—i‘i Q�iÓ'¨5¯9©9¸!¨9Ó+<Ñ<ˆÜ�6‰6�+Ó Ò"à(¨;×+AÑ+AÓ+CÑCˆNØ—I‘Iša . Ð0Ñ1ˆEØˆr   c                 óØ  — | j                   �| j                   S | j                  }| j                  s9t        j                  t        j                  |j                  d   df«      |¬«      S g }| j                  D ]"  }|j                  |j                  |«      «       Œ$ | j                  |«      }t        j                  |d¬«      }| j                  |«      }| j                  �rot        |«      }t        |dd¬«      }|d   }|d   }t        j                   t        j"                  |«      «      }	|	d   |j                  d   z  t        j$                  t&        «      j(                  z  }
t+        t        j,                  |	|
kD  «      «      }|j.                  |z  }dg}d}t1        d|j                  d   «      D ]O  }t
        j2                  j5                  |d |dz   …d |dz   …f   «      }||kD  r|j                  |«       |}||k(  sŒO n t7        |«      |k(  r|j8                  d d …|f   }n)|j8                  d d …t        j:                  |d | «      f   }|j<                  | _        || _         |S )	Nr   r:   r>   rŒ  ÚrT)ÚmodeÚpivotingr=   ) r}  rv  rw  r6   ro   rR   rÚ   rH   r‡   r#   rŠ  Úconcatr•  r~  r   r   ÚabsÚdiagÚfinforò   Úepsrp   r�  ÚTrˆ   ÚlinalgÚmatrix_rankrQ   r„  Úsortr‰   r€  )r   r   Ú	raw_termsrÍ   r”   Ú	terms_arrÚresr—  ÚpÚabs_diagÚtolÚrankÚrpxÚkeepÚ	last_rankrÊ   Ú	curr_ranks                    r   r#   zDeterministicProcess.in_sampleó  s!  € à×!Ñ!Ð-Ø×)Ñ)Ð)Ø—‘ˆØ×(Ò(Ü—<‘<¤§¡¨%¯+©+°a©.¸!Ð)<Ó =ÀUÔKÐKØˆ	Ø×-Ñ-ò 	4ˆDØ×Ñ˜TŸ^™^¨EÓ2Õ3ð	4ð ×(Ñ(¨Ó3ˆ	Ü Ÿi™i¨	¸Ô:ˆØ×'Ñ'¨Ó.ˆØ�:‹:Ü  ›ˆIÜ�Y S°4Ô8ˆCØ�A‘ˆAØ�B‘ˆAÜ—v‘vœbŸg™g a›jÓ)ˆHØ˜1‘+ 	§¡°Ñ 2Ñ2´R·X±X¼e³_×5HÑ5HÑHˆCÜ”r—v‘v˜h¨™nÓ-Ó.ˆDØ—#‘#˜	‘/ˆCØ�3ˆDØˆIä˜1˜iŸo™o¨aÑ0Ó1ò �ÜŸI™I×1Ñ1°#°g¸¸A¹°g¸wÀÀQÁ¸wÐ6FÑ2GÓH�	Ø˜yÒ(Ø—K‘K ”NØ )�IØ Ó$Ùðô �4‹y˜DÒ ØŸ
™
¢1 d 7Ñ+‘àŸ
™
¢1¤b§g¡g¨a°°¨hÓ&7Ð#7Ñ8�Ø!ŸM™MˆÔØ!&ˆÔØˆr   r%   r&   c                 ó,  — t        |d«      }| j                  r| j                  €| j                  «        | j                  }| j
                  s9t        j                  t        j                  |j                  d   df«      |¬«      S g }| j
                  D ]$  }|j                  |j                  |||«      «       Œ& t        j                  |d¬«      }| j                  €J ‚|j                  d   t        | j                  «      k7  r|| j                     }|S )Nr%   r   r:   r>   rŒ  )r   r~  r€  r#   rv  rw  r6   ro   rR   rÚ   rH   r‡   r(   rš  rQ   )r   r%   r&   r   r£  rÍ   r”   s          r   r(   z"DeterministicProcess.out_of_sample  sí   € ô " %¨Ó1ˆØ�:Š:˜$×+Ñ+Ð3Ø�N‰NÔØ—‘ˆØ×(Ò(Ü—<‘<¤§¡¨%¯+©+°a©.¸!Ð)<Ó =ÀUÔKÐKØˆ	Ø×-Ñ-ò 	OˆDØ×Ñ˜T×/Ñ/°°u¸nÓMÕNð	Oä Ÿi™i¨	¸Ô:ˆØ× Ñ Ð,Ñ,Ø�;‰;�q‰>œS ×!2Ñ!2Ó3Ò3Ø˜$×+Ñ+Ñ,ˆEØˆr   rO   c                 óâ   — | j                   }t        |t        j                  «      r%t        j                  |d   ||j
                  ¬«      S t        j                  |d   || j                  ¬«      S )Nr   )ÚendrA   )rZ   r°  rA   )rv  r5   r6   rJ   rK   rA   rM   ry  )r   rO   r   s      r   Ú_extend_time_indexz'DeterministicProcess._extend_time_index1  sS   € ð —‘ˆÜ�eœRŸ^™^Ô,Ü—?‘? 5¨¡8°¸E¿J¹JÔGÐGÜ�}‰} 5¨¡8°¸D×<LÑ<LÔMÐMr   rZ   c                 ó„  — | j                   }t        |«      }t        |t        j                  «      s|sJ ‚||d   k  rt        t        «      ‚t        |t        j                  «      r|j                  }n3t        |«      dkD  r#t        j                  |«      j                  «       nd}|dk7  r||d   z
  |z  dk7  rt        d|› d�«      ‚|r*t        j                  t        j                  ||«      «      }nt        j                  |||¬«      }|d   | j                   d   k  r!| j                  «       }|j                  |   }|S |d   | j                   d   kD  rw|d   |z   }|d   |k7  rGt        j                  |||¬«      }	| j!                  |	j"                  d   |	¬«      }
|
j                  |   S | j!                  |j"                  d   |¬«      S || j                   d   k  }||   }||    }| j                  «       j                  |   }| j!                  |j"                  d   |¬«      }t        j$                  ||gd¬	«      S )
Nr   r>   z,The step of the index is not 1 (actual step=zM). start must be in the sequence that would have been generated by the index.rE   r=   )r&   )r%   r&   rŒ  )rv  r   r5   r6   rN   rI   ÚSTART_BEFORE_INDEX_ERRrF   rQ   rR   rT   rŽ  r7   rU   r#   rC  r(   rH   rš  )r   rZ   rO   r   Úis_int64_indexÚidx_stepÚnew_idxr#   Ú
next_valueÚtmpÚoosÚin_sample_locÚin_sample_idxÚout_of_sample_idxÚin_sample_exogÚoos_exogs                   r   Ú_range_from_range_indexz,DeterministicProcess._range_from_range_index:  s!  € Ø—‘ˆÜ% eÓ,ˆÜ˜%¤§¡Ô/±>ÑAØ�5˜‘8ÒÜÔ3Ó4Ð4Ü�eœRŸ]™]Ô+Ø—z‘z‰Hä/2°5«z¸Aª~”r—w‘w˜u“~×)Ñ)Ô+À1ˆHØ�qŠ=˜u u¨Q¡xÑ/°8Ñ;ÀÒAÜØ>¸x¸jð I*ð *óð ñ
 Ü—h‘hœrŸy™y¨°Ó5Ó6‰Gä—m‘m E¨4°hÔ?ˆGØ�2‰;˜$Ÿ+™+ b™/Ò)àŸ™Ó(ˆIØ!Ÿ™ gÑ.ˆIØÐØ�Q‰Z˜$Ÿ+™+ b™/Ò)à˜r™ XÑ-ˆJØ�q‰z˜ZÒ'Ü—m‘m J°¸8ÔD�Ø×(Ñ(¨¯©°1©ÀcÐ(ÓJ�Ø—w‘w˜wÑ'Ð'Ø×%Ñ% g§m¡m°AÑ&6ÀwÐ%ÓOÐOà 4§;¡;¨r¡?Ñ2ˆØ Ñ.ˆØ# ] NÑ3ÐØŸ™Ó)×-Ñ-¨mÑ<ˆØ×%Ñ%Ø#×)Ñ)¨!Ñ,Ð=Nð &ó 
ˆô �y‰y˜.¨(Ð3¸!Ô<Ð<r   c                 óÖ  — | j                   }t        | j                   t        j                  «      rlt        |t        j                  «      r|j                  | j                  ¬«      }t        |t        j                  «      r|j                  | j                  ¬«      }||d   k  rt        t        «      ‚|| j                   d   k  r| j                  «       j                  || S | j                  |«      }|||d   kD     }| j                  |j                  d   |«      }||d   k\  r|j                  || S t        j                  | j                  «       |gd¬«      }|j                  || S )N)rA   r   r=   rŒ  )rv  r5   r6   rJ   Ú	Timestamprþ   ry  rI   r³  r#   rC  r±  r(   rH   rš  )r   rZ   rO   r   r¶  Úoos_idxr¹  Úboths           r   Ú_range_from_time_indexz+DeterministicProcess._range_from_time_indexe  s1  € ð —‘ˆÜ�d—k‘k¤2§>¡>Ô2Ü˜%¤§¡Ô.ØŸ™¨T×-=Ñ-=˜Ó>�Ü˜$¤§¡Ô-Ø—~‘~¨4×+;Ñ+;�~Ó<�Ø�5˜‘8ÒÜÔ3Ó4Ð4Ø�4—;‘;˜r‘?Ò"Ø—>‘>Ó#×'Ñ'¨¨dÐ3Ð3Ø×)Ñ)¨$Ó/ˆØ˜' E¨"¡IÑ-Ñ.ˆØ× Ñ  §¡¨qÑ!1°7Ó;ˆØ�G˜A‘JÒØ—7‘7˜5 Ð&Ð&Ü�y‰y˜$Ÿ.™.Ó*¨CÐ0°qÔ9ˆØ�x‰x˜˜dÐ#Ð#r   rk  r1   c                 óæ  — |dk  rt        |› d�«      ‚|| j                  j                  d   k  r| j                  |   S || j                  j                  d   dz
  z
  dz   }| j                  }t        | j                  t        j
                  «      r8t	        j                  |d   | j                  |¬«      }|d   j                  «       S t	        j                  |d   | j                  |¬«      }|d   S )Nr   z must be non-negative.r>   r=   rC   )
rI   rv  rH   r5   r6   rJ   rK   ry  rý   rM   )r   rk  r1   Úadd_periodsr   r^  Údrs          r   Ú_int_to_timestampz&DeterministicProcess._int_to_timestampz  sÞ   € Ø�1Š9Ü ˜vÐ%;Ð<Ó=Ð=Ø�4—;‘;×$Ñ$ QÑ'Ò'Ø—;‘;˜uÑ%Ð%Ø˜tŸ{™{×0Ñ0°Ñ3°aÑ7Ñ8¸1Ñ<ˆØ—‘ˆÜ�d—k‘k¤2§>¡>Ô2Ü—‘Ø�b‘	 × 0Ñ 0¸+ôˆBð �b‘6×&Ñ&Ó(Ð(Ü�]‰]Ø�"‰I˜D×,Ñ,°kô
ˆð �"‰vˆr   c                 óH  — | j                   st        d«      ‚t        | j                  «      t        j
                  fv st        | j                  «      r/t        |d«      }t        |d«      }|dz  }| j                  ||«      S t        |t        t        j                  f«      r| j                  |d«      }nt	        j                  |«      }t        |t        t        j                  f«      r| j                  |d«      }nt	        j                  |«      }| j                  ||«      S )aç  
        Deterministic terms spanning a range of observations

        Parameters
        ----------
        start : {int, str, dt.datetime, pd.Timestamp, np.datetime64}
            The first observation.
        stop : {int, str, dt.datetime, pd.Timestamp, np.datetime64}
            The final observation. Inclusive to match most prediction
            function in statsmodels.

        Returns
        -------
        DataFrame
            A data frame of deterministic terms
        zýThe index in the deterministic process does not support extension. Only PeriodIndex, DatetimeIndex with a frequency, RangeIndex, and integral Indexes that start at 0 and have only unit differences can be extended when producing out-of-sample forecasts.
rZ   rO   r>   )rx  r9   r-   rv  r6   rN   r   r   r¿  r5   rp   rR   ÚintegerrÈ  rÁ  rÄ  )r   rZ   rO   s      r   rˆ   zDeterministicProcess.range‹  sñ   € ð* ×ÒÜðóð ô �—‘Ó¤§¡Ð 0Ñ0´LÀÇÁÔ4MÜ% e¨WÓ5ˆEÜ$ T¨6Ó2ˆDà�A‰IˆDØ×/Ñ/°°tÓ<Ð<Ü�eœc¤2§:¡:Ð.Ô/Ø×*Ñ*¨5°'Ó:‰Eä—L‘L Ó'ˆEÜ�dœS¤"§*¡*Ð-Ô.Ø×)Ñ)¨$°Ó7‰Dä—<‘< Ó%ˆDØ×*Ñ*¨5°$Ó7Ð7r   c                 óˆ  — t        | j                  t        j                  «      r#| j                  j                  | _        d| _        y t        | j                  t        j                  «      rG| j                  j                  xs | j                  j                  | _        | j
                  d u| _        y t        | j                  t        j                  «      rd| _        y t        | j                  «      rO| j                  d   dk(  xr5 t        j                  t        j                  | j                  «      dk(  «      | _        y y )NTr   r>   )r5   rv  r6   rJ   rA   ry  rx  rL   rÄ   rN   r   rR   rS   rT   r   s    r   rz  z$DeterministicProcess._validate_index¸  sÛ   € Ü�d—k‘k¤2§>¡>Ô2Ø#Ÿ{™{×/Ñ/ˆDÔØ#ˆDÕÜ˜Ÿ™¤R×%5Ñ%5Ô6Ø#Ÿ{™{×/Ñ/ÒL°4·;±;×3LÑ3LˆDÔØ#×/Ñ/°tÐ;ˆDÕÜ˜Ÿ™¤R§]¡]Ô3Ø#ˆDÕÜ˜$Ÿ+™+Ô&Ø#Ÿ{™{¨1™~°Ñ2ò  ´r·v±vÜ—‘˜Ÿ™Ó$¨Ñ)ó8ˆDÕð 'r   c           
      ó´   — t        || j                  | j                  | j                  | j                  | j
                  | j                  | j                  ¬«      S )ap  
        Create an identical determinstic process with a different index

        Parameters
        ----------
        index : index_like
            An index-like object. If not an index, it is converted to an
            index.

        Returns
        -------
        DeterministicProcess
            The deterministic process applied to a different index
        ro  )rn  r½   rz   r{   r{  r|  r  r~  r"   s     r   ÚapplyzDeterministicProcess.applyÆ  sG   € ô $ØØ—<‘<Ø—^‘^Ø—+‘+Ø—^‘^Ø—M‘MØ!×3Ñ3Ø—‘ô	
ð 		
r   r,   )r   N)&r.   rj   rk   rl   r
   r   r   r6   r7   r	   rò   rp   rn   r   r|   rm   r   rž   r”   ro   rŠ  r•  r   r#   r(   rÁ  rL   rJ   r±  r¿  rÄ  rq   rÈ  ÚIntLikerl  rˆ   rz  rÍ  r!   r   r   rn  rn  .  s’  „ ñ[ðB /3ØØØØØ8:Øò=;à�X˜hÑ'¨¯©Ð1Ñ2ð=;ð ˜˜u c˜zÑ*Ñ+ð	=;ð
 ð=;ð ð=;ð ð=;ð ð=;ð #Ð#4Ñ5ð=;ð ó=;ð~ ð�r—x‘xò ó ðð ð)�tÐ-Ñ.ò )ó ð)ð T¨"¯,©,Ñ%7ð ¸DÀÇÁÑ<Nó ð&	¨¯©ð 	¸¿¹ó 	ñ Ð×)Ñ)×1Ñ1Ó2ð&˜2Ÿ<™<ò &ó 3ð&ñP Ð×-Ñ-×5Ñ5Ó6ð IMñàðð !  x°Ñ'9¸2¿8¹8Ð'CÑ!DÑEðð 
�‰ò	ó 7ðð(Nà�l‰lðNð 
ˆr×Ñ §¡Ð/Ñ	0óNð)=¨Sð )=¸ð )=ÀÇÁó )=ðV$Ø—\‘\ð$Ø)+¯©ð$à	�‰ó$ð* sð °#ð ¸"¿,¹,ó ð"+8à�W˜h¨Ð+Ñ,ð+8ð �G˜X sÐ*Ñ+ð+8ð 
�‰ó	+8óZó
r   rn  )1Ústatsmodels.compat.pandasr   r   r   r   Úabcr   r   ÚdatetimeÚdtÚtypingr	   r
   Úcollections.abcr   r   ÚnumpyrR   Úpandasr6   Úscipy.linalgr   Ústatsmodels.iolib.summaryr   Ústatsmodels.tools.validationr   r   r   r   Ústatsmodels.tsa.tsatoolsr   rÁ  Ú
datetime64rl  rp   rÊ  rÎ  r³  r   rv   r¡   r¹   rÓ   rá   rô   r  r  rW  rn  r!   r   r   ú<module>rÜ     s%  ð÷ó ÷ $Û ß "ß .ã Û Ý å ,÷ó õ 4à�—‘˜bŸl™l¨B¯M©MÐ9Ñ:€Ø
��R—Z‘Z�Ñ
 €ðÐ ôK˜ô Kô\/)Ð!2°Cô /)ôdW+Ð*ô W+ôtCLÐ#ô CLôLÐ0°#ô ô(YFÐ&ô YFôx1Ð 1°3ô 1ôh]JÐ/Ð1Iô ]Jô@t2Ð3ô t2ônlÐ1Ð3Mô l÷^p
ò p
r   