# @generated by generate_proto_mypy_stubs.py.  Do not edit!
import sys
from google.protobuf.descriptor import (
    EnumDescriptor as google___protobuf___descriptor___EnumDescriptor,
)

from google.protobuf.duration_pb2 import (
    Duration as google___protobuf___duration_pb2___Duration,
)

from google.protobuf.message import (
    Message as google___protobuf___message___Message,
)

from ortools.constraint_solver.routing_enums_pb2 import (
    FirstSolutionStrategy as ortools___constraint_solver___routing_enums_pb2___FirstSolutionStrategy,
    LocalSearchMetaheuristic as ortools___constraint_solver___routing_enums_pb2___LocalSearchMetaheuristic,
)

from ortools.constraint_solver.solver_parameters_pb2 import (
    ConstraintSolverParameters as ortools___constraint_solver___solver_parameters_pb2___ConstraintSolverParameters,
)

from ortools.util.optional_boolean_pb2 import (
    OptionalBoolean as ortools___util___optional_boolean_pb2___OptionalBoolean,
)

from typing import (
    List as typing___List,
    Optional as typing___Optional,
    Tuple as typing___Tuple,
    cast as typing___cast,
)

from typing_extensions import (
    Literal as typing_extensions___Literal,
)


class RoutingSearchParameters(google___protobuf___message___Message):
    class SchedulingSolver(int):
        DESCRIPTOR: google___protobuf___descriptor___EnumDescriptor = ...
        @classmethod
        def Name(cls, number: int) -> str: ...
        @classmethod
        def Value(cls, name: str) -> RoutingSearchParameters.SchedulingSolver: ...
        @classmethod
        def keys(cls) -> typing___List[str]: ...
        @classmethod
        def values(cls) -> typing___List[RoutingSearchParameters.SchedulingSolver]: ...
        @classmethod
        def items(cls) -> typing___List[typing___Tuple[str, RoutingSearchParameters.SchedulingSolver]]: ...
        UNSET = typing___cast(RoutingSearchParameters.SchedulingSolver, 0)
        GLOP = typing___cast(RoutingSearchParameters.SchedulingSolver, 1)
        CP_SAT = typing___cast(RoutingSearchParameters.SchedulingSolver, 2)
    UNSET = typing___cast(RoutingSearchParameters.SchedulingSolver, 0)
    GLOP = typing___cast(RoutingSearchParameters.SchedulingSolver, 1)
    CP_SAT = typing___cast(RoutingSearchParameters.SchedulingSolver, 2)

    class LocalSearchNeighborhoodOperators(google___protobuf___message___Message):
        use_relocate = ... # type: ortools___util___optional_boolean_pb2___OptionalBoolean
        use_relocate_pair = ... # type: ortools___util___optional_boolean_pb2___OptionalBoolean
        use_light_relocate_pair = ... # type: ortools___util___optional_boolean_pb2___OptionalBoolean
        use_relocate_neighbors = ... # type: ortools___util___optional_boolean_pb2___OptionalBoolean
        use_relocate_subtrip = ... # type: ortools___util___optional_boolean_pb2___OptionalBoolean
        use_exchange = ... # type: ortools___util___optional_boolean_pb2___OptionalBoolean
        use_exchange_pair = ... # type: ortools___util___optional_boolean_pb2___OptionalBoolean
        use_exchange_subtrip = ... # type: ortools___util___optional_boolean_pb2___OptionalBoolean
        use_cross = ... # type: ortools___util___optional_boolean_pb2___OptionalBoolean
        use_cross_exchange = ... # type: ortools___util___optional_boolean_pb2___OptionalBoolean
        use_relocate_expensive_chain = ... # type: ortools___util___optional_boolean_pb2___OptionalBoolean
        use_two_opt = ... # type: ortools___util___optional_boolean_pb2___OptionalBoolean
        use_or_opt = ... # type: ortools___util___optional_boolean_pb2___OptionalBoolean
        use_lin_kernighan = ... # type: ortools___util___optional_boolean_pb2___OptionalBoolean
        use_tsp_opt = ... # type: ortools___util___optional_boolean_pb2___OptionalBoolean
        use_make_active = ... # type: ortools___util___optional_boolean_pb2___OptionalBoolean
        use_relocate_and_make_active = ... # type: ortools___util___optional_boolean_pb2___OptionalBoolean
        use_make_inactive = ... # type: ortools___util___optional_boolean_pb2___OptionalBoolean
        use_make_chain_inactive = ... # type: ortools___util___optional_boolean_pb2___OptionalBoolean
        use_swap_active = ... # type: ortools___util___optional_boolean_pb2___OptionalBoolean
        use_extended_swap_active = ... # type: ortools___util___optional_boolean_pb2___OptionalBoolean
        use_node_pair_swap_active = ... # type: ortools___util___optional_boolean_pb2___OptionalBoolean
        use_path_lns = ... # type: ortools___util___optional_boolean_pb2___OptionalBoolean
        use_full_path_lns = ... # type: ortools___util___optional_boolean_pb2___OptionalBoolean
        use_tsp_lns = ... # type: ortools___util___optional_boolean_pb2___OptionalBoolean
        use_inactive_lns = ... # type: ortools___util___optional_boolean_pb2___OptionalBoolean
        use_global_cheapest_insertion_path_lns = ... # type: ortools___util___optional_boolean_pb2___OptionalBoolean
        use_local_cheapest_insertion_path_lns = ... # type: ortools___util___optional_boolean_pb2___OptionalBoolean
        use_global_cheapest_insertion_expensive_chain_lns = ... # type: ortools___util___optional_boolean_pb2___OptionalBoolean
        use_local_cheapest_insertion_expensive_chain_lns = ... # type: ortools___util___optional_boolean_pb2___OptionalBoolean

        def __init__(self,
            *,
            use_relocate : typing___Optional[ortools___util___optional_boolean_pb2___OptionalBoolean] = None,
            use_relocate_pair : typing___Optional[ortools___util___optional_boolean_pb2___OptionalBoolean] = None,
            use_light_relocate_pair : typing___Optional[ortools___util___optional_boolean_pb2___OptionalBoolean] = None,
            use_relocate_neighbors : typing___Optional[ortools___util___optional_boolean_pb2___OptionalBoolean] = None,
            use_relocate_subtrip : typing___Optional[ortools___util___optional_boolean_pb2___OptionalBoolean] = None,
            use_exchange : typing___Optional[ortools___util___optional_boolean_pb2___OptionalBoolean] = None,
            use_exchange_pair : typing___Optional[ortools___util___optional_boolean_pb2___OptionalBoolean] = None,
            use_exchange_subtrip : typing___Optional[ortools___util___optional_boolean_pb2___OptionalBoolean] = None,
            use_cross : typing___Optional[ortools___util___optional_boolean_pb2___OptionalBoolean] = None,
            use_cross_exchange : typing___Optional[ortools___util___optional_boolean_pb2___OptionalBoolean] = None,
            use_relocate_expensive_chain : typing___Optional[ortools___util___optional_boolean_pb2___OptionalBoolean] = None,
            use_two_opt : typing___Optional[ortools___util___optional_boolean_pb2___OptionalBoolean] = None,
            use_or_opt : typing___Optional[ortools___util___optional_boolean_pb2___OptionalBoolean] = None,
            use_lin_kernighan : typing___Optional[ortools___util___optional_boolean_pb2___OptionalBoolean] = None,
            use_tsp_opt : typing___Optional[ortools___util___optional_boolean_pb2___OptionalBoolean] = None,
            use_make_active : typing___Optional[ortools___util___optional_boolean_pb2___OptionalBoolean] = None,
            use_relocate_and_make_active : typing___Optional[ortools___util___optional_boolean_pb2___OptionalBoolean] = None,
            use_make_inactive : typing___Optional[ortools___util___optional_boolean_pb2___OptionalBoolean] = None,
            use_make_chain_inactive : typing___Optional[ortools___util___optional_boolean_pb2___OptionalBoolean] = None,
            use_swap_active : typing___Optional[ortools___util___optional_boolean_pb2___OptionalBoolean] = None,
            use_extended_swap_active : typing___Optional[ortools___util___optional_boolean_pb2___OptionalBoolean] = None,
            use_node_pair_swap_active : typing___Optional[ortools___util___optional_boolean_pb2___OptionalBoolean] = None,
            use_path_lns : typing___Optional[ortools___util___optional_boolean_pb2___OptionalBoolean] = None,
            use_full_path_lns : typing___Optional[ortools___util___optional_boolean_pb2___OptionalBoolean] = None,
            use_tsp_lns : typing___Optional[ortools___util___optional_boolean_pb2___OptionalBoolean] = None,
            use_inactive_lns : typing___Optional[ortools___util___optional_boolean_pb2___OptionalBoolean] = None,
            use_global_cheapest_insertion_path_lns : typing___Optional[ortools___util___optional_boolean_pb2___OptionalBoolean] = None,
            use_local_cheapest_insertion_path_lns : typing___Optional[ortools___util___optional_boolean_pb2___OptionalBoolean] = None,
            use_global_cheapest_insertion_expensive_chain_lns : typing___Optional[ortools___util___optional_boolean_pb2___OptionalBoolean] = None,
            use_local_cheapest_insertion_expensive_chain_lns : typing___Optional[ortools___util___optional_boolean_pb2___OptionalBoolean] = None,
            ) -> None: ...
        @classmethod
        def FromString(cls, s: bytes) -> RoutingSearchParameters.LocalSearchNeighborhoodOperators: ...
        def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
        def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
        if sys.version_info >= (3,):
            def ClearField(self, field_name: typing_extensions___Literal[u"use_cross",u"use_cross_exchange",u"use_exchange",u"use_exchange_pair",u"use_exchange_subtrip",u"use_extended_swap_active",u"use_full_path_lns",u"use_global_cheapest_insertion_expensive_chain_lns",u"use_global_cheapest_insertion_path_lns",u"use_inactive_lns",u"use_light_relocate_pair",u"use_lin_kernighan",u"use_local_cheapest_insertion_expensive_chain_lns",u"use_local_cheapest_insertion_path_lns",u"use_make_active",u"use_make_chain_inactive",u"use_make_inactive",u"use_node_pair_swap_active",u"use_or_opt",u"use_path_lns",u"use_relocate",u"use_relocate_and_make_active",u"use_relocate_expensive_chain",u"use_relocate_neighbors",u"use_relocate_pair",u"use_relocate_subtrip",u"use_swap_active",u"use_tsp_lns",u"use_tsp_opt",u"use_two_opt"]) -> None: ...
        else:
            def ClearField(self, field_name: typing_extensions___Literal[u"use_cross",b"use_cross",u"use_cross_exchange",b"use_cross_exchange",u"use_exchange",b"use_exchange",u"use_exchange_pair",b"use_exchange_pair",u"use_exchange_subtrip",b"use_exchange_subtrip",u"use_extended_swap_active",b"use_extended_swap_active",u"use_full_path_lns",b"use_full_path_lns",u"use_global_cheapest_insertion_expensive_chain_lns",b"use_global_cheapest_insertion_expensive_chain_lns",u"use_global_cheapest_insertion_path_lns",b"use_global_cheapest_insertion_path_lns",u"use_inactive_lns",b"use_inactive_lns",u"use_light_relocate_pair",b"use_light_relocate_pair",u"use_lin_kernighan",b"use_lin_kernighan",u"use_local_cheapest_insertion_expensive_chain_lns",b"use_local_cheapest_insertion_expensive_chain_lns",u"use_local_cheapest_insertion_path_lns",b"use_local_cheapest_insertion_path_lns",u"use_make_active",b"use_make_active",u"use_make_chain_inactive",b"use_make_chain_inactive",u"use_make_inactive",b"use_make_inactive",u"use_node_pair_swap_active",b"use_node_pair_swap_active",u"use_or_opt",b"use_or_opt",u"use_path_lns",b"use_path_lns",u"use_relocate",b"use_relocate",u"use_relocate_and_make_active",b"use_relocate_and_make_active",u"use_relocate_expensive_chain",b"use_relocate_expensive_chain",u"use_relocate_neighbors",b"use_relocate_neighbors",u"use_relocate_pair",b"use_relocate_pair",u"use_relocate_subtrip",b"use_relocate_subtrip",u"use_swap_active",b"use_swap_active",u"use_tsp_lns",b"use_tsp_lns",u"use_tsp_opt",b"use_tsp_opt",u"use_two_opt",b"use_two_opt"]) -> None: ...

    first_solution_strategy = ... # type: ortools___constraint_solver___routing_enums_pb2___FirstSolutionStrategy.Value
    use_unfiltered_first_solution_strategy = ... # type: bool
    savings_neighbors_ratio = ... # type: float
    savings_max_memory_usage_bytes = ... # type: float
    savings_add_reverse_arcs = ... # type: bool
    savings_arc_coefficient = ... # type: float
    savings_parallel_routes = ... # type: bool
    cheapest_insertion_farthest_seeds_ratio = ... # type: float
    cheapest_insertion_first_solution_neighbors_ratio = ... # type: float
    cheapest_insertion_ls_operator_neighbors_ratio = ... # type: float
    christofides_use_minimum_matching = ... # type: bool
    relocate_expensive_chain_num_arcs_to_consider = ... # type: int
    heuristic_expensive_chain_lns_num_arcs_to_consider = ... # type: int
    local_search_metaheuristic = ... # type: ortools___constraint_solver___routing_enums_pb2___LocalSearchMetaheuristic.Value
    guided_local_search_lambda_coefficient = ... # type: float
    use_depth_first_search = ... # type: bool
    use_cp = ... # type: ortools___util___optional_boolean_pb2___OptionalBoolean
    use_cp_sat = ... # type: ortools___util___optional_boolean_pb2___OptionalBoolean
    continuous_scheduling_solver = ... # type: RoutingSearchParameters.SchedulingSolver
    mixed_integer_scheduling_solver = ... # type: RoutingSearchParameters.SchedulingSolver
    optimization_step = ... # type: float
    number_of_solutions_to_collect = ... # type: int
    solution_limit = ... # type: int
    use_full_propagation = ... # type: bool
    log_search = ... # type: bool
    log_cost_scaling_factor = ... # type: float
    log_cost_offset = ... # type: float

    @property
    def local_search_operators(self) -> RoutingSearchParameters.LocalSearchNeighborhoodOperators: ...

    @property
    def time_limit(self) -> google___protobuf___duration_pb2___Duration: ...

    @property
    def lns_time_limit(self) -> google___protobuf___duration_pb2___Duration: ...

    def __init__(self,
        *,
        first_solution_strategy : typing___Optional[ortools___constraint_solver___routing_enums_pb2___FirstSolutionStrategy.Value] = None,
        use_unfiltered_first_solution_strategy : typing___Optional[bool] = None,
        savings_neighbors_ratio : typing___Optional[float] = None,
        savings_max_memory_usage_bytes : typing___Optional[float] = None,
        savings_add_reverse_arcs : typing___Optional[bool] = None,
        savings_arc_coefficient : typing___Optional[float] = None,
        savings_parallel_routes : typing___Optional[bool] = None,
        cheapest_insertion_farthest_seeds_ratio : typing___Optional[float] = None,
        cheapest_insertion_first_solution_neighbors_ratio : typing___Optional[float] = None,
        cheapest_insertion_ls_operator_neighbors_ratio : typing___Optional[float] = None,
        christofides_use_minimum_matching : typing___Optional[bool] = None,
        local_search_operators : typing___Optional[RoutingSearchParameters.LocalSearchNeighborhoodOperators] = None,
        relocate_expensive_chain_num_arcs_to_consider : typing___Optional[int] = None,
        heuristic_expensive_chain_lns_num_arcs_to_consider : typing___Optional[int] = None,
        local_search_metaheuristic : typing___Optional[ortools___constraint_solver___routing_enums_pb2___LocalSearchMetaheuristic.Value] = None,
        guided_local_search_lambda_coefficient : typing___Optional[float] = None,
        use_depth_first_search : typing___Optional[bool] = None,
        use_cp : typing___Optional[ortools___util___optional_boolean_pb2___OptionalBoolean] = None,
        use_cp_sat : typing___Optional[ortools___util___optional_boolean_pb2___OptionalBoolean] = None,
        continuous_scheduling_solver : typing___Optional[RoutingSearchParameters.SchedulingSolver] = None,
        mixed_integer_scheduling_solver : typing___Optional[RoutingSearchParameters.SchedulingSolver] = None,
        optimization_step : typing___Optional[float] = None,
        number_of_solutions_to_collect : typing___Optional[int] = None,
        solution_limit : typing___Optional[int] = None,
        time_limit : typing___Optional[google___protobuf___duration_pb2___Duration] = None,
        lns_time_limit : typing___Optional[google___protobuf___duration_pb2___Duration] = None,
        use_full_propagation : typing___Optional[bool] = None,
        log_search : typing___Optional[bool] = None,
        log_cost_scaling_factor : typing___Optional[float] = None,
        log_cost_offset : typing___Optional[float] = None,
        ) -> None: ...
    @classmethod
    def FromString(cls, s: bytes) -> RoutingSearchParameters: ...
    def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
    def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
    if sys.version_info >= (3,):
        def HasField(self, field_name: typing_extensions___Literal[u"lns_time_limit",u"local_search_operators",u"time_limit"]) -> bool: ...
        def ClearField(self, field_name: typing_extensions___Literal[u"cheapest_insertion_farthest_seeds_ratio",u"cheapest_insertion_first_solution_neighbors_ratio",u"cheapest_insertion_ls_operator_neighbors_ratio",u"christofides_use_minimum_matching",u"continuous_scheduling_solver",u"first_solution_strategy",u"guided_local_search_lambda_coefficient",u"heuristic_expensive_chain_lns_num_arcs_to_consider",u"lns_time_limit",u"local_search_metaheuristic",u"local_search_operators",u"log_cost_offset",u"log_cost_scaling_factor",u"log_search",u"mixed_integer_scheduling_solver",u"number_of_solutions_to_collect",u"optimization_step",u"relocate_expensive_chain_num_arcs_to_consider",u"savings_add_reverse_arcs",u"savings_arc_coefficient",u"savings_max_memory_usage_bytes",u"savings_neighbors_ratio",u"savings_parallel_routes",u"solution_limit",u"time_limit",u"use_cp",u"use_cp_sat",u"use_depth_first_search",u"use_full_propagation",u"use_unfiltered_first_solution_strategy"]) -> None: ...
    else:
        def HasField(self, field_name: typing_extensions___Literal[u"lns_time_limit",b"lns_time_limit",u"local_search_operators",b"local_search_operators",u"time_limit",b"time_limit"]) -> bool: ...
        def ClearField(self, field_name: typing_extensions___Literal[u"cheapest_insertion_farthest_seeds_ratio",b"cheapest_insertion_farthest_seeds_ratio",u"cheapest_insertion_first_solution_neighbors_ratio",b"cheapest_insertion_first_solution_neighbors_ratio",u"cheapest_insertion_ls_operator_neighbors_ratio",b"cheapest_insertion_ls_operator_neighbors_ratio",u"christofides_use_minimum_matching",b"christofides_use_minimum_matching",u"continuous_scheduling_solver",b"continuous_scheduling_solver",u"first_solution_strategy",b"first_solution_strategy",u"guided_local_search_lambda_coefficient",b"guided_local_search_lambda_coefficient",u"heuristic_expensive_chain_lns_num_arcs_to_consider",b"heuristic_expensive_chain_lns_num_arcs_to_consider",u"lns_time_limit",b"lns_time_limit",u"local_search_metaheuristic",b"local_search_metaheuristic",u"local_search_operators",b"local_search_operators",u"log_cost_offset",b"log_cost_offset",u"log_cost_scaling_factor",b"log_cost_scaling_factor",u"log_search",b"log_search",u"mixed_integer_scheduling_solver",b"mixed_integer_scheduling_solver",u"number_of_solutions_to_collect",b"number_of_solutions_to_collect",u"optimization_step",b"optimization_step",u"relocate_expensive_chain_num_arcs_to_consider",b"relocate_expensive_chain_num_arcs_to_consider",u"savings_add_reverse_arcs",b"savings_add_reverse_arcs",u"savings_arc_coefficient",b"savings_arc_coefficient",u"savings_max_memory_usage_bytes",b"savings_max_memory_usage_bytes",u"savings_neighbors_ratio",b"savings_neighbors_ratio",u"savings_parallel_routes",b"savings_parallel_routes",u"solution_limit",b"solution_limit",u"time_limit",b"time_limit",u"use_cp",b"use_cp",u"use_cp_sat",b"use_cp_sat",u"use_depth_first_search",b"use_depth_first_search",u"use_full_propagation",b"use_full_propagation",u"use_unfiltered_first_solution_strategy",b"use_unfiltered_first_solution_strategy"]) -> None: ...

