
    %g                        d dl Zd dlZd dlZd dlmZ d dlmZ dej                  de
dej                  fdZdefdZ G d	 d
      Z G d d      Z G d d      Z G d d      Z G d d      Z G d d      Z G d d      Z G d d      Zy)    N)Prophet)warm_start_paramsts_datan_test_rowsreturnc                     | j                  | j                  d   |z
        }| j                  |      }|j                         |j                         fS )Nr   )headshapetailreset_index)r   r   traintests       W/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/prophet/tests/test_prophet.pytrain_test_splitr      sI    LLq)K78E<<$D 0 0 222    c                 ^    t        j                  t        j                  | |z
  dz              S )N   )npsqrtmean)predictionstargetss     r   rmser      s$    77277K'1a7899r   c                      e Zd Zej                  j                  dddgddg      d        Zej                  j                  ddd	gddg      d
        Zej                  j                  dddgddg      d        Zej                  j                  d        Z
d Zd Zej                  j                  d        Zd Zd Zd Zd Zy)TestProphetFitPredictDefaultzscaling,expected)absmaxgHzG%@)minmaxg(\B&@r   r   )idsc                    d}t        ||      \  }}t        ||      }|j                  |d       t        j                  j                  d       |j                  |d      }	|j                  |	      }	t        |	d   |d	         }
|
t        j                  |d
      k(  s J dj                  |j                               y )N   stan_backendscalingCIseed>4Finclude_historyyhatyg?backend: {}r   r   fitr   randomr&   make_future_dataframepredictr   pytestapproxformatr"   selfdaily_univariate_tsbackendr#   expected	test_daysr   r   
forecasterfutureress              r   test_fit_predictz-TestProphetFitPredictDefault.test_fit_predict   s     	&':IFt'7C
u:.
		y!11)U1S##F+6&>49-fmmHc22aM4H4HI`I`4aa2r   )r   gq=
ףp7@)r   gGz&@c                    d}t        ||      \  }}t        ||      }|j                  |dd       t        j                  j                  d       |j                  |d      }	|j                  |	      }	t        |	d	   |d
         }
|
t        j                  |d      k(  s J dj                  |j                               y )Nr    r!   Newtonr$   )	algorithmr&   r'   Fr(   r*   r+   {Gz?r,   r-   r5   s              r   test_fit_predict_newtonz4TestProphetFitPredictDefault.test_fit_predict_newton*   s     	&':IFt'7C
uzB
		y!11)U1S##F+6&>49-fmmHd33b]5I5I*JaJa5bb3r   )r   gq=
ף_@)r   g\W@c                    d}t        ||      \  }}t        ||      }|j                  |d       t        j                  j                  d       |j                  |d      }	|j                  |	      }	t        |	d   |d	         }
|
t        j                  |d
      k(  s J dj                  |j                               y )Nr    r!   r$   r%   r'   Fr(   r*   r+   rB   r,   r-   )r6   large_numbers_tsr8   r#   r9   r:   r   r   r;   r<   r=   s              r   test_fit_predict_large_numbersz;TestProphetFitPredictDefault.test_fit_predict_large_numbers:   s     	&'7Ct'7C
u:.
		y!11)U1S##F+6&>49-fmmHd33b]5I5I*JaJa5bb3r   c                 n   d}t        ||      \  }}t        d|      }|j                  |ddd       t        j                  j                  d       |j                  |d	      }|j                  |      }t        |d
   |d         }d|cxk  rdk  s"n J dj                  |j                               y )Nr      mcmc_samplesr"   r$      F)r&   chainsshow_progressr'   r(   r*   r+         r,   )r   r   r.   r   r/   r&   r0   r1   r   r4   r"   )	r6   r7   r8   r:   r   r   r;   r<   r=   s	            r   test_fit_predict_samplingz6TestProphetFitPredictDefault.test_fit_predict_samplingJ   s    	&':IFt#GD
u:auM
		y!11)U1S##F+6&>49-S3M 4 4Z5L5L MMr   c                     d}t        ||      \  }}t        dd|      }|j                  |       |j                  |d      }|j	                  |      }|j
                  |j
                  k(  j                         sJ y )Nr    Fweekly_seasonalityyearly_seasonalityr"   r(   )r   r   r.   r0   r1   dsall)	r6   r7   r8   r:   r   _r;   r<   results	            r   test_fit_predict_no_seasonsz8TestProphetFitPredictDefault.test_fit_predict_no_seasonsX   s{    	#$7Cq$W

 	u11)U1S##F+		VYY&++---r   c                     |j                   d   dz  }t        ||      \  }}t        d|      }|j                  |       |j	                  |       |j
                  J |j                  dk(  sJ y )Nr   r   n_changepointsr"   r
   r   r   r.   r1   paramsr\   r6   r7   r8   r:   r   r<   r;   s          r    test_fit_predict_no_changepointsz=TestProphetFitPredictDefault.test_fit_predict_no_changepointsc   st    '--a0A5	()<iHvAGD
u6"  ,,,((A---r   c                     |j                   d   dz  }t        ||      \  }}t        dd|      }|j                  |d       |j	                  |       |j
                  J |j                  dk(  sJ y )Nr   r   d   )r\   rJ   r"   FrM   r]   r_   s          r   %test_fit_predict_no_changepoints_mcmczBTestProphetFitPredictDefault.test_fit_predict_no_changepoints_mcmcl   sz    '--a0A5	()<iHvACgV
uE26"  ,,,((A---r   c                    ||d   dk  |d   dkD  z     }t        j                  d|d   i      }t        dg|      }|}|j                  |       |j	                  |       |j
                  J |j                  dk(  sJ y )NrU   z
