def test_recursive_split():
    keys = list(product('mf'))
    data = OrderedDict(zip(keys, [1] * len(keys)))
    res = _hierarchical_split(data, gap=0)
    assert_(list(iterkeys(res)) == keys)
    res[('m',)] = (0.0, 0.0, 0.5, 1.0)
    res[('f',)] = (0.5, 0.0, 0.5, 1.0)
    keys = list(product('mf', 'yao'))
    data = OrderedDict(zip(keys, [1] * len(keys)))
    res = _hierarchical_split(data, gap=0)
    assert_(list(iterkeys(res)) == keys)
    res[('m', 'y')] = (0.0, 0.0, 0.5, 1 / 3)
    res[('m', 'a')] = (0.0, 1 / 3, 0.5, 1 / 3)
    res[('m', 'o')] = (0.0, 2 / 3, 0.5, 1 / 3)
    res[('f', 'y')] = (0.5, 0.0, 0.5, 1 / 3)
    res[('f', 'a')] = (0.5, 1 / 3, 0.5, 1 / 3)
    res[('f', 'o')] = (0.5, 2 / 3, 0.5, 1 / 3)
def test_recursive_split():
    keys = list(product('mf'))
    data = OrderedDict(zip(keys, [1] * len(keys)))
    res = _hierarchical_split(data, gap=0)
    assert_(list(iterkeys(res)) == keys)
    res[('m', )] = (0.0, 0.0, 0.5, 1.0)
    res[('f', )] = (0.5, 0.0, 0.5, 1.0)
    keys = list(product('mf', 'yao'))
    data = OrderedDict(zip(keys, [1] * len(keys)))
    res = _hierarchical_split(data, gap=0)
    assert_(list(iterkeys(res)) == keys)
    res[('m', 'y')] = (0.0, 0.0, 0.5, 1 / 3)
    res[('m', 'a')] = (0.0, 1 / 3, 0.5, 1 / 3)
    res[('m', 'o')] = (0.0, 2 / 3, 0.5, 1 / 3)
    res[('f', 'y')] = (0.5, 0.0, 0.5, 1 / 3)
    res[('f', 'a')] = (0.5, 1 / 3, 0.5, 1 / 3)
    res[('f', 'o')] = (0.5, 2 / 3, 0.5, 1 / 3)
def test_recursive_split():
    keys = list(product("mf"))
    data = OrderedDict(list(zip(keys, [1] * len(keys))))
    res = _hierarchical_split(data, gap=0)
    assert_(list(res.keys()) == keys)
    res[("m",)] = (0.0, 0.0, 0.5, 1.0)
    res[("f",)] = (0.5, 0.0, 0.5, 1.0)
    keys = list(product("mf", "yao"))
    data = OrderedDict(list(zip(keys, [1] * len(keys))))
    res = _hierarchical_split(data, gap=0)
    assert_(list(res.keys()) == keys)
    res[("m", "y")] = (0.0, 0.0, 0.5, 1 / 3)
    res[("m", "a")] = (0.0, 1 / 3, 0.5, 1 / 3)
    res[("m", "o")] = (0.0, 2 / 3, 0.5, 1 / 3)
    res[("f", "y")] = (0.5, 0.0, 0.5, 1 / 3)
    res[("f", "a")] = (0.5, 1 / 3, 0.5, 1 / 3)
    res[("f", "o")] = (0.5, 2 / 3, 0.5, 1 / 3)