Ë
    £�Dj  ã                   óž  — d Z ddlmZ ddlZd„ Zdd„Zd„ Zd„ Ze	dk(  �r.dd	l
mZ d
„ Z e eddgddge«      dd«        e eddgddge«      dd«        ej                  g d¢g d¢g d¢g d¢g d¢g«      Z e ej                  ddd«       ej                  ddd«      e«      Z eeed«        ej                  dgdgdgdgg«      Z e ej                  ddd«       ej                  ddd«      e«      Z eeed«        ej                  g d¢g«      Z e ej                  ddd«       ej                  ddd«      e«      Z eeed«       yy)z?Quantizing a continuous distribution in 2d

Author: josef-pktd
é    )ÚlmapNc                 óh   —  ||Ž } ||d   | d   «      } || d   |d   «      } || Ž }||z
  |z
  |z   S )a‰  helper function for probability of a rectangle in a bivariate distribution

    Parameters
    ----------
    lower : array_like
        tuple of lower integration bounds
    upper : array_like
        tuple of upper integration bounds
    cdf : callable
        cdf(x,y), cumulative distribution function of bivariate distribution


    how does this generalize to more than 2 variates ?
    r   é   © )ÚlowerÚupperÚcdfÚprobuuÚprobulÚprobluÚproblls          únC:\Crop_Prediction\Backend\crop-ai-system\venv\Lib\site-packages\statsmodels/sandbox/distributions/quantize.pyÚprob_bv_rectangler      sR   € ñ �%ˆ[€FÙ��q‘˜5 ™8Ó$€FÙ��q‘˜5 ™8Ó$€FÙ�%ˆ[€FØ�F‰?˜VÑ# fÑ,Ð,ó    c                 ó:  — t        | t        j                  «      sœt        t        j                  | «      } t        | «      }g }t        t        t        j                  | «      t        j                  |«      k(  «      rMt        |«      D ]-  }dg|z  }t        d«      ||<   |j                  | |   |   «       Œ/ n| j                  d   }| }t        t        | «      «        ||«      }|j                  «       }t        |«      D ]  }t        j                  ||¬«      }Œ |S )zühelper function for probability of a rectangle grid in a multivariate distribution

    how does this generalize to more than 2 variates ?

    bins : tuple
        tuple of bin edges, currently it is assumed that they broadcast
        correctly

    Nr   )Úaxis)Ú
isinstanceÚnpÚndarrayr   ÚasarrayÚlenÚallÚndimÚonesÚrangeÚsliceÚappendÚshapeÚprintÚcopyÚdiff)	Úbinsr	   r   Ún_dimÚbins_ÚdÚslÚ
cdf_valuesÚprobss	            r   Úprob_mv_gridr)      sî   € ô �dœBŸJ™JÔ'Ü”B—J‘J Ó%ˆÜ�D“	ˆØˆäŒt”B—G‘G˜TÓ"¤b§g¡g¨e£nÑ4Ô5Ü˜5“\ò *�Ø�V˜E‘\�Ü˜d›��1‘Ø—‘˜T !™W R™[Õ)ñ*ð
 —
‘
˜1‘ˆØˆä	Œ#ˆd‹)ÔÙ�U“€JØ�O‰OÓ€EÜ�5‹\ò 'ˆÜ—‘˜ AÔ&‰ð'ð €Lr   c                 óô  ‡— t        j                  | «      } t        j                  |«      }t        | «      dz
  }t        |«      dz
  }t         j                  t        j                  ||f«      z  } || dd…df   |«      Šˆfd„}t        d|dz   «      D ]<  }t        d|dz   «      D ](  }||f}	|dz
  |dz
  f}
