Source code for proteindf_bridge.functions

from __future__ import annotations

import inspect
import os
import yaml
from typing import Any, List, Dict, Tuple, Optional

try:
    import msgpack
except ImportError:
    import msgpack_pure as msgpack

from .atomgroup import AtomGroup
from .str_processing import StrUtils

import logging
logger = logging.getLogger(__name__)


[docs] def locate() -> Tuple[str, str, int]: """ return tuple of (file, function, line number) cf.) https://qiita.com/ymko/items/b46d32b98f013f06d805 """ frame = inspect.currentframe().f_back return os.path.basename(frame.f_code.co_filename), frame.f_code.co_name, frame.f_lineno
[docs] def load_yaml(yaml_path: str) -> Any: if not isinstance(yaml_path, str): raise TypeError(f"Expected str, got {type(yaml_path).__name__}") data = None with open(yaml_path) as f: contents = f.read() data = parse_yaml(contents) return data
[docs] def parse_yaml(yaml_data: str) -> List[Any]: if not isinstance(yaml_data, str): raise TypeError(f"Expected str, got {type(yaml_data).__name__}") data = list(yaml.load_all(yaml_data, Loader=yaml.SafeLoader)) return data
[docs] def get_yaml(data: Any) -> str: yaml_str = "" if data is not None: yaml_str = yaml.dump(data, encoding='utf8', allow_unicode=True, default_flow_style=False, line_break='\n') yaml_str = StrUtils.to_unicode(yaml_str) return yaml_str
[docs] def save_yaml(data: Any, yaml_path: str) -> None: if not isinstance(yaml_path, str): raise TypeError(f"Expected str, got {type(yaml_path).__name__}") yaml_str = get_yaml(data) with open(yaml_path, "w") as f: f.write(yaml_str)
[docs] def load_msgpack(mpac_path: str) -> Any: """load message pack file and return python data """ if not isinstance(mpac_path, str): raise TypeError(f"Expected str, got {type(mpac_path).__name__}") mpac_data = None with open(mpac_path, "rb") as f: mpac_data = msgpack.unpackb(f.read(), strict_map_key=False) if isinstance(mpac_data, list): mpac_data = StrUtils.to_unicode_list(mpac_data) elif isinstance(mpac_data, dict): mpac_data = StrUtils.to_unicode_dict(mpac_data) return mpac_data
[docs] def save_msgpack(data: Any, mpac_path: str) -> None: """save python data to msgpack file """ if not isinstance(mpac_path, str): raise TypeError(f"Expected str, got {type(mpac_path).__name__}") mpac_data = msgpack.packb(data) with open(mpac_path, "wb") as f: f.write(mpac_data)
[docs] def load_atomgroup(brd_path: str) -> AtomGroup: """load bridge file (msgpack format) """ mpac_data = load_msgpack(brd_path) atomgroup = AtomGroup(mpac_data) return atomgroup
[docs] def save_atomgroup(atomgroup: AtomGroup, file_path: str) -> None: """save bridge file (msgpack format) """ data = atomgroup.get_raw_data() save_msgpack(data, file_path)