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
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
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 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
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)