Source code for hstrat.phylogenetic_inference.tree.trie_postprocess._NopTriePostprocessor

import typing

import pandas as pd
import polars as pl

from ...._auxiliary_lib import anytree_iterative_deepcopy
from .._impl import TrieInnerNode
from ._detail import TriePostprocessorBase


[docs] class NopTriePostprocessor(TriePostprocessorBase): """Functor for nop trie postprocess."""
[docs] def __call__( self: "NopTriePostprocessor", trie: typing.Union[TrieInnerNode, pd.DataFrame, pl.DataFrame], p_differentia_collision: float, mutate: bool = False, progress_wrap: typing.Callable = lambda x: x, ) -> typing.Union[TrieInnerNode, pd.DataFrame, pl.DataFrame]: """Apply postprocess functors to the input trie. Parameters ---------- trie : TrieInnerNode or pd.DataFrame or pl.DataFrame The input trie to be postprocessed. p_differentia_collision : float Probability of a randomly-generated differentia matching an existing differentia. Not used in the current implementation. mutate : bool, default False Are side effects on the input argument `trie` allowed? If False, a deep copy of the input trie is made. progress_wrap : typing.Callable, optional Pass tqdm or equivalent to report progress. Returns ------- TrieInnerNode or pd.DataFrame or pl.DataFrame The postprocessed trie, identical to input. """ if isinstance(trie, TrieInnerNode): if not mutate: trie = anytree_iterative_deepcopy( trie, progress_wrap=progress_wrap ) elif isinstance(trie, pd.DataFrame): if not mutate: trie = trie.copy() elif isinstance(trie, pl.DataFrame): if not mutate: trie = trie.clone() else: raise TypeError return trie