Ë
    /�Dj\$  ã                   óx   — g d ¢Z ddlZddlZddlmZ ddlmZ ddlm	Z	m
Z
 d„ Zd„ Zd„ Zd	„ Z G d
„ de«      Zd„ Zy))ÚbalancedÚ	demo_dataÚLookupFactoré    N)Ú
PatsyError)ÚC)Úno_picklingÚassert_no_picklingc                  óD  — | j                  dd«      }g }t        | «      }|D ]7  }| |   }|j                  t        d|dz   «      D �cg c]  }|›|›�‘Œ
 c}«       Œ9 t	        t        j                  |Ž Ž }i }t	        ||«      D ]  \  }}	t        |	«      |z  ||<   Œ |S c c}w )aT  balanced(factor_name=num_levels, [factor_name=num_levels, ..., repeat=1])

    Create simple balanced factorial designs for testing.

    Given some factor names and the number of desired levels for each,
    generates a balanced factorial design in the form of a data
    dictionary. For example:

    .. ipython::

       In [1]: balanced(a=2, b=3)
       Out[1]:
       {'a': ['a1', 'a1', 'a1', 'a2', 'a2', 'a2'],
        'b': ['b1', 'b2', 'b3', 'b1', 'b2', 'b3']}

    By default it produces exactly one instance of each combination of levels,
    but if you want multiple replicates this can be accomplished via the
    `repeat` argument:

    .. ipython::

       In [2]: balanced(a=2, b=2, repeat=2)
       Out[2]:
       {'a': ['a1', 'a1', 'a2', 'a2', 'a1', 'a1', 'a2', 'a2'],
        'b': ['b1', 'b2', 'b1', 'b2', 'b1', 'b2', 'b1', 'b2']}
    Úrepeaté   )ÚpopÚsortedÚappendÚrangeÚzipÚ	itertoolsÚproductÚlist)
Úkwargsr   ÚlevelsÚnamesÚnameÚlevel_countÚiÚvaluesÚdataÚvalues
             úSC:\Crop_Prediction\Backend\crop-ai-system\venv\Lib\site-packages\patsy/user_util.pyr   r      s¶   € ð6 �Z‰Z˜ !Ó$€FØ€FÜ�6‹N€EØò OˆØ˜T‘lˆØ�‰´5¸¸KÈ!¹OÓ3LÖM¨a¡¡qÒ)ÒMÕNðOô ”)×#Ñ# VÐ,Ð-€FØ€DÜ˜5 &Ó)ò *‰ˆˆeÜ˜%“[ 6Ñ)ˆˆTŠ
ð*à€Kùò Ns   ÁB
c                  óš   — t        dd¬«      } | d   g d¢k(  sJ ‚| d   g d¢k(  sJ ‚t        ddd¬«      } | d   g d	¢k(  sJ ‚| d   g d
¢k(  sJ ‚y )Né   é   )ÚaÚbr"   )Úa1r$   r$   Úa2r%   r%   r#   )Úb1Úb2Úb3r&   r'   r(   )r"   r#   r   )r$   r$   r$   r%   r%   r%   r$   r$   r$   r%   r%   r%   )r&   r'   r(   r&   r'   r(   r&   r'   r(   r&   r'   r(   )r   )r   s    r   Útest_balancedr)   ;   so   € Ü�a˜1Ô€DØ�‰9Ò<Ò<Ñ<Ø�‰9Ò<Ò<Ñ<Ü�a˜1 QÔ'€DØ�‰9ò ò ñ ð �‰9ò ò ñ ð ó    c                  óR  — |j                  dd«      }|j                  dd«      }|rt        d|›�«      ‚t        «       }i }| D ]5  }|d   dv r|||<   Œ|d   dv r|j                  |«       Œ)t	        d	|›�«      ‚ t        j                  t        |j                  «       «      t        ¬
«      }t        t        j                  |dz  |z  «      «      }||z  }	t        dd|i|¤Ž}
t
        j                  j                  d«      }t        |«      D ]  }|j                  |	¬«      |
