Esempio n. 1
0
 def testGetInclusizeSubsets(self):
     expectSet = ((frozenset(("A",)),
                   frozenset(("C",)),
                   frozenset(("A","C",))))
     subsets = Subsets(SubsetsTests.testSet)
     iss = subsets.getInclusiveSubsets(frozenset(("A", "C",)))
     self.failUnlessEqual(iss, expectSet)
Esempio n. 2
0
 def testGetSubsets(self):
     expectSet = ((frozenset(("A",)),
                   frozenset(("B",)),
                   frozenset(("C",)),
                   frozenset(("A","B",)),
                   frozenset(("A","C",)),
                   frozenset(("B","C",)),
                   frozenset(("A","B","C"))))
     
     subsets = Subsets(SubsetsTests.testSet)
     ss = subsets.getSubsets()
     self.failUnlessEqual(ss, expectSet)
Esempio n. 3
0
 def testGetInclusizeSubsets(self):
     expectSet = ((frozenset(("A", )), frozenset(
         ("C", )), frozenset((
             "A",
             "C",
         ))))
     subsets = Subsets(SubsetsTests.testSet)
     iss = subsets.getInclusiveSubsets(frozenset((
         "A",
         "C",
     )))
     self.failUnlessEqual(iss, expectSet)
Esempio n. 4
0
    def __init__(self, subsets=None, isInclusive=False):
        """create new Venn.  If subsets is None, a private Subsets object is
        created,"""

        # is this a standard venn or inclusive?
        self.isInclusive = isInclusive
        self.subsets = subsets
        if self.subsets == None:
            self.subsets = Subsets()

        # Tables mappings set name to items and items to set names
        self.nameToItems = SetDict()
        self.itemToNames = SetDict()

        # Venn table, dict index by name, of items (lazy build)
        self.venn = None
Esempio n. 5
0
    def testGetSubsets(self):
        expectSet = ((frozenset(("A", )), frozenset(("B", )), frozenset(
            ("C", )), frozenset((
                "A",
                "B",
            )), frozenset((
                "A",
                "C",
            )), frozenset((
                "B",
                "C",
            )), frozenset(("A", "B", "C"))))

        subsets = Subsets(SubsetsTests.testSet)
        ss = subsets.getSubsets()
        self.failUnlessEqual(ss, expectSet)
Esempio n. 6
0
    def __init__(self, subsets=None, isInclusive=False):
        """create new Venn.  If subsets is None, a private Subsets object is
        created,"""

        # is this a standard venn or inclusive?
        self.isInclusive = isInclusive
        self.subsets = subsets
        if self.subsets == None:
            self.subsets = Subsets()

        # Tables mappings set name to items and items to set names
        self.nameToItems = SetDict()
        self.itemToNames = SetDict()
        
        # Venn table, dict index by name, of items (lazy build)
        self.venn = None
Esempio n. 7
0
class Venn(object):
    """Generate Venn diagram set intersections.  Each set has 
    list of ids associated with it that are shared between sets.
    """
    def __init__(self, subsets=None, isInclusive=False):
        """create new Venn.  If subsets is None, a private Subsets object is
        created,"""

        # is this a standard venn or inclusive?
        self.isInclusive = isInclusive
        self.subsets = subsets
        if self.subsets == None:
            self.subsets = Subsets()

        # Tables mappings set name to items and items to set names
        self.nameToItems = SetDict()
        self.itemToNames = SetDict()

        # Venn table, dict index by name, of items (lazy build)
        self.venn = None

    def addItem(self, setName, item):
        "add a single item from a named set"
        self.subsets.add(setName)
        self.nameToItems.add(setName, item)
        self.itemToNames.add(item, setName)
        self.venn = None

    def addItems(self, setName, items):
        "add items from a named set"
        self.subsets.add(setName)
        for item in items:
            self.nameToItems.add(setName, item)
            self.itemToNames.add(item, setName)
        self.venn = None

    def getNumItems(self):
        return len(self.itemToNames)

    def __buildVenn(self):
        "build Venn table"
        self.venn = SetDict(self.subsets.getSubsets())

        for item in self.itemToNames.iterkeys():
            nameSet = frozenset(self.itemToNames[item])
            self.venn.add(nameSet, item)

    def __buildInclusive(self):
        "build as inclusive subsets"
        self.venn = SetDict(self.subsets.getSubsets())

        for item in self.itemNames.iterkeys():
            setName = self.itemNames[item]
            for iss in self.subsets.getInclusiveSubsets(setName):
                self.venn.add(iss, item)

    def __update(self):
        "build venn or inclusive venn, if it doesn't exists"
        if self.venn == None:
            if self.isInclusive:
                self.__buildInclusive()
            else:
                self.__buildVenn()

    def getSubsetIds(self, subset):
        "get ids for the specified subset"
        self.__update()
        ids = self.venn.get(subset)
        if ids == None:
            ids = []
        return ids

    def getSubsetCounts(self, subset):
        "get counts for the specified subset"
        return len(self.getSubsetIds(subset))

    def getTotalCounts(self):
        "get total of counts for all subsets (meaningless on inclusive)"
        t = 0
        for subset in self.subsets.getSubsets():
            t += self.getSubsetCounts(subset)
        return t

    def writeCounts(self, fh, subsetNameSeparator=" "):
        "write TSV of subset counts to an open file"
        fileOps.prRowv(fh, "subset", "count")
        for subset in self.subsets.getSubsets():
            fileOps.prRowv(fh, subsetNameSeparator.join(subset),
                           self.getSubsetCounts(subset))

    def writeSets(self, fh, subsetNameSeparator=" "):
        "write TSV of subsets and ids to an open file"
        fileOps.prRowv(fh, "subset", "ids")
        for subset in self.subsets.getSubsets():
            fileOps.prRowv(fh, subsetNameSeparator.join(subset),
                           self.getSubsetCounts(subset))
