Ejemplo n.º 1
0
    def __init__(self, *args, **kwargs):
        """
        The constructor can take one argument. This can either be another
        |DataSet| instance or an iterable of |TaxonNamespace|,
        |TreeList|, or |CharacterMatrix|-derived instances.

        In the former case, the newly-constructed |DataSet| will be a
        shallow-copy clone of the argument.

        In the latter case, the newly-constructed |DataSet| will have
        the elements of the iterable added to the respective collections
        (``taxon_namespaces``, ``tree_lists``, or ``char_matrices``, as
        appropriate). This is essentially like calling :meth:`DataSet.add()`
        on each element separately.
        """
        if len(args) > 1:
            # only allow 1 positional argument
            raise error.TooManyArgumentsError(func_name=self.__class__.__name__, max_args=1, args=args)
        if "stream" in kwargs or "schema" in kwargs:
            raise TypeError("Constructing from an external stream is no longer supported: use the factory method 'DataSet.get_from_stream()'")
        elif len(args) == 1 and isinstance(args[0], DataSet):
            self._clone_from(args[0], kwargs)
        else:
            basemodel.DataObject.__init__(self, label=kwargs.pop("label", None))
            self.taxon_namespaces = container.OrderedSet()
            self.tree_lists = container.OrderedSet()
            self.char_matrices = container.OrderedSet()
            self.attached_taxon_namespace = None
            self._process_taxon_namespace_directives(kwargs)
            self.comments = []
            if len(args) == 1 and not isinstance(args[0], DataSet):
                for item in args[0]:
                    self.add(item)
        if kwargs:
            raise TypeError("Unrecognized or unsupported arguments: {}".format(kwargs))
Ejemplo n.º 2
0
 def test_basic_getting(self):
     items = [42, 3.14, "hello", object(), A(), frozenset([1, 2, 3]), A()]
     ordered_set = container.OrderedSet()
     for item in items:
         ordered_set.add(item)
     for idx in range(len(items)):
         self.assertIs(ordered_set[idx], items[idx])
Ejemplo n.º 3
0
 def test_constructor(self):
     items = [42, 3.14, "hello", object(), A(), frozenset([1, 2, 3]), A()]
     ordered_set = container.OrderedSet(items)
     for x in range(100):
         ordered_set.add(random.choice(items))
     result = [item for item in ordered_set]
     self.assertEqual(result, items)
     self.assertEqual(len(result), len(items))
Ejemplo n.º 4
0
 def setUp(self):
     self.s1 = container.OrderedSet([
         0,
         1,
         2,
         3,
         "a",
         "b",
         "c",
     ])
     items = [
         B(1),
         B(0),
         B(2),
         frozenset([1, 2, 3]),
         B(3),
     ]
     self.c1 = container.OrderedSet(items)
Ejemplo n.º 5
0
 def test_pop_front(self):
     items = [42, 3.14, "hello", object(), A(), frozenset([1, 2, 3]), A()]
     ordered_set = container.OrderedSet(items)
     while ordered_set:
         item1 = ordered_set.pop(False)
         item2 = items.pop(0)
         self.assertIs(item1, item2)
         self.assertEqual(len(ordered_set), len(items))
         result = [item for item in ordered_set]
         self.assertEqual(result, items)
     self.assertEqual(len(ordered_set), 0)
Ejemplo n.º 6
0
 def test_discard(self):
     items = [42, 3.14, "hello", object(), A(), frozenset([1, 2, 3]), A()]
     for x in range(len(items)):
         ordered_set = container.OrderedSet(items)
         zz = list(items)
         while len(zz):
             k = random.choice(zz)
             ordered_set.discard(k)
             zz.remove(k)
             result = [item for item in ordered_set]
             self.assertEqual(result, zz)
             self.assertEqual(len(result), len(zz))
Ejemplo n.º 7
0
 def test_del(self):
     items = [42, 3.14, "hello", object(), A(), frozenset([1, 2, 3]), A()]
     for x in range(len(items)):
         ordered_set = container.OrderedSet(items)
         zz = list(items)
         while len(zz):
             i = random.randint(0, len(zz) - 1)
             self.assertIs(ordered_set[i], zz[i])
             del ordered_set[i]
             del zz[i]
             result = [item for item in ordered_set]
             self.assertEqual(result, zz)
             self.assertEqual(len(result), len(zz))
Ejemplo n.º 8
0
 def setUp(self):
     self.t1 = container.OrderedSet(["a", "b"])
     self.t2 = container.OrderedSet(["a", "b"])