|<   Œ |
S )a?  demo_data(*names, nlevels=2, min_rows=5)

    Create simple categorical/numerical demo data.

    Pass in a set of variable names, and this function will return a simple
    data set using those variable names.

    Names whose first letter falls in the range "a" through "m" will be made
    categorical (with `nlevels` levels). Those that start with a "p" through
    "z" are numerical.

    We attempt to produce a balanced design on the categorical variables,
    repeating as necessary to generate at least `min_rows` data
    points. Categorical variables are returned as a list of strings.

    Numerical data is generated by sampling from a normal distribution. A
    fixed random seed is used, so that identical calls to demo_data() will
    produce identical results. Numerical data is returned in a numpy array.

    Example:

    .. ipython:

       In [1]: patsy.demo_data("a", "b", "x", "y")
       Out[1]:
       {'a': ['a1', 'a1', 'a2', 'a2', 'a1', 'a1', 'a2', 'a2'],
        'b': ['b1', 'b2', 'b1', 'b2', 'b1', 'b2', 'b1', 'b2'],
        'x': array([ 1.76405235,  0.40015721,  0.97873798,  2.2408932 ,
                     1.86755799, -0.97727788,  0.95008842, -0.15135721]),
        'y': array([-0.10321885,  0.4105985 ,  0.14404357,  1.45427351,
                     0.76103773,  0.12167502,  0.44386323,  0.33367433])}
    Únlevelsr    Úmin_rowsé   zunexpected keyword arguments r   ÚabcdefghijklmnÚpqrstuvwxyzz	bad name )Údtypeg      ð?r   )Úsize© )r   Ú	TypeErrorÚsetÚaddr   ÚnpÚprodr   r   ÚintÚceilr   ÚrandomÚRandomStater   Únormal)r   r   r,   r-   Ú	numericalÚcategoricalr   Úbalanced_design_sizer   Únum_rowsr   Úrs               r   r   r   ^   s*  € ðB �j‰j˜ AÓ&€GØ�z‰z˜* aÓ(€HÙÝ¹VÐEÓFÐFÜ“€IØ€KØò 6ˆØ�‰7Ð&Ñ&Ø 'ˆK˜ÒØ�!‰W˜Ñ%Ø�M‰M˜$Õå©dÐ4Ó5Ð5ð6ô Ÿ7™7¤4¨×(:Ñ(:Ó(<Ó#=ÄSÔIÐÜ”—‘˜ C™Ð*>Ñ>Ó?Ó@€FØÐ,Ñ,€HÜÑ1˜6Ð1 [Ñ1€DÜ
�	‰	×Ñ˜aÓ €AÜ�yÓ!ò -ˆØ—X‘X 8�XÓ,ˆˆTŠ
ð-à€Kr*   c            	      óð  — t        ddd«      } t        | j                  «       «      g d¢k(  sJ ‚| d   g d¢k(  sJ ‚| d   g d¢k(  sJ ‚| d   j                  t	        j                  t
        «      k(  sJ ‚| d   j                  dk(  sJ ‚t        dd«      }t        |j                  «       «      ddgk(  sJ ‚t        |d   «      t        |d   «      cxk(  rd	k(  sJ ‚ J ‚t        t        dd
¬«      d   «      d
k(  sJ ‚t        t        dddd
¬«      d   «      dk(  sJ ‚t        t        dddd
d¬«      d   «      dk(  sJ ‚dd l}|j                  t        t         ddd«       |j                  t        t         ddd¬«       y )Nr"   r#   Úx)r"   r#   rD   )r$   r$   r%   r%   r$   r$   r%   r%   )r&   r'   r&   r'   r&   r'   r&   r'   )é   Úyr.   é
   )r-   é   r!   )r-   r,   é   r   Ú__123é{   )Úasdfasdf)r   r   Úkeysr1   r7   ÚfloatÚshapeÚlenÚpytestÚraisesr   r4   )Úd1Úd2rQ   s      r   Útest_demo_datarU   –   sK  € Ü	�3˜˜SÓ	!€BÜ�"—'‘'“)Ó¢Ò/Ñ/Øˆc‰7ÒFÒFÑFØˆc‰7ÒFÒFÑFØˆc‰7�=‰=œBŸH™H¤U›OÒ+Ñ+Øˆc‰7�=‰=˜DÒ Ñ ä	�3˜Ó	€BÜ�"—'‘'“)Ó  c 
Ò*Ñ*Üˆr�#‰w‹<œ3˜r #™w›<Ô,¨1Ò,Ñ,Ð,Ñ,äŒy˜ rÔ*¨3Ñ/Ó0°BÒ6Ñ6ÜŒy˜˜c 3°Ô4°SÑ9Ó:¸bÒ@Ñ@ÜŒy˜˜c 3°¸QÔ?ÀÑDÓEÈÒKÑKãà
‡M�M”*œi¨¨c°7Ô;Ø
‡M�M”)œY¨¨S¸3€MÕ?r*   c                   óT   — e Zd ZdZ	 dd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ ZeZy)r   a8  A simple factor class that simply looks up a named entry in the given
    data.

    Useful for programatically constructing formulas, and as a simple example
    of the factor protocol.  For details see
    :ref:`expert-model-specification`.

    Example::

      dmatrix(ModelDesc([], [Term([LookupFactor("x")])]), {"x": [1, 2, 3]})

    :arg varname: The name of this variable; used as a lookup key in the
      passed in data dictionary/DataFrame/whatever.
    :arg force_categorical: If True, then treat this factor as
      categorical. (Equivalent to using :func:`C` in a regular formula, but
      of course you can't do that with a :class:`LookupFactor`.
    :arg contrast: If given, the contrast to use; see :func:`C`. (Requires
      ``force_categorical=True``.)
    :arg levels: If given, the categorical levels; see :func:`C`. (Requires
      ``force_categorical=True``.)
    :arg origin: Either ``None``, or the :class:`Origin` of this factor for use
      in error reporting.

    .. versionadded:: 0.2.0
       The ``force_categorical`` and related arguments.
    Nc                 ó˜   — || _         || _        || _        || _        || _        | j                  s|�t        d«      ‚|�t        d«      ‚y y )Nz)contrast= requires force_categorical=Truez'levels= requires force_categorical=True)Ú_varnameÚ_force_categoricalÚ	_contrastÚ_levelsÚoriginÚ