2013-01-01z
2014-01-01
2013-06-06)changepointsr"      )pd	DataFramer   r.   r1   r^   r\   )r6   r7   r8   r   r<   prophetr;   s          r   #test_fit_changepoint_not_in_historyz@TestProphetFitPredictDefault.test_fit_changepoint_not_in_historyv   s    # &5:Md:SVb:bc
 t%8%>?@~GL
u6"  ,,,((A---r   c                    t        ||j                  d   dz        \  }}|j                         }|dxx   dz  cc<   t        j                  ||g      }t        |      }|j                  |       |j                  |       y)z
        The underlying model should still fit successfully when there are duplicate dates in the history.
        The model essentially sees this as multiple observations for the same time value, and fits the parameters
        accordingly.
        r   r   r+   
   r"   N)r   r
   copyri   concatr   r.   r1   )r6   r7   r8   r   r   repeated_obsr;   s          r   test_fit_predict_duplicatesz8TestProphetFitPredictDefault.test_fit_predict_duplicates   sz     '':<O<U<UVW<X\]<]^tzz|SR		5,/0'2
u4 r   c                     dD ]k  }t        ||j                  d   dz        \  }}||d<   t        |      }|j                  |       |j	                  |      }|d   j
                  d   |k(  rkJ  y)	zy
        When the training data history is constant, Prophet should predict the same value for all future dates.
        )r      r   r   r+   ro   r*   N)r   r
   r   r.   r1   values)r6   r7   r8   constantr   r   r;   rX   s           r   !test_fit_predict_constant_historyz>TestProphetFitPredictDefault.test_fit_predict_constant_history   s       	9H*+>@S@Y@YZ[@\`a@abKE4!E#J g6JNN5!''-F&>((,888	9r   c                   	 |j                   d   dz  }t        ||      \  }}dD ]c  }t        ||      }|j                  |       |j	                  |      }g d	t        	fd|j                  j                         D              rcJ  y )Nr   r   )r   Funcertainty_samplesr"   )rU   trendadditive_termsmultiplicative_termsweeklyr*   c              3   &   K   | ]  }|v  
 y w)N ).0colexpected_colss     r   	<genexpr>zUTestProphetFitPredictDefault.test_fit_predict_uncertainty_disabled.<locals>.<genexpr>   s     Osm+Os   )r
   r   r   r.   r1   rV   columnstolist)
r6   r7   r8   r:   r   r<   uncertaintyr;   rX   r   s
            @r   %test_fit_predict_uncertainty_disabledzBTestProphetFitPredictDefault.test_fit_predict_uncertainty_disabled   s    '--a0A5	()<iHv% 	PK [wWJNN5!''/FM Ov~~7L7L7NOOOO	Pr   N)__name__
__module____qualname__r2   markparametrizer>   rC   rF   slowrP   rY   r`   rd   rl   rs   ry   r   r   r   r   r   r      s   [[	-.x   

b

b [[	-.x   
	c
	c [[	./x   
	c
	c [[N N	.. [[. .
.!
9Pr   r   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)TestProphetDataPrepc                 (   t        ||j                  d   dz        \  }}t        |      }|j                  |d      }d|v sJ |d   j	                         dk(  sJ |d   j                         dk(  sJ d	|v sJ |d	   j                         dk(  sJ y
)zDTest that the columns 't' and 'y_scaled' are added to the dataframe.r   r   ro   Tinitialize_scalest              ?y_scaledN)r   r
   r   setup_dataframeminmax)r6   r7   r8   r   rW   mhistorys          r   test_setup_dataframez(TestProphetDataPrep.test_setup_dataframe   s    #$79L9R9RST9UYZ9Z[q)##ET#Bg~~s|!S(((s|!S(((W$$$z"&&(C///r   c                    t        ||j                  d   dz        \  }}t        j                  t	        |j                  d         D cg c]  }d c}      |_        |j
                  j                  dd       t        |      }|j                  |       t        j                  |j                  d   j                  |d   j                  k(        sJ yc c}w )	zWTest case where 'ds' exists as an index name and column. Prophet should use the column.r   r   z
1970-01-01rU   T)inplacero   N)r   r
   ri   to_datetimerangeindexrenamer   r.   r   rV   r   rw   )r6   r7   r8   r   rW   r   s         r   test_setup_dataframe_ds_columnz2TestProphetDataPrep.test_setup_dataframe_ds_column   s    #$79L9R9RST9UYZ9Z[qnnE%++a.<Q%Rql%RS4.)	evvaiio,,d0B0BBCCC	 &Ss   		Cc                    t        ||j                  d   dz        \  }}d|d<   d|d<   t        d|      }|j                  |       |j                  sJ d|j
                  v sJ |j
                  d	   d   d
k(  sJ dD ]  }||xx   dz  cc<    t        d|      }|j                  |       |j
                  d	   d   t        j                  d
d      k(  sJ y);Test the scaling of y with logistic growth and a floor/cap.r   r         $@floor      T@caplogisticgrowthr"   r   r   r+   r   r   rB   N)r   r
   r   r.   logistic_floorr   r2   r3   r6   r7   r8   r   rW   r   r   m2s           r   test_logistic_floorz'TestProphetDataPrep.test_logistic_floor   s    #$79L9R9RST9UYZ9Z[qge:G<	e!))###yy$Q'3...( 	C#J$J	JW=
uzz*%a(FMM#t,DDDDr   c                    t        ||j                  d   dz        \  }}d|d<   d|d<   t        d|d	      }|j                  |       |j                  sJ d|j
                  v sJ |j
                  d
   j                         dkD  sJ |j
                  d
   j                         dk  sJ dD ]  }||xx   dz  cc<    t        d|d	      }|j                  |       |j
                  d
   j                         dkD  sJ |j
                  d
   j                         dk  sJ |j
                  d
   j                         |j
                  d
   j                         k(  sJ y)r   r   r   r   r   r   r   r   r   r   r"   r#   r   r   r   r   N)	r   r
   r   r.   r   r   r   r   r   r   s           r   test_logistic_floor_minmaxz.TestProphetDataPrep.test_logistic_floor_minmax   sZ   #$79L9R9RST9UYZ9Z[qge:GXN	e!))###yy$((*S000yy$((*S000( 	C#J$J	JWhO
