o
    ö9ŒjÒ  ã                   @  sd   d dl mZ d dlZd dlm  mZ d dlZ	d dl
Zd dlmZmZ ddd„Zdd	„ Zd
d„ ZdS )é    )ÚannotationsN)Úmeasure_true_peak_dbÚnormalize_lufs_true_peakéD¬  ç      @c                 C  s¶   t jt| | ƒt jd|  }dt  dt j d | d ¡ dt  dt j d | d ¡  }d	t  dt j d
 | d ¡ dt  dt j d | d ¡  }t  ||f¡ t j¡| fS )N)Údtypeg
×£p=
ç?é   iå  g®Gáz®×?g
×£p=
Ç?i!;  gÃõ(\Âñ?gffffffæ?iñ  gìQ¸…ëé?gR¸…ëQÈ?i‹9  gÂõ(\Ò?)ÚnpÚarangeÚintÚfloat64ÚsinÚpiÚcolumn_stackÚastype)ÚsrÚsecondsÚtÚleftÚright© r   ú8/home/user/Projects/AutoRemaster/tests/test_true_peak.pyÚ_stress_signal	   s   @@r   c               
   C  sb  t ƒ \} }t| |ddd}t||ƒ}t |¡ |¡}d}| }||k}|sUt d|fd||f¡dt 	¡ v s:t 
|¡r?t |¡ndt |¡dœ }d	d
|i }	tt |	¡ƒ‚d  } }}d}| }|| }
t|
ƒ}d}||k}|s¹t d|fd||f¡dt 	¡ v s…t 
t¡rŠt t¡nddt 	¡ v s–t 
|¡r›t |¡ndt |¡t |¡t |¡dœ }dd|i }tt |¡ƒ‚d  } } }
 } }}tj}tj}||ƒ}||ƒ}|s'ddt 	¡ v sât 
t¡rçt t¡ndt |¡dt 	¡ v s÷t 
t¡rüt t¡ndt |¡dt 	¡ v st 
|¡rt |¡ndt |¡t |¡dœ }tt |¡ƒ‚d  } } }}d S )Ng      $Àg      ð¿)Útarget_lufsZceiling_dbtpg®Gáz®ï?)ú<=)z%(py0)s <= -%(py3)sÚtp)Úpy0Úpy3zassert %(py6)sÚpy6g      $@ç      ð?)z>%(py7)s
{%(py7)s = %(py0)s((%(py1)s - -%(py3)s))
} <= %(py10)sÚabsÚlufs)r   Úpy1r   Úpy7Úpy10zassert %(py12)sÚpy12zƒassert %(py10)s
{%(py10)s = %(py2)s
{%(py2)s = %(py0)s.all
}(%(py8)s
{%(py8)s = %(py5)s
{%(py5)s = %(py3)s.isfinite
}(%(py6)s)
})
}r	   Úout)r   Úpy2r   Úpy5r   Úpy8r$   )r   r   r   ÚpylnZMeterZintegrated_loudnessÚ
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationr    r	   ÚallÚisfinite)Úaudior   r&   r   r!   Ú@py_assert2Ú@py_assert4Ú@py_assert1Ú@py_format5Ú@py_format7Ú@py_assert5Ú@py_assert6Ú@py_assert9Ú@py_assert8Z@py_format11Z@py_format13Ú@py_assert7r   r   r   Ú4test_true_peak_normalizer_holds_ceiling_and_loudness   s   

‚ÔØr@   c            	      C  sà   t dd\} }dt t t | ¡¡d ¡ }t| |ƒ}d}|| }||k}|sht d|fd||f¡dt 	¡ v s<t 
|¡rAt |¡ndd	t 	¡ v sMt 
|¡rRt |¡nd	t |¡d
œ }dd|i }tt |¡ƒ‚d  } }}d S )Nr   )r   é   gê-™—q=gíµ ÷Æ°>)ú>=)z%(py0)s >= (%(py2)s - %(py4)s)Ú	true_peakÚsample_peak)r   r'   Úpy4zassert %(py7)sr#   )r   r	   Úlog10Úmaxr    r   r+   r,   r-   r.   r/   r0   r1   r2   )	r5   r   rD   rC   Ú@py_assert3r;   r8   Ú@py_format6Ú@py_format8r   r   r   Ú4test_true_peak_measurement_catches_inter_sample_peak   s   
ªrK   )r   r   )Ú
__future__r   Úbuiltinsr-   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter+   Únumpyr	   Z
pyloudnormr*   Zengine.true_peakr   r   r   r@   rK   r   r   r   r   Ú<module>   s    "

