# Path: pysc2/lib/point.py
# class Point(collections.namedtuple("Point", ["x", "y"])):
# class Rect(collections.namedtuple("Rect", ["t", "l", "b", "r"])):
#   def build(cls, obj):
#   def unit_rand(cls):
#   def assign_to(self, obj):
#   def dist(self, other):
#   def dist_sq(self, other):
#   def round(self):
#   def floor(self):
#   def ceil(self):
#   def abs(self):
#   def len(self):
#   def scale(self, target_len):
#   def scale_max_size(self, max_size):
#   def scale_min_size(self, min_size):
#   def min_dim(self):
#   def max_dim(self):
#   def transpose(self):
#   def rotate_deg(self, angle):
#   def rotate_rad(self, angle):
#   def rotate_rand(self, angle=180):
#   def contained_circle(self, pt, radius):
#   def bound(self, p1, p2=None):
#   def __str__(self):
#   def __neg__(self):
#   def __add__(self, pt_or_val):
#   def __sub__(self, pt_or_val):
#   def __mul__(self, pt_or_val):
#   def __truediv__(self, pt_or_val):
#   def __floordiv__(self, pt_or_val):
#   def __new__(cls, *args):
#   def __str__(self):
#   def center(self):
#   def top(self):
#   def left(self):
#   def bottom(self):
#   def right(self):
#   def width(self):
#   def height(self):
#   def tl(self):
#   def br(self):
#   def tr(self):
#   def bl(self):
#   def diagonal(self):
#   def size(self):
#   def area(self):
#   def round(self):
#   def floor(self):
#   def ceil(self):
#   def contains_point(self, pt):
#   def contains_circle(self, pt, radius):
#   def intersects_circle(self, pt, radius):


import collections
import numbers
import enum
import numpy
import six
from pysc2.lib import point
from s2clientprotocol import spatial_pb2 as sc_spatial
from s2clientprotocol import ui_pb2 as sc_ui

SELECT_ADD_OPTIONS = [
    ("select", False),
    ("add", True),
]
SelectAdd = _define_position_based_enum(  # pylint: disable=invalid-name
    "SelectAdd", SELECT_ADD_OPTIONS)

SELECT_UNIT_ACT_OPTIONS = [
    ("select", sc_ui.ActionMultiPanel.SingleSelect),
    ("deselect", sc_ui.ActionMultiPanel.DeselectUnit),
    ("select_all_type", sc_ui.ActionMultiPanel.SelectAllOfType),
    ("deselect_all_type", sc_ui.ActionMultiPanel.DeselectAllOfType),
]
SelectUnitAct = _define_position_based_enum(  # pylint: disable=invalid-name
    "SelectUnitAct", SELECT_UNIT_ACT_OPTIONS)

SELECT_WORKER_OPTIONS = [
    ("select", sc_ui.ActionSelectIdleWorker.Set),
    ("add", sc_ui.ActionSelectIdleWorker.Add),
    ("select_all", sc_ui.ActionSelectIdleWorker.All),
    ("add_all", sc_ui.ActionSelectIdleWorker.AddAll),
]
SelectWorker = _define_position_based_enum(  # pylint: disable=invalid-name
    "SelectWorker", SELECT_WORKER_OPTIONS)


# The list of known types.
TYPES = Arguments.types(
    screen=ArgumentType.point(),

# Path: pysc2/lib/point.py
# class Point(collections.namedtuple("Point", ["x", "y"])):
# class Rect(collections.namedtuple("Rect", ["t", "l", "b", "r"])):
#   def build(cls, obj):
#   def unit_rand(cls):
#   def assign_to(self, obj):
#   def dist(self, other):
#   def dist_sq(self, other):
#   def round(self):
#   def floor(self):
#   def ceil(self):
#   def abs(self):
#   def len(self):
#   def scale(self, target_len):
#   def scale_max_size(self, max_size):
#   def scale_min_size(self, min_size):
#   def min_dim(self):
#   def max_dim(self):
#   def transpose(self):
#   def rotate_deg(self, angle):
#   def rotate_rad(self, angle):
#   def rotate_rand(self, angle=180):
#   def contained_circle(self, pt, radius):
#   def bound(self, p1, p2=None):
#   def __str__(self):
#   def __neg__(self):
#   def __add__(self, pt_or_val):
#   def __sub__(self, pt_or_val):
#   def __mul__(self, pt_or_val):
#   def __truediv__(self, pt_or_val):
#   def __floordiv__(self, pt_or_val):
#   def __new__(cls, *args):
#   def __str__(self):
#   def center(self):
#   def top(self):
#   def left(self):
#   def bottom(self):
#   def right(self):
#   def width(self):
#   def height(self):
#   def tl(self):
#   def br(self):
#   def tr(self):
#   def bl(self):
#   def diagonal(self):
#   def size(self):
#   def area(self):
#   def round(self):
#   def floor(self):
#   def ceil(self):
#   def contains_point(self, pt):
#   def contains_circle(self, pt, radius):
#   def intersects_circle(self, pt, radius):


# Path: pysc2/lib/actions.py
import collections
import numbers
import enum
import numpy
import six
from pysc2.lib import point
from s2clientprotocol import spatial_pb2 as sc_spatial
from s2clientprotocol import ui_pb2 as sc_ui


SELECT_ADD_OPTIONS = [
    ("select", False),
    ("add", True),
]
SelectAdd = _define_position_based_enum(  # pylint: disable=invalid-name
    "SelectAdd", SELECT_ADD_OPTIONS)

SELECT_UNIT_ACT_OPTIONS = [
    ("select", sc_ui.ActionMultiPanel.SingleSelect),
    ("deselect", sc_ui.ActionMultiPanel.DeselectUnit),
    ("select_all_type", sc_ui.ActionMultiPanel.SelectAllOfType),
    ("deselect_all_type", sc_ui.ActionMultiPanel.DeselectAllOfType),
]
SelectUnitAct = _define_position_based_enum(  # pylint: disable=invalid-name
    "SelectUnitAct", SELECT_UNIT_ACT_OPTIONS)

SELECT_WORKER_OPTIONS = [
    ("select", sc_ui.ActionSelectIdleWorker.Set),
    ("add", sc_ui.ActionSelectIdleWorker.Add),
    ("select_all", sc_ui.ActionSelectIdleWorker.All),
    ("add_all", sc_ui.ActionSelectIdleWorker.AddAll),
]
SelectWorker = _define_position_based_enum(  # pylint: disable=invalid-name
    "SelectWorker", SELECT_WORKER_OPTIONS)


# The list of known types.
TYPES = Arguments.types(
    screen=ArgumentType.point(),

    minimap=ArgumentType.point(),