uzz*%))+c111zz*%))+c111zz*%**,		*0E0J0J0LLLLr   c                    |j                  d      }t        |      }|j                  |       |j                  ddd      }t	        j
                  g d      }t        |      dk(  sJ t        j                  |d   j                  |j                  k(        sJ |j                  dd	d      }t	        j
                  g d
      }t        |      dk(  sJ t        j                  |d   j                  |j                  k(        sJ y )N   ro      DFperiodsfreqr)   )z
2013-04-26z
2013-04-27z
2013-04-28rU   M)z
2013-04-30z
2013-05-31z
2013-06-30)
r	   r   r.   r0   ri   DatetimeIndexlenr   rV   rw   )r6   r7   r8   r   r;   r<   corrects          r   test_make_future_dataframez.TestProphetDataPrep.test_make_future_dataframe   s    #((2'2
u11!#W\1]""#MN6{avvfTl))W^^;<<<11!#W\1]""#MN6{avvfTl))W^^;<<<r   c                 T   |j                  d      j                         }t        j                  |j                  |j                  d      j                  df<   t        |      }|j                  |       |j                  ddd      }t        |      |j                  d	   dz   k(  sJ y )
Nr   rn   r+   ro   r   r   Tr   r   )r	   rp   r   nanlocsampler   r   r.   r0   r   r
   )r6   r7   r8   r   r;   r<   s         r   *test_make_future_dataframe_include_historyz>TestProphetDataPrep.test_make_future_dataframe_include_history   s    #((277913		%,,r"((#-.'2
u11!#W[1\6{ekk!nq0000r   N)	r   r   r   r   r   r   r   r   r   r   r   r   r   r      s#    0DE M(=	1r   r   c                       e Zd Zd Zd Zd Zej                  j                  dddg      d        Z	d Z
d	 Zd
 Zd Zd Zd Zd Zy)TestProphetTrendComponentc                     d}t        j                  t        |      5  t        d|       d d d        y # 1 sw Y   y xY w)Nz<Parameter "growth" should be "linear", "logistic" or "flat".)matchrx   r   )r2   raises
ValueErrorr   )r6   r8   msgs      r   test_invalid_growth_inputz3TestProphetTrendComponent.test_invalid_growth_input  s4    O]]:S1 	=:G<	= 	= 	=s   5>c                 @   t        d|      }|j                  d d j                         }|d   j                         |d<   |j	                  |d      }|j                  |      \  }}|t        j                  d      k(  sJ |t        j                  d	      k(  sJ |j                  |      \  }}|t        j                  d
d      k(  sJ |t        j                  dd      k(  sJ |j                  |      \  }}|dk(  sJ |t        j                  dd      k(  sJ y )Nr   r     r+   r   Tr   gNOi?g?g!u ?-C6?absgA贿r   gȫZo'?
r   ilocrp   r   r   linear_growth_initr2   r3   logistic_growth_initflat_growth_initr6   r7   r8   modelr   r   kr   s           r   test_growth_initz*TestProphetTrendComponent.test_growth_init  s   z@#((#.335Sz~~'e'''F''01FMM),,,,FMM),,,,))'21FMM(5555FMM+48888%%g.1AvvFMM*$7777r   c                 B   t        d|d      }|j                  d d j                         }|d   j                         |d<   |j	                  |d      }|j                  |      \  }}|t        j                  d	      k(  sJ |t        j                  d
      k(  sJ |j                  |      \  }}|t        j                  dd      k(  sJ |t        j                  dd      k(  sJ |j                  |      \  }}|dk(  sJ |t        j                  dd      k(  sJ y )Nr   r   r   r   r+   r   Tr   gl/?g|)?gU6?r   r   g|5Z?r   gv?r   r   s           r   test_growth_init_minmaxz1TestProphetTrendComponent.test_growth_init_minmax  s   zR#((#.335Sz~~'e'''F''01FMM),,,,FMM),,,,))'21FMM(5555FMM(5555%%g.1AvvFMM*$7777r   r#   r   r   c                    t        d||      }t        j                  ddt        j                  z  d      }t	        j
                  t	        j                  ddd      d	t        j                  |d
z        z   d      }|j                  |       |j                  dd      }|j                  |      }|j                  d   d   }|j                  d   d   }	|	t        j                  d      k(  sJ |d   j                         d   t        j                  ||j                  z  |j                   z         k(  sJ t        j"                  ||j                  z  |j                   z         dk(  sJ y )Nflatr   r   r   8   z
2020-01-01d)startr   r   r           @)rU   r+   rn   Tr(   r   )r   r   r   r   r}   g      >@)r   r   linspacepiri   rj   
date_rangesinr.   r0   r1   r^   r2   r3   uniquey_scaley_minround)
r6   r8   r#   r   xr   r<   fcstm_r   s
             r   test_flat_growthz*TestProphetTrendComponent.test_flat_growth.  s.   6IKK1ruu9e,,,mm,CP"&&S/)
 	
