o
    ?e+                     @   st   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 ddlm	Z	 ddl
mZ ed	e	jdddZd
S )z8Signal reconstruction via overlapped addition of frames.    )dtypes)ops)tensor_util)	array_ops)math_ops)dispatch)	tf_exportzsignal.overlap_and_addNc                    s  t |d| |gJ t j| dd} | jd t j|dd}|jd |jjs0td|j t	
|}|du}|r=|n|}t| }t	
|}|durO|}|dd	  t }t	
|}|dure|} fd
d}	|d }
|d	 }|
||d   }|r| jjdur|| jjd jkr|	|g}tj| |ddW  d   S |
 |  }d|gd|| |
 gg}t|dgtj}t||gd}t| |} |	|| ||g}t| |} tt||g d gd}t	
|}|dur|n|}t| |} |	|| | |g}t| |} | dd|| d | ddf } |	||| d |g}t| |} t| d} |	|| d | g}t| |} | dd|f } | W  d   S 1 sXw   Y  dS )a_  Reconstructs a signal from a framed representation.

  Adds potentially overlapping frames of a signal with shape
  `[..., frames, frame_length]`, offsetting subsequent frames by `frame_step`.
  The resulting tensor has shape `[..., output_size]` where

      output_size = (frames - 1) * frame_step + frame_length

  Args:
    signal: A [..., frames, frame_length] `Tensor`. All dimensions may be
      unknown, and rank must be at least 2.
    frame_step: An integer or scalar `Tensor` denoting overlap offsets. Must be
      less than or equal to `frame_length`.
    name: An optional name for the operation.

  Returns:
    A `Tensor` with shape `[..., output_size]` containing the overlap-added
    frames of `signal`'s inner-most two dimensions.

  Raises:
    ValueError: If `signal`'s rank is less than 2, or `frame_step` is not a
      scalar integer.
  overlap_and_addsignal)name   
frame_stepr   z%frame_step must be an integer. Got %sNc                    s   t  | gdS )Nr   )r   concat)Zinner_shapeZouter_dimensions p/home/www/facesmatcher.com/pyenv/lib/python3.10/site-packages/tensorflow/python/ops/signal/reconstruction_ops.py
full_shapeM   s   z#overlap_and_add.<locals>.full_shape   Z	fast_path)r   r   r   .)r   Z
name_scopeZconvert_to_tensorshapeZwith_rank_at_leastZassert_has_rankZdtype
is_integer
ValueErrorr   Zconstant_valuer   sizedimsvalueZreshapeZzerosr   Zint32r   padr   rangeZ	transposeZ
reduce_sum)r
   r   r   Zframe_step_staticZframe_step_is_staticZsignal_shapeZsignal_shape_staticZ
outer_rankZouter_rank_staticr   Zframe_lengthframesZoutput_lengthZoutput_shapesegmentsZpaddingsZouter_paddingsr   permZperm_staticr   r   r   r	      sn   





2
	
"&r	   )N)__doc__Ztensorflow.python.frameworkr   r   r   Ztensorflow.python.opsr   r   Ztensorflow.python.utilr   Z tensorflow.python.util.tf_exportr   Zadd_dispatch_supportr	   r   r   r   r   <module>   s   