def get_lefts(mclan: 'P(P(M x M) x N)', _checked=True) -> 'P( M )':
    r"""Return the set of the left components of all couplets in all relations in ``mclan``.

    :return: The :term:`union` of the :term:`left set`\s of all :term:`relation`\s in ``mclan`` or
        `Undef()` if ``mclan`` is not a :term:`multiclan`.
    """
    if _checked:
        if not is_member(mclan):
            return _undef.make_or_raise_undef2(mclan)
    else:
        assert is_member_or_undef(mclan)
        if mclan is _undef.Undef():
            return _undef.make_or_raise_undef(2)
    if mclan.is_empty:
        # The left set of an empty set is the empty set
        return mclan
    clan_itr = iter(mclan)
    left_set = _relations.get_lefts(next(clan_itr), _checked=False)
    for rel in clan_itr:
        left_set = _sets.union(_relations.get_lefts(rel, _checked=False),
                               left_set,
                               _checked=False)
    if not left_set.is_empty:
        if mclan.cached_is_absolute:
            left_set.cache_absolute(_mo.CacheStatus.IS)
    return left_set
Exemple #2
0
def get_lefts(mclan: 'P(P(M x M) x N)', _checked=True) -> 'P( M )':
    r"""Return the set of the left components of all couplets in all relations in ``mclan``.

    :return: The :term:`union` of the :term:`left set`\s of all :term:`relation`\s in ``mclan`` or
        `Undef()` if ``mclan`` is not a :term:`multiclan`.
    """
    if _checked:
        if not is_member(mclan):
            return _undef.make_or_raise_undef2(mclan)
    else:
        assert is_member_or_undef(mclan)
        if mclan is _undef.Undef():
            return _undef.make_or_raise_undef(2)
    if mclan.is_empty:
        # The left set of an empty set is the empty set
        return mclan
    clan_itr = iter(mclan)
    left_set = _relations.get_lefts(next(clan_itr), _checked=False)
    for rel in clan_itr:
        left_set = _sets.union(
            _relations.get_lefts(rel, _checked=False), left_set, _checked=False)
    if not left_set.is_empty:
        if mclan.cached_is_absolute:
            left_set.cache_absolute(_mo.CacheStatus.IS)
    return left_set
Exemple #3
0
 def test_getitem(self):
     # Undefined:
     self.assertEqual(Set()['callable'], Set())
     for set_not_func in [basic_sets[name] for name in [
             'num in dict', 'str in array', 'single num', 'left func/lefts',
             'left func/rights']]:
         self.assertIs(set_not_func['callable'], Undef())
     # Relation:
     set1 = basic_sets['left func']
     self.assertEqual(set1['a'], Set(1))
     self.assertEqual(set1['b'], Set(2))
     self.assertEqual(set1['c'], Set(3))
     set1 = basic_sets['not left func']
     self.assertEqual(set1['a'], Set(1, 4))
     self.assertEqual(set1['b'], Set(2))
     self.assertEqual(set1['c'], Set(3))
     set1 = basic_sets['diagonal']
     for left in relations.get_lefts(set1):
         self.assertEqual(set1[left], Set(left))
     # Clan of relations:
     self.assertEqual(algebra_clans['clan1']['a'], Set(1, 4))
     self.assertEqual(algebra_clans['clan2']['x'], Set('a'))
     self.assertEqual(algebra_clans['clan2']['zzz'], Set('zzz'))
     self.assertEqual(algebra_clans['clan3']['c'], Set(3, 5))
     self.assertEqual(algebra_clans['clan4'][3], Set('c'))
     self.assertEqual(algebra_clans['clan4'][5], Set('b', 'c'))
     self.assertEqual(algebra_clans['clan5']['b'], Set(2, 5))
     self.assertEqual(algebra_clans['clan5']['c'], Set(3))
     self.assertEqual(algebra_clans['clan5']['d'], Set())
 def test_getitem(self):
     # Undefined:
     self.assertEqual(Set()["callable"], Set())
     for set_not_func in [
         basic_sets[name]
         for name in ["num in dict", "str in array", "single num", "left func/lefts", "left func/rights"]
     ]:
         self.assertIs(set_not_func["callable"], Undef())
     # Relation:
     set1 = basic_sets["left func"]
     self.assertEqual(set1["a"], Set(1))
     self.assertEqual(set1["b"], Set(2))
     self.assertEqual(set1["c"], Set(3))
     set1 = basic_sets["not left func"]
     self.assertEqual(set1["a"], Set(1, 4))
     self.assertEqual(set1["b"], Set(2))
     self.assertEqual(set1["c"], Set(3))
     set1 = basic_sets["diagonal"]
     for left in relations.get_lefts(set1):
         self.assertEqual(set1[left], Set(left))
     # Clan of relations:
     self.assertEqual(algebra_clans["clan1"]["a"], Set(1, 4))
     self.assertEqual(algebra_clans["clan2"]["x"], Set("a"))
     self.assertEqual(algebra_clans["clan2"]["zzz"], Set("zzz"))
     self.assertEqual(algebra_clans["clan3"]["c"], Set(3, 5))
     self.assertEqual(algebra_clans["clan4"][3], Set("c"))
     self.assertEqual(algebra_clans["clan4"][5], Set("b", "c"))
     self.assertEqual(algebra_clans["clan5"]["b"], Set(2, 5))
     self.assertEqual(algebra_clans["clan5"]["c"], Set(3))
     self.assertEqual(algebra_clans["clan5"]["d"], Set())
 def test_getitem(self):
     # Undefined:
     self.assertEqual(Set()['callable'], Set())
     for set_not_func in [basic_sets[name] for name in [
             'num in dict', 'str in array', 'single num', 'left func/lefts',
             'left func/rights']]:
         self.assertIs(set_not_func['callable'], Undef())
     # Relation:
     set1 = basic_sets['left func']
     self.assertEqual(set1['a'], Set(1))
     self.assertEqual(set1['b'], Set(2))
     self.assertEqual(set1['c'], Set(3))
     set1 = basic_sets['not left func']
     self.assertEqual(set1['a'], Set(1, 4))
     self.assertEqual(set1['b'], Set(2))
     self.assertEqual(set1['c'], Set(3))
     set1 = basic_sets['diagonal']
     for left in relations.get_lefts(set1):
         self.assertEqual(set1[left], Set(left))
     # Clan of relations:
     self.assertEqual(algebra_clans['clan1']['a'], Set(1, 4))
     self.assertEqual(algebra_clans['clan2']['x'], Set('a'))
     self.assertEqual(algebra_clans['clan2']['zzz'], Set('zzz'))
     self.assertEqual(algebra_clans['clan3']['c'], Set(3, 5))
     self.assertEqual(algebra_clans['clan4'][3], Set('c'))
     self.assertEqual(algebra_clans['clan4'][5], Set('b', 'c'))
     self.assertEqual(algebra_clans['clan5']['b'], Set(2, 5))
     self.assertEqual(algebra_clans['clan5']['c'], Set(3))
     self.assertEqual(algebra_clans['clan5']['d'], Set())
