
    Vh                         d Z ddlmZ ddlZddlmZ ddlZddlZddl	Z	ddl
ZddlmZ ddlmZmZ ddlmZ dd	lmZ  ej        e          Zd
 ZddZddZdS )zTest time evaluation, either using the original SDR from [Vincent et al. 2006]
or the newest SDR definition from the MDX 2021 competition (this one will
be reported as `nsdr` for `new sdr`).
    )futuresN)LogProgress   )apply_model)convert_audio
save_audio)distrib)DummyPoolExecutorc                 `   |                                  dk    sJ |                                 dk    sJ d}t          j        t          j        |           d          }t          j        t          j        | |z
            d          }||z  }||z  }dt          j        ||z            z  }|S )z
    Compute the SDR according to the MDX challenge definition.
    Adapted from AIcrowd/music-demixing-challenge-starter-kit (MIT license)
       gHz>)      dim
   )r   thsumsquarelog10)
references	estimatesdeltanumdenscoress         U/var/www/html/movieo_spanner_bot/venv/lib/python3.11/site-packages/demucs/evaluate.pynew_sdrr      s    
 >>q    ==??aE
&:&&F
3
3
3C
&:	122
?
?
?C5LC5LC"(39%%%FM    Tc           	         |                      dd                                          } |                     dd                                          }t          |                                 d          |                                d                    d         }|sd |fS |                                 } |                                }t
          j                            | |d||dd          d d         }||fS )Nr   r   r   F)compute_permutationwindowhopframewise_filtersbsseval_sources_version)	transposedoubler   cpunumpymusevalmetricsbss_eval)r   r   winr"   compute_sdr
new_scoresr   s          r   
eval_trackr0   .   s    %%a++2244J##Aq))0022I))$/1FGGJJ "Z%%''
OO%%	))	 %#$) * + + ,/B30 z!!r   Fc                   *+,- | j         }| j        dz  }|                    dd           | j        dz  }|                    dd           |j        j        #t          j        |j        j        dgd          }n"t          j        |j        j        dgd          }|j        j        }d	}| j	        }t          d
|j        z            }	t          d
|j        z            }
t          t          j        t          |          t          j                  }t#          t$          ||j        j        d          }g }|j        j        rt,          j        nt0          } ||j        j                  5 }|D ]}|j        |         -t5          j        -j                                                                                  }|                                dk    r|d         }|                     | j!                  }|"                    d          }||"                                z
  |#                                z  }tI          |||j        |j%                  }tM          ||d         |j        j'        |j        j(        |j        j)                  d         }||#                                z  |"                                z   }|                     |          }t5          j*        -fd|j+        D                       }|                                dk    r|dddf         }|                     |          }tI          |||j        |j%                  }|j        j,        rr| j        dz  -j-        z  }|                    dd           t]          |j+        |          D ]3\  }}t_          |0                                ||dz   z  |j                   4|1                    -j-        |2                    tf          |||	|
|          f           t#          t$          ||j        j        d          }i }|D ]
\  }}|4                                }|\  }}i ||<   tk          |j+                  D ]&\  }}dt=          ||                   gi||         |<   '||\  }}}} tk          |j+                  D ]\  }}||         6                                ||         6                                ||         6                                | |         6                                d}!||         |         7                    |!           i *t          t          j                  D ]*}"*7                    t          j8        ||"                     +i }#ts          tu          *;                                                    |j+        d                  }$|$D ]+d}%d}&|j+        D ],*+,fd*<                                D             }'t{          j"        |'          }(t{          j>        |'          })|(|#+?                                dz   ,z   <   |)|#+?                                dz   dz   ,z   <   |%|(t          |j+                  z  z  }%|&|)t          |j+                  z  z  }&|%|#+?                                <   |&|#+?                                dz   <   |#cddd           S # 1 swxY w Y   dS )z
    Evaluate model using museval.
    compute_sdr=False means using only the MDX definition of the SDR, which
    is much faster to evaluate.
    resultsT)exist_okparentszresults/testNtest)subsetsis_wavFr(   g      ?Eval)updatesnamer   r   r   )shiftssplitoverlapc                 |    g | ]8}t          j        j        |         j                                                  9S  )r   
from_numpytargetsaudiot).0r:   tracks     r   
<listcomp>zevaluate.<locals>.<listcomp>v   s9    XXX$u}T2899;;==XXXr   r   wavz.mp3)r-   r"   r.   z
Eval (BSS)nsdr)SDRSIRISRSARc                 \    g | ](}t          j        |                                     )S r?   )np	nanmedian)rD   rE   
all_tracksmetric_namesources     r   rF   zevaluate.<locals>.<listcomp>   sB     4 4 4 LE!26!:;!GHH4 4 4r   __med)@argsfoldermkdirr5   nonhqmusdbDBdsetmusdb_sampleratemodelint
samplerateranger	   ranklen
world_sizer   loggermisc
num_printsworkersr   ProcessPoolExecutorr
   tracksr   r@   rB   rC   floatr   todevicemeanstdr   audio_channelsr   r;   r<   r=   stacksourcessaver:   zipr   r(   appendsubmitr0   result	enumeratetolistupdatesharenextitervalueskeysrN   medianlower).solverr.   rU   
output_dirjson_foldertest_setsrc_rateeval_devicer]   r-   r"   indexespendingspoolindexmixrefr   r   rV   r:   estimateri   
track_namependingr   nsdrsidxtargetsdrisrsirsarr}   srcrv   metric_namesavgavg_of_mediansmediansrm   r   rP   rQ   rR   rE   s.                                             @@@@r   evaluater   C   s4    ;D*JdD111-.0KtT222 y8DIOfXdKKK8DIOfXeLLLy)HKLE
b5##
$
$C
b5##
$
$CGL#h--1CDDG&'493G%' ' 'GH*.)*;R7&&ARD	di	 	  JD 	` 	`EOE*E-,,..006688CwwyyA~~$i&&''C((q(//C#swwyy0CXu/?AUVVC#E3t9+/9+;49?,0I,=? ? ??@BI "CGGII-

:I![11IXXXX%-XXXZ ZJ~~1$$'40
#{33J&z8','79MO OJy~ [.;dD999&)%-&C&C [ [ND(x||~~v/GIYZZZZOOUZJ	sQ\ *5 *^ *^ _ ` ` ` ` vx9M$02 2 2#+ 	> 	>Jnn&&G#MFE!#F:(77 K KV.4uU3Z7H7H6I-Jz"6**!'-$c3#,U]#;#; > >KC"3x00"3x00"3x00"3x00	 F :&v.55f====
+,, 	: 	:CgmFC889999D!2!2!4!45566u}Q7GH' 	B 	BKCN- 	> 	>4 4 4 4 4 4!+!2!24 4 4 ww''7++=A{((**S069:FL{((**V3c9FBCtc%-0000&3u}+=+="==*-F;$$&&'3AF;$$&&/00UJ J J J J J J J J J J J J J J J J Js   ,U[[[)T)F)__doc__
concurrentr   loggingdora.logr   r)   rN   rY   r*   torchr   applyr   rB   r   r    r	   utilsr
   	getLogger__name__rd   r   r0   r   r?   r   r   <module>r      s   
                                    , , , , , , , ,       $ $ $ $ $ $ 
	8	$	$   " " " "*k k k k k kr   