"""
@generated by mypy-protobuf.  Do not edit manually!
isort:skip_file
Copyright 2010-2025 Google LLC
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
"""

import builtins
import collections.abc
import google.protobuf.descriptor
import google.protobuf.internal.containers
import google.protobuf.internal.enum_type_wrapper
import google.protobuf.message
import sys
import typing

if sys.version_info >= (3, 10):
    import typing as typing_extensions
else:
    import typing_extensions

DESCRIPTOR: google.protobuf.descriptor.FileDescriptor

@typing.final
class BopOptimizerMethod(google.protobuf.message.Message):
    """Method used to optimize a solution in Bop.

    NEXT TAG: 16
    """

    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    class _OptimizerType:
        ValueType = typing.NewType("ValueType", builtins.int)
        V: typing_extensions.TypeAlias = ValueType

    class _OptimizerTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[BopOptimizerMethod._OptimizerType.ValueType], builtins.type):
        DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
        SAT_CORE_BASED: BopOptimizerMethod._OptimizerType.ValueType  # 0
        SAT_LINEAR_SEARCH: BopOptimizerMethod._OptimizerType.ValueType  # 15
        LINEAR_RELAXATION: BopOptimizerMethod._OptimizerType.ValueType  # 1
        LOCAL_SEARCH: BopOptimizerMethod._OptimizerType.ValueType  # 2
        RANDOM_FIRST_SOLUTION: BopOptimizerMethod._OptimizerType.ValueType  # 3
        RANDOM_CONSTRAINT_LNS: BopOptimizerMethod._OptimizerType.ValueType  # 4
        RANDOM_VARIABLE_LNS: BopOptimizerMethod._OptimizerType.ValueType  # 5
        COMPLETE_LNS: BopOptimizerMethod._OptimizerType.ValueType  # 7
        LP_FIRST_SOLUTION: BopOptimizerMethod._OptimizerType.ValueType  # 8
        OBJECTIVE_FIRST_SOLUTION: BopOptimizerMethod._OptimizerType.ValueType  # 9
        USER_GUIDED_FIRST_SOLUTION: BopOptimizerMethod._OptimizerType.ValueType  # 14
        RANDOM_CONSTRAINT_LNS_GUIDED_BY_LP: BopOptimizerMethod._OptimizerType.ValueType  # 11
        RANDOM_VARIABLE_LNS_GUIDED_BY_LP: BopOptimizerMethod._OptimizerType.ValueType  # 12
        RELATION_GRAPH_LNS: BopOptimizerMethod._OptimizerType.ValueType  # 16
        RELATION_GRAPH_LNS_GUIDED_BY_LP: BopOptimizerMethod._OptimizerType.ValueType  # 17

    class OptimizerType(_OptimizerType, metaclass=_OptimizerTypeEnumTypeWrapper): ...
    SAT_CORE_BASED: BopOptimizerMethod.OptimizerType.ValueType  # 0
    SAT_LINEAR_SEARCH: BopOptimizerMethod.OptimizerType.ValueType  # 15
    LINEAR_RELAXATION: BopOptimizerMethod.OptimizerType.ValueType  # 1
    LOCAL_SEARCH: BopOptimizerMethod.OptimizerType.ValueType  # 2
    RANDOM_FIRST_SOLUTION: BopOptimizerMethod.OptimizerType.ValueType  # 3
    RANDOM_CONSTRAINT_LNS: BopOptimizerMethod.OptimizerType.ValueType  # 4
    RANDOM_VARIABLE_LNS: BopOptimizerMethod.OptimizerType.ValueType  # 5
    COMPLETE_LNS: BopOptimizerMethod.OptimizerType.ValueType  # 7
    LP_FIRST_SOLUTION: BopOptimizerMethod.OptimizerType.ValueType  # 8
    OBJECTIVE_FIRST_SOLUTION: BopOptimizerMethod.OptimizerType.ValueType  # 9
    USER_GUIDED_FIRST_SOLUTION: BopOptimizerMethod.OptimizerType.ValueType  # 14
    RANDOM_CONSTRAINT_LNS_GUIDED_BY_LP: BopOptimizerMethod.OptimizerType.ValueType  # 11
    RANDOM_VARIABLE_LNS_GUIDED_BY_LP: BopOptimizerMethod.OptimizerType.ValueType  # 12
    RELATION_GRAPH_LNS: BopOptimizerMethod.OptimizerType.ValueType  # 16
    RELATION_GRAPH_LNS_GUIDED_BY_LP: BopOptimizerMethod.OptimizerType.ValueType  # 17

    TYPE_FIELD_NUMBER: builtins.int
    type: Global___BopOptimizerMethod.OptimizerType.ValueType
    def __init__(
        self,
        *,
        type: Global___BopOptimizerMethod.OptimizerType.ValueType | None = ...,
    ) -> None: ...
    _HasFieldArgType: typing_extensions.TypeAlias = typing.Literal["type", b"type"]
    def HasField(self, field_name: _HasFieldArgType) -> builtins.bool: ...
    _ClearFieldArgType: typing_extensions.TypeAlias = typing.Literal["type", b"type"]
    def ClearField(self, field_name: _ClearFieldArgType) -> None: ...