ValueError)ÚselfÚvarnameÚforce_categoricalÚcontrastr   r\   s         r   Ú__init__zLookupFactor.__init__È   s_   € ð  ˆŒØ"3ˆÔØ!ˆŒØˆŒØˆŒØ×&Ò&ØÐ#Ü Ð!LÓMÐMØÐ!Ü Ð!JÓKÐKð "ð 'r*   c                 ó   — | j                   S ©N)rX   ©r^   s    r   r   zLookupFactor.nameÖ   s   € Ø�}‰}Ðr*   c                 óN   — | j                   j                  ›d| j                  ›d�S )Nú(ú))Ú	__class__Ú__name__rX   re   s    r   Ú__repr__zLookupFactor.__repr__Ù   s   € ØŸ>™>×2Ó2°D·M³MÐBÐBr*   c                 óú   — t        |t        «      xrj | j                  |j                  k(  xrO | j                  |j                  k(  xr4 | j                  |j                  k(  xr | j
                  |j
                  k(  S rd   )Ú
isinstancer   rX   rY   rZ   r[   ©r^   Úothers     r   Ú__eq__zLookupFactor.__eq__Ü   sm   € ä�uœlÓ+ò .Ø—‘ §¡Ñ/ò.à×'Ñ'¨5×+CÑ+CÑCò.ð —‘ %§/¡/Ñ1ò.ð —‘ §¡Ñ-ð	
r*   c                 ó   — | |k(   S rd   r3   rn   s     r   Ú__ne__zLookupFactor.__ne__å   s   € Ø˜5‘=Ð Ð r*   c                 óz   — t        t        | j                  | j                  | j                  | j
                  f«      S rd   )Úhashr   rX   rY   rZ   r[   re   s    r   Ú__hash__zLookupFactor.__hash__è   s5   € ÜäØ—‘Ø×'Ñ'Ø—‘Ø—‘ðó
ð 	
r*   c                  ó   — y)Nr   r3   )r^   ÚstateÚeval_envs      r   Úmemorize_passes_neededz#LookupFactor.memorize_passes_neededó   s   € Ør*   c                 ó   — J ‚rd   r3   )r^   rw   Ú
which_passr   s       r   Úmemorize_chunkzLookupFactor.memorize_chunkö   ó   € Ùr*   c                 ó   — J ‚rd   r3   )r^   rw   r{   s      r   Úmemorize_finishzLookupFactor.memorize_finishù   r}   r*   c                 ó€   — || j                      }| j                  r"t        || j                  | j                  ¬«      }|S )N)ra   r   )rX   rY   r   rZ   r[   )r^   Úmemorize_stater   r   s       r   ÚevalzLookupFactor.evalü   s4   € Ø�T—]‘]Ñ#ˆØ×"Ò"Ü�e d§n¡n¸T¿\¹\ÔJˆEØˆr*   )FNNN)rj   Ú
__module__Ú__qualname__Ú__doc__rb   r   rk   rp   rr   ru   ry   r|   r   r‚   r   Ú__getstate__r3   r*   r   r   r   ¬   sI   „ ñð8 TXóLòòCò
ò!ò	
òòòòð �Lr*   r   c                  ó@  — t        d«      } | j                  «       dk(  sJ ‚| t        d«      k(  sJ ‚| t        d«      k7  sJ ‚t        | «      t        t        d«      «      k(  sJ ‚t        | «      t        t        d«      «      k7  sJ ‚| j                  i ddi«      dk(  sJ ‚| j                  i ddi«      dk(  sJ ‚t	        | «      dk(  sJ ‚| j
                  �J ‚t        dd¬«      }|j
                  dk(  sJ ‚t        dd	d
d¬«      }|j                  i dg d¢i«      }|j                  g d¢k(  sJ ‚|j                  d
k(  sJ ‚|j                  dk(  sJ ‚dd l	}|j                  t        t         dd
¬«       |j                  t        t         dd¬«       t        t        d«      «       y )Nr"   r#   r   r    zLookupFactor('a')Úasdf)r\   ÚcTÚCONTRAST)r   r    )r`   ra   r   )r   r   r    r   Únc)ra   )r   )r   r   rt   r‚   Úreprr\   r   ra   r   rQ   rR   r]   r	   )Úl_aÚl_with_originÚl_cÚboxrQ   s        r   Útest_LookupFactorr‘     sh  € Ü
�sÓ
€CØ�8‰8‹:˜ÒÑØ”,˜sÓ#Ò#Ñ#Ø”,˜sÓ#Ò#Ñ#Ü�‹9œœ\¨#Ó.Ó/Ò/Ñ/Ü�‹9œœ\¨#Ó.Ó/Ò/Ñ/Ø�8‰8�B˜˜a˜Ó! QÒ&Ñ&Ø�8‰8�B˜˜a˜Ó! QÒ&Ñ&Ü�‹9Ð+Ò+Ñ+Ø�:‰:ÐÑÜ  ¨VÔ4€MØ×Ñ 6Ò)Ñ)ä
�s¨d¸ZÐPVÔ
W€CØ
�(‰(�2˜šYÐ'Ó
(€CØ�8‰8’yÒ Ñ Ø�<‰<˜:Ò%Ñ%Ø�:‰:˜ÒÑãà
‡M�M”*œl¨D¸:€MÔFØ
‡M�M”*œl¨D¸€MÔ@ä”| CÓ(Õ)r*   )Ú__all__r   Únumpyr7   Úpatsyr   Úpatsy.categoricalr   Ú
patsy.utilr   r	   r   r)   r   rU   Úobjectr   r‘   r3   r*   r   ú<module>r˜      sG   ðò 4€ã Û Ý Ý ß 6ò&òR òF5òp@ô,V�6ô Vór*r*   