Source code for matchms.utils

import csv
import logging
import os
from functools import lru_cache
from typing import Iterable, List
from .typing import SpectrumType


logger = logging.getLogger("matchms")


[docs]def get_first_common_element(first: Iterable[str], second: Iterable[str]) -> str: """ Get first common element from two lists. Returns 'None' if there are no common elements. """ return next((item for item in first if item in second), None)
[docs]def get_common_keys(first: List[str], second: List[str]) -> List[str]: """Get common elements of two sets of strings in a case insensitive way. Args: first (List[str]): First list of strings. second (List[str]): List of strings to search for matches. Returns: List[str]: List of common elements without regarding case of first list. """ return [value for value in first if value in second or value.lower() in second]
[docs]def filter_none(iterable: Iterable) -> Iterable: """Filter iterable to remove 'None' elements. Args: iterable (Iterable): Iterable to filter. Returns: Iterable: Filtered iterable. """ return filter(lambda x: x is not None, iterable)
[docs]def load_known_key_conversions(key_conversions_file: str = None) -> dict: """Load dictionary of known key conversions. Makes sure that file loading is cached. """ if key_conversions_file is None: key_conversions_file = os.path.join(os.path.dirname(__file__), "data", "known_key_conversions.csv") assert os.path.isfile(key_conversions_file), f"Could not find {key_conversions_file}" return _load_key_conversions(key_conversions_file, 'known_synonym', 'matchms_default')
[docs]def load_export_key_conversions(export_key_conversions_file: str = None, export_style: str = None) -> dict: """Load dictionary of export key conversions. Makes sure that file loading is cached. """ if export_key_conversions_file is None: export_key_conversions_file = os.path.join(os.path.dirname(__file__), "data", "export_key_conversions.csv") assert os.path.isfile(export_key_conversions_file), f"Could not find {export_key_conversions_file}" return _load_key_conversions(export_key_conversions_file, 'matchms', export_style)
@lru_cache(maxsize=4) def _load_key_conversions(file: str, source: str, target: str) -> dict: with open(file, newline='', encoding='utf-8-sig') as csvfile: reader = csv.DictReader(csvfile) key_conversions = {} for row in reader: key_conversions[row[source]] = row[target] return key_conversions def fingerprint_export_warning(spectrums: List[SpectrumType]): if any(x.get("fingerprint") is not None for x in spectrums): logger.warning("fingerprint found but will not be written to file.")