
    %g>                     ,   d dl Z d dlZd dlZd dlZd dlZd dlmZm	Z	  ej                  d      d        Z G d d      Zddd	 e       gZ	 d d
lmZ  ed      Zej#                  d        G d d      Z G d d      Z G d d      Zy# e$ r Y &w xY w)    N)Prophetdiagnosticsmodulescopec                 $    | j                  d      S )Nd   )head)daily_univariate_tss    [/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/prophet/tests/test_diagnostics.pyts_shortr      s    ##C((    c                       e Zd Zd Zy)CustomParallelBackendc                 @    t        | D cg c]  } || 	 }}|S c c}w N)zip)selffunc	iterablesargsresultss        r   mapzCustomParallelBackend.map   s'    +.	?;44;;; <s   N)__name__
__module____qualname__r    r   r   r   r      s    r   r   	processesthreads)ClientF)r   daskc                      e Zd Zej                  j                  de      d        Zd Zd Z	ej                  j                  dddgg      d        Z
ej                  j                  dd	d
g      d        Zd Zd Zd Zd Zy)TestCrossValidationparallel_methodc                    t        |      }|j                  |       t        j                  d      }t        j                  d      }t        j                  d      }t	        j
                  |ddd|      }t        t        j                  |d               dk(  sJ t        |d   |d   z
        |k(  sJ t        |d         t        |d         |z   k\  sJ |d   j                         }	|	|	t        j                  d	      kD     j                         }	|	|k\  sJ |d   |d   k  j                         sJ t        j                  ||d
d      }
t        j                  |
d   |
d   z
  dz        t        j                   d      k(  sJ t	        j
                  |ddd      }t        t        j                  |d               dk(  sJ t        j"                  t$              5  t	        j
                  |ddd       d d d        y # 1 sw Y   y xY w)Nstan_backend4 days10 days115 days)horizonperiodinitialparallelcutoff   dsr   leftony_xy_y           135 daysr+   r,   r-      140 days)r   fitpd	Timedeltar   cross_validationlennpuniquemaxmindiffallmergesumpytestapproxraises
ValueError)r   r   r$   backendmr+   r,   r-   df_cvdc	df_mergeds              r   test_cross_validationz)TestCrossValidation.test_cross_validation&   s   )	h,,x(i(,,z*,,x	:P_
 299U8_-.!3335;x01W<<<5?#s8D>':W'DDDD8_!!#R\\!_$%))+V||h%+-22444HHUHf>	vvy')E*::q@AV]]SVEWWWW,,x	:
 299U8_-.!333]]:& 	e((IiYcd	e 	e 	es    HHc                 n   t        |      }|j                  |       t        j                  t        d      5  t        j                  |dd       d d d        t        j                  t        d      5  t        j                  |dt                      d d d        y # 1 sw Y   NxY w# 1 sw Y   y xY w)Nr&   z'parallel' should be one)matchr(   bad)r+   r.   )r   r=   rJ   rL   rM   r   r@   object)r   r   rN   rO   s       r   test_bad_parallel_methodsz-TestCrossValidation.test_bad_parallel_methodsB   s    )	h]]:-GH 	N((HuM	N ]]:-GH 	Q((HvxP	Q 	Q	N 	N	Q 	Qs   B5!B+B(+B4c                    	 t        |      }|j                  |       	fd}|j                  t        d|       g ddfg ddffD ]$  \  }}d	t        j                  |g| }	|k(  r$J  y )	Nr&   c                 B   dz   t        j                  t        j                  dd      t        j                  dd      t        j                  dd      t        j                  d	d
      t        j                  dd      t        j                  ddd      gdz  d      S )Nr;   z
