Exemple #1
0
def subsets_embed_number(cseg1, cseg2):
    """Returns the number of time the normal form of a csubseg appears
    in cseg subsets. Marvin and Laprade (1987).

    >>> c1, c2 = Contour([0, 1, 2, 3]), Contour([1, 0, 2])
    >>> subsets_embed_number(c1, c2)
    0
    """

    cseg, csubseg = utils.greatest_first(cseg1, cseg2)

    dic = contour.Contour(cseg).subsets_normal(len(csubseg))
    if tuple(csubseg) in dic:
        return len(dic[tuple(csubseg)])
    else:
        return 0
Exemple #2
0
def subsets_embed_total_number(cseg1, cseg2):
    """Returns the number of subsets with csubseg_size in a set with
    cseg_size. Marvin and Laprade (1987, p. 237).

    >>> c1, c2 = Contour([0, 1, 2, 3]), Contour([1, 0, 2])
    >>> subsets_embed_total_number(c1, c2)
    4
    """

    cseg, csubseg = utils.greatest_first(cseg1, cseg2)
    cseg_size = len(cseg)
    csubseg_size = len(csubseg)

    a = math.factorial(cseg_size)
    b = math.factorial(csubseg_size)
    c = math.factorial(cseg_size - csubseg_size)
    return a / (b * c)
Exemple #3
0
def contour_embed(cseg1, cseg2):
    """Returns similarity between contours with different
    cardinalities. 1 for greater similarity. Marvin and Laprade
    (1987).

    >>> contour_embed(Contour([0, 1, 2, 3]), Contour([0, 1, 2]))
    1.0
    """

    cseg, csubseg = utils.greatest_first(cseg1, cseg2)

    n_csubseg = contour.Contour(csubseg).translation()
    cseg_size = len(cseg)
    csubseg_size = len(csubseg)

    embed_times = subsets_embed_number(cseg, n_csubseg)
    total_subsets = subsets_embed_total_number(cseg, csubseg)
    return 1.0 * embed_times / total_subsets
Exemple #4
0
 def test_greatest_first(self):
     result = utils.greatest_first([0, 1], [3, 2, 1])
     self.assertEqual(result, [[3, 2, 1], [0, 1]])