예제 #1
0
    def preprocess(cls, gens):
        if isinstance(gens, Basic):
            gens = (gens, )
        elif len(gens) == 1 and hasattr(gens[0], '__iter__'):
            gens = gens[0]

        if gens == (None, ):
            gens = ()
        elif has_dups(gens):
            raise GeneratorsError("duplicated generators: %s" % str(gens))
        elif any(gen.is_commutative is False for gen in gens):
            raise GeneratorsError("non-commutative generators: %s" % str(gens))

        return tuple(gens)
예제 #2
0
    def __new__(cls, *partition):
        """
        Generates a new partition object.

        This method also verifies if the arguments passed are
        valid and raises a ValueError if they are not.

        Examples
        ========

        >>> from diofant.combinatorics.partitions import Partition
        >>> a = Partition([1, 2], [3])
        >>> a
        {{3}, {1, 2}}
        >>> a.partition
        [[1, 2], [3]]
        >>> len(a)
        2
        >>> a.members
        (1, 2, 3)

        """
        args = partition
        if not all(isinstance(part, (list, FiniteSet)) for part in args):
            raise ValueError(
                "Each argument to Partition should be a list or a FiniteSet")

        # sort so we have a canonical reference for RGS
        partition = sorted(sum(list(map(list, partition)), []),
                           key=default_sort_key)
        if has_dups(partition):
            raise ValueError("Partition contained duplicated elements.")

        obj = FiniteSet.__new__(cls, *[FiniteSet(*x) for x in args])
        obj.members = tuple(partition)
        obj.size = len(partition)
        return obj
예제 #3
0
def test_has_dups():
    assert has_dups(set()) is False
    assert has_dups(list(range(3))) is False
    assert has_dups([1, 2, 1]) is True
예제 #4
0
 def eval(cls, *args):
     if all(isinstance(a, (int, Integer)) for a in args):
         return eval_levicivita(*args)
     if has_dups(args):
         return S.Zero
예제 #5
0
def test_has_dups():
    assert has_dups(set()) is False
    assert has_dups(list(range(3))) is False
    assert has_dups([1, 2, 1]) is True