def testGenerateHarmonycRhythmBar():
    hm2 = Metre.createFromLabels("4/4", "quarternote", "halfnote")
    rhythm = hrg._generateHarmonicRhythmBar(hm2, 0.05)
    barDuration = sum(i for i, _ in rhythm)
    expectedBarDuration = 4.0

    assert barDuration == expectedBarDuration
def testCalculateScores():
    d1 = hrg.rhythmTree
    d2 = hrg.rhythmTree.children[1]
    d3 = hrg.rhythmTree.children[1].children[0]
    d4 = hrg.rhythmTree.children[1].children[0].children[0]

    hm2 = Metre.createFromLabels("4/4", "quarternote", "halfnote")
    candidates = [d2, d3, d4]
    scores = hrg._calcScores(candidates, hm2, 0.05)
    expectedScores = [1.0, 0.55, 0.35]

    assert scores == expectedScores
def testGenerateHarmonicRhythmMU():
    hrg.densityImpact = 1
    hrg.entropyImpact = 1
    hm2 = Metre.createFromLabels("4/4", "quarternote", "halfnote")
    rhythm = hrg.generateHarmonicRhythmMU(hm2, 0.05, 2)
from musiclib.harmonyrhythmgenerator import HarmonyRhythmGenerator
from musiclib.metre import Metre
from musiclib.rhythmtree import RhythmTree
from musiclib.rhythmdata import rhythmData as rd

m = Metre.createFromLabels("4/4", "quarternote", "halfnote")
hrg = HarmonyRhythmGenerator.fromModelData(m, rd['harmony'])
hrg.densityImpact = 0
hrg.entropyImpact = 0


def testHarmonyRhythmGeneratorIsInstantiated():
    hrg = HarmonyRhythmGenerator.fromModelData(m, rd['harmony'])
    hrg is not None


def testCompressValues():
    l = [1, 0.8, 0.5, 0.1, 0]
    compressedValues = hrg.compressValues(0.5, l, 0.1)
    expectedCompressedValues = [0.95, 0.77, 0.5, 0.14, 0.05]
    assert compressedValues == expectedCompressedValues


def testCalculateScores():
    d1 = hrg.rhythmTree
    d2 = hrg.rhythmTree.children[1]
    d3 = hrg.rhythmTree.children[1].children[0]
    d4 = hrg.rhythmTree.children[1].children[0].children[0]

    hm2 = Metre.createFromLabels("4/4", "quarternote", "halfnote")
    candidates = [d2, d3, d4]