
    =ha                        S r SSKJr  SSKJr  SSKJr  SSKrSSK	J
r
JrJrJr  SSKJs  Jr  SSKJrJr  SSKJr  S	 rS
 rS r " S S5      r " S S\5      r " S S\5      rS rS rSS jrS r SS jr!g)zr
Base tools for handling various kinds of data structures, attaching metadata to
results, and doing data cleaning
    )annotations)lmap)reduceN)	DataFrameSeriesisnull
MultiIndex)cache_readonlycache_writable)MissingDataErrorc                    [         R                  " U 5      R                  S:  a4  [         R                  " U 5      R                  5       R                  S:X  a  g g g N   )npasarrayndimsqueezexs    hC:\Users\julio\OneDrive\Documentos\Trabajo\Ideas Frescas\venv\Lib\site-packages\statsmodels/base/data.py_asarray_2dcolumnsr      sB    	zz!}A"**Q-"7"7"9">">!"C #D    c                    [         R                  " U 5      n U R                  S:X  a	  U SS2S4   n [         R                  " [	        U 5      SS9SS2S4   $ )zm
Makes sure input is an array and is 2d. Makes sure output is 2d. True
indicates a null in the rows of 2d x.
r   Naxis)r   r   r   anyr   r   s    r   _asarray_2d_null_rowsr      sG     	

