
    BVh                         d Z ddlmZ ddlmZ ddlmZ ddlmZ ddlm	Z	  e	dg       G d	 d
ej                               Zy)z'ProximalGradientDescent for TensorFlow.    )ops)gen_training_ops)math_ops)	optimizer)	tf_exportz&train.ProximalGradientDescentOptimizer)v1c                   H     e Zd ZdZ	 	 	 d fd	Zd Zd Zd Zd Zd Z	 xZ
S )	 ProximalGradientDescentOptimizeraf  Optimizer that implements the proximal gradient descent algorithm.

  References:
    Efficient Learning using Forward-Backward Splitting:
      [Duchi et al., 2009](http://papers.nips.cc/paper/3793-efficient-learning-using-forward-backward-splitting)
      ([pdf](http://papers.nips.cc/paper/3793-efficient-learning-using-forward-backward-splitting.pdf))
  c                 t    t         t        |   ||       || _        || _        || _        d| _        d| _        y)a  Construct a new proximal gradient descent optimizer.

    Args:
      learning_rate: A Tensor or a floating point value.  The learning
        rate to use.
      l1_regularization_strength: A float value, must be greater than or
        equal to zero.
      l2_regularization_strength: A float value, must be greater than or
        equal to zero.
      use_locking: If True use locks for update operations.
      name: Optional name prefix for the operations created when applying
        gradients. Defaults to "GradientDescent".
    N)superr
   __init___learning_rate_l1_regularization_strength_l2_regularization_strength"_l1_regularization_strength_tensor"_l2_regularization_strength_tensor)selflearning_ratel1_regularization_strengthl2_regularization_strengthuse_lockingname	__class__s         d/home/dcms/DCMS/lib/python3.12/site-packages/tensorflow/python/training/proximal_gradient_descent.pyr   z)ProximalGradientDescentOptimizer.__init__%   s?      

*D:;M'D'AD$'AD$.2D+.2D+    c                     t        j                  || j                  | j                  | j                  || j
                        j                  S N)r   )r   apply_proximal_gradient_descent_learning_rate_tensorr   r   _use_lockingopr   gradvars      r   _apply_densez-ProximalGradientDescentOptimizer._apply_dense<   sF    ;;""////%%' (*r*r   c                     t        j                  |j                  | j                  | j                  | j
                  || j                        S r   )r   (resource_apply_proximal_gradient_descenthandler   r   r   r    r"   s      r   _resource_apply_densez6ProximalGradientDescentOptimizer._resource_apply_denseE   sC    DD

""////%%' 'r   c           	          t        j                  || j                  | j                  | j                  |j
                  |j                  | j                        j                  S r   )	r   &sparse_apply_proximal_gradient_descentr   r   r   valuesindicesr    r!   r"   s      r   _apply_sparsez.ProximalGradientDescentOptimizer._apply_sparseN   sQ    BB""////%%' (*r*r   c           	      R   t        j                  |j                  t        j                  | j
                  |j                        t        j                  | j                  |j                        t        j                  | j                  |j                        ||| j                        S r   )
r   /resource_sparse_apply_proximal_gradient_descentr(   r   castr   dtyper   r   r    )r   r#   r$   r-   s       r   _resource_apply_sparsez7ProximalGradientDescentOptimizer._resource_apply_sparseX   ss    KK

d00$**=d==tzzJd==tzzJ%%' 'r   c                     t        j                  | j                  d      | _        t        j                  | j                  d      | _        t        j                  | j                  d      | _        y )Nr   )r   r   r   )r   convert_to_tensorr   r   r   r   r   r   )r   s    r   _preparez)ProximalGradientDescentOptimizer._prepareb   sa    !$!6!6t7J7J<K"MD.1.C.C((/K/MD+.1.C.C((/K/MD+r   )        r7   FProximalGradientDescent)__name__
__module____qualname____doc__r   r%   r)   r.   r3   r6   __classcell__)r   s   @r   r
   r
      s4     @C;@-3.*'*'Mr   r
   N)r<   tensorflow.python.frameworkr   tensorflow.python.opsr   r   tensorflow.python.trainingr    tensorflow.python.util.tf_exportr   	Optimizerr
    r   r   <module>rD      sI     . + 2 * 0 6 789MMy':': MM :MMr   