class PARSE(): """ InChIKey parser """ _HASH1 = _UPPERCASE_LETTER * 14 _HASH2 = _UPPERCASE_LETTER * 8 _SVP = _UPPERCASE_LETTER * 2 + _escape('-') + _UPPERCASE_LETTER HASH1_KEY = 'hash1' HASH2_KEY = 'hash2' SVP_KEY = 'svp' PATTERN = ( _STRING_START + _named_capturing(_HASH1, name=HASH1_KEY) + _escape('-') + _named_capturing(_HASH2, name=HASH2_KEY) + _named_capturing(_SVP, name=SVP_KEY) + _STRING_END)
class NUMBERING(): """ _ """ LAYER_KEY = 'all' CONTENT_KEY = 'content' _START = _escape('/') _LAYER = (_escape('N:') + _named_capturing(_NONSPACES_NONGREEDY, name=CONTENT_KEY)) _END = _INCHI_SUBLAYER_END PATTERN = _START + _named_capturing(_LAYER, name=LAYER_KEY) + _END class NUMBER(): """ _ """ PATTERN = _UNSIGNED_INTEGER
def _index_save_ids(tbl): """ get the values of previously saved index keys """ _pattern = (_STRING_START + 'i' + _capturing(_UNSIGNED_INTEGER) + _escape('_') + _STRING_END) keys = keys_(tbl) caps = tuple(_first_capture(_pattern, key) for key in keys) sids = tuple(int(cap) for cap in caps if cap is not None) return sids
class _KEYxLAYER(): LAYER_KEY = 'all' CONTENT_KEY = 'content' _START = _escape('/') _LAYER = key + _named_capturing(_NONSPACES_NONGREEDY, name=CONTENT_KEY) _END = _INCHI_SUBLAYER_END PATTERN = _START + _named_capturing(_LAYER, name=LAYER_KEY) + _END
class FORMULA(): """ _ """ LAYER_KEY = 'all' CONTENT_KEY = 'content' _START = _escape('/') _LAYER = (_not_followed_by(_LOWERCASE_LETTER) + _named_capturing(_NONSPACES_NONGREEDY, name=CONTENT_KEY)) _END = _INCHI_SUBLAYER_END PATTERN = _START + _named_capturing(_LAYER, name=LAYER_KEY) + _END
class PREFIX(): """ _ """ LAYER_KEY = 'all' CONTENT_KEY = 'content' _START = _STRING_START _LAYER = (_escape('InChI=') + _named_capturing(_NONSPACES_NONGREEDY, name=CONTENT_KEY)) _END = _INCHI_SUBLAYER_END PATTERN = _START + _named_capturing(_LAYER, name=LAYER_KEY) + _END
class TERM(): """ _ """ KEY_KEY = 'key' VAL_KEY = 'val' PLUS_VAL = _STEREO_PLUS_VAL MINUS_VAL = _STEREO_MINUS_VAL UNKNOWN_VALS = (_STEREO_UNKNOWN_VAL, _STEREO_UNDEFINED_VAL) VALS = (MINUS_VAL, PLUS_VAL) + UNKNOWN_VALS _KEY = _UNSIGNED_INTEGER + _escape('-') + _UNSIGNED_INTEGER _VAL = _one_of_these(list(map(_escape, VALS))) PATTERN = (_named_capturing(_KEY, name=KEY_KEY) + _named_capturing(_VAL, name=VAL_KEY))
""" functions operating on InChI-AuxInfo strings """ from autoparse.pattern import escape as _escape from autoparse.pattern import one_or_more as _one_or_more from autoparse.pattern import one_of_these as _one_of_these from autoparse.pattern import named_capturing as _named_capturing from autoparse.pattern import UNSIGNED_INTEGER as _UNSIGNED_INTEGER from autoparse.pattern import NONSPACE as _NONSPACE from autoparse.pattern import STRING_END as _STRING_END from autoparse.find import first_named_capture as _first_named_capture from autoparse.find import all_captures as _all_captures _NONSPACES_NONGREEDY = _one_or_more(_NONSPACE, greedy=False) _INCHI_SUBLAYER_END = _one_of_these([_escape('/'), _STRING_END]) class PARSE(): """ InChI-AuxInfo format specifications """ class NUMBERING(): """ _ """ LAYER_KEY = 'all' CONTENT_KEY = 'content' _START = _escape('/') _LAYER = (_escape('N:') + _named_capturing(_NONSPACES_NONGREEDY, name=CONTENT_KEY)) _END = _INCHI_SUBLAYER_END PATTERN = _START + _named_capturing(_LAYER, name=LAYER_KEY) + _END class NUMBER():