1Avv{agJ66&)!$QW--r   c                 h    [        U 5      S:X  a  U S//4-  n S n[        X5      R                  5       $ )z
Returns a boolean array which is True where any of the rows in any
of the _2d_ arrays in arrs are NaNs. Inputs can be any mixture of Series,
DataFrames or array_like.
r   Fc                    [        U S5      =(       a    U R                  [        :H  =(       a    U n[        R                  " [        U 5      U[        U5      -  5      $ )Ndtype)hasattrr    boolr   
logical_orr   )r   yx_is_boolean_arrays      r   _nan_row_maybe_two_inputs,_nan_rows.<locals>._nan_row_maybe_two_inputs.   sJ    $Q0JQWW_J}}21503H3KKN 	Nr   )lenr   r   )arrsr&   s     r   	_nan_rowsr*   %   s<     4yA~5'N
 +2::<<r   c                     \ rS rSrSrSrSrS$S jrS rS r	S r
\S 5       r\S	 5       r\S
 5       rS r\" 5       S 5       r\" 5       S%S j5       r\S 5       r\R*                  S 5       r\S 5       r\R*                  S 5       r\S 5       rS rS rS rS rS rS&S jrS rS r S r!S r"S r#S r$S r%S  r&S! r'S" r(S#r)g)'	ModelData6   z]
Class responsible for handling input data and extracting metadata into the
appropriate form
Nc                   [         R                  " U5      (       d  [         R                  " U5      (       a  SSKJn  [	        U5      eSU;   a  UR                  S5      U l        SU;   a  UR                  S5      U l        US:w  a  U R                  " XU40 UD6u  pxXl	        U R                  R                  U5        U R                  U l        U R                  U l        U R!                  U R                  U R                  5      u  U l        U l        OEU R                  R                  U5        Xl        X l        U R!                  X5      u  U l        U l        S U l        SU l        U R'                  U5        U R)                  5         0 U l        g )Nr   )recarray_exceptiondesign_infoformulanone)	data_util_is_recarraystatsmodels.tools.sm_exceptionsr/   NotImplementedErrorpopr0   r1   handle_missingmissing_row_idx__dict__updateendog
orig_endogexog	orig_exog_convert_endog_exog	const_idx
k_constant_handle_constant_check_integrity_cache)	selfr<   r>   missinghasconstkwargsr/   arraysnan_idxs	            r   __init__ModelData.__init__>   sD   !!%((I,B,B4,H,HJ%&899F"%zz-8D!::i0DLf"11%w <4:<OF#* MM  ("jjDO!YYDN$($<$<TZZ=AYY%H!DJ	 MM  (#O!N$($<$<U$I!DJ	h'r   c                R    SSK J n  U" U R                  5      nSU;   a  US	 SUS'   U$ )Nr   )copyr0   Trestore_design_info)rO   r:   )rF   rO   ds      r   __getstate__ModelData.__getstate__\   s3    A- '+A#$r   c                j   SU;   a@  SSK JnJn  / n US   nS H  n U" US   XVS	S
9u  px  O   US   eUR                  U l        US	 U R                  R                  U5        g ! [         a    US   R	                  US   5      n Nof = f! [
        U4 a  n	UR                  U	5         S n	A	M  S n	A	ff = f)NrP   r   )	dmatrices
PatsyErrorframer=   r?   )      r   r      r1   	dataframe)eval_envreturn_type)
patsyrU   rV   KeyErrorjoin	NameErrorappendr0   r:   r;   )
rF   rQ   rU   rV   excdatadepth_designes
             r   __setstate__ModelData.__setstate__d   s     A%3C<z ) )!I,6A!CIA	 ) "g%11D'(Q!  <++AkN;< ":. JJqMs(   A# B
#!BB
B2B--B2c                ~   USL d  U R                   c  SU l        S U l        g Sn[        R                  " U R                   SS9n[        R
                  " U5      R                  5       (       d  [        S5      e[        R                  " U R                   SS9n[        R                  " X4:H  5      S   R                  5       nUR                  U l        U R                  S:X  a9  U R                   S S 2U4   R                  5       S:w  a  [        U5      U l        OSnOU R                  S:  a  / nU HT  nU R                   S S 2U4   R                  5       nUS:X  a  SU l        [        U5      U l          OUR                  U5        MV     [        R                  " U5      S:g  n	U	R!                  5       (       a(  SU l        [        XYR#                  5          5      U l        OSnOU R                  S:X  a  SnO U(       a  U(       d  [        R$                  " [        R&                  " U R                   R(                  S   5      U R                   45      n
[        R*                  R-                  U
5      n[        R*                  R-                  U R                   5      n[        X:H  5      U l        S U l        g U(       a  SU l        g g )NFr   r   zexog contains inf or nansr   T)r>   rB   rA   r   maxisfiniteallr   minwherer   sizemeanintrc   arrayr   argmaxcolumn_stackonesshapelinalgmatrix_rank)rF   rH   check_implicitexog_maxexog_minrA   valuesidxvalueposaugmented_exog	rank_augm	rank_origs                r   rC   ModelData._handle_constant}   s   u		 1DO!DN #Nvvdiia0H;;x(,,..&'BCCvvdiia0H!56q9AACI'nnDO!#99Q	\*//1Q6%(^DN &*N1$ $C IIaf-224Ez*+),SMM%( % 88F+q0Cwwyy*+),Yzz|-D)E *.A%!% h "$WWTYY__Q%78$))D"FII11.A	II11$))<	"%i&<"=!% #$ r   c                
    X   $ N clsr   nan_masks      r   
_drop_nansModelData._drop_nans   s
    {r   c                    X   S S 2U4   $ r   r   r   s      r   _drop_nans_2dModelData._drop_nans_2d   s    {1h;''r   c                   ^ ^ / nUR                  SS5      nUb  Sn/ nUc  US/-  nOUb  X4nSS/nOU4nS/nUS/-  nSn	/ n
[        U5      (       a  UR                  5        H  u  pUb  [        R                  " U5      S:X  a  X[/-  nM)  UR                  S:X  a!  U[        R
                  " U5      4-  nX/-  nMZ  UR                  5       R                  S:X  a!  U[        R
                  " U5      4-  nX/-  nM  UR                  S:X  a!  U	[        R
                  " U5      4-  n	X/-  n
M  [        S	5      e   Ub  UmSnU(       a>  [        U6 nUR                  S   TR                  S   :w  a  [        S
5      eUT)    nTU-  mU	(       aM  [        U	5      nUR                  S   TR                  S   :w  a  [        S5      eUb	  XT)    -  nOUT)    nTU-  mO"[        U6 mU	(       a  [        TSS2S4   4U	-   6 m[        R                  " T5      (       d  [        [        X5      5      nU	(       a#  UR                  [        [        X5      5      5        U(       a3  UR                  U Vs0 s H  nUUR                  US5      _M     sn5        Ub)  UR                  SU05        Ub  UR                  SU05        U/ 4$ US:X  a  [        S5      eUS:X  Ga   T) mU U4S jnU U4S jn[        [        U[!        UU5      5      5      nUbT  Wb(  U) nT R#                  X5      nUb  T R#                  X-5      nUR                  SU05        Ub  UR                  SU05        U	(       a.  UR                  [        [        U
[!        UU	5      5      5      5        U(       a3  UR                  U Vs0 s H  nUUR                  US5      _M     sn5        U[        R$                  " T) 5      S   R'                  5       4$ [        SU-  5      es  snf s  snf )z]
This returns a dictionary with keys endog, exog and the keys of
kwargs. It preserves Nones.
missing_idxNr   r>   r<   r   r   rX   z6Arrays with more than 2 dimensions are not yet handledzBShape mismatch between endog/exog and extra arrays given to model.zEShape mismatch between endog/exog and extra 2d arrays given to model.raisez!NaNs were encountered in the datadropc                (   > TR                  U T5      $ r   )r   r   r   r   s    r   <lambda>*ModelData.handle_missing.<locals>.<lambda>"  s    #..H"=r   c                (   > TR                  U T5      $ r   )r   r   s    r   r   r   #  s    S%6%6q(%Cr   z missing option %s not understood)r7   r(   itemsr   r   r   r   
ValueErrorr*   ry   r   dictzipr;   getr   r   r   rq   tolist)r   r<   r>   rG   rI   none_array_namesr   combinedcombined_namescombined_2dcombined_2d_nameskeyvalue_arrayupdated_row_maskcombined_nanscombined_2d_nansk	drop_nansdrop_nans_2dr   s   `                  @r   r8   ModelData.handle_missing   sa     jj5"HN| VH, }H%v.NxH%YN( v;;$*LLN &"''+*>!*C$-$##q(K!8 ::H"e+N ((*//14K!8 ::H"e+N !%%*BJJ{$;#==K%.%$ &; < <# %3( ""H# )8 4 &&q)X^^A->>$ &H I I $1(#; M)#,[#9 #))!,q0AA$ &K L L#/$((CC$'7	'B$,, !(+H$x4'8&:[&HIvvhC9:HS):%H IJ*:!<*:Q "#FJJq$$7!7*:!< = &% 01#OOVTN3R<"#FGG yH=ICLCY0IJKH&#/(8'8$NN5CE'"~~dE% 01#OOVTN3S):)-lK)H&J !K L*:!<*:Q "#FJJq$$7!7*:!< = RXXxi03::<<<?'IJJQ!<F!<s   ,P*Pc                    U R                  U5      nS nUbE  U R                  U5      nUR                  S:X  a	  US S 2S 4   nUR                  S:w  a  [        S5      eX44$ )Nr   rX   zexog is not 1d or 2d)	_get_yarr	_get_xarrr   r   )rF   r<   r>   yarrxarrs        r   r@   ModelData._convert_endog_exog=  sb     ~~e$>>$'DyyA~AtG}yyA~ !788zr   c                    U R                   nU R                  U5      nU(       d  [        U R                  5      n[	        U5      S:X  a  US   $ [        U5      $ )Nr   r   )r=   
_get_names_make_endog_namesr<   r(   list)rF   r<   ynamess      r   r   ModelData.ynamesK  sJ    '&tzz2Fv;!!9<r   c                    U R                   nUb8  U R                  U5      nU(       d  [        U R                  5      n[	        U5      $ g r   )r?   r   _make_exog_namesr>   r   )rF   r>   xnamess      r   r   ModelData.xnamesW  s=    ~~__T*F)$))4<r   c                @    U R                   =(       d    U R                  $ r   )_param_namesr   rF   s    r   param_namesModelData.param_namesa  s       /DKK/r   c                    Xl         g r   )r   )rF   r   s     r   r   r   f  s    "r   c                L    U R                   b  U R                   $ U R                  $ )z
Labels for covariance matrices

In multidimensional models, each dimension of a covariance matrix
differs from the number of param_names.

If not set, returns param_names
)
_cov_namesr   r   s    r   	cov_namesModelData.cov_namesj  s$     ??&??"r   c                    Xl         g r   )r   )rF   r   s     r   r   r   y  s	      r   c                    U R                   nUb  U R                  U5      nU$ U R                  nU R                  U5      nU$ r   )r?   _get_row_labelsr=   )rF   r>   
row_labelsr<   s       r   r   ModelData.row_labels~  sJ    ~~--d3J  OOE--e4Jr   c                    g r   r   rF   arrs     r   r   ModelData._get_row_labels  s    r   c                   [        U[        5      (       ag  [        UR                  [        5      (       a3  UR                   Vs/ s H  nSR	                  S U 5       5      PM     sn$ [        UR                  5      $ [        U[        5      (       a  UR                  (       a  UR                  /$ g  UR                  R                  $ s  snf ! [         a     g f = f)Nrg   c              3  6   #    U  H  o(       d  M  Uv   M     g 7fr   r   ).0levels     r   	<genexpr>'ModelData._get_names.<locals>.<genexpr>  s      ?A5As   
	)
isinstancer   columnsr	   ra   r   r   namer    namesAttributeError)rF   r   cs      r   r   ModelData._get_names  s    c9%%#++z22 "%.!,A  ?A ??!,. . CKK((V$$xxz!yy&. " s   "C2C 
CCc                \   [         R                  " U5      (       a  [         R                  " U5      n[        R                  " U5      n[        U5      S:X  aG  UR                  S:X  a  U$ UR                  S:  a%  [        R                  " UR                  5       /5      $ UR                  5       $ r   )r3   _is_structured_ndarraystruct_to_ndarrayr   r   r(   r   r   )rF   r<   s     r   r   ModelData._get_yarr  s{    ++E22//6E

5!u:?zzQazz5==?"344}}r   c                    [         R                  " U5      (       a  [         R                  " U5      n[        R                  " U5      $ r   )r3   r   r   r   r   )rF   r>   s     r   r   ModelData._get_xarr  s2    ++D11..t4Dzz$r   c                    U R                   b8  [        U R                   5      [        U R                  5      :w  a  [        S5      eg g )Nz+endog and exog matrices are different sizes)r>   r(   r<   r   r   s    r   rD   ModelData._check_integrity  s:    99 499~TZZ0 !NOO 1 !r   c                   US:X  a  U R                  U5      $ US:X  a  U R                  U5      $ US:X  a  U R                  U5      $ US:X  a  U R                  U5      $ US:X  a  U R	                  U5      $ US:X  a  U R                  U5      $ US:X  a  U R                  X5      $ US:X  a  U R                  X5      $ US	:X  a  U R                  U5      $ US
:X  a  U R                  U5      $ U$ )Nr   rowscovdates
columns_eqcov_eqgeneric_columnsgeneric_columns_2dr   multivariate_confint)
attach_columnsattach_rows
attach_covattach_datesattach_columns_eqattach_cov_eqattach_generic_columnsattach_generic_columns_2dattach_ynamesattach_mv_confint)rF   objhowr   s       r   wrap_outputModelData.wrap_output  s    )&&s++F]##C((E\??3''G^$$S))L ))#..H_%%c**%%..s::((11#==H_%%c****))#..Jr   c                    U$ r   r   rF   results     r   r   ModelData.attach_columns      r   c                    U$ r   r   r   s     r   r   ModelData.attach_columns_eq  r  r   c                    U$ r   r   r   s     r   r   ModelData.attach_cov  r  r   c                    U$ r   r   r   s     r   r   ModelData.attach_cov_eq  r  r   c                    U$ r   r   r   s     r   r   ModelData.attach_rows  r  r   c                    U$ r   r   r   s     r   r   ModelData.attach_dates  r  r   c                    U$ r   r   r   s     r   r   ModelData.attach_mv_confint  r  r   c                    U$ r   r   rF   r   argsrI   s       r   r    ModelData.attach_generic_columns  r  r   c                    U$ r   r   r  s       r   r   #ModelData.attach_generic_columns_2d  r  r   c                    U$ r   r   r   s     r   r   ModelData.attach_ynames  r  r   )rE   r   r   rA   r0   r<   r>   r1   rB   r9   r=   r?   )Nr2   N)returnzlist[str] | None)r   N)*__name__
__module____qualname____firstlineno____doc__r   r   rL   rR   rj   rC   classmethodr   r   r8   r@   r   r   r   propertyr   setterr   r
   r   r   r   r   r   rD   r   r   r   r   r   r   r   r   r   r   r   __static_attributes__r   r   r   r,   r,   6   s]    LJ< 2;$z   ( ( xK xKt 	  	    0 0 # #          *
 
P
0r   r,   c                      \ rS rSrS rSrg)	PatsyDatai  c                .    UR                   R                  $ r   )r0   column_namesr   s     r   r   PatsyData._get_names  s    +++r   r   N)r  r  r  r  r   r   r   r   r   r"  r"    s    ,r   r"  c                     ^  \ rS rSrSrSU 4S jjr\U 4S j5       r\U 4S j5       rU 4S jr	S r
S rSS	 jrS
 rS rS rS rS rS rS rS rSrU =r$ )
PandasDatai  zR
Data handling class which knows how to reattach pandas metadata to model
results
c                   > [         R                  " U5      nUc  UO[         R                  " U5      nUR                  [        :X  d  Ub  UR                  [        :X  a  [	        S5      e[
        TU ]  X5      $ )NzRPandas data cast to numpy dtype of object. Check input data with np.asarray(data).)r   r   r    objectr   superr@   rF   r<   r>   	__class__s      r   r@   PandasData._convert_endog_exog  sf    

5!|tD)9;;& D$4v9M G H Hw*577r   c                v   > [        U[        [        45      (       a  UR                  U   $ [        TU ]  X5      $ r   )r   r   r   locr*  r   r   r   r   r,  s      r   r   PandasData._drop_nans  s3    a&),--55?"7%a22r   c                   > [        U[        [        45      (       a   UR                  U   R                  S S 2U4   $ [        TU ]  X5      $ r   )r   r   r   r/  r*  r   r0  s      r   r   PandasData._drop_nans_2d  sB    a&),--55?&&q({337(55r   c                ,  > U R                   U R                  p!Ubk  [        US5      (       aZ  [        US5      (       aI  U R                   R                  R	                  U R                  R                  5      (       d  [        S5      e[        TU ]  5         g )Nindexz.The indices for endog and exog are not aligned)r=   r?   r!   r5  equalsr   r*  rD   r+  s      r   rD   PandasData._check_integrity  sm    oot~~t((WT7-C-COO))001E1EFFMNN "r   c                h     UR                   $ ! [         a    U R                  R                   s $ f = fr   )r5  r   r=   r   s     r   r   PandasData._get_row_labels  s2    	)99 	) ??(((	)s     11c                ,    [        XS 5      n[        XS9$ )Nr5  )getattrr   )rF   r   r   r$  s       r   r   !PandasData.attach_generic_columns   s    tD1f11r   c                \    U=(       d    Un[        XS 5      n[        XS 5      n[        XUS9$ Nr5  r   )r<  r   )rF   r   rownamescolnamess       r   r   $PandasData.attach_generic_columns_2d%  s1    'x440440BBr   c                n    UR                   S::  a  [        XR                  S9$ [        XR                  S9$ )Nr   r;  )r   r   r   r   r   s     r   r   PandasData.attach_columns+  s2     ;;!&(8(899V+;+;<<r   c                >    [        XR                  U R                  S9$ r?  )r   r   r   r   s     r   r   PandasData.attach_columns_eq4      {{DKKHHr   c                >    [        XR                  U R                  S9$ r?  )r   r   r   s     r   r   PandasData.attach_cov7  s    ~~t~~NNr   c                >    [        XR                  U R                  S9$ r?  )r   r   r   s     r   r   PandasData.attach_cov_eq:  rH  r   c                j   UR                  5       n[        R                  " U R                  SS9R                  S   nUS:  a  UR                  U4:X  a	  US S S 24   nUR
                  S:  a  [        U5      nO[        U5      nU R                  Ul        U R                  [        U5      * S  Ul        U$ )Nr   ndminr   rX   )r   r   ru   r   ry   r   r   r   r   r   r(   r5  )rF   r   squeezedk_endogouts        r   r   PandasData.attach_rows=  s     >>#((4;;a066q9Q;8>>gZ7a(H==1"CF#C++CKOOS[LM2	
r   c                   UR                  5       n[        R                  " U R                  SS9R                  S   nUS:  a.  UR                  U4:X  a  [        R
                  " U5      S S S 24   nUR                  S:  a  [        X R                  S9$ [        [        R
                  " U5      U R                  U R                  S9$ )Nr   rN  r   rX   r;  r@  )
r   r   ru   r   ry   r   r   r   predict_datesr   )rF   r   rP  rQ  s       r   r   PandasData.attach_datesM  s    >>#((4;;a066q9Q;8>>gZ7zz(+D!G4H==1(*<*<==RZZ/#'#5#5%)[[2 2r   c                N    [        UR                  S5      U R                  SS/S9$ )N)r^   rX   lowerupperr@  )r   reshaper   r   s     r   r   PandasData.attach_mv_confintZ  s)    0#~~")7!35 	5r   c                    UR                  5       nUR                  S:  a  [        X R                  S9$ [	        XR                  S9$ )NrX   )r   )r   )r   r   r   r   r   )rF   r   rP  s      r   r   PandasData.attach_ynames_  s8    >>#==1(55V[[99r   r   r   )r  r  r  r  r  r@   r  r   r   rD   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__)r,  s   @r   r'  r'    sz    
8 3 3 6 6#)2
C=IOI 25
: :r   r'  c                    U R                   S:X  d  U R                  S   S:X  a  S/nU$ [        U R                  S   5       Vs/ s H  nSUS-   -  PM     nnU$ s  snf )Nr   r$   zy%d)r   ry   range)r<   r   is      r   r   r   h  sb    zzQ%++a.A- M */u{{1~)>?)>A%1Q3-)>?M @s   Ac                j   U R                  S5      nUS:H  R                  5       (       aP  UR                  5       n[        SU R                  S   5       Vs/ s H  nSU-  PM
     nnUR                  US5        U$ [        SU R                  S   S-   5       Vs/ s H  nSU-  PM
     nnU$ s  snf s  snf )Nr   r   zx%dconst)varr   argminr`  ry   insert)r>   exog_varrA   ra  
exog_namess        r   r   r   q  s    xx{HA OO%	).q$**Q-)@A)@Aeai)@
A)W-  */q$**Q-/)BC)BAeai)B
C B Ds   B+B0c                    [        X5      nUS:X  a  [        XS9nUR                  U5        US 4$ UR                  " X4SU0UD6$ )Nr2   )r<   r>   rG   )handle_data_class_factoryr   r;   r8   )r<   r>   rG   rI   klassret_dicts         r   r8   r8     sO    %e2E&e/~GWGGGr   c                d   [         R                  " X5      (       a  [        nU$ [         R                  " X5      (       a  [        nU$ [         R
                  " X5      (       a  [        nU$ [         R                  " X5      (       a  [        nU$ [        S[        U 5      < S[        U5      < 35      e)z
Given inputs
zunrecognized data structures: z / )
r3   _is_using_ndarray_typer,   _is_using_pandasr'  _is_using_patsyr"  _is_using_ndarrayr   type)r<   r>   rk  s      r   rj  rj    s     ''44 L 
	#	#E	0	0 L 
	"	"5	/	/ L 
	$	$U	1	1 L u+tDz3 4 	4r   c                    [        U [        [        45      (       a  [        R                  " U 5      n [        U[        [        45      (       a  [        R                  " U5      n[        X5      nU" U 4XUS.UD6$ )N)r>   rG   rH   )r   r   tupler   r   rj  )r<   r>   rG   rH   rI   rk  s         r   handle_dataru    sj    %$''

5!$u&&zz$%e2E TX  r   )Nr2   )r2   N)"r  
__future__r   statsmodels.compat.pythonr   	functoolsr   numpyr   pandasr   r   r   r	   statsmodels.tools.datatoolsre   r3   statsmodels.tools.decoratorsr
   r   r5   r   r   r   r*   r,   r"  r'  r   r   r8   rj  ru  r   r   r   <module>r~     s{    # *   8 8 * * G <

.="t tn,	 ,
s: s:lH&	r   