import math
import random
import warnings
from collections.abc import Collection
from datetime import datetime
from typing import Generic, Optional, Sequence, TypeVar
from syntheseus.search.graph.node import BaseGraphNode
from syntheseus.search import INT_INF

from syntheseus.search.algorithms.base import SearchAlgorithm
from syntheseus.search.graph.base_graph import RetrosynthesisSearchGraph

GraphType = TypeVar("GraphType", bound=RetrosynthesisSearchGraph)
AlgReturnType = TypeVar("AlgReturnType")

class SearchAlgorithmGuided(SearchAlgorithm[GraphType, AlgReturnType]):
    """
    Parent class for search algorithms in this repo, which implements
    some common functions for all algorithms to reduce code duplication.
    """

    def __init__(
        self,
        **kwargs,
    ):
        super().__init__(**kwargs)