Esempio n. 8
0
class Venn(object):
    """Generate Venn diagram set intersections.  Each set has 
    list of ids associated with it that are shared between sets.
    """

    def __init__(self, subsets=None, isInclusive=False):
        """create new Venn.  If subsets is None, a private Subsets object is
        created,"""

        # is this a standard venn or inclusive?
        self.isInclusive = isInclusive
        self.subsets = subsets
        if self.subsets == None:
            self.subsets = Subsets()

        # Tables mappings set name to items and items to set names
        self.nameToItems = SetDict()
        self.itemToNames = SetDict()
        
        # Venn table, dict index by name, of items (lazy build)
        self.venn = None

    def addItem(self, setName, item):
        "add a single item from a named set"
        self.subsets.add(setName)
        self.nameToItems.add(setName, item)
        self.itemToNames.add(item, setName)
        self.venn = None

    def addItems(self, setName, items):
        "add items from a named set"
        self.subsets.add(setName)
        for item in items:
            self.nameToItems.add(setName, item)
            self.itemToNames.add(item, setName)
        self.venn = None

    def getNumItems(self):
        return len(self.itemToNames)

    def __buildVenn(self):
        "build Venn table"
        self.venn = SetDict(self.subsets.getSubsets())

        for item in self.itemToNames.iterkeys():
            nameSet = frozenset(self.itemToNames[item])
            self.venn.add(nameSet, item)

    def __buildInclusive(self):
        "build as inclusive subsets"
        self.venn = SetDict(self.subsets.getSubsets())

        for item in self.itemNames.iterkeys():
            setName = self.itemNames[item]
            for iss in self.subsets.getInclusiveSubsets(setName):
                self.venn.add(iss, item)

    def __update(self):
        "build venn or inclusive venn, if it doesn't exists"
        if self.venn == None:
            if self.isInclusive:
                self.__buildInclusive()
            else:
                self.__buildVenn()

    def getSubsetIds(self, subset):
        "get ids for the specified subset"
        self.__update()
        ids = self.venn.get(subset)
        if ids == None:
            ids = []
        return ids

    def getSubsetCounts(self, subset):
        "get counts for the specified subset"
        return len(self.getSubsetIds(subset))

    def getTotalCounts(self):
        "get total of counts for all subsets (meaningless on inclusive)"
        t = 0
        for subset in self.subsets.getSubsets():
            t += self.getSubsetCounts(subset)
        return t

    def writeCounts(self, fh, subsetNameSeparator=" "):
        "write TSV of subset counts to an open file"
        fileOps.prRowv(fh, "subset", "count")
        for subset in self.subsets.getSubsets():
            fileOps.prRowv(fh, subsetNameSeparator.join(subset), self.getSubsetCounts(subset))
        
    def writeSets(self, fh, subsetNameSeparator=" "):
        "write TSV of subsets and ids to an open file"
        fileOps.prRowv(fh, "subset", "ids")
        for subset in self.subsets.getSubsets():
            fileOps.prRowv(fh, subsetNameSeparator.join(subset), self.getSubsetCounts(subset))