Ë
    ¢�DjŒ  ã                   óX   — d Z ddlZddlmZ ddlmc mZ 	 	 d
d„Zd„ Z	d„ Z
d„ Zd„ Zd	„ Zy)zR
Holds files for l1 regularization of LikelihoodModel, using
scipy.optimize.slsqp
é    N)Ú
fmin_slsqpc                 óœ  ‡ ‡‡‡'‡(— t        j                  |«      j                  d«      }t        |«      Š(t        j                  |t        j
                  |«      «      }t        j                  |d   «      j                  d«      Š'‰'t        j                  ‰(«      z  Š'‰'j                  «       dk\  sJ ‚t        ||«      }|j                  dd«      }ˆ'ˆˆ ˆ(fd„}ˆ(fd„}ˆ'ˆ(ˆfd„}ˆ(fd	„}t        ||||||||	|¬
«	      }t        j                  |d   d‰( «      }|d   }|d   }t        j                  |‰'‰||«      }|d   }|d   }|d   }t        j                  |‰(‰'‰||||«      \  }}|	r[|\  }}}}} |t        j                  |«      «      } |dk(  }!t        |«      dz   |z   }"|}#t!        d«      }$t!        d«      }%| |!|#|$|%||"dœ}&|	r|&fS |S )a›  
    Solve the l1 regularized problem using scipy.optimize.fmin_slsqp().

    Specifically:  We convert the convex but non-smooth problem

    .. math:: \min_\beta f(\beta) + \sum_k\alpha_k |\beta_k|

    via the transformation to the smooth, convex, constrained problem in twice
    as many variables (adding the "added variables" :math:`u_k`)

    .. math:: \min_{\beta,u} f(\beta) + \sum_k\alpha_k u_k,

    subject to

    .. math:: -u_k \leq \beta_k \leq u_k.

    Parameters
    ----------
    All the usual parameters from LikelhoodModel.fit
    alpha : non-negative scalar or numpy array (same size as parameters)
        The weight multiplying the l1 penalty term
    trim_mode : 'auto, 'size', or 'off'
        If not 'off', trim (set to zero) parameters that would have been zero
            if the solver reached the theoretical minimum.
        If 'auto', trim params using the Theory above.
        If 'size', trim params if they have very small absolute value
    size_trim_tol : float or 'auto' (default = 'auto')
        For use when trim_mode === 'size'
    auto_trim_tol : float
        For sue when trim_mode == 'auto'.  Use
    qc_tol : float
        Print warning and do not allow auto trim when (ii) in "Theory" (above)
        is violated by this much.
    qc_verbose : bool
        If true, print out a full QC report upon failure
    acc : float (default 1e-6)
        Requested accuracy as used by slsqp
    ÚFÚalpha_rescaledr   Úaccg»½×Ùß|Û=c                 ó"   •— t        ‰| ‰‰g‰¢­Ž S ©N)Ú_objective_func)Úx_fullÚalphaÚargsÚfÚk_paramss    €€€€ú]C:\Crop_Prediction\Backend\crop-ai-system\venv\Lib\site-packages\statsmodels/base/l1_slsqp.pyú<lambda>zfit_l1_slsqp.<locals>.<lambda>F   s   ø€ œ/¨!¨V°X¸uÐLÀtÒL€ ó    c                 ó   •— t        | ‰«      S r	   )Ú