g((T(Byy XXc]4 HHSM$FMM#&&&&G}##%a(FMM2		>QWW:T,UUUUxxaii17723t;;;r   c                    t        |      }t        j                  d      }d}d}t        j                  dg      }t        j                  dg      }|j	                  |||||      }t        j                  g d      }	||	z
  j                         dk(  sJ |d	d  }|	d	d  }	|j	                  |||||      }||	z
  j                         dk(  sJ y )
Nro         &@r   r         ?   )r   r          @      @      @      @g      @r   g      #@r   g      )@r      )r   r   arangearraypiecewise_linearsum)
r6   r8   r   r   r   r   deltaschangepoint_tsr+   y_trues
             r   test_piecewise_linearz/TestProphetTrendComponent.test_piecewise_linearA  s    W-IIdO3%1#""1faNCSTF
!S(((abE""1faNCF
!S(((r   c                    t        |      }t        j                  d      }t        j                  d      dz  }d}d}t        j                  dg      }t        j                  dg      }|j                  ||||||      }	t        j                  g d	      }
|d
d  }|
d
d  }
|d
d  }|j                  ||||||      }	|	|
z
  j                         t        j                  dd      k(  sJ y )Nro   r      rn   r   r   r   r   )r   gaA
>@g;_!@g*U-#@gi #@g)k{#@gXP#@g`obH#@gH#@gSh#@gk|&#@r   r   h㈵>r   )	r   r   r   onesr   piecewise_logisticr   r2   r3   )r6   r8   r   r   r   r   r   r   r  r+   r  s              r   test_piecewise_logisticz1TestProphetTrendComponent.test_piecewise_logisticS  s    W-IIdOggbkB3%1#$$QVQ>J
  abE!"g$$QVQ>JF
!V]]3D%AAAAr   c                 8   t        |      }t        j                  d      }d}|j                  ||      }t        j                  dgdz        }||z
  j                         dk(  sJ |dd  }|dd  }|j                  ||      }||z
  j                         dk(  sJ y )Nro   r  r   r   r   )r   r   r   
flat_trendr   r   )r6   r8   r   r   r   r+   r  s          r   test_flat_trendz)TestProphetTrendComponent.test_flat_trendt  s    W-IIbMQ"3%"*%F
!S(((abEQ"F
!S(((r   c                    t        ||j                  d   dz        \  }}t        |      }|j                  |d      }||_        |j                          |j                  }|j                  d   |j                  k(  sJ t        |j                        dk(  sJ |j                         dkD  sJ t        t        j                  d|j                  d   z              }|j                         |d   j                  |   k  sJ y	)
z_
        By default, Prophet uses the first 80% of the history to detect changepoints.
        r   r   ro   Tr   rh   g?r   N)r   r
   r   r   r   set_changepointschangepoints_tr\   r   r   intr   ceilr   rw   )	r6   r7   r8   r   rW   r   r   cpcp_indxs	            r   test_get_changepointsz/TestProphetTrendComponent.test_get_changepoints  s     $$79L9R9RST9UYZ9Z[q)##ET#B		xx{a.....288}!!!vvx!||bggcGMM!$4456vvx73<..w7777r   c                    t        ||j                  d   dz        \  }}t        d|      }|j                  |d      }||_        |j                          |j                  }|j                  d   |j                  k(  sJ t        |j                        dk(  sJ |j                         dkD  sJ t        t        j                  d|j                  d   z              }|j                         |d   j                  |   k   d	D ]1  }	t        j                   t"              5  t        |	|      }d d d        3 y # 1 sw Y   >xY w)
Nr   r   g?)changepoint_ranger"   Tr   rh   r   )gr   )r   r
   r   r   r   r  r  r\   r   r   r  r   r  r   rw   r2   r   r   )
r6   r7   r8   r   rW   r   r   r  r  out_of_ranges
             r   test_set_changepoint_rangez4TestProphetTrendComponent.test_set_changepoint_range  s/   #$79L9R9RST9UYZ9Z[qc@##ET#B		xx{a.....288}!!!vvx!||bggcGMM!$4456
GCL''00% 	RLz* RlQR R	RR Rs   D88E	c                    t        ||j                  d   dz        \  }}t        d|      }|j                  |d      }||_        |j                          |j                  }|j                  d   dk(  sJ |d   dk(  sJ y )Nr   r   r[   Tr   rh   )r   r
   r   r   r   r  r  )r6   r7   r8   r   rW   r   r   r  s           r   test_get_zero_changepointsz4TestProphetTrendComponent.test_get_zero_changepoints  s    #$79L9R9RST9UYZ9Z[q17;##ET#B		xx{a!uzzr   c                    |j                  d      j                         }t        d|      }|j                  |d      }||_        |j                          |j                  dk(  sJ |j                  }|j                  d   dk(  sJ y )Nru      r[   Tr   r   )	r	   rp   r   r   r   r  r\   r  r
   )r6   r7   r8   r   r   r   r  s          r   test_override_n_changepointsz6TestProphetTrendComponent.test_override_n_changepoints  s    #((,1132G<##ET#B		2%%%xx{b   r   N)r   r   r   r   r   r   r2   r   r   r   r  r	  r  r  r  r  r  r   r   r   r   r     sa    =
