
    :|hq                     |    d dl mZ d dl mZ d dlmZ d dlmZ  ed       G d de             Z ed      d	        Zy
)    )backend)ops)keras_export)Mergezkeras.layers.Multiplyc                       e Zd ZdZd Zy)Multiplya/  Performs elementwise multiplication.

    It takes as input a list of tensors, all of the same shape,
    and returns a single tensor (also of the same shape).

    Examples:

    >>> input_shape = (2, 3, 4)
    >>> x1 = np.random.rand(*input_shape)
    >>> x2 = np.random.rand(*input_shape)
    >>> y = keras.layers.Multiply()([x1, x2])

    Usage in a Keras model:

    >>> input1 = keras.layers.Input(shape=(16,))
    >>> x1 = keras.layers.Dense(8, activation='relu')(input1)
    >>> input2 = keras.layers.Input(shape=(32,))
    >>> x2 = keras.layers.Dense(8, activation='relu')(input2)
    >>> # equivalent to `y = keras.layers.multiply([x1, x2])`
    >>> y = keras.layers.Multiply()([x1, x2])
    >>> out = keras.layers.Dense(4)(y)
    >>> model = keras.models.Model(inputs=[input1, input2], outputs=out)

    c           	         |D cg c]  }t        j                  |       }}t        d |D              }d }d }t        ||      D ]  \  }}|t	        j
                  t	        j                  |d      t	        j                  |            }t	        j                  ||t	        j                  d|j                              }|r||nt	        j                  ||      }||nt	        j                  ||      } |rct	        j                  ||t	        j                  d|j                              }t	        j                  |dd      }t        j                  ||       |S c c}w )Nc              3   $   K   | ]  }|d u 
 y w)N ).0masks     `/var/www/html/test/engine/venv/lib/python3.12/site-packages/keras/src/layers/merging/multiply.py	<genexpr>z+Multiply._merge_function.<locals>.<genexpr>$   s     A4d$.As      r   F)axiskeepdims)r   get_keras_maskallzipr   broadcast_toexpand_dimsshapewherecastdtype
logical_ormultiplyanyset_keras_mask)selfinputsxmaskshas_output_maskoutputoutput_maskr   s           r   _merge_functionzMultiply._merge_function"   s/   4:;q''*;;A5AA65) 	FGAt''b(A399Q<PIIdAsxx177';<" '.  ^^K>  
 !.Qcll61.EF	F YY{FCHHQ4MNF''+BGK""6;7/ <s   EN)__name__
__module____qualname____doc__r(   r       r   r   r      s    2r-   r   zkeras.layers.multiplyc                 $     t        di ||       S )a{  Functional interface to the `keras.layers.Multiply` layer.

    Args:
        inputs: A list of input tensors , all of the same shape.
        **kwargs: Standard layer keyword arguments.

    Returns:
        A tensor as the elementwise product of the inputs with the same
        shape as the inputs.

    Examples:

    >>> input_shape = (2, 3, 4)
    >>> x1 = np.random.rand(*input_shape)
    >>> x2 = np.random.rand(*input_shape)
    >>> y = keras.layers.multiply([x1, x2])

    Usage in a Keras model:

    >>> input1 = keras.layers.Input(shape=(16,))
    >>> x1 = keras.layers.Dense(8, activation='relu')(input1)
    >>> input2 = keras.layers.Input(shape=(32,))
    >>> x2 = keras.layers.Dense(8, activation='relu')(input2)
    >>> y = keras.layers.multiply([x1, x2])
    >>> out = keras.layers.Dense(4)(y)
    >>> model = keras.models.Model(inputs=[input1, input2], outputs=out)

    r   )r   )r"   kwargss     r   r   r   =   s    < 8ff%%r-   N)		keras.srcr   r   keras.src.api_exportr   #keras.src.layers.merging.base_merger   r   r   r   r-   r   <module>r3      sM      - 5 %&2u 2 '2j %&& '&r-   