Source code for PFASGroups.getter

from .parser import add_componentSmarts, load_HalogenGroups, load_PFASDefinitions
from .core import HALOGEN_GROUPS_FILE, PFAS_DEFINITIONS_FILE, COMPONENTS_FILE
from .HalogenGroupModel import HalogenGroup
import json

@add_componentSmarts()
def get_compiled_componentSMARTSs(**kwargs):
    return kwargs.get('componentSmartss')

[docs] def get_componentSMARTSs(): with open(COMPONENTS_FILE, 'r') as f: data = json.load(f) return data
[docs] @load_HalogenGroups() def get_HalogenGroups(**kwargs): if kwargs.get('json_format',False): return kwargs.get('pfas_groups',[]).extend(kwargs.get('agg_pfas_groups',[])) with open(HALOGEN_GROUPS_FILE, 'r') as f: data = json.load(f) return data
[docs] @load_HalogenGroups() def get_compiled_HalogenGroups(**kwargs): """Return compiled HalogenGroup instances (compute=True groups only). Unlike :func:`get_HalogenGroups` which returns raw JSON dicts, this function returns ready-to-use :class:`HalogenGroup` instances that can be directly passed to :func:`parse_smiles` or extended with custom groups. Returns ------- list of HalogenGroup All compiled groups, suitable for passing as *pfas_groups* to :func:`parse_smiles` or :class:`~PFASGroups.fingerprints.PFASFingerprint`. Examples -------- >>> from PFASGroups import get_compiled_HalogenGroups, HalogenGroup, parse_smiles >>> groups = get_compiled_HalogenGroups() >>> groups.append(HalogenGroup( ... id=200, name="Perfluoroalkyl nitrates", ... smarts={"[C$(C[ON+](=O)[O-])]": 1}, ... componentSaturation="per", componentHalogens="F", ... componentForm="alkyl", ... constraints={"eq": {"N": 1}, "gte": {"F": 1}}, ... )) >>> results = parse_smiles(["FC(F)(F)C(F)(F)ON(=O)=O"], pfas_groups=groups) """ return list(kwargs.get('pfas_groups', []))
def get_compiled_PFASGroups() -> list: """Return compiled HalogenGroup instances restricted to fluorine (PFAS). Similar to :func:`get_compiled_HalogenGroups` but every group has ``componentHalogens`` forced to ``'F'``, so the compiled component-SMARTS patterns are built for fluorine only. Suitable for extending with custom PFAS-specific groups and passing directly to :func:`parse_smiles` or :class:`~PFASGroups.fingerprints.PFASFingerprint` when analysing PFAS/fluorinated compounds. Returns ------- list of HalogenGroup All compute=True groups compiled with ``componentHalogens='F'``, suitable for passing as *pfas_groups* to :func:`parse_smiles` or :class:`~PFASGroups.fingerprints.PFASFingerprint`. Examples -------- >>> from PFASGroups import get_compiled_PFASGroups, HalogenGroup, parse_smiles >>> groups = get_compiled_PFASGroups() >>> groups.append(HalogenGroup( ... id=200, name="Perfluoroalkyl nitrates", ... smarts={"[C$(C[ON+](=O)[O-])]": 1}, ... componentSmarts="Perfluoroalkyl", ... componentSaturation="per", componentHalogens="F", ... componentForm="alkyl", ... constraints={"eq": {"N": 1}, "gte": {"F": 1}}, ... )) >>> results = parse_smiles(["FC(F)(F)C(F)(F)ON(=O)=O"], pfas_groups=groups) See Also -------- get_compiled_HalogenGroups : same but supports all halogens (F, Cl, Br, I). """ with open(HALOGEN_GROUPS_FILE, 'r') as f: _pfg = json.load(f) return [ HalogenGroup(**{**entry, 'componentHalogens': 'F'}) for entry in _pfg if entry.get('compute', True) ] @load_HalogenGroups() def get_PFASGroups(**kwargs): if kwargs.get('json_format',False): return kwargs.get('pfas_groups',[]).extend(kwargs.get('agg_pfas_groups',[])) with open(HALOGEN_GROUPS_FILE, 'r') as f: data = json.load(f) for entry in data: entry["componentHalogen"] = ['F'] return data
[docs] @load_PFASDefinitions() def get_PFASDefinitions(**kwargs): if kwargs.get('json_format',False): return kwargs.get('pfas_definitions',[]) with open(PFAS_DEFINITIONS_FILE, 'r') as f: data = json.load(f) return data