8&8& [[Y':;< <<$)$BB
)8 R !r   r   c                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
TestProphetSeasonalComponentc                     t        j                  |d   dd      }t        j                  g d      }t        j                  |d   |z
  dz        t        j                  d      k(  sJ y )NrU   rK   r   )gqo~?grw?g2?g{̿gPq#?gr   r   r   r   fourier_seriesr   r   r   r2   r3   r6   r7   mattrue_valuess       r   test_fourier_series_weeklyz7TestProphetSeasonalComponent.test_fourier_series_weekly  sY    $$%8%>1Ehhcdvvs1v+12fmmC6HHHHr   c                     t        j                  |d   dd      }t        j                  g d      }t        j                  |d   |z
  dz        t        j                  d      k(  sJ y )NrU        v@r   )gsbpk?g$^Pg*Ŏơg-?gNa <=?g=?r   r   r   r!  r#  s       r   test_fourier_series_yearlyz7TestProphetSeasonalComponent.test_fourier_series_yearly  s]    $$%8%>JhhQ
 vvs1v+12fmmC6HHHHr   c                    |j                  d      }t        |      }|j                  dk(  sJ |j                  |       d|j                  v sJ |j                  d   ddddd d	k(  sJ |j                  d
      }t        |      }|j                  |       d|j                  vsJ t        d|      }|j                  |       d|j                  v sJ |j
                  d d dd d f   }t        |      }|j                  |       d|j                  vsJ t        dd|      }|j                  |       |j                  d   ddddd d	k(  sJ y )Nr  ro   autor   rK   r   r   additiveperiodfourier_orderprior_scalemodecondition_name	   T)rS   r"   r   r   )rS   seasonality_prior_scaler"   )r	   r   rS   r.   seasonalitiesr   )r6   r7   r8   r   r   s        r   test_auto_weekly_seasonalityz9TestProphetSeasonalComponent.test_auto_weekly_seasonality  sh   #((,)##v---	e1??***x("-
 
 	
 
 $((+)	eq...t'B	e1??***#((1a0)	eq...q#T[\	!"x("-
 
 	
 
r   c                    t        |      }|j                  dk(  sJ |j                  |       d|j                  v sJ |j                  d   ddddd dk(  sJ |j	                  d	      }t        |      }|j                  |       d|j                  vsJ t        d
|      }|j                  |       d|j                  v sJ t        dd|      }|j                  |       |j                  d   ddddd dk(  sJ y )Nro   r+  yearlyr(  rn   r   r,  r-     T)rT   r"   rK   r   )rT   r4  r"   )r   rT   r.   r5  r	   )r6   r7   r8   r   r   s        r   test_auto_yearly_seasonalityz9TestProphetSeasonalComponent.test_auto_yearly_seasonality  s   )##v---	!"1??***x("-
 
 	
 
 $((-)	eq...t'B	e1??***q#T[\	!"x("-
 
 	
 
r   c                 X   t        |      }|j                  dk(  sJ |j                  |       d|j                  v sJ |j                  d   ddddd dk(  sJ |j	                  d	      }t        |      }|j                  |       d|j                  vsJ t        d
|      }|j                  |       d|j                  v sJ t        dd|      }|j                  |       |j                  d   ddddd dk(  sJ t        |      }|j                  |       d|j                  vsJ y )Nro   r+  dailyrh      r   r,  r-  i  T)daily_seasonalityr"   rK   r   )r>  r4  r"   )r   r>  r.   r5  r	   )r6   r7   subdaily_univariate_tsr8   r   r   s         r   test_auto_daily_seasonalityz8TestProphetSeasonalComponent.test_auto_daily_seasonality  sF   )""f,,,	$%!//)))w'",
 
 	
 
 '++C0)	eaoo---dA	e!//)))aSZ[	$%w'",
 
 	
 
 )	!"aoo---r   c                     t        |      }|j                  dk(  sJ t        d|      }|j                  dk(  sJ t        j                  t              5  t        d|       d d d        y # 1 sw Y   y xY w)Nro   r,  multiplicativeseasonality_moder"   batman)r   rD  r2   r   r   r6   r8   r   s      r   test_set_seasonality_modez6TestProphetSeasonalComponent.test_set_seasonality_mode*  sq    )!!Z///%5GL!!%5555]]:& 	EXGD	E 	E 	Es   A,,A5c                 ,   t        |      }|j                  dk(  sJ t        d|      }|j                  dk(  sJ t        d|      }|j                  dk(  sJ t        j                  t              5  t        d|       d d d        y # 1 sw Y   y xY w)Nro   r,  rB  rC  )holidays_moder"   rE  )r   rI  r2   r   r   rF  s      r   test_set_holidays_modez3TestProphetSeasonalComponent.test_set_holidays_mode3  s    )*,,,%5GL"2222"2I"2222]]:& 	B(A	B 	B 	Bs   3B

Bc                    t        j                  t        j                  dg      dgdgdgd      }t        d||      }|j	                  dd	d
d       |j                  dd
       |j                  d       |j                         }dgdz  dgdz  z   |d<   t        d      |d<   |j                  |d      }|j                         |_	        |j                          |j                  |      \  }}}}	t        |d         dk(  sJ t        |d         dk(  sJ t        |	d
         h dk(  sJ t        |	d         h dk(  sJ y )N
2016-12-25xmasrv   r   rU   holidaylower_windowupper_windowrB  )rD  holidaysr"   monthlyr    r,  r   )r.  r1  r/  binary_feature)r1  numeric_feature   rh     Tr   r~   rK   r      >   rS  r~   rT  extra_regressors_additive>   rM  r   r8  rR  rU  r   extra_regressors_multiplicative)ri   rj   r   r   add_seasonalityadd_regressorrp   r   r   r   set_auto_seasonalitiesmake_all_seasonality_featuresr   set)
r6   r7   r8   rR  r   dfseasonal_featuresprior_scalescomponent_colsmodess
             r   test_seasonality_modesz3TestProphetSeasonalComponent.test_seasonality_modes>  sr   <<nnl^4"8!#!"	
 %5W^_	)BZqQ	(z:	)* %%' !sSyA394 %c
rT:GGI		  "ABA`A`acAd><>"234999>"89:b@@@5$% *
 
 	
 
 5)*+ 0
 
 	
 
