
    J/Ph%J                         g d Z ddlZddlmZ ddlmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZ e	rddlZ G d de          ZddZd Zd	 Zd
 Zd Z G d de          Zd ZddZd ZdS ))Cguess_categoricalCategoricalSniffercategorical_to_int    N)
PatsyError)SortAnythingKeysafe_scalar_isnaniterablehave_pandashave_pandas_categoricalhave_pandas_categorical_dtypesafe_is_pandas_categoricalpandas_Categorical_from_codespandas_Categorical_categoriespandas_Categorical_codessafe_issubdtypeno_picklingassert_no_picklingc                       e Zd Zd ZeZdS )_CategoricalBoxc                 0    || _         || _        || _        d S Ndatacontrastlevels)selfr   r   r   s       Q/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/patsy/categorical.py__init__z_CategoricalBox.__init__=   s    	     N)__name__
__module____qualname__r   r   __getstate__ r    r   r   r   <   s$          
 LLLr    r   c                     t          | t                    r|| j        }|| j        }| j        } t          | ||          S )a/  
    Marks some `data` as being categorical, and specifies how to interpret
    it.

    This is used for three reasons:

    * To explicitly mark some data as categorical. For instance, integer data
      is by default treated as numerical. If you have data that is stored
      using an integer type, but where you want patsy to treat each different
      value as a different level of a categorical factor, you can wrap it in a
      call to `C` to accomplish this. E.g., compare::

        dmatrix("a", {"a": [1, 2, 3]})
        dmatrix("C(a)", {"a": [1, 2, 3]})

    * To explicitly set the levels or override the default level ordering for
      categorical data, e.g.::

        dmatrix("C(a, levels=["a2", "a1"])", balanced(a=2))
    * To override the default coding scheme for categorical data. The
      `contrast` argument can be any of:

      * A :class:`ContrastMatrix` object
      * A simple 2d ndarray (which is treated the same as a ContrastMatrix
        object except that you can't specify column names)
      * An object with methods called `code_with_intercept` and
        `code_without_intercept`, like the built-in contrasts
        (:class:`Treatment`, :class:`Diff`, :class:`Poly`, etc.). See
        :ref:`categorical-coding` for more details.
      * A callable that returns one of the above.
    )
