
    2Vh                     H    d dl mZ d dlmZ  ed       G d de             Zy)    )keras_export)BaseImagePreprocessingLayerzkeras.layers.RandomInvertc                   p     e Zd ZdZdZdZ	 	 	 	 d fd	ZddZddZddZ		 ddZ
	 dd	Zd
 Z fdZ xZS )RandomInverta  Preprocessing layer for random inversion of image colors.

    This layer randomly inverts the colors of input images with a specified
    probability range. When applied, each image has a chance of having its
    colors inverted, where the pixel values are transformed to their
    complementary values. Images that are not selected for inversion
    remain unchanged.

    Args:
        factor: A single float or a tuple of two floats.
            `factor` controls the probability of inverting the image colors.
            If a tuple is provided, the value is sampled between the two values
            for each image, where `factor[0]` is the minimum and `factor[1]` is
            the maximum probability. If a single float is provided, a value
            between `0.0` and the provided float is sampled.
            Defaults to `(0, 1)`.
        value_range: a tuple or a list of two elements. The first value
            represents the lower bound for values in passed images, the second
            represents the upper bound. Images passed to the layer should have
            values within `value_range`. Defaults to `(0, 255)`.
        seed: Integer. Used to create a random seed.
    F)r      c                     t        |   dd|i| | j                  |       || _        || _        | j
                  j                  j                  |      | _        y )Ndata_format )	super__init___set_factorvalue_rangeseedbackendrandomSeedGenerator	generator)selffactorr   r   r	   kwargs	__class__s         p/home/dcms/DCMS/lib/python3.12/site-packages/keras/src/layers/preprocessing/image_preprocessing/random_invert.pyr   zRandomInvert.__init__#   sS     	;[;F; &	,,::4@    c                    |sy t        |t              r|d   }n|}|xs% | j                  | j                  j                        }| j                  j                  |      }t        |      }|dk(  rd}n|dk(  r|d   }nt        d|       | j                  j                  j                  |f| j                  d   | j                  d   |      }| j                  j                  j                  |fdd|      }	|	|k  }
d|
iS )	Nimages   r      r   zBExpected the input image to be rank 3 or 4. Received inputs.shape=)shapeminvalmaxvalr   apply_inversion)
isinstancedict_get_seed_generatorr   _backendr   len
ValueErrorr   uniformr   )r   datatrainingr   r   images_shaperank
batch_sizeinvert_probabilityrandom_thresholdr!   s              r   get_random_transformationz&RandomInvert.get_random_transformation1   s   dD!(^FFFt//0E0EF||))&1< 19JQY%aJ  ,~/ 
 "\\0088-;;q>;;q>	 9 
  <<..66-	 7 
 +-??!?33r   c                     |rk| j                   j                  || j                        }|d   }| j                   j                  j	                  |d d d d d f   | j
                  d   |z
  |      S |S )Nr!   r   )r   castcompute_dtypenumpywherer   )r   r   transformationr*   r!   s        r   transform_imageszRandomInvert.transform_imagesY   sw    \\&&vt/A/ABF,->?O<<%%++4t 34  #f, 
 r   c                     |S Nr
   )r   labelsr6   r*   s       r   transform_labelszRandomInvert.transform_labelsd   s    r   c                     |S r9   r
   )r   bounding_boxesr6   r*   s       r   transform_bounding_boxesz%RandomInvert.transform_bounding_boxesg   s
     r   c                     |S r9   r
   )r   segmentation_masksr6   r*   s       r   transform_segmentation_masksz)RandomInvert.transform_segmentation_maskso   s
     "!r   c                     |S r9   r
   )r   input_shapes     r   compute_output_shapez!RandomInvert.compute_output_shapet   s    r   c                 t    | j                   | j                  | j                  d}t        |          }i ||S )N)r   r   r   )r   r   r   r   
get_config)r   configbase_configr   s      r   rF   zRandomInvert.get_configw   s@    kk++II

 g(*(+(((r   )g      ?)r      NN)TN)T)__name__
__module____qualname____doc___USE_BASE_FACTOR_FACTOR_BOUNDSr   r0   r7   r;   r>   rA   rD   rF   __classcell__)r   s   @r   r   r      s]    . N A&4P	 	 <@"
) )r   r   N)keras.src.api_exportr   Qkeras.src.layers.preprocessing.image_preprocessing.base_image_preprocessing_layerr   r   r
   r   r   <module>rS      s2    -
 )*v). v) +v)r   