r   N)r   r   r   r&  r)  r6  r:  r@  rG  rJ  re  r   r   r   r  r    s0    II#
J
> .DE	B&
r   r  c                   *    e Zd Zd Zd Zd Zd Zd Zy)"TestProphetCustomSeasonalComponentc                 z    t        |      }|j                  dddd       |j                  d   ddddd dk(  sJ y )	Nro   rS  r    r   r   namer.  r/  r0  r,  r-  )r   r[  r5  rF  s      r   test_custom_monthly_seasonalityzBTestProphetCustomSeasonalComponent.test_custom_monthly_seasonalityh  sS    )	y1RUVy)".
 
 	
 
r   c                    t        j                  t        j                  dg      dgdgd      }t        ||      }t	        j
                  t              5  |j                  ddd       d d d        t	        j
                  t              5  |j                  d	dd       d d d        |j                  d
dd       y # 1 sw Y   TxY w# 1 sw Y   *xY w)N
2017-01-02special_dayr   rU   rO  r0  rR  r"   r    r   rj  r.  r/  r}   r   )ri   rj   r   r   r2   r   r   r[  )r6   r8   rR  r   s       r   test_duplicate_component_nameszATestProphetCustomSeasonalComponent.test_duplicate_component_namess  s    <<nnl^4)? #u
 XG<]]:& 	N=1M	N]]:& 	H72QG	H	x!D		N 	N	H 	Hs   B>C
>C
Cc                 $   t        |      }t        j                  t              5  |j	                  ddd       ddd       t        j                  t              5  |j	                  ddd       ddd       y# 1 sw Y   @xY w# 1 sw Y   yxY w)zFourier order cannot be <= 0ro   r   rK   r   rq  Nrv   )r   r2   r   r   r[  rF  s      r   test_custom_fourier_orderz<TestProphetCustomSeasonalComponent.test_custom_fourier_order  s    )]]:& 	H8AQG	H]]:& 	I8ARH	I 	I	H 	H	I 	Is   A:B:BBc                 N   t        j                  t        j                  dg      dgdgd      }t        |dd|      }|j	                  dd	d
dd       |j                  |       |j                  d   d   dk(  sJ |j                  d   d   dk(  sJ |j                  |j                        \  }}}}t        |d         dk(  sJ t        |d         dk(  sJ t        |d         dk(  sJ t        |d         dk(  sJ t        |d         dk(  sJ |j                  d   dk(  r=dgdz  dgdz  z   dgz   }	t        |d   d d       dk(  sJ t        |d   dd       dk(  s?J dgdz  dgdz  z   dgz   }	t        |d   d d       dk(  sJ t        |d   dd       dk(  sJ ||	k(  sJ y )Nrm  rn  r   ro  FrB  )rR  rT   rD  r"   rS  r    r   r   r,  )rj  r.  r/  r0  r1  r1  r   rn   rh      r~   r   rK   r   monthly_delim_1r      )ri   rj   r   r   r[  r.   r5  r^  r   r   r   )
r6   r7   r8   rR  r   ra  rb  rc  rd  trues
             r   test_custom_priorsz5TestProphetCustomSeasonalComponent.test_custom_priors  s#   <<nnl^4)? #u
 $- 	
 	
2QCj 	 	
 	
!"y)&1Z???x(04DDDDABA`A`IIB
>< >),-333>-01Q666>(+,111>"234:::>"89:a???$$Q'+<<52:
*cU2D~i0"56"<<<~h/2671<<<6A:
*cU2D~h/34999~i02672===t###r   c                 |   t        dd|      }|j                  ddddd       |j                  d	d
dd       |j                         }t        j                  t
              5  |j                  |       d d d        dgdz  dgdz  z   |d<   t        j                  t
              5  |j                  |       d d d        dgdz  dgdz  z   |d<   |j                  |       |j                  d   ddddddk(  sJ |j                  d	   d   J |j                  |j                        \  }}}}|j                  D 	cg c]  }	|	j                  d      s|	 }
}	t        j                  ||
   dk7  j                  d      j                  |d   j                        sJ y # 1 sw Y   -xY w# 1 sw Y   xY wc c}	w )NFrR   conditional_weeklyrK   r   r   is_conditional_week)rj  r.  r/  r0  r2  normal_monthlyg     >@r   ri  r   rV  r   rh   r,  r-  r2  axis)r   r[  rp   r2   r   r   r.   r5  r^  r   r   
