Ejemplo n.º 1
0
 def generate(seq, vqs, mv):
   if not vqs: yield 0, seq; return
   vqs = vqs[:] # avoid side effects
   v,q = vqs.pop(); mv -= v
   q = And(LiteralResultSet(seq), q)
   qr = _eval(q, cat)
   if qr:
     feed1 = generate(qr, vqs, mv)
     seq = difference(seq, qr)
   else: feed1 = None
   feed2 = seq and generate(seq, vqs, mv) or None
   def fetch1():
     if feed1 is None: return None
     try: val, subseq = feed1.next(); return val + v, subseq
     except StopIteration: return None
   def fetch2():
     if feed2 is None: return None
     try: return feed2.next()
     except StopIteration: return None
   g1 = fetch1()
   # largest value from "feed1" only
   while g1 is not None and g1[0] > mv: yield g1; g1 = fetch1()
   # merge largest values from "feed1" and "feed2"
   g2 = fetch2()
   while g1 is not None and g2 is not None:
     v1 = g1[0]; v2 = g2[0]
     if v1 > v2: yield g1; g1 = fetch1()
     elif v2 > v1: yield g2; g2 = fetch2()
     # Note: g1[1] was copied (by the "intersection" above); therfore,
     #  we can destructively change it
     else: g1[1].update(g2[1]); yield g1; g1 = fetch1(); g2 = fetch2()
   # handle feed1
   while g1 is not None: yield g1; g1 = fetch1()
   # handle feed2
   while g2 is not None: yield g2; g2 = fetch2()
Ejemplo n.º 2
0
 def _group(self, seq):
   spec = self._spec; cat = self._cat
   vqs = spec._getValueQuerySequence()
   for i in xrange(len(vqs)-1,-1,-1):
     v,q = vqs[i]
     q = And(LiteralResultSet(seq), q)
     qr = _eval(q, cat)
     if qr: yield v, qr; seq = difference(seq, qr)
     if not seq: return
   yield 0, seq
Ejemplo n.º 3
0
 def _group(self, seq):
     spec = self._spec
     cat = self._cat
     vqs = spec._getValueQuerySequence()
     for i in xrange(len(vqs) - 1, -1, -1):
         v, q = vqs[i]
         q = And(LiteralResultSet(seq), q)
         qr = _eval(q, cat)
         if qr:
             yield v, qr
             seq = difference(seq, qr)
         if not seq: return
     yield 0, seq
Ejemplo n.º 4
0
def main(config):
    # CUDNN
    cudnn.benchmark = True

    if not os.path.exists('results/'):
        os.makedirs(config.model_save_dir)
    if not os.path.exists('results/' + config.model_name + '/'):
        os.makedirs('results/' + config.model_name + '/')
    if not os.path.exists(config.model_save_dir):
        os.makedirs(config.model_save_dir)
    if not os.path.exists(config.result_dir):
        os.makedirs(config.result_dir)

    model = build_net()
    print(model)
    if torch.cuda.is_available():
        model.cuda()
    if config.mode == 'train':
        _train(model, config)

    elif config.mode == 'test':
        _eval(model, config)
Ejemplo n.º 5
0
    def _evalAdvancedQuery(self, query, sortSpecs=()):
        """evaluate *query* for 'CatalogTool' and sort results according to *sortSpec*."""
        query = query._clone()

        # taken from 'CatalogTool.searchResults'
        user = _getAuthenticatedUser(self)
        query &= In("allowedRolesAndUsers", self._listAllowedRolesAndUsers(user))
        if not _checkPermission(AccessInactivePortalContent, self):
            now = self.ZopeTime()
            if "ValidityRange" in self.Indexes.objectIds():
                query &= Eq("ValidityRange", now)
            else:
                query &= Le("effective", now)
                query &= Ge("expires", now)
        return _eval(self, query, sortSpecs)
Ejemplo n.º 6
0
  def _evalAdvancedQuery(self,query,sortSpecs=()):
    '''evaluate *query* for 'CatalogTool' and sort results according to *sortSpec*.'''
    query = query._clone()

    # taken from 'CatalogTool.searchResults'
    user = _getAuthenticatedUser(self)
    query &= In('allowedRolesAndUsers',self._listAllowedRolesAndUsers(user))
    if not _checkPermission(AccessInactivePortalContent,self):
      now= self.ZopeTime()
      indexes = self.Indexes.objectIds()
      if 'ValidityRange' in indexes:
        query &= Eq('ValidityRange', now)
      else:
        # make a check that the indexes exist (suggested by Chris Abraham
        # and Robert Marianski)
        # Note: we use inoffical API.
        if 'effective' in indexes: query &= Le('effective', now)
        if 'expires' in indexes: query &= Ge('expires', now)
    return _eval(self,query,sortSpecs)
Ejemplo n.º 7
0
    def _evalAdvancedQuery(self, query, sortSpecs=()):
        '''evaluate *query* for 'CatalogTool' and sort results according to *sortSpec*.'''
        query = query._clone()

        # taken from 'CatalogTool.searchResults'
        user = _getAuthenticatedUser(self)
        query &= In('allowedRolesAndUsers',
                    self._listAllowedRolesAndUsers(user))
        if not _checkPermission(AccessInactivePortalContent, self):
            now = self.ZopeTime()
            indexes = self.Indexes.objectIds()
            if 'ValidityRange' in indexes:
                query &= Eq('ValidityRange', now)
            else:
                # make a check that the indexes exist (suggested by Chris Abraham
                # and Robert Marianski)
                # Note: we use inoffical API.
                if 'effective' in indexes: query &= Le('effective', now)
                if 'expires' in indexes: query &= Ge('expires', now)
        return _eval(self, query, sortSpecs)
Ejemplo n.º 8
0
        def generate(seq, vqs, mv):
            if not vqs:
                yield 0, seq
                return
            vqs = vqs[:]  # avoid side effects
            v, q = vqs.pop()
            mv -= v
            q = And(LiteralResultSet(seq), q)
            qr = _eval(q, cat)
            if qr:
                feed1 = generate(qr, vqs, mv)
                seq = difference(seq, qr)
            else:
                feed1 = None
            feed2 = seq and generate(seq, vqs, mv) or None

            def fetch1():
                if feed1 is None: return None
                try:
                    val, subseq = feed1.next()
                    return val + v, subseq
                except StopIteration:
                    return None

            def fetch2():
                if feed2 is None: return None
                try:
                    return feed2.next()
                except StopIteration:
                    return None

            g1 = fetch1()
            # largest value from "feed1" only
            while g1 is not None and g1[0] > mv:
                yield g1
                g1 = fetch1()
            # merge largest values from "feed1" and "feed2"
            g2 = fetch2()
            while g1 is not None and g2 is not None:
                v1 = g1[0]
                v2 = g2[0]
                if v1 > v2:
                    yield g1
                    g1 = fetch1()
                elif v2 > v1:
                    yield g2
                    g2 = fetch2()
                    # Note: g1[1] was copied (by the "intersection" above); therfore,
                    #  we can destructively change it
                else:
                    g1[1].update(g2[1])
                    yield g1
                    g1 = fetch1()
                    g2 = fetch2()
            # handle feed1
            while g1 is not None:
                yield g1
                g1 = fetch1()
            # handle feed2
            while g2 is not None:
                yield g2
                g2 = fetch2()