Exemple #6
0
def get_lefts(clan: 'PP(M x M)', _checked=True) -> 'P( M )':
    r"""Return the :term:`left set` of this :term:`clan`.

    :return: The :term:`union` of the :term:`left set`\s of all :term:`relation`\s in the
        :term:`clan` or `Undef()` if ``clan`` is not a clan.
    """
    if _checked:
        if not is_member(clan):
            return _make_or_raise_undef()
    else:
        assert is_member(clan)
    if clan.is_empty:
        # The left set of an empty set is the empty set
        return clan
    clan_itr = iter(clan)
    left_set = _relations.get_lefts(next(clan_itr), _checked=False)
    for rel in clan_itr:
        left_set = _sets.union(
            _relations.get_lefts(rel, _checked=False), left_set, _checked=False)
    if not left_set.is_empty:
        left_set.cache_is_relation(False).cache_is_clan(False)
    return left_set
Exemple #7
0
 def test_callable(self):
     # Undefined:
     self.assertIs(Set()('callable'), Undef())
     for set_not_func in [basic_sets[name] for name in [
             'empty', 'num in dict', 'str in array', 'single num', 'left func/lefts',
             'left func/rights', 'not left func']]:
         self.assertIs(set_not_func('callable'), Undef())
     # Function:
     set1 = basic_sets['left func']
     self.assertEqual(set1('a'), Atom(1))
     self.assertEqual(set1('b'), Atom(2))
     self.assertEqual(set1('c'), Atom(3))
     set1 = basic_sets['diagonal']
     for left in relations.get_lefts(set1):
         self.assertEqual(set1(left), left)
 def test_callable(self):
     # Undefined:
     self.assertIs(Set()('callable'), Undef())
     for set_not_func in [basic_sets[name] for name in [
             'empty', 'num in dict', 'str in array', 'single num', 'left func/lefts',
             'left func/rights', 'not left func']]:
         self.assertIs(set_not_func('callable'), Undef())
     # Function:
     set1 = basic_sets['left func']
     self.assertEqual(set1('a'), Atom(1))
     self.assertEqual(set1('b'), Atom(2))
     self.assertEqual(set1('c'), Atom(3))
     set1 = basic_sets['diagonal']
     for left in relations.get_lefts(set1):
         self.assertEqual(set1(left), left)
 def test_callable(self):
     # Undefined:
     self.assertIs(Set()("callable"), Undef())
     for set_not_func in [
         basic_sets[name]
         for name in [
             "empty",
             "num in dict",
             "str in array",
             "single num",
             "left func/lefts",
             "left func/rights",
             "not left func",
         ]
     ]:
         self.assertIs(set_not_func("callable"), Undef())
     # Function:
     set1 = basic_sets["left func"]
     self.assertEqual(set1("a"), Atom(1))
     self.assertEqual(set1("b"), Atom(2))
     self.assertEqual(set1("c"), Atom(3))
     set1 = basic_sets["diagonal"]
     for left in relations.get_lefts(set1):
         self.assertEqual(set1(left), left)