2012-09-17r0   )startperiods                  g     0@g     3@i  	   )r1   yhat
yhat_lower
yhat_upperyr/   )r>   	DataFrame
date_rangerB   arangedatetimedate)dfmodelr/   r+   predict_columnsn_callss        r   mock_predictzVTestCrossValidation.test_check_single_cutoff_forecast_func_calls.<locals>.mock_predictP   s    kG<<--lAFIIb"-"$))B"3"$))B"34.'}}T1b9:Q>	 	r   single_cutoff_forecast)r(   r)   r*   r0   )r(   r(   r*      r   )r   r=   setattrr   r@   )
r   r   monkeypatchrN   rO   rq   r   	forecasts_rp   s
            @r   ,test_check_single_cutoff_forecast_func_callsz@TestCrossValidation.test_check_single_cutoff_forecast_func_callsL   s    )	h	 	K)A<P /2-q1 
 	(OD) G,,Q66Ai'''	(r   extra_output_columnstrendc                     t        |      }|j                  |       t        j                  |ddd|      }d|j                  v sJ y )Nr&   1 daysr<   )r+   r,   r-   ry   rz   )r   r=   r   r@   columns)r   r   rN   ry   rO   rP   s         r   0test_check_extra_output_columns_cross_validationzDTestCrossValidation.test_check_extra_output_columns_cross_validationi   sJ    )	h,,!5
 %--'''r   growthlogisticflatc                    |j                         }|dk(  rd|d<   t        ||      j                  |      }t        j                  |ddd      }t        t        j                  |d               d	k(  sJ |d   |d
   k  j                         sJ t        j                  ||dd
      }t        j                  |d   |d   z
  d	z        t        j                  d      k(  sJ y )Nr   (   cap)r   r'   r|   r<   r:   r/   r7   r1   r2   r3   r5   r6   r8   )copyr   r=   r   r@   rA   rB   rC   rG   r>   rH   rI   rJ   rK   )r   r   r   rN   rm   rO   rP   rR   s           r   -test_cross_validation_logistic_or_flat_growthzATestCrossValidation.test_cross_validation_logistic_or_flat_growthv   s    ]]_ZBuI68<<R@,,x*
 299U8_-.!333h%+-22444HHUHf>	vvy')E*::q@AV]]SVEWWWWr   c                 h   |j                         }t        |j                  d         |d<   t        j                  |j                  d         dz  dz  |d<   t        |      }|j                  ddd	
       |j                  ddddd       |j                  d       |j                  |       t        j                  |ddd      }t        t        j                  |d               dk(  sJ t        j                  d      }|d   j                         }||t        j                  d      kD     j!                         }||k\  sJ |d   |d   k  j#                         sJ t        j$                  ||dd      }t        j&                  |d   |d   z
  dz        t)        j*                  d      k(  sJ y )Nr   extrars   r7   is_conditional_weekr&   monthlyg     >@   )namer,   fourier_orderconditional_weeklyr0          @)r   r,   r   prior_scalecondition_namer(   r9   r:   r/   r1   r2   r3   r5   r6   r8   )r   rangeshaperB   rj   r   add_seasonalityadd_regressorr=   r   r@   rA   rC   r>   r?   rF   rE   rG   rH   rI   rJ   rK   )	r   r   rN   rm   rO   rP   r,   rQ   rR   s	            r   &test_cross_validation_extra_regressorsz:TestCrossValidation.test_cross_validation_extra_regressors   s   ]]_BHHQK(7$&IIbhhqk$:a$?!$C !)	yQG	%0 	 	
 	
 	b	,,x*
 299U8_-.!333h'8_!!#R\\!_$%))+V||h%+-22444HHUHf>	vvy')E*::q@AV]]SVEWWWWr   c                 p   t        |      }|j                  |       t        j                  |dd      }t        j                  |ddd      }|d   |d   z
  dz  j	                         t        j                  d	      k(  sJ |d
   |d
   z
  dz  j	                         t        j                  d	      k(  sJ y )Nr&   32 daysr)   )r+   r,   z96 daysr:   rg   r7   r8   rd   )r   r=   r   r@   rI   rJ   rK   )r   r   rN   rO   df_cv1df_cv2s         r   )test_cross_validation_default_value_checkz=TestCrossValidation.test_cross_validation_default_value_check   s    )	h--a9U--yI
 vc{*q05576==;MMMM&.0Q6;;=sASSSSr   c           	         t        |      }|j                  |       t        j                  |ddt	        j
                  d      t	        j
                  d      g      }t        |d   j                               dk(  sJ y )	Nr&   r   r)   z
2012-07-31z
2012-08-31)r+   r,   cutoffsr/   r7   )r   r=   r   r@   r>   	TimestamprA   rC   )r   r   rN   rO   r   s        r   $test_cross_validation_custom_cutoffsz8TestCrossValidation.test_cross_validation_custom_cutoffs   so    )	h --\\,/l1KL	
 6(#**,-222r   c                 T   |j                         }dD ]  }t        ||      }|j                  |d       t        j                  |ddd      }g dt        fd	|j                  j                         D              sJ t        j                  |      }d
|j                  vrJ  y )N)r   F)uncertainty_samplesr'   Newton)	algorithmr(   r*   r:   )r1   rd   rg   r/   c              3   &   K   | ]  }|v  
 y wr   r   ).0colexpected_colss     r   	<genexpr>zQTestCrossValidation.test_cross_validation_uncertainty_disabled.<locals>.<genexpr>   s     Nsm+Ns   coverage)	r   r   r=   r   r@   rG   r}   tolistperformance_metrics)	r   r   rN   rm   uncertaintyrO   rP   df_pr   s	           @r   *test_cross_validation_uncertainty_disabledz>TestCrossValidation.test_cross_validation_uncertainty_disabled   s    ]]_% 		2KKgNAEE"E)008HjE :MNu}}7K7K7MNNNN2259DT\\111		2r   N)r   r   r   rJ   markparametrizePARALLEL_METHODSrS   rX   rx   r~   r   r   r   r   r   r   r   r   r#   r#   %   s    [[.0@Ae Be6Q(: [[3gy5IJ
