o
    2hq                     @   s\   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 deZedd	d
 ZdS )    )backend)ops)keras_export)Mergezkeras.layers.Multiplyc                   @   s   e Zd ZdZdd ZdS )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              	   C   s   dd |D }t dd |D }d }d }t||D ];\}}|d urHtt|dt|}t||td|j}|rH|d u rB|nt	||}|d u rN|nt
||}q|rqt||td|j}tj|ddd	}t|| |S )
Nc                 S   s   g | ]}t |qS  )r   get_keras_mask).0xr   r   \/var/www/html/chatgem/venv/lib/python3.10/site-packages/keras/src/layers/merging/multiply.py
<listcomp>#   s    z,Multiply._merge_function.<locals>.<listcomp>c                 s   s    | ]}|d uV  qd S )Nr   )r	   maskr   r   r   	<genexpr>$   s    z+Multiply._merge_function.<locals>.<genexpr>   r   F)axiskeepdims)allzipr   broadcast_toexpand_dimsshapewherecastdtype
logical_ormultiplyanyr   set_keras_mask)selfinputsmaskshas_output_maskoutputoutput_maskr
   r   r   r   r   _merge_function"   s&   
zMultiply._merge_functionN)__name__
__module____qualname____doc__r%   r   r   r   r   r      s    r   zkeras.layers.multiplyc                 K   s   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)

    Nr   )r   )r    kwargsr   r   r   r   =   s   r   N)		keras.srcr   r   keras.src.api_exportr   #keras.src.layers.merging.base_merger   r   r   r   r   r   r   <module>   s    5