startswithr   array_equalanyrw   )r6   r7   r8   r   r`  ra  rb  rc  rd  ccondition_colss              r   #test_conditional_custom_seasonalityzFTestProphetCustomSeasonalComponent.test_conditional_custom_seasonality  s   uU\]	%0 	 	
 	
/A[^_ %%']]:& 	EE"I	 &'C#Ic	$9 !]]:& 	EE"I	 &'C#Ic	$9 !	b	3439
 
 	
 
 /01ABJJJABA`A`IIB
><
 )00
ALLAU4VA
 
 ~~~.!388a8@GG$%,,
 	
 
1	 		 	"
s$   #F &F-=F9F9 F*-F6N)r   r   r   rk  rr  rt  rz  r  r   r   r   rg  rg  g  s    	
E I%$N&
r   rg  c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	TestProphetHolidaysc                    t        j                  t        j                  dg      dgdgdgd      }t        ||      }t        j                  dt        j                  dd	      i      }|j                  |d   |j                        \  }}}|j                  |j                  d   d
fk(  sJ |j                  d      t        j                  ddg      z
  j                         dk(  sJ |ddgk(  sJ |dgk(  sJ y )NrL  rM  rv   r   rN  rp  rU   
2016-12-20
2016-12-31r   r  r   r   r   )ri   rj   r   r   r   make_holiday_featuresrR  r
   r   r   r   )r6   r8   rR  r   r`  featspriorsnamess           r   test_holidays_lower_windowz.TestProphetHolidays.test_holidays_lower_window  s    <<nnl^4"8!#!"	
 @\\4|\!JKL$::2d8U^^Tvu{{rxx{A....		q	!BHHc3Z$88==?3FFF$%%%   r   c                    t        j                  t        j                  dg      dgdgdgd      }t        ||      }t        j                  dt        j                  dd	      i      }|j                  |d   |j                        \  }}}|j                  |j                  d
   dfk(  sJ |t        d      D cg c]  }d c}k(  sJ |dgk(  sJ y c c}w )NrL  rM  rv   rn   rN  rp  rU   r  r  r      r   )	ri   rj   r   r   r   r  rR  r
   r   )	r6   r8   rR  r   r`  r  r  r  rW   s	            r   test_holidays_upper_windowz.TestProphetHolidays.test_holidays_upper_window  s    <<nnl^4"8!#!#	
 XG<\\4|\!JKL 66r$xLvu{{rxx{B////b	21$2222    3s   ;	Cc           	         t        j                  t        j                  ddg      ddgddgddgddgd      }t        ||      }t        j                  d	t        j                  d
d      i      }|j                  |d	   |j                        \  }}}|ddgk(  sJ |dgk(  sJ t        j                  t        j                  ddg      dgdz  dgdz  dgdz  dgdz  d      }t        j                  ||fd      }t        ||      }|j                  |d	   |j                        \  }}}t        ||j                  D 	cg c]  }	|	j                  d      d    c}	      }
|
D ]  }|dv rJ  t        j                  t        j                  ddg      dgdz  dgdz  dgdz  d      }t        j                  ||fd      }t        |d|      j                  |d	   |      \  }}}t        |      ddhk(  sJ y c c}	w )NrL  z
2017-12-25rM  rv   r   r   rU   rO  rP  rQ  r0  rp  rU   r  r  
2012-06-06rf   
seans-bdayr   rh   r   T)sort_delim_))r   r  )r   rM  rN  r=  )rR  holidays_prior_scaler"   r   )ri   rj   r   r   r   r  rR  rq   zipr   splitr_  )r6   r8   rR  r   r`  r  r  r  	holidays2spnr   s               r   test_holidays_priorsz(TestProphetHolidays.test_holidays_priors  s&   <<nnlL%AB"F+!#R!"A #Sz
 XG<\\4|\!JKL 66r$xLvu#s###   LLnnlL%AB(>A-!"a!"a !sQw
	 IIx3$?	YW= 66r$xLvuGA!''),Q/GH 	=A<<<<	=LLnnlL%AB(>A-!"a!"a	
	 IIx3$?	&QW 


4)
4 	vu 6{sCj((( Hs   G=
c                 f   t        j                  t        j                  ddg      ddgddgddgddgd      }t        j                  d	t        j                  d
d      i      }t	        j
                  t              5  t        ||      j                  |d	   |       d d d        y # 1 sw Y   y xY w)NrL  z
2016-12-27xmasishrv   r   r   g      @r  rU   r  r  rp  )	ri   rj   r   r   r2   r   r   r   r  )r6   r8   rR  r`  s       r   test_holidays_bad_priorsz,TestProphetHolidays.test_holidays_bad_priors,  s    <<nnlL%AB%y1!#R!"A #Sz
 \\4|\!JKL]]:& 	XG<RR4(	 	 	s   =!B''B0c                     t        j                  t        j                  ddg      dgdz  dgdz  dgdz  d      }t        |d|      }|j	                  |      j                          y )	Nr  rf   r  r   r   rh   rN  rR  r|   r"   )ri   rj   r   r   r.   r1   )r6   r7   r8   rR  r   s        r   test_fit_with_holidaysz*TestProphetHolidays.test_fit_with_holidays<  sh    <<nnlL%AB(>A-!"a!"a	
 qwW		%&..0r   c                    t        j                  t        j                  ddg      dgdz  dgdz  dgdz  d      }t        |d|      }|j	                  d	
       |j                  |      j                          |j                  d      }|j                  d      }t        d|      }|j	                  d	
       |j                  |      j                  |       |j                  d      }t        d|      }|j	                  d	
       |j                  |       |j                  dd      }|j                  |       y )Nr  rf   r  r   r   rh   rN  r  US)country_name   ic  r{   <   F)r   r)   )
ri   rj   r   r   add_country_holidaysr.   r1   r	   r   r0   )r6   r7   r8   rR  r   r   r<   s          r   &test_fit_predict_with_country_holidaysz:TestProphetHolidays.test_fit_predict_with_country_holidaysH  s'   <<nnlL%AB(>A-!"a!"a	
 qwW"""5		%&..0#((-$))#.AGD"""5		%  (#((-AGD"""5		%,,R,Ofr   c                     t        j                  t        j                  dg      dgd      }t        ||      }|j	                  |       |j                         }t        |d   dk(        dk(  sJ y )Nrm  rn  )rU   rO  rp  r   i?  )ri   rj   r   r   r.   r1   r   )r6   r?  r8   rR  r   r   s         r   test_subdaily_holidaysz*TestProphetHolidays.test_subdaily_holidaysc  sk    <<nnl^4)?
 XG<	$%yy{4&!+,333r   N)
r   r   r   r  r  r  r  r  r  r  r   r   r   r  r    s&    !"!",)\ 
16
4r   r  c                       e Zd Zd Zd Zy)TestProphetRegressorsc                    t        |      }|j                  dd       |j                  dd       |j                  ddd	       |j                  d
d       |j                         }dgdz  dgdz  z   |d<   t        d      |d<   t        d      |d<   t	        j
                  t              5  |j                  |       d d d        dgdz  dgdz  z   |d
<   |j                  |       |j                  d   ddddddk(  sJ |j                  d   d   dk(  sJ |j                  d   d   dk(  sJ |j                  d   d   t	        j                  dd      k(  sJ |j                  d   d   dk(  sJ |j                  d
   d   d k(  sJ |j                  d
   d   t	        j                  d!d      k(  sJ |j                  d
   d   t	        j                  d"d      k(  sJ |j                  |j                               }|d   d   dk(  sJ |d   d   t	        j                  d#d$      k(  sJ |d
   d   t	        j                  d%d$      k(  sJ |j                  |      \  }}}}	|j                  d   d&k(  sJ g d'}
g d(}t        |
      D ]J  \  }}||v sJ t        ||         dk(  sJ t        t        j                   |      ||   z        ||   k(  rJJ  t#        j$                  d)gdgd*gd*gd+      }t	        j
                  t              5  |j'                  |       d d d        d|d
<   |j'                  |      }|j                  d   d,k(  sJ |d   d   dk(  sJ |d-   d   t	        j                  |d   d   |d
   d   z         k(  sJ |d.   d   t	        j                  |d   d         k(  sJ |d/   d   t	        j                  |d0   d   |d1   d   z   |d-   d   z         k(  sJ |d2   d   t	        j                  |d.   d         k(  sJ |d3   d   t	        j                  |d4   d   d|d2   d   z   z  |d/   d   z         k(  sJ y # 1 sw Y   xY w# 1 sw Y   =xY w)5Nro   rT  皙?)r0  rU  r   numeric_feature2rB  )r0  r1  binary_feature2T)standardize0rV  1rW  rh   rb   r   i  r+  r,  )r0  mustdr  r1  r0  r  g     o@r  gzrkb@r  r   r1  r   gY۹?g >U*Mo?g碡r   gZ. @r    )rT  rU  r  )r  r   r   z
2014-06-01rn   )rU   rT  rU  r  %   rY  rZ  r~   r8  r   r   r*   r}   )r   r\  rp   r   r2   r   r   r.   extra_regressorsr3   r   r^  r
   	enumerater   r   r   ri   rj   r1   )r6   r7   r8   r   r`  df2ra  rb  rc  rd  r  true_priorsirj  r<   r   s                   r   test_added_regressorsz+TestProphetRegressors.test_added_regressorsr  sN   )	(c:	)s;	*BRS	)t< %%' #us{cUS[8 %c