( K
( [[X
F';<X =XX6	T32r   r#   c                       e Zd Zd Zd Zd Zy)TestPerformanceMetricsc                    t        |      }|j                  |       t        j                  |ddd      }t        j                  |d      }t        |j                        h dk(  sJ |j                  d	   d
k(  sJ t        j                  |d	      }t        |      dk(  sJ t        |d   j                               dk(  sJ t        j                  |d      }t        |      dk(  sJ t        |d   j                               dk(  sJ t        j                  |d      }|j                  d	   dk(  sJ dD ]=  }	||	   j                  d	   t        j                  ||	   j                               k(  r=J  |d   j                  d	   t        j                  |d   j                               k(  sJ t        j                  |ddg      }t        |j                        h dk(  sJ d|j                  d<   t        j                  |ddg      }t        |j                        ddhk(  sJ d|d<   d|d<   t        j                  |      }t        |j                        h dk(  sJ t        j                  |dg      }|J t        j                   t"              5  t        j                  |ddg       d d d        y # 1 sw Y   y xY w)Nr&   r(   r)   z90 daysr:   )rolling_window>   maemsemapermsemdapesmaper+   r   r   r]      r+   g?r;   )r   r   r   r   r   r   r   )metrics>   r   r+   r   r8   )r   rg   r   rg   rd   >   r   r   r   r   r   r+   r   error_metric)r   r=   r   r@   r   setr}   r   rA   rC   valuesrJ   rK   meanmedianlocrL   rM   )
r   r   rN   rO   rP   df_nonedf_0
df_horizondf_allmetrics
             r   test_performance_metricsz/TestPerformanceMetrics.test_performance_metrics   s   )	h,,x	9
 11%K7??# 	(
 	
 		
 	
 }}Q2%%%..uQG4yA~~4	?))+,111 44U3O
:!###:i(//12a77700qI||A!###8 	UF&>((+v}}WV_=Q=Q=S/TTTT	Ug%%a(FMM'':J:Q:Q:S,TTTT 44'

 :%%&*HHHH		& 44(

 :%%&:y*AAAAc
f 44

 :%%&*iiii 44H

 !!!]]:& 	++/	 	 	s   KKc                 ~   t        j                  d      }t        j                  d      }t        j                  ||dd      }t        j                  ||d   j
                        sJ t        j                  ||d   j
                        sJ t        j                  ||dd      }t        j                  |dd  d	z
  |d   j
                        sJ t        j                  t        j                  dd      |d   j
                        sJ t        j                  g d
      }t        j                  g d      }t        j                  g d      }t        j                  ||dd      }t        j                  ||d   j
                        sJ t        j                  ||d   j
                        sJ t        j                  ||dd      }t        j                  t        j                  dg      |d   j
                        sJ t        j                  t        j                  dg      |d   j
                        sJ y )N
   r;   xr   hwr   r+   r   r   r   r0         ?
      ?r         @      @r   r   r   r         @r   )r         @gUUUUUU@r   r   r   r         @)rB   rj   r   rolling_mean_by_harray_equalr   allclosearrayr   r   r   rm   x_trueh_trues         r   test_rolling_meanz(TestPerformanceMetrics.test_rolling_mean  s   IIbMIIbM**Q!qsC~~aC000~~aI!5!5666**1a13?{{1QR53;3777~~bii2.90D0DEEEHHGH.//***1a13?{{62c7>>222~~fbm&:&:;;;**1a2C@{{288SE?ByM,@,@AAA{{288SE?BsGNN;;;r   c                    t        j                  d      }t        j                  d      }t        j                  ||dd      }t        j                  ||d   j
                        sJ t        j                  ||d   j
                        sJ t        j                  ||dd      }|dd  d	z
  }t        j                  ||d   j
                        sJ t        j                  t        j                  dd      |d   j
                        sJ t        j                  g d
      }t        j                  g d      }t        j                  g d      }t        j                  ||dd      }t        j                  ||d   j
                        sJ t        j                  ||d   j
                        sJ t        j                  ||dd      }t        j                  t        j                  dg      |d   j
                        sJ t        j                  t        j                  dg      |d   j
                        sJ y )Nr   r;   r   r   r+   r   r   r0   r   r   )r   r   g       @r   r   r   )rB   rj   r   rolling_median_by_hr   r   r   r   r   s         r   test_rolling_medianz*TestPerformanceMetrics.test_rolling_median  s   IIbMIIbM,,qAE~~aC000~~aI!5!5666,,QQSA12{{62c7>>222~~bii2.90D0DEEEHHGH/*/*,,QQSA{{62c7>>222~~fbm&:&:;;;,,QRcB{{288SE?ByM,@,@AAA{{288SE?BsGNN;;;r   N)r   r   r   r   r   r   r   r   r   r   r      s    ?B<,<r   r   c                   J    e Zd Z ej                  d      d        Zd Zd Zy)TestProphetCopyclassr   c                 P    |j                         }d|d<   dgdz  dgdz  z   |d<   |S )Ng      i@r   r      r;   binary_feature)r   )r   r   rm   s      r   datazTestProphetCopy.data6  s:     %%'5	 !sSyA394	r   c                    t        j                  t        j                  dg      dgd      }t        j                  ddgd t        j                  dg      gdgdgdd	gdd	gdd	gd |gd
dgdgdgdgdgdgdg      }|D ]  }t        |d|i}d|_        |j                  |j                         d      |_	        |j                          t        j                  |      }|j                  |j                  k(  sJ |j                  |j                  k(  sJ |j                  |j                  k(  sJ |j                   |j                   |j                   k(  s)J |j                   j#                  |j                         sJ d	|j$                  k(  sJ d	|j&                  k(  sJ d	|j(                  k(  sJ |j$                  d|j*                  v k(  sJ |j&                  d|j*                  v k(  sJ |j(                  d|j*                  v k(  sJ |j,                  |j,                  |j,                  k(  s5J |j,                  |j,                  k(  j.                  j1                         sJ |j                  |j                  k(  sJ |j2                  |j2                  k(  sJ |j4                  |j4                  k(  sJ |j6                  |j6                  k(  sJ |j8                  |j8                  k(  sJ |j:                  |j:                  k(  sJ |j<                  |j<                  k(  sJ |j>                  |j>                  k(  sJ |j@                  |j@                  k(  rJ  y )Nz
2016-12-25r   )r1   holidaylinearr   r0   g?TFadditivemultiplicativeg?g?r	      r'   US)initialize_scalesyearlyweeklydaily)!r>   rh   to_datetime	itertoolsproductr   country_holidayssetup_dataframer   historyset_auto_seasonalitiesr   prophet_copyr   n_changepointschangepoint_rangechangepointsequalsyearly_seasonalityweekly_seasonalitydaily_seasonalityseasonalitiesholidaysr   rG   holidays_modeseasonality_modeseasonality_prior_scalechangepoint_prior_scaleholidays_prior_scalemcmc_samplesinterval_widthr   )r   r   rN   r   productsr   m1m2s           r   test_prophet_copyz!TestProphetCopy.test_prophet_copy=  sI   ,,bnnl^&DRUQVWX$$z"2>><.12CE5M5M5M7O)*EEEEEE
$   	DG'88B"&B++DIIK4+PBJ%%'))"-B99		)))$$(9(9999''2+?+????&"//999--boo>>>B11111B11111B00000((X9I9I-IJJJ((X9I9I-IJJJ''Gr7G7G,GHHH{{"{{bkk111r{{2::>>@@@&&"*=*====##r'7'7777&&"*=*====--1K1KKKK--1K1KKKK**b.E.EEEE??boo555$$(9(9999))R-C-CCCC?	Dr   c                    t        j                  dd      }t        j                  d      }t        ||      }|j	                  ddd       |j                  d       |j                  |       t        j                  ||	      }|||k     }||j                  k(  j                         sJ d|j                  v sJ d|j                  v sJ y )
Nz
2012-06-15z
2012-09-15z
2012-07-25)r  r'   customr   r   r   )r/   )r>   ri   r   r   r   r   r=   r   r   r  rG   r  extra_regressors)r   r   rN   r  r/   r  r  s          r   test_prophet_copy_customz(TestProphetCopy.test_prophet_copy_customs  s    }}\<@l+,WE
8R+
)*
t%%b8#L6$9:/446662+++++2#6#6666r   N)r   r   r   rJ   fixturer   r  r  r   r   r   r   r   5  s+    V^^'" #4Dl7r   r   )rk   r   numpyrB   pandasr>   rJ   prophetr   r   r  r   r   r   dask.distributedr    clientappendImportErrorr#   r   r   r   r   r   <module>r      s         ( h)  )  +y2G2IJ 	'e$FF#
]2 ]2@m< m<`I7 I7i  		s    B BB