Global___BopOptimizerMethod: typing_extensions.TypeAlias = BopOptimizerMethod

@typing.final
class BopSolverOptimizerSet(google.protobuf.message.Message):
    """Set of optimizer methods to be run by an instance of the portfolio optimizer.
    Note that in the current implementation, all the methods specified in the
    repeated field methods will run on the same solver / thread.
    """

    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    METHODS_FIELD_NUMBER: builtins.int
    @property
    def methods(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[Global___BopOptimizerMethod]: ...
    def __init__(
        self,
        *,
        methods: collections.abc.Iterable[Global___BopOptimizerMethod] | None = ...,
    ) -> None: ...
    _ClearFieldArgType: typing_extensions.TypeAlias = typing.Literal["methods", b"methods"]
    def ClearField(self, field_name: _ClearFieldArgType) -> None: ...

Global___BopSolverOptimizerSet: typing_extensions.TypeAlias = BopSolverOptimizerSet

@typing.final
class BopParameters(google.protobuf.message.Message):
    """Contains the definitions for all the bop algorithm parameters and their
    default values.

    NEXT TAG: 42
    """

    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    class _ThreadSynchronizationType:
        ValueType = typing.NewType("ValueType", builtins.int)
        V: typing_extensions.TypeAlias = ValueType

    class _ThreadSynchronizationTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[BopParameters._ThreadSynchronizationType.ValueType], builtins.type):
        DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
        NO_SYNCHRONIZATION: BopParameters._ThreadSynchronizationType.ValueType  # 0
        """No synchronization. The solvers run independently until the time limit
        is reached; Then learned information from each solver are aggregated.
        The final solution is the best of all found solutions.
        Pros: - No need to wait for another solver to complete its task,
              - Adding a new solver always improves the final solution (In the
                current implementation it still depends on the machine load and
                the time limit).
        Cons: - No learning between solvers.
        """
        SYNCHRONIZE_ALL: BopParameters._ThreadSynchronizationType.ValueType  # 1
        """Synchronize all solvers. Each solver waits for all other solvers to
        complete the previous optimizer run, before running again.
        The final solution is the best of all found solutions.
        Pros: - Full learning between solvers.
        Cons: - A lot of waiting time when solvers don't run at the exact same
                speed,
              - The quality of the final solution depends on the number of
                solvers, adding one more solver might lead to poorer results
                because the search goes on a different path.
        """
        SYNCHRONIZE_ON_RIGHT: BopParameters._ThreadSynchronizationType.ValueType  # 2
        """Solver i synchronizes with solvers 0..i-1.
        This is a good tradeoff between NO_SYNCHRONIZATION and SYNCHRONIZE_ALL:
        communication while keeping a relative determinism on the result even
        when the number of solvers increases.
        The final solution is the best of all found solutions.
        Pros: - Solver i learns from i different solvers,
              - Adding a new solver always improves the final solution (In the
                current implementation it still depends on the machine load and
                the time limit).
        Cons: - No full learning,
              - Some solvers need to wait for synchronization.
        """

    class ThreadSynchronizationType(_ThreadSynchronizationType, metaclass=_ThreadSynchronizationTypeEnumTypeWrapper):
        """Defines how the different solvers are synchronized during the search.
        Note that the synchronization (if any) occurs before each call to an
        optimizer (the smallest granularity of the solver in a parallel context).
        """

    NO_SYNCHRONIZATION: BopParameters.ThreadSynchronizationType.ValueType  # 0
    """No synchronization. The solvers run independently until the time limit
    is reached; Then learned information from each solver are aggregated.
    The final solution is the best of all found solutions.
    Pros: - No need to wait for another solver to complete its task,
          - Adding a new solver always improves the final solution (In the
            current implementation it still depends on the machine load and
            the time limit).
    Cons: - No learning between solvers.
    """
    SYNCHRONIZE_ALL: BopParameters.ThreadSynchronizationType.ValueType  # 1
    """Synchronize all solvers. Each solver waits for all other solvers to
    complete the previous optimizer run, before running again.
    The final solution is the best of all found solutions.
    Pros: - Full learning between solvers.
    Cons: - A lot of waiting time when solvers don't run at the exact same
            speed,
          - The quality of the final solution depends on the number of
            solvers, adding one more solver might lead to poorer results
            because the search goes on a different path.
    """
    SYNCHRONIZE_ON_RIGHT: BopParameters.ThreadSynchronizationType.ValueType  # 2
    """Solver i synchronizes with solvers 0..i-1.
    This is a good tradeoff between NO_SYNCHRONIZATION and SYNCHRONIZE_ALL:
    communication while keeping a relative determinism on the result even
    when the number of solvers increases.
    The final solution is the best of all found solutions.
    Pros: - Solver i learns from i different solvers,
          - Adding a new solver always improves the final solution (In the
            current implementation it still depends on the machine load and
            the time limit).
    Cons: - No full learning,
          - Some solvers need to wait for synchronization.
    """

    MAX_TIME_IN_SECONDS_FIELD_NUMBER: builtins.int
    MAX_DETERMINISTIC_TIME_FIELD_NUMBER: builtins.int
    LP_MAX_DETERMINISTIC_TIME_FIELD_NUMBER: builtins.int
    MAX_NUMBER_OF_CONSECUTIVE_FAILING_OPTIMIZER_CALLS_FIELD_NUMBER: builtins.int
    RELATIVE_GAP_LIMIT_FIELD_NUMBER: builtins.int
    MAX_NUM_DECISIONS_IN_LS_FIELD_NUMBER: builtins.int
    MAX_NUM_BROKEN_CONSTRAINTS_IN_LS_FIELD_NUMBER: builtins.int
    LOG_SEARCH_PROGRESS_FIELD_NUMBER: builtins.int
    COMPUTE_ESTIMATED_IMPACT_FIELD_NUMBER: builtins.int
    PRUNE_SEARCH_TREE_FIELD_NUMBER: builtins.int
    SORT_CONSTRAINTS_BY_NUM_TERMS_FIELD_NUMBER: builtins.int
    USE_RANDOM_LNS_FIELD_NUMBER: builtins.int
    RANDOM_SEED_FIELD_NUMBER: builtins.int
    NUM_RELAXED_VARS_FIELD_NUMBER: builtins.int
    MAX_NUMBER_OF_CONFLICTS_IN_RANDOM_LNS_FIELD_NUMBER: builtins.int
    NUM_RANDOM_LNS_TRIES_FIELD_NUMBER: builtins.int
    MAX_NUMBER_OF_BACKTRACKS_IN_LS_FIELD_NUMBER: builtins.int
    USE_LP_LNS_FIELD_NUMBER: builtins.int
    USE_SAT_TO_CHOOSE_LNS_NEIGHBOURHOOD_FIELD_NUMBER: builtins.int
    MAX_NUMBER_OF_CONFLICTS_FOR_QUICK_CHECK_FIELD_NUMBER: builtins.int
    USE_SYMMETRY_FIELD_NUMBER: builtins.int
    EXPLOIT_SYMMETRY_IN_SAT_FIRST_SOLUTION_FIELD_NUMBER: builtins.int
    MAX_NUMBER_OF_CONFLICTS_IN_RANDOM_SOLUTION_GENERATION_FIELD_NUMBER: builtins.int
    MAX_NUMBER_OF_EXPLORED_ASSIGNMENTS_PER_TRY_IN_LS_FIELD_NUMBER: builtins.int
    USE_TRANSPOSITION_TABLE_IN_LS_FIELD_NUMBER: builtins.int
    USE_POTENTIAL_ONE_FLIP_REPAIRS_IN_LS_FIELD_NUMBER: builtins.int
    USE_LEARNED_BINARY_CLAUSES_IN_LP_FIELD_NUMBER: builtins.int
    NUMBER_OF_SOLVERS_FIELD_NUMBER: builtins.int
    SYNCHRONIZATION_TYPE_FIELD_NUMBER: builtins.int
    SOLVER_OPTIMIZER_SETS_FIELD_NUMBER: builtins.int
    DEFAULT_SOLVER_OPTIMIZER_SETS_FIELD_NUMBER: builtins.int
    USE_LP_STRONG_BRANCHING_FIELD_NUMBER: builtins.int
    DECOMPOSER_NUM_VARIABLES_THRESHOLD_FIELD_NUMBER: builtins.int
    NUM_BOP_SOLVERS_USED_BY_DECOMPOSITION_FIELD_NUMBER: builtins.int
    DECOMPOSED_PROBLEM_MIN_TIME_IN_SECONDS_FIELD_NUMBER: builtins.int
    GUIDED_SAT_CONFLICTS_CHUNK_FIELD_NUMBER: builtins.int
    MAX_LP_SOLVE_FOR_FEASIBILITY_PROBLEMS_FIELD_NUMBER: builtins.int
    max_time_in_seconds: builtins.float
    """Maximum time allowed in seconds to solve a problem.
    The counter will starts as soon as Solve() is called.
    """
    max_deterministic_time: builtins.float
    """Maximum time allowed in deterministic time to solve a problem.
    The deterministic time should be correlated with the real time used by the
    solver, the time unit being roughly the order of magnitude of a second.
    The counter will starts as soon as SetParameters() or SolveWithTimeLimit()
    is called.
    """
    lp_max_deterministic_time: builtins.float
    """The max deterministic time given to the LP solver each time it is called.
    If this is not enough to solve the LP at hand, it will simply be called
    again later (and the solve will resume from where it stopped).
    """
    max_number_of_consecutive_failing_optimizer_calls: builtins.int
    """Maximum number of consecutive optimizer calls without improving the
    current solution. If this number is reached, the search will be aborted.
    Note that this parameter only applies when an initial solution has been
    found or is provided. Also note that there is no limit to the number of
    calls, when the parameter is not set.
    """
    relative_gap_limit: builtins.float
    """Limit used to stop the optimization as soon as the relative gap is smaller
    than the given value.
    The relative gap is defined as:
      abs(solution_cost - best_bound)
           / max(abs(solution_cost), abs(best_bound)).
    """
    max_num_decisions_in_ls: builtins.int
    """Maximum number of cascading decisions the solver might use to repair the
    current solution in the LS.
    """
    max_num_broken_constraints_in_ls: builtins.int
    """Abort the LS search tree as soon as strictly more than this number of
    constraints are broken. The default is a large value which basically
    disable this heuristic.
    """
    log_search_progress: builtins.bool
    """Whether the solver should log the search progress to LOG(INFO)."""
    compute_estimated_impact: builtins.bool
    """Compute estimated impact at each iteration when true; only once when false."""
    prune_search_tree: builtins.bool
    """Avoid exploring both branches (b, a, ...) and (a, b, ...)."""
    sort_constraints_by_num_terms: builtins.bool
    """Sort constraints by increasing total number of terms instead of number of
    contributing terms.
    """
    use_random_lns: builtins.bool
    """Use the random Large Neighborhood Search instead of the exhaustive one."""
    random_seed: builtins.int
    """The seed used to initialize the random generator.

    TODO(user): Some of our client test fail depending on this value! we need
    to fix them and ideally randomize our behavior from on test to the next so
    that this doesn't happen in the future.
    """
    num_relaxed_vars: builtins.int
    """Number of variables to relax in the exhaustive Large Neighborhood Search."""
    max_number_of_conflicts_in_random_lns: builtins.int
    """The number of conflicts the SAT solver has to solve a random LNS
    subproblem.
    """
    num_random_lns_tries: builtins.int
    """Number of tries in the random lns."""
    max_number_of_backtracks_in_ls: builtins.int
    """Maximum number of backtracks times the number of variables in Local Search,
    ie. max num backtracks == max_number_of_backtracks_in_ls / num variables.
    """
    use_lp_lns: builtins.bool
    """Use Large Neighborhood Search based on the LP relaxation."""
    use_sat_to_choose_lns_neighbourhood: builtins.bool
    """Whether we use sat propagation to choose the lns neighbourhood."""
    max_number_of_conflicts_for_quick_check: builtins.int
    """The number of conflicts the SAT solver has to solve a random LNS
    subproblem for the quick check of infeasibility.
    """
    use_symmetry: builtins.bool
    """If true, find and exploit the eventual symmetries of the problem.

    TODO(user): turn this on by default once the symmetry finder becomes fast
    enough to be negligeable for most problem. Or at least support a time
    limit.
    """
    exploit_symmetry_in_sat_first_solution: builtins.bool
    """If true, find and exploit symmetries in proving satisfiability in the first
    problem.
    This feature is experimental. On some problems, computing symmetries may
    run forever. You may also run into unforseen problems as this feature was
    not extensively tested.
    """
    max_number_of_conflicts_in_random_solution_generation: builtins.int
    """The number of conflicts the SAT solver has to generate a random solution."""
    max_number_of_explored_assignments_per_try_in_ls: builtins.int
    """The maximum number of assignments the Local Search iterates on during one
    try. Note that if the Local Search is called again on the same solution
    it will not restart from scratch but will iterate on the next
    max_number_of_explored_assignments_per_try_in_ls assignments.
    """
    use_transposition_table_in_ls: builtins.bool
    """Whether we use an hash set during the LS to avoid exploring more than once
    the "same" state. Note that because the underlying SAT solver may learn
    information in the middle of the LS, this may make the LS slightly less
    "complete", but it should be faster.
    """
    use_potential_one_flip_repairs_in_ls: builtins.bool
    """Whether we keep a list of variable that can potentially repair in one flip
    all the current infeasible constraints (such variable must at least appear
    in all the infeasible constraints for this to happen).
    """
    use_learned_binary_clauses_in_lp: builtins.bool
    """Whether we use the learned binary clauses in the Linear Relaxation."""
    number_of_solvers: builtins.int
    """The number of solvers used to run Bop. Note that one thread will be created
    per solver. The type of communication between solvers is specified by the
    synchronization_type parameter.
    """
    synchronization_type: Global___BopParameters.ThreadSynchronizationType.ValueType
    default_solver_optimizer_sets: builtins.str
    use_lp_strong_branching: builtins.bool
    """Use strong branching in the linear relaxation optimizer.
    The strong branching is a what-if analysis on each variable v, i.e.
    compute the best bound when v is assigned to true, compute the best bound
    when v is assigned to false, and then use those best bounds to improve the
    overall best bound.
    This is useful to improve the best_bound, but also to fix some variables
    during search.
    Note that using probing might be time consuming as it runs the LP solver
    2 * num_variables times.
    """
    decomposer_num_variables_threshold: builtins.int
    """Only try to decompose the problem when the number of variables is greater
    than the threshold.
    """
    num_bop_solvers_used_by_decomposition: builtins.int
    """The number of BopSolver created (thread pool workers) used by the integral
    solver to solve a decomposed problem.
    TODO(user): Merge this with the number_of_solvers parameter.
    """
    decomposed_problem_min_time_in_seconds: builtins.float
    """HACK. To avoid spending too little time on small problems, spend at least
    this time solving each of the decomposed sub-problem. This only make sense
    if num_bop_solvers_used_by_decomposition is greater than 1 so that the
    overhead can be "absorbed" by the other threads.
    """
    guided_sat_conflicts_chunk: builtins.int
    """The first solutions based on guided SAT will work in chunk of that many
    conflicts at the time. This allows to simulate parallelism between the
    different guiding strategy on a single core.
    """
    max_lp_solve_for_feasibility_problems: builtins.int
    """The maximum number of time the LP solver will run to feasibility for pure
    feasibility problems (with a constant-valued objective function). Set this
    to a small value, e.g., 1, if fractional solutions offer useful guidance to
    other solvers in the portfolio. A negative value means no limit.
    """
    @property
    def solver_optimizer_sets(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[Global___BopSolverOptimizerSet]:
        """List of set of optimizers to be run by the solvers.
        Note that the i_th solver will run the
        min(i, solver_optimizer_sets_size())_th optimizer set.
        The default is defined by default_solver_optimizer_sets (only one set).
        """

    def __init__(
        self,
        *,
        max_time_in_seconds: builtins.float | None = ...,
        max_deterministic_time: builtins.float | None = ...,
        lp_max_deterministic_time: builtins.float | None = ...,
        max_number_of_consecutive_failing_optimizer_calls: builtins.int | None = ...,
        relative_gap_limit: builtins.float | None = ...,
        max_num_decisions_in_ls: builtins.int | None = ...,
        max_num_broken_constraints_in_ls: builtins.int | None = ...,
        log_search_progress: builtins.bool | None = ...,
        compute_estimated_impact: builtins.bool | None = ...,
        prune_search_tree: builtins.bool | None = ...,
        sort_constraints_by_num_terms: builtins.bool | None = ...,
        use_random_lns: builtins.bool | None = ...,
        random_seed: builtins.int | None = ...,
        num_relaxed_vars: builtins.int | None = ...,
        max_number_of_conflicts_in_random_lns: builtins.int | None = ...,
        num_random_lns_tries: builtins.int | None = ...,
        max_number_of_backtracks_in_ls: builtins.int | None = ...,
        use_lp_lns: builtins.bool | None = ...,
        use_sat_to_choose_lns_neighbourhood: builtins.bool | None = ...,
        max_number_of_conflicts_for_quick_check: builtins.int | None = ...,
        use_symmetry: builtins.bool | None = ...,
        exploit_symmetry_in_sat_first_solution: builtins.bool | None = ...,
        max_number_of_conflicts_in_random_solution_generation: builtins.int | None = ...,
        max_number_of_explored_assignments_per_try_in_ls: builtins.int | None = ...,
        use_transposition_table_in_ls: builtins.bool | None = ...,
        use_potential_one_flip_repairs_in_ls: builtins.bool | None = ...,
        use_learned_binary_clauses_in_lp: builtins.bool | None = ...,
        number_of_solvers: builtins.int | None = ...,
        synchronization_type: Global___BopParameters.ThreadSynchronizationType.ValueType | None = ...,
        solver_optimizer_sets: collections.abc.Iterable[Global___BopSolverOptimizerSet] | None = ...,
        default_solver_optimizer_sets: builtins.str | None = ...,
        use_lp_strong_branching: builtins.bool | None = ...,
        decomposer_num_variables_threshold: builtins.int | None = ...,
        num_bop_solvers_used_by_decomposition: builtins.int | None = ...,
        decomposed_problem_min_time_in_seconds: builtins.float | None = ...,
        guided_sat_conflicts_chunk: builtins.int | None = ...,
        max_lp_solve_for_feasibility_problems: builtins.int | None = ...,
    ) -> None: ...
    _HasFieldArgType: typing_extensions.TypeAlias = typing.Literal["compute_estimated_impact", b"compute_estimated_impact", "decomposed_problem_min_time_in_seconds", b"decomposed_problem_min_time_in_seconds", "decomposer_num_variables_threshold", b"decomposer_num_variables_threshold", "default_solver_optimizer_sets", b"default_solver_optimizer_sets", "exploit_symmetry_in_sat_first_solution", b"exploit_symmetry_in_sat_first_solution", "guided_sat_conflicts_chunk", b"guided_sat_conflicts_chunk", "log_search_progress", b"log_search_progress", "lp_max_deterministic_time", b"lp_max_deterministic_time", "max_deterministic_time", b"max_deterministic_time", "max_lp_solve_for_feasibility_problems", b"max_lp_solve_for_feasibility_problems", "max_num_broken_constraints_in_ls", b"max_num_broken_constraints_in_ls", "max_num_decisions_in_ls", b"max_num_decisions_in_ls", "max_number_of_backtracks_in_ls", b"max_number_of_backtracks_in_ls", "max_number_of_conflicts_for_quick_check", b"max_number_of_conflicts_for_quick_check", "max_number_of_conflicts_in_random_lns", b"max_number_of_conflicts_in_random_lns", "max_number_of_conflicts_in_random_solution_generation", b"max_number_of_conflicts_in_random_solution_generation", "max_number_of_consecutive_failing_optimizer_calls", b"max_number_of_consecutive_failing_optimizer_calls", "max_number_of_explored_assignments_per_try_in_ls", b"max_number_of_explored_assignments_per_try_in_ls", "max_time_in_seconds", b"max_time_in_seconds", "num_bop_solvers_used_by_decomposition", b"num_bop_solvers_used_by_decomposition", "num_random_lns_tries", b"num_random_lns_tries", "num_relaxed_vars", b"num_relaxed_vars", "number_of_solvers", b"number_of_solvers", "prune_search_tree", b"prune_search_tree", "random_seed", b"random_seed", "relative_gap_limit", b"relative_gap_limit", "sort_constraints_by_num_terms", b"sort_constraints_by_num_terms", "synchronization_type", b"synchronization_type", "use_learned_binary_clauses_in_lp", b"use_learned_binary_clauses_in_lp", "use_lp_lns", b"use_lp_lns", "use_lp_strong_branching", b"use_lp_strong_branching", "use_potential_one_flip_repairs_in_ls", b"use_potential_one_flip_repairs_in_ls", "use_random_lns", b"use_random_lns", "use_sat_to_choose_lns_neighbourhood", b"use_sat_to_choose_lns_neighbourhood", "use_symmetry", b"use_symmetry", "use_transposition_table_in_ls", b"use_transposition_table_in_ls"]
    def HasField(self, field_name: _HasFieldArgType) -> builtins.bool: ...
    _ClearFieldArgType: typing_extensions.TypeAlias = typing.Literal["compute_estimated_impact", b"compute_estimated_impact", "decomposed_problem_min_time_in_seconds", b"decomposed_problem_min_time_in_seconds", "decomposer_num_variables_threshold", b"decomposer_num_variables_threshold", "default_solver_optimizer_sets", b"default_solver_optimizer_sets", "exploit_symmetry_in_sat_first_solution", b"exploit_symmetry_in_sat_first_solution", "guided_sat_conflicts_chunk", b"guided_sat_conflicts_chunk", "log_search_progress", b"log_search_progress", "lp_max_deterministic_time", b"lp_max_deterministic_time", "max_deterministic_time", b"max_deterministic_time", "max_lp_solve_for_feasibility_problems", b"max_lp_solve_for_feasibility_problems", "max_num_broken_constraints_in_ls", b"max_num_broken_constraints_in_ls", "max_num_decisions_in_ls", b"max_num_decisions_in_ls", "max_number_of_backtracks_in_ls", b"max_number_of_backtracks_in_ls", "max_number_of_conflicts_for_quick_check", b"max_number_of_conflicts_for_quick_check", "max_number_of_conflicts_in_random_lns", b"max_number_of_conflicts_in_random_lns", "max_number_of_conflicts_in_random_solution_generation", b"max_number_of_conflicts_in_random_solution_generation", "max_number_of_consecutive_failing_optimizer_calls", b"max_number_of_consecutive_failing_optimizer_calls", "max_number_of_explored_assignments_per_try_in_ls", b"max_number_of_explored_assignments_per_try_in_ls", "max_time_in_seconds", b"max_time_in_seconds", "num_bop_solvers_used_by_decomposition", b"num_bop_solvers_used_by_decomposition", "num_random_lns_tries", b"num_random_lns_tries", "num_relaxed_vars", b"num_relaxed_vars", "number_of_solvers", b"number_of_solvers", "prune_search_tree", b"prune_search_tree", "random_seed", b"random_seed", "relative_gap_limit", b"relative_gap_limit", "solver_optimizer_sets", b"solver_optimizer_sets", "sort_constraints_by_num_terms", b"sort_constraints_by_num_terms", "synchronization_type", b"synchronization_type", "use_learned_binary_clauses_in_lp", b"use_learned_binary_clauses_in_lp", "use_lp_lns", b"use_lp_lns", "use_lp_strong_branching", b"use_lp_strong_branching", "use_potential_one_flip_repairs_in_ls", b"use_potential_one_flip_repairs_in_ls", "use_random_lns", b"use_random_lns", "use_sat_to_choose_lns_neighbourhood", b"use_sat_to_choose_lns_neighbourhood", "use_symmetry", b"use_symmetry", "use_transposition_table_in_ls", b"use_transposition_table_in_ls"]
    def ClearField(self, field_name: _ClearFieldArgType) -> None: ...

Global___BopParameters: typing_extensions.TypeAlias = BopParameters