!&s]]:& 	EE"I	 "#c	QC#I 5	b	!!"23!8
 
 	
 
 !!"34]CsJJJ!!"34T:eCCC!!"34U;v}}Z]a?bbbb!!"45f=AQQQQ!!"34]CtKKK!!"34T:fmmI[_>````!!"34U;v}}Y\`?aaaa	*#$Q'1,,,$%a(FMM),NNNN$%a(FMM(,MMMMABA`A`B
>< !&&q)R///H& ' 	XGAt,,,,~d+,111rxx-t0DDEUVWWW	X
 #n#$#$&4%'D	
 ]]:& 	IIf	$% !yy zz!}"""$%a(A---/03v}}"#A&.?)@)CC8
 
 	
 
 56q9V]]#$Q'>
 
 	
 
 $%a(FMMN1Xq 11D9T4UVW4XX-
 
 	
 
 *+A.&--23A63
 
 	
 
 F|A&--M!D)?$@$C CDtL\G]^_G``#
 
 	
 
A	 	\	 	s   /QQ"Q"Q,c                     |j                         }d|d<   t        |      }|j                  d       |j                  |       |j                  d   d   dk(  sJ y )Nr   constant_featurero   r  rh   )rp   r   r\  r.   r  )r6   r7   r8   r`  r   s        r   test_constant_regressorz-TestProphetRegressors.test_constant_regressor  s\     %%'!")	*+	b	!!"45e<AAAr   N)r   r   r   r  r  r   r   r   r  r  q  s    L
\Br   r  c                       e Zd Zd Zd Zy)TestProphetWarmStartc                     t        |      j                  |j                  d d       }t        |      j                  |j                  d d t        |            }t	        |j
                  d   d         dk(  sJ y )Nro   rH   rW  )initdeltar      )r   r.   r   r   r   r^   r6   r7   r8   r   r   s        r   test_fit_warm_startz(TestProphetWarmStart.test_fit_warm_start  sz    )--.A.F.Ft.LM'*..$$Tc*1B11E / 
 299W%a()R///r   c                     t        d|      j                  |j                  d d d      }t        d|      j                  |j                  d d t        |      d      }|j                  d   j
                  d	k(  sJ y )
Nrb   rI   rH   Frc   rW  )r  rM   r  )   r  )r   r.   r   r   r^   r
   r  s        r   test_sampling_warm_startz-TestProphetWarmStart.test_sampling_warm_start  s    7;??$$Tc*% @ 
 #G<@@$$Tc*1B11EUZ A 
 yy!''9444r   N)r   r   r   r  r  r   r   r   r  r    s    05r   r  )numpyr   pandasri   r2   rk   r   prophet.utilitiesr   rj   r  r   floatr   r   r   r   r  rg  r  r  r  r   r   r   <module>r     s        /3bll 3 3 3:% :SP SPlR1 R1hp! p!fo
 o
dq
 q
hR4 R4lUB UBp5 5r   