"""Authored synthetic real sequences; explicit lag sign and peak ambiguity."""
import json,math,platform
import numpy as np
def measure(a,v):
 if not a or not v or len(a)>16 or len(v)>16 or any(not math.isfinite(x) for x in a+v) or len(set(a))<2 or len(set(v))<2:raise ValueError('bounded nonconstant finite sequences')
 lags=list(range(-(len(v)-1),len(a)));oracle=[sum(a[n+k]*v[n] for n in range(len(v)) if 0<=n+k<len(a)) for k in lags]
 actual=np.correlate(a,v,'full').tolist();assert actual==oracle
 peak=max(actual);peaks=[k for k,c in zip(lags,actual,strict=True) if c==peak]
 return {'lags':lags,'correlation':actual,'loop_oracle':oracle,'maximum':peak,'all_peak_lags':peaks}
def demo():
 reference=[0,1,-2,4,0,0];delayed=[0,0]+reference;forward=measure(delayed,reference);reverse=measure(reference,delayed)
 assert forward['all_peak_lags']==[2] and reverse['all_peak_lags']==[-2] and forward['maximum']==21
 ambiguity=measure([1,-1,0,1,-1],[1,-1]);assert ambiguity['all_peak_lags']==[0,3]
 rejects=[]
 for a,v in [([],reference),([1,1],reference),([0,0],reference),([float('nan'),1],reference)]:
  try:measure(a,v)
  except ValueError:rejects.append('ValueError')
  else:raise AssertionError('bad input')
 return {'runtime':platform.python_version(),'numpy':np.__version__,'reference':reference,'delayed_by_two_samples':delayed,'correlate_delayed_reference':forward,'correlate_reference_delayed':reverse,'repeated_template_ambiguity':ambiguity,'rejected':rejects,'scope':'Raw real cross-correlation in sample units, known zero-padding synthetic shift; no normalization, ASR/forced alignment, clock drift, noisy-audio or unique-delay guarantee.'}
if __name__=='__main__':print(json.dumps(demo(),ensure_ascii=True,indent=2))
