Source code for discrete_optimization.generic_rcpsp_tools.typing

#  Copyright (c) 2023 AIRBUS and its affiliates.
#  This source code is licensed under the MIT license found in the
#  LICENSE file in the root directory of this source tree.

from typing import TYPE_CHECKING, Union

from discrete_optimization.generic_tools.do_problem import Problem, Solution
from discrete_optimization.rcpsp import (
    PreemptiveRcpspProblem,
    RcpspProblem,
    SpecialConstraintsPreemptiveRcpspProblem,
)
from discrete_optimization.rcpsp.problem_preemptive import PreemptiveRcpspSolution
from discrete_optimization.rcpsp.solution import RcpspSolution
from discrete_optimization.rcpsp_multiskill.problem import (
    MultiskillRcpspProblem,
    MultiskillRcpspSolution,
    PreemptiveMultiskillRcpspSolution,
    VariantMultiskillRcpspProblem,
    VariantMultiskillRcpspSolution,
    VariantPreemptiveMultiskillRcpspSolution,
)

ANY_CLASSICAL_RCPSP = Union[
    RcpspProblem,
    PreemptiveRcpspProblem,
    SpecialConstraintsPreemptiveRcpspProblem,
]
ANY_RCPSP = Union[
    RcpspProblem,
    PreemptiveRcpspProblem,
    SpecialConstraintsPreemptiveRcpspProblem,
    MultiskillRcpspProblem,
    VariantMultiskillRcpspProblem,
]
ANY_MSRCPSP = Union[VariantMultiskillRcpspProblem, MultiskillRcpspProblem]
ANY_SOLUTION = Union[
    PreemptiveRcpspSolution,
    RcpspSolution,
    MultiskillRcpspSolution,
    VariantMultiskillRcpspSolution,
    PreemptiveMultiskillRcpspSolution,
    VariantPreemptiveMultiskillRcpspSolution,
]
ANY_SOLUTION_UNPREEMPTIVE = Union[
    RcpspSolution, MultiskillRcpspSolution, VariantMultiskillRcpspSolution
]
ANY_SOLUTION_PREEMPTIVE = Union[
    PreemptiveRcpspSolution, PreemptiveMultiskillRcpspSolution
]
ANY_SOLUTION_CLASSICAL_RCPSP = Union[RcpspSolution, PreemptiveRcpspSolution]
ANY_SOLUTION_MSRCPSP = Union[
    MultiskillRcpspSolution,
    VariantMultiskillRcpspSolution,
    PreemptiveMultiskillRcpspSolution,
    VariantPreemptiveMultiskillRcpspSolution,
]


if TYPE_CHECKING:
    from discrete_optimization.rcpsp.solvers.cp_mzn import (
        CpMultimodePreemptiveRcpspSolver,
        CpMultimodeRcpspSolver,
        CpPreemptiveRcpspSolver,
        CpRcpspSolver,
    )
    from discrete_optimization.rcpsp_multiskill.solvers.cp_mzn import (
        CpMultiskillRcpspSolver,
        CpPartialPreemptiveMultiskillRcpspSolver,
        CpPreemptiveMultiskillRcpspSolver,
    )

    ANY_CP_SOLVER = Union[
        CpPreemptiveRcpspSolver,
        CpRcpspSolver,
        CpMultimodeRcpspSolver,
        CpMultimodePreemptiveRcpspSolver,
        CpMultiskillRcpspSolver,
        CpPreemptiveMultiskillRcpspSolver,
        CpPartialPreemptiveMultiskillRcpspSolver,
    ]
else:
    ANY_CP_SOLVER = Union[
        "CpPreemptiveRcpspSolver",
        "CpRcpspSolver",
        "CpMultimodeRcpspSolver",
        "CpMultimodePreemptiveRcpspSolver",
        "CpMultiskillRcpspSolver",
        "CpPreemptiveMultiskillRcpspSolver",
        "CpPartialPreemptiveMultiskillRcpspSolver",
    ]


[docs] def is_instance_any_rcpsp_problem(problem: Problem) -> bool: return isinstance( problem, ( RcpspProblem, PreemptiveRcpspProblem, SpecialConstraintsPreemptiveRcpspProblem, MultiskillRcpspProblem, VariantMultiskillRcpspProblem, ), )
[docs] def is_instance_any_rcpsp_solution(solution: Solution) -> bool: return isinstance( solution, ( PreemptiveRcpspSolution, RcpspSolution, MultiskillRcpspSolution, VariantMultiskillRcpspSolution, PreemptiveMultiskillRcpspSolution, VariantPreemptiveMultiskillRcpspSolution, ), )