class RoutingModelParameters(google___protobuf___message___Message):
    reduce_vehicle_cost_model = ... # type: bool
    max_callback_cache_size = ... # type: int

    @property
    def solver_parameters(self) -> ortools___constraint_solver___solver_parameters_pb2___ConstraintSolverParameters: ...

    def __init__(self,
        *,
        solver_parameters : typing___Optional[ortools___constraint_solver___solver_parameters_pb2___ConstraintSolverParameters] = None,
        reduce_vehicle_cost_model : typing___Optional[bool] = None,
        max_callback_cache_size : typing___Optional[int] = None,
        ) -> None: ...
    @classmethod
    def FromString(cls, s: bytes) -> RoutingModelParameters: ...
    def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
    def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
    if sys.version_info >= (3,):
        def HasField(self, field_name: typing_extensions___Literal[u"solver_parameters"]) -> bool: ...
        def ClearField(self, field_name: typing_extensions___Literal[u"max_callback_cache_size",u"reduce_vehicle_cost_model",u"solver_parameters"]) -> None: ...
    else:
        def HasField(self, field_name: typing_extensions___Literal[u"solver_parameters",b"solver_parameters"]) -> bool: ...
        def ClearField(self, field_name: typing_extensions___Literal[u"max_callback_cache_size",b"max_callback_cache_size",u"reduce_vehicle_cost_model",b"reduce_vehicle_cost_model",u"solver_parameters",b"solver_parameters"]) -> None: ...
