def explicit_hydrogen_keys(xgr): """ explicit hydrogen keys (H types: explicit, implicit, backbone) """ hyd_keys = dict_.keys_by_value(atom_symbols(xgr), lambda x: x == 'H') atm_ngb_keys_dct = atom_neighbor_keys(xgr) def _is_backbone(hyd_key): return all(ngb_key in hyd_keys and hyd_key < ngb_key for ngb_key in atm_ngb_keys_dct[hyd_key]) exp_hyd_keys = frozenset(fmit.filterfalse(_is_backbone, hyd_keys)) return exp_hyd_keys
def difference(orig, new): ''' Calculate difference between two iterables. Will return two iterables, one with added elements and one with removed elements. Arguments: orig - original iterable new - new iterable Returns: added, removed ''' try: added = set(new).difference(orig) except TypeError: added = filterfalse(orig.__contains__, new) try: removed = set(orig).difference(new) except TypeError: removed = filterfalse(new.__contains__, orig) return added, removed
def explicit_hydrogen_keys(gra): """ explicit hydrogen keys (H types: explicit, implicit, backbone) """ hyd_keys = dict_.keys_by_value(atom_symbols(gra), lambda x: x == 'H') atm_ngb_keys_dct = atoms_neighbor_atom_keys(gra) def _is_backbone(hyd_key): is_h2 = all(ngb_key in hyd_keys and hyd_key < ngb_key for ngb_key in atm_ngb_keys_dct[hyd_key]) is_multivalent = len(atm_ngb_keys_dct[hyd_key]) > 1 return is_h2 or is_multivalent exp_hyd_keys = frozenset(fmit.filterfalse(_is_backbone, hyd_keys)) return exp_hyd_keys
def unique_everseen(iterable, key=None): "List unique elements, preserving order. Remember all elements ever seen." # unique_everseen('AAAABBBCCDAABBB') --> A B C D # unique_everseen('ABBCcAD', str.lower) --> A B C D from future.moves.itertools import filterfalse seen = set() seen_add = seen.add if key is None: for element in filterfalse(seen.__contains__, iterable): seen_add(element) yield element else: for element in iterable: k = key(element) if k not in seen: seen_add(k) yield element
def _ref_key(self, key): """Record a reference to the argument key.""" queue = self.queue refcount = self.refcount queue.append(key) refcount[key] = refcount[key] + 1 # periodically compact the queue by eliminating duplicate keys # while preserving order of most recent access. Note that this # is only required when the cache does not exceed its maximum # size if len(queue) > self.max_queue: refcount.clear() queue_appendleft = queue.appendleft queue_appendleft(self.sentinel) for k in filterfalse(refcount.__contains__, iter(queue.pop, self.sentinel)): queue_appendleft(k) refcount[k] = 1
def combinatorial_difference(input): '''Gets the sequence of differences. This corresponds to the upper triangular portion of a difference matrix.''' combos = combinations_with_replacement(input, 2) diffs = map(lambda x: abs(x[0] - x[1]), combos) return list(filterfalse(lambda x: x == 0, diffs))
def partition(pred, iterable): """From itertools documentation""" t1, t2 = tee(iterable) return list(filterfalse(pred, t1)), list(filter(pred, t2))
def makedirs(*paths): """ None is a path with abspath None and not filesystem counterpart """ for path in filterfalse(testpaths, paths): os.makedirs(path)