ó
î&]\c           @` sØ   d  d l  m Z m Z m Z d  d l Z d  d l j Z d d l	 m
 Z
 m Z d d l m Z d  d l m Z d d d	 f Z d
 e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d S(   i    (   t   divisiont   print_functiont   absolute_importNi   (   t   approx_derivativet   group_columns(   t   HessianUpdateStrategy(   t   LinearOperators   2-points   3-pointt   cst   ScalarFunctionc           B` sM   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 RS(   s‘  Scalar function and its derivatives.

    This class defines a scalar function F: R^n->R and methods for
    computing or approximating its first and second derivatives.

    Notes
    -----
    This class implements a memoization logic. There are methods `fun`,
    `grad`, hess` and corresponding attributes `f`, `g` and `H`. The following
    things should be considered:

        1. Use only public methods `fun`, `grad` and `hess`.
        2. After one of the methods is called, the corresponding attribute
           will be set. However, a subsequent call with a different argument
           of *any* of the methods may overwrite the attribute.
    c         ` sº  t  ˆ ƒ r1 ˆ t k r1 t d j t ƒ ƒ ‚ n  t  ˆ ƒ pU ˆ t k pU t ˆ t ƒ sp t d j t ƒ ƒ ‚ n  ˆ t k r— ˆ t k r— t d ƒ ‚ n  t j | ƒ j t	 ƒ ˆ _
 ˆ j
 j ˆ _ d ˆ _ d ˆ _ d ˆ _ t ˆ _ t ˆ _ t ˆ _ i  ‰ ˆ t k r*ˆ ˆ d <| ˆ d <| ˆ d <n  ˆ t k rWˆ ˆ d <| ˆ d <t ˆ d <n  ‡  ‡ ‡ f d	 †  ‰ ‡ ‡ f d
 †  } | ˆ _ ˆ j ƒ  t  ˆ ƒ rÇ‡  ‡ ‡ f d †  ‰ ‡ ‡ f d †  }	 n$ ˆ t k rë‡ ‡ ‡ f d †  }	 n  |	 ˆ _ ˆ j ƒ  t  ˆ ƒ råˆ | ˆ  Œ ˆ _ t ˆ _ ˆ j d 7_ t j ˆ j ƒ rs‡  ‡ ‡ f d †  ‰ t j ˆ j ƒ ˆ _ n] t ˆ j t ƒ r‡  ‡ ‡ f d †  ‰ n3 ‡  ‡ ‡ f d †  ‰ t j t j ˆ j ƒ ƒ ˆ _ ‡ ‡ f d †  }
 n ˆ t k r‡ ‡ ‡ f d †  }
 |
 ƒ  t ˆ _ n[ t ˆ t ƒ rtˆ ˆ _ ˆ j j  ˆ j d ƒ t ˆ _ d  ˆ _" d  ˆ _# ‡ f d †  }
 n  |
 ˆ _$ t ˆ t ƒ rž‡ f d †  } n ‡ f d †  } | ˆ _% d  S(   Ns,   `grad` must be either callable or one of {}.sB   `hess` must be either callable,HessianUpdateStrategy or one of {}.s‹   Whenever the gradient is estimated via finite-differences, we require the Hessian to be estimated using one of the quasi-Newton strategies.i    t   methodt   rel_stept   boundst   as_linear_operatorc         ` s   ˆ j  d 7_  ˆ |  ˆ  Œ S(   Ni   (   t   nfev(   t   x(   t   argst   funt   self(    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyt   fun_wrappedC   s    c           ` s   ˆ  ˆ j  ƒ ˆ _ d  S(   N(   R   t   f(    (   R   R   (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyt
   update_funG   s    c         ` s%   ˆ j  d 7_  t j ˆ |  ˆ  Œ ƒ S(   Ni   (   t   ngevt   npt
   atleast_1d(   R   (   R   t   gradR   (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyt   grad_wrappedO   s    c           ` s   ˆ  ˆ j  ƒ ˆ _ d  S(   N(   R   t   g(    (   R   R   (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyt   update_gradS   s    c           ` s/   ˆ j  ƒ  t ˆ ˆ j d ˆ j ˆ  ˆ _ d  S(   Nt   f0(   t   _update_funR   R   R   R   (    (   t   finite_diff_optionsR   R   (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyR   W   s    
i   c         ` s%   ˆ j  d 7_  t j ˆ |  ˆ  Œ ƒ S(   Ni   (   t   nhevt   spst
   csr_matrix(   R   (   R   t   hessR   (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyt   hess_wrappedf   s    c         ` s   ˆ j  d 7_  ˆ |  ˆ  Œ S(   Ni   (   R   (   R   (   R   R"   R   (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyR#   l   s    c         ` s.   ˆ j  d 7_  t j t j ˆ |  ˆ  Œ ƒ ƒ S(   Ni   (   R   R   t
   atleast_2dt   asarray(   R   (   R   R"   R   (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyR#   q   s    c           ` s   ˆ  ˆ j  ƒ ˆ _ d  S(   N(   R   t   H(    (   R#   R   (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyt   update_hessv   s    c           ` s2   ˆ j  ƒ  t ˆ ˆ j d ˆ j ˆ  ˆ _ ˆ j S(   NR   (   t   _update_gradR   R   R   R&   (    (   R   R   R   (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyR'   z   s    
R"   c           ` s5   ˆ  j  ƒ  ˆ  j j ˆ  j ˆ  j ˆ  j ˆ  j ƒ d  S(   N(   R(   R&   t   updateR   t   x_prevR   t   g_prev(    (   R   (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyR'   ‰   s    
c         ` sT   ˆ  j  ƒ  ˆ  j ˆ  _ ˆ  j ˆ  _ |  ˆ  _ t ˆ  _ t ˆ  _ t ˆ  _ ˆ  j	 ƒ  d  S(   N(
   R(   R   R*   R   R+   t   Falset	   f_updatedt	   g_updatedt	   H_updatedt   _update_hess(   R   (   R   (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyt   update_x   s    
				c         ` s(   |  ˆ  _  t ˆ  _ t ˆ  _ t ˆ  _ d  S(   N(   R   R,   R-   R.   R/   (   R   (   R   (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyR1   ›   s    			(&   t   callablet
   FD_METHODSt
   ValueErrort   formatt
   isinstanceR   R   R   t   astypet   floatR   t   sizet   nR   R   R   R,   R-   R.   R/   t   Truet   _update_fun_implR   t   _update_grad_implR(   R&   R    t   issparseR!   R   R$   R%   t
   initializet   NoneR*   R+   t   _update_hess_implt   _update_x_impl(   R   R   t   x0R   R   R"   t   finite_diff_rel_stept   finite_diff_boundsR   R   R'   R1   (    (	   R   R   R   R   R   R   R"   R#   R   sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyt   __init__   s‚    								



	
	
						c         C` s#   |  j  s |  j ƒ  t |  _  n  d  S(   N(   R-   R<   R;   (   R   (    (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyR   ¢   s    	
c         C` s#   |  j  s |  j ƒ  t |  _  n  d  S(   N(   R.   R=   R;   (   R   (    (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyR(   §   s    	
c         C` s#   |  j  s |  j ƒ  t |  _  n  d  S(   N(   R/   RA   R;   (   R   (    (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyR0   ¬   s    	
c         C` s6   t  j | |  j ƒ s% |  j | ƒ n  |  j ƒ  |  j S(   N(   R   t   array_equalR   RB   R   R   (   R   R   (    (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyR   ±   s    
c         C` s6   t  j | |  j ƒ s% |  j | ƒ n  |  j ƒ  |  j S(   N(   R   RG   R   RB   R(   R   (   R   R   (    (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyR   ·   s    
c         C` s6   t  j | |  j ƒ s% |  j | ƒ n  |  j ƒ  |  j S(   N(   R   RG   R   RB   R0   R&   (   R   R   (    (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyR"   ½   s    
(
   t   __name__t
   __module__t   __doc__RF   R   R(   R0   R   R   R"   (    (    (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyR      s   	…					t   VectorFunctionc           B` s_   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z RS(
   s‘  Vector function and its derivatives.

    This class defines a vector function F: R^n->R^m and methods for
    computing or approximating its first and second derivatives.

    Notes
    -----
    This class implements a memoization logic. There are methods `fun`,
    `jac`, hess` and corresponding attributes `f`, `J` and `H`. The following
    things should be considered:

        1. Use only public methods `fun`, `jac` and `hess`.
        2. After one of the methods is called, the corresponding attribute
           will be set. However, a subsequent call with a different argument
           of *any* of the methods may overwrite the attribute.
    c	         ` s  t  ˆ ƒ r1 ˆ t k r1 t d j t ƒ ƒ ‚ n  t  ˆ ƒ pU ˆ t k pU t ˆ t ƒ sp t d j t ƒ ƒ ‚ n  ˆ t k r— ˆ t k r— t d ƒ ‚ n  t j | ƒ j t	 ƒ ˆ _
 ˆ j
 j ˆ _ d ˆ _ d ˆ _ d ˆ _ t ˆ _ t ˆ _ t ˆ _ i  ‰  ˆ t k rjˆ ˆ  d <| ˆ  d <| d  k	 rHt | ƒ }	 | |	 f ˆ  d <n  | ˆ  d <t j ˆ j
 ƒ ˆ _ n  ˆ t k r¬ˆ ˆ  d <| ˆ  d <t ˆ  d	 <t j ˆ j
 ƒ ˆ _ n  ˆ t k rÓˆ t k rÓt d ƒ ‚ n  ‡ ‡ f d
 †  ‰ ‡ ‡ f d †  }
 |
 ˆ _ |
 ƒ  t j ˆ j ƒ ˆ _ ˆ j j ˆ _ t  ˆ ƒ r?ˆ ˆ j
 ƒ ˆ _ t ˆ _ ˆ j d 7_ | s…| d  k r¸t j  ˆ j ƒ r¸‡ ‡ f d †  ‰ t j! ˆ j ƒ ˆ _ t ˆ _" nr t j  ˆ j ƒ rú‡ ‡ f d †  ‰ ˆ j j# ƒ  ˆ _ t ˆ _" n0 ‡ ‡ f d †  ‰ t j$ ˆ j ƒ ˆ _ t ˆ _" ‡ ‡ f d †  } nˆ t k rJt% ˆ ˆ j
 d ˆ j ˆ  ˆ _ t ˆ _ | s™| d  k rÏt j  ˆ j ƒ rÏ‡  ‡ ‡ f d †  } t j! ˆ j ƒ ˆ _ t ˆ _" qJt j  ˆ j ƒ r‡  ‡ ‡ f d †  } ˆ j j# ƒ  ˆ _ t ˆ _" qJ‡  ‡ ‡ f d †  } t j$ ˆ j ƒ ˆ _ t ˆ _" n  | ˆ _& t  ˆ ƒ r7ˆ ˆ j
 ˆ j ƒ ˆ _' t ˆ _ ˆ j d 7_ t j  ˆ j' ƒ rË‡ ‡ f d †  ‰ t j! ˆ j' ƒ ˆ _' nW t ˆ j' t( ƒ rò‡ ‡ f d †  ‰ n0 ‡ ‡ f d †  ‰ t j$ t j) ˆ j' ƒ ƒ ˆ _' ‡ ‡ f d †  } nž ˆ t k rz‡ f d †  ‰ ‡  ‡ ‡ f d †  } | ƒ  t ˆ _ n[ t ˆ t ƒ rÕˆ ˆ _' ˆ j' j* ˆ j d ƒ t ˆ _ d  ˆ _+ d  ˆ _, ‡ f d †  } n  | ˆ _- t ˆ t ƒ rÿ‡ f d †  } n ‡ f d †  } | ˆ _. d  S(   Ns+   `jac` must be either callable or one of {}.sB   `hess` must be either callable,HessianUpdateStrategy or one of {}.s‹   Whenever the Jacobian is estimated via finite-differences, we require the Hessian to be estimated using one of the quasi-Newton strategies.i    R	   R
   t   sparsityR   R   c         ` s"   ˆ j  d 7_  t j ˆ  |  ƒ ƒ S(   Ni   (   R   R   R   (   R   (   R   R   (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyR     s    c           ` s   ˆ  ˆ j  ƒ ˆ _ d  S(   N(   R   R   (    (   R   R   (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyR     s    i   c         ` s"   ˆ j  d 7_  t j ˆ  |  ƒ ƒ S(   Ni   (   t   njevR    R!   (   R   (   t   jacR   (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyt   jac_wrapped  s    c         ` s   ˆ j  d 7_  ˆ  |  ƒ j ƒ  S(   Ni   (   RM   t   toarray(   R   (   RN   R   (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyRO   #  s    c         ` s"   ˆ j  d 7_  t j ˆ  |  ƒ ƒ S(   Ni   (   RM   R   R$   (   R   (   RN   R   (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyRO   *  s    c           ` s   ˆ  ˆ j  ƒ ˆ _ d  S(   N(   R   t   J(    (   RO   R   (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyt
   update_jac0  s    R   c           ` s8   ˆ j  ƒ  t j t ˆ ˆ j d ˆ j ˆ  ƒ ˆ _ d  S(   NR   (   R   R    R!   R   R   R   RQ   (    (   R   R   R   (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyRR   :  s    
c           ` s5   ˆ j  ƒ  t ˆ ˆ j d ˆ j ˆ  j ƒ  ˆ _ d  S(   NR   (   R   R   R   R   RP   RQ   (    (   R   R   R   (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyRR   C  s    
c           ` s8   ˆ j  ƒ  t j t ˆ ˆ j d ˆ j ˆ  ƒ ˆ _ d  S(   NR   (   R   R   R$   R   R   R   RQ   (    (   R   R   R   (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyRR   K  s    
c         ` s%   ˆ j  d 7_  t j ˆ  |  | ƒ ƒ S(   Ni   (   R   R    R!   (   R   t   v(   R"   R   (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyR#   \  s    c         ` s   ˆ j  d 7_  ˆ  |  | ƒ S(   Ni   (   R   (   R   RS   (   R"   R   (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyR#   b  s    c         ` s.   ˆ j  d 7_  t j t j ˆ  |  | ƒ ƒ ƒ S(   Ni   (   R   R   R$   R%   (   R   RS   (   R"   R   (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyR#   g  s    c           ` s   ˆ  ˆ j  ˆ j ƒ ˆ _ d  S(   N(   R   RS   R&   (    (   R#   R   (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyR'   l  s    c         ` s   ˆ  |  ƒ j  j | ƒ S(   N(   t   Tt   dot(   R   RS   (   RO   (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyt	   jac_dot_vo  s    c           ` sJ   ˆ j  ƒ  t ˆ ˆ j d ˆ j j j ˆ j ƒ d ˆ j f ˆ  ˆ _ d  S(   NR   R   (   t   _update_jacR   R   RQ   RT   RU   RS   R&   (    (   R   RV   R   (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyR'   r  s
    
	R"   c          ` s€   ˆ  j  ƒ  ˆ  j d  k	 r| ˆ  j d  k	 r| ˆ  j ˆ  j }  ˆ  j j j ˆ  j ƒ ˆ  j j j ˆ  j ƒ } ˆ  j	 j
 |  | ƒ n  d  S(   N(   RW   R*   R@   t   J_prevR   RQ   RT   RU   RS   R&   R)   (   t   delta_xt   delta_g(   R   (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyR'     s
    
.c         ` sT   ˆ  j  ƒ  ˆ  j ˆ  _ ˆ  j ˆ  _ |  ˆ  _ t ˆ  _ t ˆ  _ t ˆ  _ ˆ  j	 ƒ  d  S(   N(
   RW   R   R*   RQ   RX   R,   R-   t	   J_updatedR/   R0   (   R   (   R   (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyR1     s    
				c         ` s(   |  ˆ  _  t ˆ  _ t ˆ  _ t ˆ  _ d  S(   N(   R   R,   R-   R[   R/   (   R   (   R   (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyR1   —  s    			(/   R2   R3   R4   R5   R6   R   R   R   R7   R8   R   R9   R:   R   RM   R   R,   R-   R[   R/   R@   R   t   copyt   x_diffR;   R<   t
   zeros_likeR   RS   t   mRQ   R    R>   R!   t   sparse_jacobianRP   R$   R   t   _update_jac_implR&   R   R%   R?   R*   RX   RA   RB   (   R   R   RC   RN   R"   RD   t   finite_diff_jac_sparsityRE   R`   t   sparsity_groupsR   RR   R'   R1   (    (	   R   R   R   R"   R#   RN   RV   RO   R   sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyRF   Õ   sÎ    								





												
c         C` s.   t  j | |  j ƒ s* | |  _ t |  _ n  d  S(   N(   R   RG   RS   R,   R/   (   R   RS   (    (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyt	   _update_vŸ  s    	c         C` s)   t  j | |  j ƒ s% |  j | ƒ n  d  S(   N(   R   RG   R   RB   (   R   R   (    (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyt	   _update_x¤  s    c         C` s#   |  j  s |  j ƒ  t |  _  n  d  S(   N(   R-   R<   R;   (   R   (    (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyR   ¨  s    	
c         C` s#   |  j  s |  j ƒ  t |  _  n  d  S(   N(   R[   Ra   R;   (   R   (    (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyRW   ­  s    	
c         C` s#   |  j  s |  j ƒ  t |  _  n  d  S(   N(   R/   RA   R;   (   R   (    (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyR0   ²  s    	
c         C` s   |  j  | ƒ |  j ƒ  |  j S(   N(   Re   R   R   (   R   R   (    (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyR   ·  s    
c         C` s   |  j  | ƒ |  j ƒ  |  j S(   N(   Re   RW   RQ   (   R   R   (    (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyRN   ¼  s    
c         C` s+   |  j  | ƒ |  j | ƒ |  j ƒ  |  j S(   N(   Rd   Re   R0   R&   (   R   R   RS   (    (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyR"   Á  s    
(   RH   RI   RJ   RF   Rd   Re   R   RW   R0   R   RN   R"   (    (    (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyRK   Ä   s   	Ê							t   LinearVectorFunctionc           B` s;   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s  Linear vector function and its derivatives.

    Defines a linear function F = A x, where x is n-dimensional vector and
    A is m-by-n matrix. The Jacobian is constant and equals to A. The Hessian
    is identically zero and it is returned as a csr matrix.
    c         C` s  | s! | d  k r? t j | ƒ r? t j | ƒ |  _ t |  _ nE t j | ƒ ri | j ƒ  |  _ t |  _ n t	 j
 | ƒ |  _ t |  _ |  j j \ |  _ |  _ t	 j | ƒ j t ƒ |  _ |  j j |  j ƒ |  _ t |  _ t	 j |  j d t ƒ|  _ t j |  j |  j f ƒ |  _ d  S(   Nt   dtype(   R@   R    R>   R!   RQ   R;   R`   RP   R,   R   R$   t   shapeR_   R:   R   R7   R8   R   RU   R   R-   t   zerosRS   R&   (   R   t   ARC   R`   (    (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyRF   Ð  s    !		c         C` s.   t  j | |  j ƒ s* | |  _ t |  _ n  d  S(   N(   R   RG   R   R,   R-   (   R   R   (    (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyRe   ä  s    	c         C` s>   |  j  | ƒ |  j s7 |  j j | ƒ |  _ t |  _ n  |  j S(   N(   Re   R-   RQ   RU   R   R;   (   R   R   (    (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyR   é  s
    	c         C` s   |  j  | ƒ |  j S(   N(   Re   RQ   (   R   R   (    (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyRN   ð  s    c         C` s   |  j  | ƒ | |  _ |  j S(   N(   Re   RS   R&   (   R   R   RS   (    (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyR"   ô  s    	(   RH   RI   RJ   RF   Re   R   RN   R"   (    (    (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyRf   É  s   				t   IdentityVectorFunctionc           B` s   e  Z d  Z d „  Z RS(   sþ   Identity vector function and its derivatives.

    The Jacobian is the identity matrix, returned as a dense array when
    `sparse_jacobian=False` and as a csr matrix otherwise. The Hessian is
    identically zero and it is returned as a csr matrix.
    c         C` sq   t  | ƒ } | s | d  k r< t j | d d ƒ} t } n t j | ƒ } t } t t |  ƒ j	 | | | ƒ d  S(   NR5   t   csr(
   t   lenR@   R    t   eyeR;   R   R,   t   superRk   RF   (   R   RC   R`   R:   Rj   (    (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyRF     s    	(   RH   RI   RJ   RF   (    (    (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyRk   ú  s   (   t
   __future__R    R   R   t   numpyR   t   scipy.sparset   sparseR    t   _numdiffR   R   t   _hessian_update_strategyR   t   scipy.sparse.linalgR   R3   t   objectR   RK   Rf   Rk   (    (    (    sG   lib/python2.7/site-packages/scipy/optimize/_differentiable_functions.pyt   <module>   s   ¸ÿ 1