isinstancer   r   r   r   r   s      r   r   r   E   sI    @ $(( }H>[Fy46222r    c                     t          d          } t          | t                    sJ | j        dk    sJ | j        J | j        J t          ddd          }|j        dk    sJ |j        dk    sJ |j        dk    sJ t          |d          }|j        dk    sJ |j        dk    sJ |j        dk    sJ t          |d          }|j        dk    sJ |j        dk    sJ |j        dk    sJ t          |           d S )NasdfDATACONTRASTLEVELSz
NEW LEVELSr   zNEW CONTRAST)r   r'   r   r   r   r   r   )c1c2c3c4s       r   test_Cr2   n   sC   	
6Bb/*****7f9;	
6:x	(	(B7f;*$$$$9    	
2l	#	#	#B7f;*$$$$9$$$$	
2~		B7f;.((((9    rr    c                     t          |           rdS t          | t                    rdS t          j        |           } t          | j        t          j                  rdS dS )NTF)r   r'   r   npasarrayr   dtypenumberr   s    r   r   r      s]    !$'' t$(( t:dDtz29-- u4r    c                  l   t           rQt          j        g d          } t          |           sJ t          r#t          t          j        |                     sJ t          t          g d                    sJ t          ddg          sJ t          ddg          sJ t          ddt          j        g          sJ t          g d          sJ t          g d          rJ t          ddd	t          j        g          rJ t          g d
          rJ t          dddt          j        g          rJ d S )N         TFabr>   r?   Nr;   r<   r=   )      ?       @      @rA   rB   rC   )	r   pandasCategoricalr   r   Seriesr   r4   nan)cs    r   test_guess_categoricalrI      sR    7yyy)) #####( 	7$V]1%5%566666Qyyy\\*****dE]+++++c3Z(((((c3/00000---..... +++++ !Q26!233333 11111 #sC!89999999r    c                     t          | d          r| j        dk    rt          d          t          |           rt	          | t
          t          f          r| g} | S )Nndimr;   z)categorical data cannot be >1-dimensional)hasattrrK   r   r
   r'   strbytesr8   s    r   _categorical_shape_fixrO      sa    
 tV FQDEEE D>> ZsEl;; vKr    c                   &    e Zd ZddZd Zd ZeZdS )r   Nc                 d    || _         || _        d | _        d | _        t	                      | _        d S r   )
_NA_action_origin	_contrast_levelsset
_level_set)r   	NA_actionorigins      r   r   zCategoricalSniffer.__init__   s-    #%%r    c                     | j         6t          | j                  }|                    t                     || _         t          | j                   | j        fS )N)key)rU   listrW   sortr   tuplerT   )r   r   s     r   levels_contrastz"CategoricalSniffer.levels_contrast   sK    <$/**FKKOK,,,!DLT\""DN22r    c                     t          |d          r|j        | _        t          |t                    r)|j        t          |j                  | _        dS |j        }t          |          r#t          t          |                    | _        dS t          |d          r7t          |j        t          j                  rt          ddg          | _        dS t#          |          }|D ]}| j                            |          r|du s|du r| j                            ddg           B	 | j                            |           ^# t,          $ r t/          d| j                  w xY w| j        t          ddg          k    S )Nr   Tr6   F?Error interpreting categorical data: all items must be hashable)rL   r   rT   r'   r   r   r^   rU   r   r   r   r   r6   r4   bool_rV   rW   rO   rR   is_categorical_NAupdateadd	TypeErrorr   rS   )r   r   values      r   sniffzCategoricalSniffer.sniff   s   4$$ 	+!]DNdO,, 	!{&$T[11t y%d++ 	 !!>t!D!DEEDL4 4!! 	odj"(&K&K 	!4-00DO4%d++ 	 	E0077 }}&&e}5555O''....    $5   #tUm"4"444s   (E E#r   )r!   r"   r#   r   r_   rh   r   r$   r%   r    r   r   r      sH               3 3 3(5 (5 (5T LLLr    r   c                     ddl m d*fd	} t          rd t          g}t          r|t
          j        d gz  }|D ]} | g  |t          j        g d                    gdd            | g  |t          d	dgd
dg                    gdd            | g  |t          d	dgdd
g                    gdd            |t          j        d
dg                    }d|_	         | g |gddd            | g t          d	dg          t          ddg          gdd            | g t          d	dgg d          t          ddg          gdd            | g t          d	dgg d          t          ddg          gdd            | ddgt          d	t          j        g          t          dd g          gdd           t           dg                    }|                    t          d	t          j        d g                     |                                \  }}t          |          t          d d	g          k    sJ  | ddgt          dt          j        d g          gdd            | g t          ddg          t          dg          t          ddg          gdd            | g t          j        ddg          d ggdd            | ddgt          d!d d"t          j        d#g          gdd$            | g t          ddgd%&          gdd'd%            | g ddgdggdd(            | g dd
gd
ggdd            | g dgdd)           dd l}t                                 }|                    t&          |j        i g           |                    t&          |j        t          j        dgg                     d S )+Nr   NAActionc                     t           |                     }|D ]#}|                    |          }|r|sJ  n|rJ $|                                ||fk    sJ d S )NNA_types)r   rh   r_   )	rn   datasexp_finish_fast
exp_levelsexp_contrastsnifferr   donerk   s	           r   tz"test_CategoricalSniffer.<locals>.t   s    $XXx%@%@%@AA 	+ 	+D==&&D +&&&&*****&&((Z,FFFFFFFr    c                     | S r   r%   xs    r   <lambda>z)test_CategoricalSniffer.<locals>.<lambda>   s    1 r    c                 D    t          t          j        |                     S r   )r   rD   rF   rw   s    r   ry   z)test_CategoricalSniffer.<locals>.<lambda>   s    qq1A1A/B/B r    )r;   r<   NT)r;   r<   r;   r>   r?   r>   r?   r?   r>   r+   r<   r=   Fr:   r-      )r=   r<   r;   NoneNaN
   )r;   r   rm   FT      (   )FTr   r   r   r   foor?   r<   r>   r;   rH   N)r   r   r   FOO)r   )r   r   r   r   r   )r?   r   )patsy.missingrk   r   r   r   rD   rF   rE   r   r   r4   rG   r   rh   r_   rV   r5   pytestraisesr   )	ru   prepsprepobjrs   r   _r   rk   s	           @r   test_CategoricalSnifferr      s   &&&&&&	G 	G 	G 	G 	G 	G  7 a ( 	Dfm%B%BCCE 	7 	7DAb44*<<<8899:D&IIIA3QFS#JGGHHI	   A3QFS#JGGHHI	   $v)3*5566C%CLAb3%z:6666Ab1aV99aAii
 %333Ab1aVIII&&&1a&		
2D)DDDAb1aVIII&&&1a&		
2D)DDD Avuo1bf+2t*6wGGG E7!;!;!;<<GMM!Q%&&'''
 ''))IFAv;;#tQi..(((( Avuo4.//0$FFFAb1b"X;;5'

Ar2hKK
0%9VWWWAb2:tUm$$ug
.mDDD A		
HdHbfk:	;	;<)	   Ab1b"X&&&
'%@@@ AbB8bT
E<000AbC:u
uj111 Ab3%MMM !,,G
MM*gmbT222 MM*gmRZ#-@-@AAAAAr    c           
         t          |t                    sJ t          |           rGt          t          |                     }||k    st	          d|d||          t          |           S t          | t                    rN| j        @t          | j                  |k    r(t	          d|dt          | j                  |          | j        } t          |           } 	 t          t          |t          t          |                                        }n# t          $ r t	          d|          w xY wt          | d          rVt!          | j        t$          j                  r7|d         dk    r+|d         dk    r|                     t$          j                  S t%          j        t          |           t.          	          }t1          |           D ]\  }}|                    |          rd
||<    	 ||         ||<   -# t4          $ r d}	g }
t          |          |	k    r|
d |D             z  }
nJ|
d |d |	dz           D             z  }
|
                    d           |
d ||	 dz  d          D             z  }
dd                    |
          z  }t	          d|d|d|          t          $ r t	          d||          w xY wt:          r5t          | t<          j                  rt=          j        || j                   }|S )Nzmismatching levels: expected z, got ra   r6   Fr   Tr;   r6   r}   c                 ,    g | ]}t          |          S r%   repr.0levels     r   
<listcomp>z&categorical_to_int.<locals>.<listcomp>x  s    "C"C"C54;;"C"C"Cr    c                 ,    g | ]}t          |          S r%   r   r   s     r   r   z&categorical_to_int.<locals>.<listcomp>z  s    "W"W"W54;;"W"W"Wr    r<   z...c                 ,    g | ]}t          |          S r%   r   r   s     r   r   z&categorical_to_int.<locals>.<listcomp>|  s    "X"X"X54;;"X"X"Xr    z[%s]z, z=Error converting data to categorical: observation with value z6 does not match any of the expected levels (expected: )zCError converting data to categorical: encountered unhashable value index)!r'   r^   r   r   r   r   r   r   r   rO   dictziprangelenrf   rL   r   r6   r4   rb   astypeint_emptyint	enumeraterc   KeyErrorappendjoinr   rD   rF   r   )r   r   rX   rY   data_levels_tuplelevel_to_intoutirg   SHOW_LEVELS
level_strs	level_strs               r   r   r   G  s   fe$$$$$ "$'' 	.!"?"E"EFF F***=CVVEVEVW   (---$(( ;"uT['9'9V'C'C*665---/  
 y!$''D
Cc&kk(:(:;;<< 
 
 
PRX
 
 	

 tW (/$*bh"G"G (!##T(:a(?(?;;rw'''
(3t99C
(
(
(CdOO  5&&u-- 	CFF%e,A   
v;;+--"C"CF"C"C"CCJJ"W"WFCU[TUEUCU<V"W"W"WWJ%%e,,,"X"XFK<STCTCVCV<W"X"X"XXJ"dii
&;&;<	 j DI55)))U 	       j9>A    3z$66 3mCtz222Js   !7D D45HCKc            	      
   dd l } ddlm} t          rt	          j        g dg d          }t          |d |                      }t          j        |g dk              sJ t          j        |j	        g dk              sJ | 
                    t          t          t	          j        d|i          d |                       t          r#t          g}t          rd }|                    |           |D ]} |g d	d
          }t          |d
 |                      }t          j        |g d	k              sJ  |g d	d          }	t          |d
 |dg                    }
t          j        |
g d	k              sJ | 
                    t          t           |ddgd
          d |                       | 
                    t          t           |ddgd
          d |                        |            fd} |g dd
g d            |t          j        g d          d
g d            |t          j        g dt$                    d
g d            |g ddg d            |t          j        g d          dg d            |t          j        g dt&                    dg d            |t          j        g dt$                    dg d            |g ddg d            |g ddg d           | 
                    t          t          g dd |                        |t)          g d          d
g d            |t)          g d          dg d            |t)          g dddg          dg d           | 
                    t          t          t)          g dddg          d |                        |dd
dg            |dd
dg            |dd dg           | 
                    t          t          t          j        ddgddgg          d
 |                       | 
                    t          t          ddgddi f |                       | 
                    t          t          ddi gd
 |                        |dd t          j        dgd
g d! |dd"g                      |dd t          j        dgd#g d! |dd"g                      |dd t          j        dgd#g d$ |d"g                     | 
                    t          t          g d%d& |                       d S )'Nr   rj   )r>   r?   rH   r   r   )r   r;   r<   r   c                 J    t          | |          }t          j        |          S r   )r   rD   rF   )codes
categoriesrH   s      r   Series_from_codesz2test_categorical_to_int.<locals>.Series_from_codes  s!    1%DD}Q'''r    )r;   r   r   r{   )r>   r~   r~   rm   r;   )r>   rH   r|   c                 V    t          | ||          }t          j        ||          sJ d S r   )r   r4   array_equal)r   r   expectedrX   gots        r   ru   z"test_categorical_to_int.<locals>.t  s1     vy99~c8,,,,,,,r    )r>   r?   r>   )r   r;   r   r   )r;   r<   r   )r<   r   r;   )r>   dzr?   )r   r=   r   )r   r?   r   r   )r   r   )r;   r   r;   r?   r>   r-   Tr   )r;   r   r   r   r   r@   )r;   r<   r   r   )r>   r?   q)r>   r?   rH   r   efgh)r   r   rk   r   rD   rF   r   r4   allr   r   r   	DataFramer   r   r   r   r5   objectfloatr   rG   )r   rk   sc_pandasconstructorsr   concatconvcat2conv2ru   s               r   test_categorical_to_intr     sn   MMM&&&&&& 
M///>>>%a((**EEvh)))+,,,,,vhn455555b!W%%HJJ	
 	
 	
  56( 	3( ( (  1222 	 	C#jjj*--C%c:xxzzBBD6$***,-----3zzz=11D&sJ6(8S8S8STTE6%:::-.....MM"QFJ''

   MM"QFJ''

    -5HJJ - - - - Aoooz999---Abj!!:yyy999Abj///YYYGGGAiiiIII&&&AbjY			222Abj%((()YYY???Abj&)))9iii@@@Aooo+YYY777A$$$&:IIIFFF
MM&XXZZ   Aa*iii000Aa*iii000Aac
+++ZCCC
MM	///3*---

   Ac:sAc:sAdMA3 MM

S#Jc
+,,

   MM&c
S#rNHHJJ   MM&c2
HHJJ   A	dBFC 65/***	   A	dBFC 65/***	   A	dBFC 5'"""	   MM0

    r    )NNr   )__all__numpyr4   patsyr   
patsy.utilr   r	   r
   r   r   r   r   r   r   r   r   r   r   rD   r   r   r   r2   r   rI   rO   r   r   r   r   r%   r    r   <module>r      s  
 Q
P
P<                                          MMM
    f   &3 &3 &3 &3R  ,  : : :"  9 9 9 9 9 9 9 9xYB YB YBzE E E EPA A A A Ar    