"""Owned RTP/CN metadata fixtures, no voice detector or CNG synthesis."""
import json
def inspect_cn(payload):
    if not payload or payload[0]&0x80:raise ValueError('empty or reserved top bit in this CN subset')
    return {'level_dbov':-int(payload[0]),'spectral_coefficient_octets':len(payload)-1,'spectral_bytes_hex_not_decoded':payload[1:].hex(),'noise_waveform_generated':False}
def gap(previous,current):
    seq=(current['seq']-previous['seq'])%65536
    ticks=(current['rtp']-previous['rtp'])%(2**32)
    if seq==1 and ticks>previous['declared_duration_ticks']:
        label='timestamp_gap_without_sequence_gap_consistent_with_DTX_or_other_packetization'
    elif 1<seq<32768:label='sequence_gap_in_observation_not_unique_network_loss_proof'
    else:label='not_classified_by_this_small_rule'
    return {'sequence_delta':seq,'timestamp_delta_ticks':ticks,'classification':label,'actual_reason_proven_from_receiver_pair':False}
def demo():
    manual=[{'seq':10,'rtp':0,'kind_declared_by_author':'voice','declared_duration_ticks':160},{'seq':11,'rtp':160,'kind_declared_by_author':'CN','declared_duration_ticks':160},{'seq':12,'rtp':800,'kind_declared_by_author':'voice','declared_duration_ticks':160}]
    first=gap(manual[1],manual[2]);assert first['sequence_delta']==1 and first['timestamp_delta_ticks']==640
    other=[{'seq':10,'rtp':0,'declared_duration_ticks':160},{'seq':12,'rtp':320,'declared_duration_ticks':160}]
    second=gap(*other);assert second['sequence_delta']==2
    parsed=inspect_cn(bytes([40]));assert parsed['level_dbov']==-40 and parsed['spectral_coefficient_octets']==0
    extended=inspect_cn(bytes([40,127,150]));assert extended['spectral_coefficient_octets']==2
    failures=[]
    for name,value in [('empty',b''),('top_bit',bytes([128]))]:
        try:inspect_cn(value)
        except ValueError:failures.append(name)
        else:raise AssertionError(name)
    return {'RTP_clock_assumed_hz':8000,'authored_voice_CN_voice_metadata':manual,'gap_after_CN':first,'other_receiver_pair':other,'other_gap':second,'CN_first_octet_report':parsed,'CN_extended_report':extended,'CN_negative_cases_rejected':failures,'same_source_no_reorder_and_known_previous_duration_assumed':True,'VAD_DTX_CNG_codec_or_network_executed':False,'unknown_gap_means_call_ended':False}
if __name__=='__main__':print(json.dumps(demo(),ensure_ascii=False,indent=2))