_f_ieqcons©r   r   s    €r   r   zfit_l1_slsqp.<locals>.<lambda>G   s   ø€ ¤J¨v°xÓ$@€ r   c                 ó    •— t        ‰| ‰‰«      S r	   )Ú_fprime)r   r   r   Úscores    €€€r   r   zfit_l1_slsqp.<locals>.<lambda>H   s   ø€ ¤¨°¸À%Ó!H€ r   c                 ó   •— t        | ‰«      S r	   )Ú_fprime_ieqconsr   s    €r   r   zfit_l1_slsqp.<locals>.<lambda>I   s   ø€ ¬¸ÀÓ)J€ r   )Ú	f_ieqconsÚfprimer   ÚiterÚdispÚfull_outputÚfprime_ieqconsNÚqc_tolÚ
qc_verboseÚ	trim_modeÚsize_trim_tolÚauto_trim_tolú Únan)ÚfoptÚ	convergedÚ
iterationsÚgoptÚhoptÚtrimmedÚwarnflag)ÚnpÚarrayÚravelÚlenÚappendÚfabsÚonesÚminÚ_get_disp_slsqpÚ
setdefaultr   ÚasarrayÚl1_solvers_commonÚ
qc_resultsÚdo_trim_paramsÚstrÚfloat))r   r   Ústart_paramsr   Úkwargsr   ÚmaxiterÚcallbackÚretallr   ÚhessÚx0Ú
disp_slsqpr   ÚfuncÚf_ieqcons_wrapÚfprime_wrapÚfprime_ieqcons_wrapÚresultsÚparamsr!   r"   Úpassedr#   r$   r%   r-   r   ÚfxÚitsÚimodeÚsmoder(   r)   r.   r*   r+   r,   Úretvalsr   r   s)   `` `                                   @@r   Úfit_l1_slsqprS   
   s÷  ü€ ôR —8‘8˜LÓ)×/Ñ/°Ó4€Lô
 �<Ó €Hä	�‰�<¤§¡¨Ó!6Ó	7€Bä�H‰H�VÐ,Ñ-Ó.×4Ñ4°SÓ9€Eà”B—G‘G˜HÓ%Ñ%€EØ�9‰9‹;˜!ÒÑä   vÓ.€Jà
×
Ñ
˜E 5Ó
)€Cö M€DÛ@€NÝH€KÛJÐô Øˆb˜N°;ÀCØ˜:°;Ø*ô,€Gô �Z‰Z˜ ™
 9 HÐ-Ó.€Fð �HÑ€FØ˜Ñ%€JÜ×)Ñ)Ø��u˜f jó2€Fð �{Ñ#€IØ˜?Ñ+€MØ˜?Ñ+€MÜ'×6Ñ6Ø�˜% ¨°	¸=Øó�O€FˆGñ Ø(/Ñ%ˆ��C˜ Ù”B—J‘J˜vÓ&Ó'ˆØ˜a‘Zˆ	Ü�u“: Ñ# eÑ+ˆØˆ
Ü�U‹|ˆÜ�U‹|ˆà yÀ
Ø $°7Ø ñ"ˆñ Ø�wˆÐàˆr   c                 ó&   — | s|r
| rd}|rd}S d}|S )Né   é   r   © )r   rC   rF   s      r   r7   r7   w   s,   € Ù‰vÙØˆJÙØˆJð Ðð ˆ
ØÐr   c                 óP   — |d| }||d } | |g|¢­Ž ||z  j                  «       z   S )z,
    The regularized objective function
    N)Úsum)r   r   r   r   r   Úx_paramsÚx_addeds          r   r
   r
   ‚   s>   € ð �i�xÐ €HØ�X�YÐ€GáˆXÐ˜Ò ¨¡× 5Ñ 5Ó 7Ñ7Ð7r   c                 óD   — |d| }t        j                   | |«      |«      S )z$
    The regularized derivative
    N©r/   r3   )r   r   r   r   rZ   s        r   r   r   Œ   s%   € ð �i�xÐ €Hä�9‰9‘U˜8“_ eÓ,Ð,r   c                 óN   — | d| }| |d }t        j                  ||z   ||z
  «      S )z%
    The inequality constraints.
    Nr]   )r   r   rZ   r[   s       r   r   r   •   s7   € ð �i�xÐ €HØ�X�YÐ€Gä�9‰9�X Ñ'¨°8Ñ);Ó<Ð<r   c                 óÈ   — t        j                  |«      }t        j                  ||fd¬«      }t        j                  | |fd¬«      }t        j                  ||fd¬«      }|S )z2
    Derivative of the inequality constraints
    rU   )Úaxisr   )r/   ÚeyeÚconcatenate)r   r   ÚIÚAÚBÚCs         r   r   r   Ÿ   sU   € ô 	�‰ˆxÓ€AÜ
�‰˜˜1�v AÔ&€AÜ
�‰˜˜˜A�w QÔ'€AÜ
�‰˜˜1�v AÔ&€Aà€Hr   )Fiè  NFFN)Ú__doc__Únumpyr/   Úscipy.optimizer   Ú"statsmodels.base.l1_solvers_commonÚbaser:   rS   r7   r
   r   r   r   rW   r   r   ú<module>rl      sB   ðñó Ý %ß >Ð >ð CGØ=AójòZò8ò-ò=ó	r   