t        |
|	|«      ||dz
  |dz
  f<   Œ* Œ> t        j                  |«      j                  «       rJ ‚|S )z‚quantize a continuous distribution given by a cdf

    Parameters
    ----------
    binsx : array_like, 1d
        binedges

    r   Nc                 ó   •— ‰| |f   S ©Nr   )ÚxÚyr'   s     €r   ú<lambda>z#prob_quantize_cdf.<locals>.<lambda>M   s   ø€ ˜J q¨ s™O€ r   ©	r   r   r   Únanr   r   r   ÚisnanÚany)ÚbinsxÚbinsyr	   ÚnxÚnyr(   Úcdf_funcÚxindÚyindr   r   r'   s              @r   Úprob_quantize_cdfr;   >   sý   ø€ ô �J‰J�uÓ€EÜ�J‰J�uÓ€EÜ	ˆU‹�a‰€BÜ	ˆU‹�a‰€BÜ�F‰F”R—W‘W˜b "˜XÓ&Ñ&€EÙ�Uš1˜T˜6‘] EÓ*€JÛ+€HÜ�a˜˜A™“ò MˆÜ˜!˜R ™T“Nò 	MˆDØ˜4�LˆEØ˜!‘V˜T !™VÐ$ˆEä#4°U¸EÀ8Ó#LˆE�$�q‘&˜˜a™�-Ò ñ		MðMô �x‰x˜‹×"Ñ"Ô$Ñ$Ø€Lr   c                 óà  — t        j                  | «      } t        j                  |«      }t        | «      dz
  }t        |«      dz
  }t         j                  t        j                  ||f«      z  }t        d|dz   «      D ]H  }t        d|dz   «      D ]4  }| |   ||   f}| |dz
     ||dz
     f}	t        |	||«      ||dz
  |dz
  f<   Œ6 ŒJ t        j                  |«      j                  «       rJ ‚|S )z³quantize a continuous distribution given by a cdf

    old version without precomputing cdf values

    Parameters
    ----------
    binsx : array_like, 1d
        binedges

    r   r0   )
r4   r5   r	   r6   r7   r(   r9   r:   r   r   s
             r   Úprob_quantize_cdf_oldr=   X   sô   € ô �J‰J�uÓ€EÜ�J‰J�uÓ€EÜ	ˆU‹�a‰€BÜ	ˆU‹�a‰€BÜ�F‰F”R—W‘W˜b "˜XÓ&Ñ&€EÜ�a˜˜A™“ò HˆÜ˜!˜R ™T“Nò 	HˆDØ˜4‘[ %¨¡+Ð.ˆEØ˜4 ™6‘] E¨$¨q©&¡MÐ2ˆEä#4°U¸EÀ3Ó#GˆE�$�q‘&˜˜a™�-Ò ñ		HðHô �x‰x˜‹×"Ñ"Ô$Ñ$Ø€Lr   Ú__main__)Úassert_almost_equalc                 ó   — | |z  S r,   r   )r-   r.   s     r   r/   r/   w   s
   € ˜!˜A™#€ r   r   g      à?é   ç      Ð?)çš™™™™™©?rC   rC   rC   é   é   é   )rB   rB   rB   rB   )éÿÿÿÿ)Ú__doc__Ústatsmodels.compat.pythonr   Únumpyr   r   r)   r;   r=   Ú__name__Únumpy.testingr?   Úunif_2dÚarrayÚarr1bÚlinspaceÚarr1aÚarr2bÚarr2aÚarr3bÚarr3ar   r   r   ú<module>rV      s†  ðñõ +Û ò-ó*òBò4ð: ˆzÓÝ1Ù€GÙÑ)¨1¨Q¨%°!°C°¸'ÓBÀCÈÔLÙÑ)¨1¨Q¨%°#°c°¸GÓDÀdÈBÔOàˆB�H‰HÒ2Ú3Ú3Ú3Ú3ð	5ó 6€Eñ ˜k˜bŸk™k¨!¨A¨aÓ0°+°"·+±+¸aÀÀ!Ó2DÀgÓN€EÙ˜˜u bÔ)àˆB�H‰H˜�gØ�gØ�gØ�gðó  €Eñ ˜k˜bŸk™k¨!¨A¨aÓ0°+°"·+±+¸aÀÀ!Ó2DÀgÓN€EÙ˜˜u bÔ)àˆB�H‰HÒ2Ð3Ó4€EÙ˜k˜bŸk™k¨!¨A¨aÓ0°+°"·+±+¸aÀÀ!Ó2DÀgÓN€EÙ˜˜u bÕ)ð1 r   