Skip to content

  • Projects
  • Groups
  • Snippets
  • Help
  • This project
    • Loading...
  • Sign in / Register
T
Tidal
  • Overview
    • Overview
    • Details
    • Activity
    • Cycle Analytics
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
    • Charts
  • Issues 0
    • Issues 0
    • List
    • Board
    • Labels
    • Milestones
  • Merge Requests 0
    • Merge Requests 0
  • CI / CD
    • CI / CD
    • Pipelines
    • Jobs
    • Schedules
    • Charts
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Collapse sidebar
  • Activity
  • Graph
  • Charts
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
  • PLN
  • Tidal
  • Repository

Switch branch/tag
  • Tidal
  • armada
  • tide-table
  • set_finder.py
Find file
BlameHistoryPermalink
  • PLN (Algolia)'s avatar
    feat(tide-table): weight sample evidence by 1/df — PLN's ears found two tracks my reporting hid · e5c604dc
    PLN, on hearing a rose_rouge sample inside a seam I had labelled quand_on_decolle:
    "where is our samples mathcing? gosh, i should not do so excruciating details
    myself. you have all the data bro." He was right. I had 86 offset-consistent
    detections and printed 4, because `locate` reported each bank's single BEST window
    and threw away temporal extent — which is the informative part.
    
    What was hiding in data I already had:
      rose        -> rose_rouge            22:35-24:00 (max cons 0.81), and on to 31:30
      movie_paris -> something_about_drums   6:15 (0.62), 10:30 (0.49)
      take5       -> take_5_drops           32:10-35:30
      love_parade -> livecode_parade        55:20-56:10
    
    So rose_rouge is continuously present 22:35-31:45 — a stretch I had split into
    quand_on_decolle, blue_gold and UNRESOLVED. And something_about_drums sits in the
    5:04-11:33 hole I reported as unclaimed, exactly where PLN said he played it
    ("im sure i played something about drums between bombe and do it right").
    
    Then his second point, which is the principled fix: "its almost tfidf we should do
    here. when we know rose sample is around a time slot, its a tell. when we see e.g.
    _jungle_BreakS_, it's way less idf relevant."
    
    Implemented as `fuse`: evidence for track T at time t is the sum, over detected
    banks that T uses, of offset-consistency divided by that bank's df. A bank in one
    track hands over all its evidence; a bank in eighty splits it eighty ways.
    
    One refinement, from measuring rather than assuming: plain log-IDF is too flat for
    this. jungle_breaks (df=80) carries 0.50x the weight of rose (df=2) — a 2x penalty
    for being 40x more common, which would still let it dominate since it fires
    constantly. 1/df gives 0.0125 vs 0.50.
    
    Two normalisations that are not decoration. Per track, divide by the total 1/df its
    banks could contribute, or a track referencing many rare banks beats a track with
    one perfect tell — the reference-size bias in a third costume. And close gaps
    before deciding: a rare sample fires intermittently INSIDE the track that owns it,
    so `rose` at 22:35, 25:15, 28:15, 30:00, 31:10 is one track, not five appearances.
    
    A NEGATIVE result worth recording. Weighting let MAX_DF rise from 6 to 40, taking
    fingerprint coverage from 15/23 to 23/23 candidate tracks — and it added no
    evidence at all: every new bank scored consistency 0.02-0.21 against a 0.30
    threshold. I guessed reference duration was the binding constraint and that was
    WRONG: correlation with best consistency is -0.144, and the three longest
    references are among the worst detectors. Then the confound surfaced — suns_keys
    belongs to blue_gold, which PLN did not play, so its low score is a TRUE NEGATIVE.
    Failures and true negatives are indistinguishable without the setlist, so the
    reason remains unestablished rather than explained away.
    
    Also fixes two things that wasted PLN's time. The Boundary Lab query key is `set`,
    not `gig` — bounds.tsx does get('set') ?? 'opal-festival-2026', so a wrong key
    silently loads the DEFAULT document, and he auditioned OPAL's Sunset Forest seams
    believing they were CosmicFest. The variable there is named `gig`, which is exactly
    how I made the mistake: grepping found the word, not the key. And the generator
    offered "bombe_dj -> bombe_dj" as cut #1, a seam between a track and itself,
    because it read the un-merged segment file.
    PLN (Algolia) authored Aug 29, 2026
    e5c604dc
set_finder.py 39.4 KB
EditWeb IDE
×

Replace set_finder.py

Attach a file by drag & drop or click to upload


Cancel
A new branch will be created in your fork and a new merge request will be started.