# Autogenerated do not modify manually!
# This is a type-hinting python stub file, used by python IDEs to provide type hints. For more information
# about stub files, see https://www.python.org/dev/peps/pep-0484/#stub-files
# During execution, the actual module is made available via
# a C++ Boost-python process as part of the launch.
from typing import Dict


class AccountingInfoVec:
    def __contains__(self, obj: object) -> bool:
        ...

    def __delitem__(self, obj: object) -> None:
        ...

    def __getitem__(self, obj: object) -> object:
        ...

    def __iter__(self) -> object:
        ...

    def __len__(self) -> int:
        ...

    def __setitem__(self, obj1: object, obj2: object) -> None:
        ...

    def append(self, obj: object) -> None:
        ...

    def extend(self, obj: object) -> None:
        ...


class EffectCause:
    @property
    def causeType(self):
        ...

    @property
    def customLabel(self):
        ...

    @property
    def specificCause(self):
        ...


class FleetPlan:
    def name(self) -> object:
        ...

    def ship_designs(self) -> list:
        ...


class GGColor:
    @property
    def a(self)-> int:
        ...

    @property
    def b(self)-> int:
        ...

    @property
    def g(self)-> int:
        ...

    @property
    def r(self)-> int:
        ...


class GalaxySetupData:
    @property
    def age(self)-> galaxySetupOption:
        ...

    @property
    def gameUID(self)-> str:
        ...

    @property
    def maxAIAggression(self)-> aggression:
        ...

    @property
    def monsterFrequency(self)-> galaxySetupOption:
        ...

    @property
    def nativeFrequency(self)-> galaxySetupOption:
        ...

    @property
    def planetDensity(self)-> galaxySetupOption:
        ...

    @property
    def seed(self)-> str:
        ...

    @property
    def shape(self)-> galaxyShape:
        ...

    @property
    def size(self)-> int:
        ...

    @property
    def specialsFrequency(self)-> galaxySetupOption:
        ...

    @property
    def starlaneFrequency(self)-> galaxySetupOption:
        ...


class GameRules:
    @property
    def empty(self)-> bool:
        ...

    def getDescription(self, string: str) -> str:
        ...

    def getDouble(self, string: str) -> float:
        ...

    def getInt(self, string: str) -> int:
        ...

    def getRulesAsStrings(self) -> StringsMap:
        ...

    def getString(self, string: str) -> str:
        ...

    def getToggle(self, string: str) -> bool:
        ...

    def ruleExists(self, string: str) -> bool:
        ...

    def ruleExistsWithType(self, string: str, rule_type: ruleType) -> bool:
        ...


class IntBoolMap:
    def __contains__(self, obj: object) -> bool:
        ...

    def __delitem__(self, obj: object) -> None:
        ...

    def __getitem__(self, obj: object) -> object:
        ...

    def __iter__(self) -> object:
        ...

    def __len__(self) -> int:
        ...

    def __setitem__(self, obj1: object, obj2: object) -> None:
        ...


class IntDblMap:
    def __contains__(self, obj: object) -> bool:
        ...

    def __delitem__(self, obj: object) -> None:
        ...

    def __getitem__(self, obj: object) -> object:
        ...

    def __iter__(self) -> object:
        ...

    def __len__(self) -> int:
        ...

    def __setitem__(self, obj1: object, obj2: object) -> None:
        ...


class IntFltMap:
    def __contains__(self, obj: object) -> bool:
        ...

    def __delitem__(self, obj: object) -> None:
        ...

    def __getitem__(self, obj: object) -> object:
        ...

    def __iter__(self) -> object:
        ...

    def __len__(self) -> int:
        ...

    def __setitem__(self, obj1: object, obj2: object) -> None:
        ...


class IntIntMap:
    def __contains__(self, obj: object) -> bool:
        ...

    def __delitem__(self, obj: object) -> None:
        ...

    def __getitem__(self, obj: object) -> object:
        ...

    def __iter__(self) -> object:
        ...

    def __len__(self) -> int:
        ...

    def __setitem__(self, obj1: object, obj2: object) -> None:
        ...


class IntPairVec:
    def __contains__(self, obj: object) -> bool:
        ...

    def __delitem__(self, obj: object) -> None:
        ...

    def __getitem__(self, obj: object) -> object:
        ...

    def __iter__(self) -> object:
        ...

    def __len__(self) -> int:
        ...

    def __setitem__(self, obj1: object, obj2: object) -> None:
        ...

    def append(self, obj: object) -> None:
        ...

    def extend(self, obj: object) -> None:
        ...


class IntSet:
    def __contains__(self, number: int) -> bool:
        ...

    def __iter__(self) -> iter:
        ...

    def __len__(self) -> int:
        ...

    def count(self, number: int) -> int:
        ...

    def empty(self) -> bool:
        ...

    def size(self) -> int:
        ...


class IntSetSet:
    def __contains__(self, int_set: IntSet) -> bool:
        ...

    def __iter__(self) -> object:
        ...

    def __len__(self) -> int:
        ...

    def count(self, int_set: IntSet) -> int:
        ...

    def empty(self) -> bool:
        ...

    def size(self) -> int:
        ...


class IntVec:
    def __contains__(self, obj: object) -> bool:
        ...

    def __delitem__(self, obj: object) -> None:
        ...

    def __getitem__(self, obj: object) -> object:
        ...

    def __iter__(self) -> object:
        ...

    def __len__(self) -> int:
        ...

    def __setitem__(self, obj1: object, obj2: object) -> None:
        ...

    def append(self, obj: object) -> None:
        ...

    def extend(self, obj: object) -> None:
        ...


class MeterTypeAccountingInfoVecMap:
    def __contains__(self, obj: object) -> bool:
        ...

    def __delitem__(self, obj: object) -> None:
        ...

    def __getitem__(self, obj: object) -> object:
        ...

    def __iter__(self) -> object:
        ...

    def __len__(self) -> int:
        ...

    def __setitem__(self, obj1: object, obj2: object) -> None:
        ...


class MeterTypeMeterMap:
    def __contains__(self, obj: object) -> bool:
        ...

    def __delitem__(self, obj: object) -> None:
        ...

    def __getitem__(self, obj: object) -> object:
        ...

    def __iter__(self) -> object:
        ...

    def __len__(self) -> int:
        ...

    def __setitem__(self, obj1: object, obj2: object) -> None:
        ...


class MeterTypeStringPair:
    @property
    def meterType(self):
        ...

    @property
    def string(self):
        ...


class MonsterFleetPlan:
    def locations(self, item_list: list) -> list:
        ...

    def name(self) -> object:
        ...

    def ship_designs(self) -> list:
        ...

    def spawn_limit(self) -> int:
        ...

    def spawn_rate(self) -> float:
        ...


class PairIntInt_IntMap:
    def __contains__(self, obj: object) -> bool:
        ...

    def __delitem__(self, obj: object) -> None:
        ...

    def __getitem__(self, obj: object) -> object:
        ...

    def __iter__(self) -> object:
        ...

    def __len__(self) -> int:
        ...

    def __setitem__(self, obj1: object, obj2: object) -> None:
        ...


class PlayerSetupData:
    @property
    def empire_color(self):
        ...

    @property
    def empire_name(self):
        ...

    @property
    def player_name(self):
        ...

    @property
    def starting_species(self):
        ...

    @property
    def starting_team(self):
        ...


class ShipPartMeterMap:
    def __contains__(self, obj: object) -> bool:
        ...

    def __delitem__(self, obj: object) -> None:
        ...

    def __getitem__(self, obj: object) -> object:
        ...

    def __iter__(self) -> object:
        ...

    def __len__(self) -> int:
        ...

    def __setitem__(self, obj1: object, obj2: object) -> None:
        ...


class ShipSlotVec:
    def __contains__(self, obj: object) -> bool:
        ...

    def __delitem__(self, obj: object) -> None:
        ...

    def __getitem__(self, obj: object) -> object:
        ...

    def __iter__(self) -> object:
        ...

    def __len__(self) -> int:
        ...

    def __setitem__(self, obj1: object, obj2: object) -> None:
        ...

    def append(self, obj: object) -> None:
        ...

    def extend(self, obj: object) -> None:
        ...


class StringSet:
    def __contains__(self, string: str) -> bool:
        ...

    def __iter__(self) -> object:
        ...

    def __len__(self) -> int:
        ...

    def count(self, string: str) -> int:
        ...

    def empty(self) -> bool:
        ...

    def size(self) -> int:
        ...


class StringVec:
    def __contains__(self, obj: object) -> bool:
        ...

    def __delitem__(self, obj: object) -> None:
        ...

    def __getitem__(self, obj: object) -> object:
        ...

    def __iter__(self) -> iter:
        ...

    def __len__(self) -> int:
        ...

    def __setitem__(self, obj1: object, obj2: object) -> None:
        ...

    def append(self, obj: object) -> None:
        ...

    def extend(self, obj: object) -> None:
        ...


class StringsMap:
    def __contains__(self, obj: object) -> bool:
        ...

    def __delitem__(self, obj: object) -> None:
        ...

    def __getitem__(self, obj: object) -> object:
        ...

    def __iter__(self) -> object:
        ...

    def __len__(self) -> int:
        ...

    def __setitem__(self, obj1: object, obj2: object) -> None:
        ...


class TargetIDAccountingMapMap:
    def __contains__(self, obj: object) -> bool:
        ...

    def __delitem__(self, obj: object) -> None:
        ...

    def __getitem__(self, obj: object) -> object:
        ...

    def __iter__(self) -> object:
        ...

    def __len__(self) -> int:
        ...

    def __setitem__(self, obj1: object, obj2: object) -> None:
        ...


class UnlockableItem:
    @property
    def name(self):
        ...

    @property
    def type(self):
        ...


class UnlockableItemVec:
    def __contains__(self, obj: object) -> bool:
        ...

    def __delitem__(self, obj: object) -> None:
        ...

    def __getitem__(self, obj: object) -> object:
        ...

    def __iter__(self) -> object:
        ...

    def __len__(self) -> int:
        ...

    def __setitem__(self, obj1: object, obj2: object) -> None:
        ...

    def append(self, obj: object) -> None:
        ...

    def extend(self, obj: object) -> None:
        ...


class VisibilityIntMap:
    def __contains__(self, obj: object) -> bool:
        ...

    def __delitem__(self, obj: object) -> None:
        ...

    def __getitem__(self, obj: object) -> object:
        ...

    def __iter__(self) -> object:
        ...

    def __len__(self) -> int:
        ...

    def __setitem__(self, obj1: object, obj2: object) -> None:
        ...


class buildingType:
    @property
    def costTimeLocationInvariant(self)-> bool:
        ...

    @property
    def description(self)-> str:
        ...

    @property
    def name(self)-> str:
        ...

    def canBeEnqueued(self, number1: int, number2: int) -> bool:
        ...

    def canBeProduced(self, number1: int, number2: int) -> bool:
        ...

    def captureResult(self, number1: int, number2: int, number3: int, boolean: bool) -> captureResult:
        ...

    def dump(self, number: int) -> str:
        """
        Returns string with debug information, use '0' as argument.
        """

    def perTurnCost(self, number1: int, number2: int) -> float:
        ...

    def productionCost(self, number1: int, number2: int) -> float:
        ...

    def productionTime(self, number1: int, number2: int) -> int:
        ...


class diplomaticMessage:
    @property
    def recipient(self)-> int:
        ...

    @property
    def sender(self)-> int:
        ...

    @property
    def type(self)-> diplomaticMessageType:
        ...


class diplomaticStatusUpdate:
    @property
    def empire1(self):
        ...

    @property
    def empire2(self):
        ...

    @property
    def status(self):
        ...


class empire:
    @property
    def allShipDesigns(self)-> IntSet:
        ...

    @property
    def availableBuildingTypes(self)-> StringSet:
        ...

    @property
    def availableShipDesigns(self)-> IntSet:
        ...

    @property
    def availableShipHulls(self)-> StringSet:
        ...

    @property
    def availableShipParts(self)-> StringSet:
        ...

    @property
    def availableTechs(self)-> StringSet:
        ...

    @property
    def capitalID(self)-> int:
        ...

    @property
    def colour(self)-> GGColor:
        ...

    @property
    def eliminated(self)-> bool:
        ...

    @property
    def empireID(self)-> int:
        ...

    @property
    def exploredSystemIDs(self)-> IntSet:
        ...

    @property
    def fleetSupplyableSystemIDs(self)-> IntSet:
        ...

    @property
    def name(self)-> str:
        ...

    @property
    def planetsWithAllocatedPP(self)-> resPoolMap:
        ...

    @property
    def planetsWithAvailablePP(self)-> resPoolMap:
        ...

    @property
    def planetsWithWastedPP(self)-> IntSetSet:
        ...

    @property
    def playerName(self)-> str:
        ...

    @property
    def productionPoints(self)-> float:
        ...

    @property
    def productionQueue(self)-> productionQueue:
        ...

    @property
    def researchQueue(self)-> researchQueue:
        ...

    @property
    def supplyUnobstructedSystems(self)-> IntSet:
        ...

    @property
    def systemSupplyRanges(self)-> IntFltMap:
        ...

    @property
    def won(self)-> bool:
        ...

    def buildingTypeAvailable(self, string: str) -> bool:
        ...

    def canBuild(self, build_type: buildType, string: str, number: int) -> bool:
        ...

    def getMeter(self, string: str) -> meter:
        """
        Returns the empire meter with the indicated name (string).
        """

    def getResourcePool(self, resource_type: resourceType) -> resPool:
        ...

    def getSitRep(self, number: int) -> sitrep:
        ...

    def getTechStatus(self, string: str) -> techStatus:
        ...

    def hasExploredSystem(self, number: int) -> bool:
        ...

    def numSitReps(self, number: int) -> int:
        ...

    def obstructedStarlanes(self) -> IntPairVec:
        ...

    def population(self) -> float:
        ...

    def preservedLaneTravel(self, number1: int, number2: int) -> bool:
        ...

    def productionCostAndTime(self, production_queue_element: productionQueueElement) -> object:
        ...

    def researchProgress(self, string: str) -> float:
        ...

    def resourceAvailable(self, resource_type: resourceType) -> float:
        ...

    def resourceProduction(self, resource_type: resourceType) -> float:
        ...

    def resourceStockpile(self, resource_type: resourceType) -> float:
        ...

    def shipDesignAvailable(self, number: int) -> bool:
        ...

    def supplyProjections(self) -> Dict[int, int]:
        ...

    def techResearched(self, string: str) -> bool:
        ...


class fieldType:
    @property
    def description(self)-> str:
        ...

    @property
    def name(self)-> str:
        ...

    def dump(self, number: int) -> str:
        """
        Returns string with debug information, use '0' as argument.
        """

class shipHull:
    @property
    def costTimeLocationInvariant(self)-> bool:
        ...

    @property
    def fuel(self)-> float:
        ...

    @property
    def name(self)-> str:
        ...

    @property
    def numSlots(self)-> int:
        ...

    @property
    def slots(self)-> ShipSlotVec:
        ...

    @property
    def speed(self)-> float:
        ...

    @property
    def starlaneSpeed(self)-> float:
        ...

    @property
    def stealth(self)-> float:
        ...

    @property
    def structure(self)-> float:
        ...

    def hasTag(self, string: str) -> bool:
        ...

    def numSlotsOfSlotType(self, ship_slot_type: shipSlotType) -> int:
        ...

    def productionCost(self, number1: int, number2: int, number3: int) -> float:
        ...

    def productionLocation(self, number: int) -> bool:
        """
        Returns the result of Location condition (bool) in passed location_id (int)
        """

    def productionTime(self, number1: int, number2: int, number3: int) -> int:
        ...


class meter:
    @property
    def current(self):
        ...

    @property
    def initial(self):
        ...

    def dump(self, number: int) -> str:
        """
        Returns string with debug information, use '0' as argument.
        """


class popCenter:
    @property
    def speciesName(self):
        ...


class productionQueue:
    @property
    def allocatedPP(self)-> resPoolMap:
        ...

    @property
    def empireID(self)-> int:
        ...

    @property
    def empty(self)-> bool:
        ...

    @property
    def size(self)-> int:
        ...

    @property
    def totalSpent(self)-> float:
        ...

    def __getitem__(self, number: int) -> productionQueueElement:
        ...

    def __iter__(self) -> object:
        ...

    def __len__(self) -> int:
        ...

    def availablePP(self, res_pool: resPool) -> resPoolMap:
        ...

    def objectsWithWastedPP(self, res_pool: resPool) -> IntSetSet:
        ...


class productionQueueElement:
    @property
    def allocation(self):
        ...

    @property
    def allowedStockpile(self):
        ...

    @property
    def blocksize(self):
        ...

    @property
    def buildType(self):
        ...

    @property
    def designID(self):
        ...

    @property
    def locationID(self):
        ...

    @property
    def name(self):
        ...

    @property
    def paused(self):
        ...

    @property
    def progress(self):
        ...

    @property
    def remaining(self):
        ...

    @property
    def turnsLeft(self):
        ...


class resPool:
    ...


class resPoolMap:
    def __contains__(self, obj: object) -> bool:
        ...

    def __delitem__(self, obj: object) -> None:
        ...

    def __getitem__(self, obj: object) -> object:
        ...

    def __iter__(self) -> object:
        ...

    def __len__(self) -> int:
        ...

    def __setitem__(self, obj1: object, obj2: object) -> None:
        ...


class researchQueue:
    @property
    def empireID(self)-> int:
        ...

    @property
    def empty(self)-> bool:
        ...

    @property
    def size(self)-> int:
        ...

    @property
    def totalSpent(self)-> float:
        ...

    def __contains__(self, research_queue_element: researchQueueElement) -> bool:
        ...

    def __getitem__(self, number: int) -> researchQueueElement:
        ...

    def __iter__(self) -> object:
        ...

    def __len__(self) -> int:
        ...

    def inQueue(self, string: str) -> bool:
        ...


class researchQueueElement:
    @property
    def allocation(self):
        ...

    @property
    def tech(self):
        ...

    @property
    def turnsLeft(self):
        ...


class resourceCenter:
    @property
    def availableFoci(self):
        ...

    @property
    def focus(self):
        ...

    @property
    def turnsSinceFocusChange(self):
        ...


class shipDesign:
    @property
    def attack(self):
        ...

    @property
    def attackStats(self):
        ...

    @property
    def canColonize(self):
        ...

    @property
    def canInvade(self):
        ...

    @property
    def colonyCapacity(self):
        ...

    @property
    def costTimeLocationInvariant(self):
        ...

    @property
    def defense(self):
        ...

    @property
    def description(self):
        ...

    @property
    def designedOnTurn(self):
        ...

    @property
    def detection(self):
        ...

    @property
    def fuel(self):
        ...

    @property
    def hasDirectWeapons(self):
        ...

    @property
    def hasFighters(self):
        ...

    @property
    def hull(self):
        ...

    @property
    def ship_hull(self):
        ...

    @property
    def id(self):
        ...

    @property
    def industryGeneration(self):
        ...

    @property
    def isArmed(self):
        ...

    @property
    def isMonster(self):
        ...

    @property
    def name(self):
        ...

    @property
    def parts(self):
        ...

    @property
    def researchGeneration(self):
        ...

    @property
    def shields(self):
        ...

    @property
    def speed(self):
        ...

    @property
    def stealth(self):
        ...

    @property
    def structure(self):
        ...

    @property
    def tradeGeneration(self):
        ...

    @property
    def troopCapacity(self):
        ...

    def dump(self, number: int) -> str:
        """
        Returns string with debug information, use '0' as argument.
        """

    def perTurnCost(self, number1: int, number2: int) -> float:
        ...

    def productionCost(self, number1: int, number2: int) -> float:
        ...

    def productionLocationForEmpire(self, number1: int, number2: int) -> bool:
        ...

    def productionTime(self, number1: int, number2: int) -> int:
        ...


class shipPart:
    @property
    def capacity(self)-> float:
        ...

    @property
    def costTimeLocationInvariant(self)-> bool:
        ...

    @property
    def mountableSlotTypes(self)-> ShipSlotVec:
        ...

    @property
    def name(self)-> str:
        ...

    @property
    def partClass(self)-> shipPartClass:
        ...

    @property
    def secondaryStat(self)-> float:
        ...

    def canMountInSlotType(self, ship_slot_type: shipSlotType) -> bool:
        ...

    def productionCost(self, number1: int, number2: int, number3: int) -> float:
        ...

    def productionLocation(self, number: int) -> bool:
        """
        Returns the result of Location condition (bool) in passed location_id (int)
        """

    def productionTime(self, number1: int, number2: int, number3: int) -> int:
        ...


class sitrep:
    @property
    def getTags(self):
        ...

    @property
    def getTurn(self):
        ...

    @property
    def typeString(self):
        ...

    def getDataIDNumber(self, string: str) -> int:
        ...

    def getDataString(self, string: str) -> str:
        ...


class special:
    @property
    def description(self)-> str:
        ...

    @property
    def name(self)-> str:
        ...

    @property
    def spawnlimit(self)-> int:
        ...

    @property
    def spawnrate(self)-> float:
        ...

    def dump(self, number: int) -> str:
        """
        Returns string with debug information, use '0' as argument.
        """

    def initialCapacity(self, number: int) -> float:
        ...


class species:
    @property
    def canColonize(self)-> bool:
        ...

    @property
    def canProduceShips(self)-> bool:
        ...

    @property
    def description(self)-> str:
        ...

    @property
    def foci(self)-> StringVec:
        ...

    @property
    def homeworlds(self)-> IntSet:
        ...

    @property
    def name(self)-> str:
        ...

    @property
    def preferredFocus(self)-> str:
        ...

    @property
    def tags(self)-> StringSet:
        ...

    def dump(self, number: int) -> str:
        """
        Returns string with debug information, use '0' as argument.
        """

    def getPlanetEnvironment(self, planet_type: planetType) -> planetEnvironment:
        ...


class tech:
    @property
    def category(self)-> str:
        ...

    @property
    def description(self)-> str:
        ...

    @property
    def name(self)-> str:
        ...

    @property
    def prerequisites(self)-> StringSet:
        ...

    @property
    def shortDescription(self)-> str:
        ...

    @property
    def unlockedItems(self)-> UnlockableItemVec:
        ...

    @property
    def unlockedTechs(self)-> StringSet:
        ...

    def perTurnCost(self, number: int) -> float:
        ...

    def recursivePrerequisites(self, number: int) -> StringVec:
        ...

    def researchCost(self, number: int) -> float:
        ...

    def researchTime(self, number: int) -> int:
        ...


class universe:
    @property
    def allObjectIDs(self)-> IntVec:
        ...

    @property
    def buildingIDs(self)-> IntVec:
        ...

    @property
    def effectAccounting(self)-> TargetIDAccountingMapMap:
        ...

    @property
    def fieldIDs(self)-> IntVec:
        ...

    @property
    def fleetIDs(self)-> IntVec:
        ...

    @property
    def planetIDs(self)-> IntVec:
        ...

    @property
    def shipIDs(self)-> IntVec:
        ...

    @property
    def systemIDs(self)-> IntVec:
        ...

    def destroyedObjectIDs(self, number: int) -> IntSet:
        ...

    def dump(self) -> None:
        ...

    def getBuilding(self, number: int) -> building:
        ...

    def getField(self, number: int) -> field:
        ...

    def getFleet(self, number: int) -> fleet:
        ...

    def getGenericShipDesign(self, string: str) -> shipDesign:
        """
        Returns the ship design (ShipDesign) with the indicated name (string).
        """

    def getImmediateNeighbors(self, number1: int, number2: int) -> IntVec:
        ...

    def getObject(self, number: int) -> universeObject:
        ...

    def getPlanet(self, number: int) -> planet:
        ...

    def getShip(self, number: int) -> ship:
        ...

    def getSystem(self, number: int) -> system:
        ...

    def getSystemNeighborsMap(self, number1: int, number2: int) -> IntDblMap:
        ...

    def getVisibility(self, number1: int, number2: int) -> visibility:
        ...

    def getVisibilityTurnsMap(self, number1: int, number2: int) -> Dict[int, int]:
        ...

    def jumpDistance(self, number1: int, number2: int) -> int:
        """
        If two system ids are passed or both objects are within a system, return the jump distance between the two systems. If one object (e.g. a fleet) is on a starlane, then calculate the jump distance from both ends of the starlane to the target system and return the smaller one.
        """

    def leastJumpsPath(self, number1: int, number2: int, number3: int) -> IntVec:
        ...

    def linearDistance(self, number1: int, number2: int) -> float:
        ...

    def shortestNonHostilePath(self, number1: int, number2: int, number3: int) -> IntVec:
        """
        Shortest sequence of System ids and distance from System (number1) to System (number2) with no hostile Fleets as determined by visibility of Empire (number3).  (number3) must be a valid empire.
        """

    def shortestPath(self, number1: int, number2: int, number3: int) -> IntVec:
        ...

    def shortestPathDistance(self, number1: int, number2: int) -> float:
        ...

    def systemHasStarlane(self, number1: int, number2: int) -> bool:
        ...

    def systemsConnected(self, number1: int, number2: int, number3: int) -> bool:
        ...

    def updateMeterEstimates(self, obj: object) -> None:
        ...


class universeObject:
    @property
    def ageInTurns(self):
        ...

    @property
    def containedObjects(self):
        ...

    @property
    def containerObject(self):
        ...

    @property
    def creationTurn(self):
        ...

    @property
    def id(self):
        ...

    @property
    def meters(self):
        ...

    @property
    def name(self):
        ...

    @property
    def owner(self):
        ...

    @property
    def specials(self):
        ...

    @property
    def systemID(self):
        ...

    @property
    def tags(self):
        ...

    @property
    def unowned(self):
        ...

    @property
    def x(self):
        ...

    @property
    def y(self):
        ...

    def containedBy(self, number: int) -> bool:
        ...

    def contains(self, number: int) -> bool:
        ...

    def currentMeterValue(self, meter_type: meterType) -> float:
        ...

    def dump(self) -> str:
        """
        Returns string with debug information.
        """

    def getMeter(self, meter_type: meterType) -> meter:
        ...

    def hasSpecial(self, string: str) -> bool:
        ...

    def hasTag(self, string: str) -> bool:
        ...

    def initialMeterValue(self, meter_type: meterType) -> float:
        ...

    def ownedBy(self, number: int) -> bool:
        ...

    def specialAddedOnTurn(self, string: str) -> int:
        ...


class AccountingInfo(EffectCause):
    @property
    def meterChange(self):
        ...

    @property
    def meterRunningTotal(self):
        ...

    @property
    def sourceID(self):
        ...


class building(universeObject):
    @property
    def buildingTypeName(self):
        ...

    @property
    def orderedScrapped(self):
        ...

    @property
    def planetID(self):
        ...

    @property
    def producedByEmpireID(self):
        ...


class field(universeObject):
    @property
    def fieldTypeName(self):
        ...

    def inField(self, base_object: universeObject) -> bool:
        ...


class fleet(universeObject):
    @property
    def aggressive(self):
        ...

    @property
    def canChangeDirectionEnRoute(self):
        ...

    @property
    def empty(self):
        ...

    @property
    def finalDestinationID(self):
        ...

    @property
    def fuel(self):
        ...

    @property
    def hasArmedShips(self):
        ...

    @property
    def hasColonyShips(self):
        ...

    @property
    def hasFighterShips(self):
        ...

    @property
    def hasMonsters(self):
        ...

    @property
    def hasOutpostShips(self):
        ...

    @property
    def hasTroopShips(self):
        ...

    @property
    def maxFuel(self):
        ...

    @property
    def nextSystemID(self):
        ...

    @property
    def numShips(self):
        ...

    @property
    def previousSystemID(self):
        ...

    @property
    def shipIDs(self):
        ...

    @property
    def speed(self):
        ...


class ship(universeObject):
    @property
    def arrivedOnTurn(self):
        ...

    @property
    def canBombard(self):
        ...

    @property
    def canColonize(self):
        ...

    @property
    def canInvade(self):
        ...

    @property
    def colonyCapacity(self):
        ...

    @property
    def design(self):
        ...

    @property
    def designID(self):
        ...

    @property
    def fleetID(self):
        ...

    @property
    def hasFighters(self):
        ...

    @property
    def isArmed(self):
        ...

    @property
    def isMonster(self):
        ...

    @property
    def lastResuppliedOnTurn(self):
        ...

    @property
    def lastTurnActiveInCombat(self):
        ...

    @property
    def orderedColonizePlanet(self):
        ...

    @property
    def orderedInvadePlanet(self):
        ...

    @property
    def orderedScrapped(self):
        ...

    @property
    def partMeters(self):
        ...

    @property
    def producedByEmpireID(self):
        ...

    @property
    def speciesName(self):
        ...

    @property
    def speed(self):
        ...

    @property
    def troopCapacity(self):
        ...

    def currentPartMeterValue(self, meter_type: meterType, string: str) -> float:
        ...

    def initialPartMeterValue(self, meter_type: meterType, string: str) -> float:
        ...


class system(universeObject):
    @property
    def buildingIDs(self):
        ...

    @property
    def fieldIDs(self):
        ...

    @property
    def fleetIDs(self):
        ...

    @property
    def lastTurnBattleHere(self):
        ...

    @property
    def numStarlanes(self):
        ...

    @property
    def numWormholes(self):
        ...

    @property
    def planetIDs(self):
        ...

    @property
    def shipIDs(self):
        ...

    @property
    def starType(self):
        ...

    @property
    def starlanesWormholes(self):
        ...

    def HasStarlaneToSystemID(self, number: int) -> bool:
        ...

    def HasWormholeToSystemID(self, number: int) -> bool:
        """
        Currently unused.
        """


class planet(universeObject, popCenter, resourceCenter):
    @property
    def InitialOrbitalPosition(self):
        ...

    @property
    def LastTurnAttackedByShip(self):
        ...

    @property
    def LastTurnConquered(self):
        ...

    @property
    def OrbitalPeriod(self):
        ...

    @property
    def RotationalPeriod(self):
        ...

    @property
    def buildingIDs(self):
        ...

    @property
    def clockwiseNextPlanetType(self):
        ...

    @property
    def counterClockwiseNextPlanetType(self):
        ...

    @property
    def distanceFromOriginalType(self):
        ...

    @property
    def habitableSize(self):
        ...

    @property
    def nextLargerPlanetSize(self):
        ...

    @property
    def nextSmallerPlanetSize(self):
        ...

    @property
    def originalType(self):
        ...

    @property
    def size(self):
        ...

    @property
    def type(self):
        ...

    def OrbitalPositionOnTurn(self, number: int) -> float:
        ...

    def environmentForSpecies(self, string: str) -> planetEnvironment:
        ...

    def nextBetterPlanetTypeForSpecies(self, string: str) -> planetType:
        ...


class Enum(int):
    """Enum stub for docs, not really present in fo"""
    def __new__(cls, *args, **kwargs):
        return super(Enum, cls).__new__(cls, args[0])


class aggression(Enum):
    def __init__(self, numerator, name):
        self.name = name

    invalid = None  # aggression(invalid, "invalid")
    beginner = None  # aggression(beginner, "beginner")
    turtle = None  # aggression(turtle, "turtle")
    cautious = None  # aggression(cautious, "cautious")
    typical = None  # aggression(typical, "typical")
    aggressive = None  # aggression(aggressive, "aggressive")
    maniacal = None  # aggression(maniacal, "maniacal")


aggression.invalid = aggression(invalid, "invalid")
aggression.beginner = aggression(beginner, "beginner")
aggression.turtle = aggression(turtle, "turtle")
aggression.cautious = aggression(cautious, "cautious")
aggression.typical = aggression(typical, "typical")
aggression.aggressive = aggression(aggressive, "aggressive")
aggression.maniacal = aggression(maniacal, "maniacal")


class buildType(Enum):
    def __init__(self, numerator, name):
        self.name = name

    building = None  # buildType(building, "building")
    ship = None  # buildType(ship, "ship")
    stockpile = None  # buildType(stockpile, "stockpile")


buildType.building = buildType(building, "building")
buildType.ship = buildType(ship, "ship")
buildType.stockpile = buildType(stockpile, "stockpile")


class captureResult(Enum):
    def __init__(self, numerator, name):
        self.name = name

    capture = None  # captureResult(capture, "capture")
    destroy = None  # captureResult(destroy, "destroy")
    retain = None  # captureResult(retain, "retain")


captureResult.capture = captureResult(capture, "capture")
captureResult.destroy = captureResult(destroy, "destroy")
captureResult.retain = captureResult(retain, "retain")


class diplomaticMessageType(Enum):
    def __init__(self, numerator, name):
        self.name = name

    noMessage = None  # diplomaticMessageType(noMessage, "noMessage")
    warDeclaration = None  # diplomaticMessageType(warDeclaration, "warDeclaration")
    peaceProposal = None  # diplomaticMessageType(peaceProposal, "peaceProposal")
    acceptPeaceProposal = None  # diplomaticMessageType(acceptPeaceProposal, "acceptPeaceProposal")
    alliesProposal = None  # diplomaticMessageType(alliesProposal, "alliesProposal")
    acceptAlliesProposal = None  # diplomaticMessageType(acceptAlliesProposal, "acceptAlliesProposal")
    endAllies = None  # diplomaticMessageType(endAllies, "endAllies")
    cancelProposal = None  # diplomaticMessageType(cancelProposal, "cancelProposal")
    rejectProposal = None  # diplomaticMessageType(rejectProposal, "rejectProposal")


diplomaticMessageType.noMessage = diplomaticMessageType(noMessage, "noMessage")
diplomaticMessageType.warDeclaration = diplomaticMessageType(warDeclaration, "warDeclaration")
diplomaticMessageType.peaceProposal = diplomaticMessageType(peaceProposal, "peaceProposal")
diplomaticMessageType.acceptPeaceProposal = diplomaticMessageType(acceptPeaceProposal, "acceptPeaceProposal")
diplomaticMessageType.alliesProposal = diplomaticMessageType(alliesProposal, "alliesProposal")
diplomaticMessageType.acceptAlliesProposal = diplomaticMessageType(acceptAlliesProposal, "acceptAlliesProposal")
diplomaticMessageType.endAllies = diplomaticMessageType(endAllies, "endAllies")
diplomaticMessageType.cancelProposal = diplomaticMessageType(cancelProposal, "cancelProposal")
diplomaticMessageType.rejectProposal = diplomaticMessageType(rejectProposal, "rejectProposal")


class diplomaticStatus(Enum):
    def __init__(self, numerator, name):
        self.name = name

    war = None  # diplomaticStatus(war, "war")
    peace = None  # diplomaticStatus(peace, "peace")
    allied = None  # diplomaticStatus(allied, "allied")


diplomaticStatus.war = diplomaticStatus(war, "war")
diplomaticStatus.peace = diplomaticStatus(peace, "peace")
diplomaticStatus.allied = diplomaticStatus(allied, "allied")


class effectsCauseType(Enum):
    def __init__(self, numerator, name):
        self.name = name

    invalid = None  # effectsCauseType(invalid, "invalid")
    unknown = None  # effectsCauseType(unknown, "unknown")
    inherent = None  # effectsCauseType(inherent, "inherent")
    tech = None  # effectsCauseType(tech, "tech")
    building = None  # effectsCauseType(building, "building")
    field = None  # effectsCauseType(field, "field")
    special = None  # effectsCauseType(special, "special")
    species = None  # effectsCauseType(species, "species")
    shipPart = None  # effectsCauseType(shipPart, "shipPart")
    shipHull = None  # effectsCauseType(shipHull, "shipHull")


effectsCauseType.invalid = effectsCauseType(invalid, "invalid")
effectsCauseType.unknown = effectsCauseType(unknown, "unknown")
effectsCauseType.inherent = effectsCauseType(inherent, "inherent")
effectsCauseType.tech = effectsCauseType(tech, "tech")
effectsCauseType.building = effectsCauseType(building, "building")
effectsCauseType.field = effectsCauseType(field, "field")
effectsCauseType.special = effectsCauseType(special, "special")
effectsCauseType.species = effectsCauseType(species, "species")
effectsCauseType.shipPart = effectsCauseType(shipPart, "shipPart")
effectsCauseType.shipHull = effectsCauseType(shipHull, "shipHull")


class galaxySetupOption(Enum):
    def __init__(self, numerator, name):
        self.name = name

    invalid = None  # galaxySetupOption(invalid, "invalid")
    none = None  # galaxySetupOption(none, "none")
    low = None  # galaxySetupOption(low, "low")
    medium = None  # galaxySetupOption(medium, "medium")
    high = None  # galaxySetupOption(high, "high")
    random = None  # galaxySetupOption(random, "random")


galaxySetupOption.invalid = galaxySetupOption(invalid, "invalid")
galaxySetupOption.none = galaxySetupOption(none, "none")
galaxySetupOption.low = galaxySetupOption(low, "low")
galaxySetupOption.medium = galaxySetupOption(medium, "medium")
galaxySetupOption.high = galaxySetupOption(high, "high")
galaxySetupOption.random = galaxySetupOption(random, "random")


class galaxyShape(Enum):
    def __init__(self, numerator, name):
        self.name = name

    invalid = None  # galaxyShape(invalid, "invalid")
    spiral2 = None  # galaxyShape(spiral2, "spiral2")
    spiral3 = None  # galaxyShape(spiral3, "spiral3")
    spiral4 = None  # galaxyShape(spiral4, "spiral4")
    cluster = None  # galaxyShape(cluster, "cluster")
    elliptical = None  # galaxyShape(elliptical, "elliptical")
    disc = None  # galaxyShape(disc, "disc")
    box = None  # galaxyShape(box, "box")
    irregular = None  # galaxyShape(irregular, "irregular")
    ring = None  # galaxyShape(ring, "ring")
    random = None  # galaxyShape(random, "random")


galaxyShape.invalid = galaxyShape(invalid, "invalid")
galaxyShape.spiral2 = galaxyShape(spiral2, "spiral2")
galaxyShape.spiral3 = galaxyShape(spiral3, "spiral3")
galaxyShape.spiral4 = galaxyShape(spiral4, "spiral4")
galaxyShape.cluster = galaxyShape(cluster, "cluster")
galaxyShape.elliptical = galaxyShape(elliptical, "elliptical")
galaxyShape.disc = galaxyShape(disc, "disc")
galaxyShape.box = galaxyShape(box, "box")
galaxyShape.irregular = galaxyShape(irregular, "irregular")
galaxyShape.ring = galaxyShape(ring, "ring")
galaxyShape.random = galaxyShape(random, "random")


class meterType(Enum):
    def __init__(self, numerator, name):
        self.name = name

    targetPopulation = None  # meterType(targetPopulation, "targetPopulation")
    targetIndustry = None  # meterType(targetIndustry, "targetIndustry")
    targetResearch = None  # meterType(targetResearch, "targetResearch")
    targetTrade = None  # meterType(targetTrade, "targetTrade")
    targetConstruction = None  # meterType(targetConstruction, "targetConstruction")
    targetHappiness = None  # meterType(targetHappiness, "targetHappiness")
    maxCapacity = None  # meterType(maxCapacity, "maxCapacity")
    maxDamage = None  # meterType(maxDamage, "maxDamage")
    maxSecondaryStat = None  # meterType(maxSecondaryStat, "maxSecondaryStat")
    maxFuel = None  # meterType(maxFuel, "maxFuel")
    maxShield = None  # meterType(maxShield, "maxShield")
    maxStructure = None  # meterType(maxStructure, "maxStructure")
    maxDefense = None  # meterType(maxDefense, "maxDefense")
    maxSupply = None  # meterType(maxSupply, "maxSupply")
    maxStockpile = None  # meterType(maxStockpile, "maxStockpile")
    maxTroops = None  # meterType(maxTroops, "maxTroops")
    population = None  # meterType(population, "population")
    industry = None  # meterType(industry, "industry")
    research = None  # meterType(research, "research")
    trade = None  # meterType(trade, "trade")
    construction = None  # meterType(construction, "construction")
    happiness = None  # meterType(happiness, "happiness")
    capacity = None  # meterType(capacity, "capacity")
    damage = None  # meterType(damage, "damage")
    secondaryStat = None  # meterType(secondaryStat, "secondaryStat")
    fuel = None  # meterType(fuel, "fuel")
    shield = None  # meterType(shield, "shield")
    structure = None  # meterType(structure, "structure")
    defense = None  # meterType(defense, "defense")
    supply = None  # meterType(supply, "supply")
    stockpile = None  # meterType(stockpile, "stockpile")
    troops = None  # meterType(troops, "troops")
    rebels = None  # meterType(rebels, "rebels")
    size = None  # meterType(size, "size")
    stealth = None  # meterType(stealth, "stealth")
    detection = None  # meterType(detection, "detection")
    speed = None  # meterType(speed, "speed")


meterType.targetPopulation = meterType(targetPopulation, "targetPopulation")
meterType.targetIndustry = meterType(targetIndustry, "targetIndustry")
meterType.targetResearch = meterType(targetResearch, "targetResearch")
meterType.targetTrade = meterType(targetTrade, "targetTrade")
meterType.targetConstruction = meterType(targetConstruction, "targetConstruction")
meterType.targetHappiness = meterType(targetHappiness, "targetHappiness")
meterType.maxCapacity = meterType(maxCapacity, "maxCapacity")
meterType.maxDamage = meterType(maxDamage, "maxDamage")
meterType.maxSecondaryStat = meterType(maxSecondaryStat, "maxSecondaryStat")
meterType.maxFuel = meterType(maxFuel, "maxFuel")
meterType.maxShield = meterType(maxShield, "maxShield")
meterType.maxStructure = meterType(maxStructure, "maxStructure")
meterType.maxDefense = meterType(maxDefense, "maxDefense")
meterType.maxSupply = meterType(maxSupply, "maxSupply")
meterType.maxStockpile = meterType(maxStockpile, "maxStockpile")
meterType.maxTroops = meterType(maxTroops, "maxTroops")
meterType.population = meterType(population, "population")
meterType.industry = meterType(industry, "industry")
meterType.research = meterType(research, "research")
meterType.trade = meterType(trade, "trade")
meterType.construction = meterType(construction, "construction")
meterType.happiness = meterType(happiness, "happiness")
meterType.capacity = meterType(capacity, "capacity")
meterType.damage = meterType(damage, "damage")
meterType.secondaryStat = meterType(secondaryStat, "secondaryStat")
meterType.fuel = meterType(fuel, "fuel")
meterType.shield = meterType(shield, "shield")
meterType.structure = meterType(structure, "structure")
meterType.defense = meterType(defense, "defense")
meterType.supply = meterType(supply, "supply")
meterType.stockpile = meterType(stockpile, "stockpile")
meterType.troops = meterType(troops, "troops")
meterType.rebels = meterType(rebels, "rebels")
meterType.size = meterType(size, "size")
meterType.stealth = meterType(stealth, "stealth")
meterType.detection = meterType(detection, "detection")
meterType.speed = meterType(speed, "speed")


class planetEnvironment(Enum):
    def __init__(self, numerator, name):
        self.name = name

    uninhabitable = None  # planetEnvironment(uninhabitable, "uninhabitable")
    hostile = None  # planetEnvironment(hostile, "hostile")
    poor = None  # planetEnvironment(poor, "poor")
    adequate = None  # planetEnvironment(adequate, "adequate")
    good = None  # planetEnvironment(good, "good")


planetEnvironment.uninhabitable = planetEnvironment(uninhabitable, "uninhabitable")
planetEnvironment.hostile = planetEnvironment(hostile, "hostile")
planetEnvironment.poor = planetEnvironment(poor, "poor")
planetEnvironment.adequate = planetEnvironment(adequate, "adequate")
planetEnvironment.good = planetEnvironment(good, "good")


class planetSize(Enum):
    def __init__(self, numerator, name):
        self.name = name

    unknown = None  # planetSize(unknown, "unknown")
    noWorld = None  # planetSize(noWorld, "noWorld")
    tiny = None  # planetSize(tiny, "tiny")
    small = None  # planetSize(small, "small")
    medium = None  # planetSize(medium, "medium")
    large = None  # planetSize(large, "large")
    huge = None  # planetSize(huge, "huge")
    asteroids = None  # planetSize(asteroids, "asteroids")
    gasGiant = None  # planetSize(gasGiant, "gasGiant")


planetSize.unknown = planetSize(unknown, "unknown")
planetSize.noWorld = planetSize(noWorld, "noWorld")
planetSize.tiny = planetSize(tiny, "tiny")
planetSize.small = planetSize(small, "small")
planetSize.medium = planetSize(medium, "medium")
planetSize.large = planetSize(large, "large")
planetSize.huge = planetSize(huge, "huge")
planetSize.asteroids = planetSize(asteroids, "asteroids")
planetSize.gasGiant = planetSize(gasGiant, "gasGiant")


class planetType(Enum):
    def __init__(self, numerator, name):
        self.name = name

    unknown = None  # planetType(unknown, "unknown")
    swamp = None  # planetType(swamp, "swamp")
    toxic = None  # planetType(toxic, "toxic")
    inferno = None  # planetType(inferno, "inferno")
    radiated = None  # planetType(radiated, "radiated")
    barren = None  # planetType(barren, "barren")
    tundra = None  # planetType(tundra, "tundra")
    desert = None  # planetType(desert, "desert")
    terran = None  # planetType(terran, "terran")
    ocean = None  # planetType(ocean, "ocean")
    asteroids = None  # planetType(asteroids, "asteroids")
    gasGiant = None  # planetType(gasGiant, "gasGiant")


planetType.unknown = planetType(unknown, "unknown")
planetType.swamp = planetType(swamp, "swamp")
planetType.toxic = planetType(toxic, "toxic")
planetType.inferno = planetType(inferno, "inferno")
planetType.radiated = planetType(radiated, "radiated")
planetType.barren = planetType(barren, "barren")
planetType.tundra = planetType(tundra, "tundra")
planetType.desert = planetType(desert, "desert")
planetType.terran = planetType(terran, "terran")
planetType.ocean = planetType(ocean, "ocean")
planetType.asteroids = planetType(asteroids, "asteroids")
planetType.gasGiant = planetType(gasGiant, "gasGiant")


class resourceType(Enum):
    def __init__(self, numerator, name):
        self.name = name

    industry = None  # resourceType(industry, "industry")
    trade = None  # resourceType(trade, "trade")
    research = None  # resourceType(research, "research")
    stockpile = None  # resourceType(stockpile, "stockpile")


resourceType.industry = resourceType(industry, "industry")
resourceType.trade = resourceType(trade, "trade")
resourceType.research = resourceType(research, "research")
resourceType.stockpile = resourceType(stockpile, "stockpile")


class roleType(Enum):
    def __init__(self, numerator, name):
        self.name = name

    host = None  # roleType(host, "host")
    clientTypeModerator = None  # roleType(clientTypeModerator, "clientTypeModerator")
    clientTypePlayer = None  # roleType(clientTypePlayer, "clientTypePlayer")
    clientTypeObserver = None  # roleType(clientTypeObserver, "clientTypeObserver")
    galaxySetup = None  # roleType(galaxySetup, "galaxySetup")


roleType.host = roleType(host, "host")
roleType.clientTypeModerator = roleType(clientTypeModerator, "clientTypeModerator")
roleType.clientTypePlayer = roleType(clientTypePlayer, "clientTypePlayer")
roleType.clientTypeObserver = roleType(clientTypeObserver, "clientTypeObserver")
roleType.galaxySetup = roleType(galaxySetup, "galaxySetup")


class ruleType(Enum):
    def __init__(self, numerator, name):
        self.name = name

    invalid = None  # ruleType(invalid, "invalid")
    toggle = None  # ruleType(toggle, "toggle")
    int = None  # ruleType(int, "int")
    double = None  # ruleType(double, "double")
    string = None  # ruleType(string, "string")


ruleType.invalid = ruleType(invalid, "invalid")
ruleType.toggle = ruleType(toggle, "toggle")
ruleType.int = ruleType(int, "int")
ruleType.double = ruleType(double, "double")
ruleType.string = ruleType(string, "string")


class shipPartClass(Enum):
    def __init__(self, numerator, name):
        self.name = name

    shortRange = None  # shipPartClass(shortRange, "shortRange")
    fighterBay = None  # shipPartClass(fighterBay, "fighterBay")
    fighterHangar = None  # shipPartClass(fighterHangar, "fighterHangar")
    shields = None  # shipPartClass(shields, "shields")
    armour = None  # shipPartClass(armour, "armour")
    troops = None  # shipPartClass(troops, "troops")
    detection = None  # shipPartClass(detection, "detection")
    stealth = None  # shipPartClass(stealth, "stealth")
    fuel = None  # shipPartClass(fuel, "fuel")
    colony = None  # shipPartClass(colony, "colony")
    speed = None  # shipPartClass(speed, "speed")
    general = None  # shipPartClass(general, "general")
    bombard = None  # shipPartClass(bombard, "bombard")
    industry = None  # shipPartClass(industry, "industry")
    research = None  # shipPartClass(research, "research")
    trade = None  # shipPartClass(trade, "trade")
    productionLocation = None  # shipPartClass(productionLocation, "productionLocation")


shipPartClass.shortRange = shipPartClass(shortRange, "shortRange")
shipPartClass.fighterBay = shipPartClass(fighterBay, "fighterBay")
shipPartClass.fighterHangar = shipPartClass(fighterHangar, "fighterHangar")
shipPartClass.shields = shipPartClass(shields, "shields")
shipPartClass.armour = shipPartClass(armour, "armour")
shipPartClass.troops = shipPartClass(troops, "troops")
shipPartClass.detection = shipPartClass(detection, "detection")
shipPartClass.stealth = shipPartClass(stealth, "stealth")
shipPartClass.fuel = shipPartClass(fuel, "fuel")
shipPartClass.colony = shipPartClass(colony, "colony")
shipPartClass.speed = shipPartClass(speed, "speed")
shipPartClass.general = shipPartClass(general, "general")
shipPartClass.bombard = shipPartClass(bombard, "bombard")
shipPartClass.industry = shipPartClass(industry, "industry")
shipPartClass.research = shipPartClass(research, "research")
shipPartClass.trade = shipPartClass(trade, "trade")
shipPartClass.productionLocation = shipPartClass(productionLocation, "productionLocation")


class shipSlotType(Enum):
    def __init__(self, numerator, name):
        self.name = name

    external = None  # shipSlotType(external, "external")
    internal = None  # shipSlotType(internal, "internal")
    core = None  # shipSlotType(core, "core")


shipSlotType.external = shipSlotType(external, "external")
shipSlotType.internal = shipSlotType(internal, "internal")
shipSlotType.core = shipSlotType(core, "core")


class starType(Enum):
    def __init__(self, numerator, name):
        self.name = name

    unknown = None  # starType(unknown, "unknown")
    blue = None  # starType(blue, "blue")
    white = None  # starType(white, "white")
    yellow = None  # starType(yellow, "yellow")
    orange = None  # starType(orange, "orange")
    red = None  # starType(red, "red")
    neutron = None  # starType(neutron, "neutron")
    blackHole = None  # starType(blackHole, "blackHole")
    noStar = None  # starType(noStar, "noStar")


starType.unknown = starType(unknown, "unknown")
starType.blue = starType(blue, "blue")
starType.white = starType(white, "white")
starType.yellow = starType(yellow, "yellow")
starType.orange = starType(orange, "orange")
starType.red = starType(red, "red")
starType.neutron = starType(neutron, "neutron")
starType.blackHole = starType(blackHole, "blackHole")
starType.noStar = starType(noStar, "noStar")


class techStatus(Enum):
    def __init__(self, numerator, name):
        self.name = name

    unresearchable = None  # techStatus(unresearchable, "unresearchable")
    partiallyUnlocked = None  # techStatus(partiallyUnlocked, "partiallyUnlocked")
    researchable = None  # techStatus(researchable, "researchable")
    complete = None  # techStatus(complete, "complete")


techStatus.unresearchable = techStatus(unresearchable, "unresearchable")
techStatus.partiallyUnlocked = techStatus(partiallyUnlocked, "partiallyUnlocked")
techStatus.researchable = techStatus(researchable, "researchable")
techStatus.complete = techStatus(complete, "complete")


class unlockableItemType(Enum):
    def __init__(self, numerator, name):
        self.name = name

    invalid = None  # unlockableItemType(invalid, "invalid")
    building = None  # unlockableItemType(building, "building")
    shipPart = None  # unlockableItemType(shipPart, "shipPart")
    shipHull = None  # unlockableItemType(shipHull, "shipHull")
    shipDesign = None  # unlockableItemType(shipDesign, "shipDesign")
    tech = None  # unlockableItemType(tech, "tech")


unlockableItemType.invalid = unlockableItemType(invalid, "invalid")
unlockableItemType.building = unlockableItemType(building, "building")
unlockableItemType.shipPart = unlockableItemType(shipPart, "shipPart")
unlockableItemType.shipHull = unlockableItemType(shipHull, "shipHull")
unlockableItemType.shipDesign = unlockableItemType(shipDesign, "shipDesign")
unlockableItemType.tech = unlockableItemType(tech, "tech")


class visibility(Enum):
    def __init__(self, numerator, name):
        self.name = name

    invalid = None  # visibility(invalid, "invalid")
    none = None  # visibility(none, "none")
    basic = None  # visibility(basic, "basic")
    partial = None  # visibility(partial, "partial")
    full = None  # visibility(full, "full")


visibility.invalid = visibility(invalid, "invalid")
visibility.none = visibility(none, "none")
visibility.basic = visibility(basic, "basic")
visibility.partial = visibility(partial, "partial")
visibility.full = visibility(full, "full")


def add_special(number: int, string: str)  -> None:
    ...


def all_empires()  -> int:
    ...


def create_building(string: str, number1: int, number2: int)  -> int:
    ...


def create_field(string: str, floating_number1: float, floating_number2: float, floating_number3: float)  -> int:
    ...


def create_field_in_system(string: str, floating_number: float, number: int)  -> int:
    ...


def create_fleet(string: str, number1: int, number2: int, boolean: bool)  -> int:
    ...


def create_monster(string: str, number: int)  -> int:
    ...


def create_monster_fleet(number: int)  -> int:
    ...


def create_planet(planet_size: planetSize, planet_type: planetType, number1: int, number2: int, string: str)  -> int:
    ...


def create_ship(string1: str, string2: str, string3: str, number: int)  -> int:
    ...


def create_system(star_type: starType, string: str, floating_number1: float, floating_number2: float)  -> int:
    ...


def current_turn()  -> int:
    ...


def design_create(string1: str, string2: str, string3: str, item_list: list, string4: str, string5: str, boolean: bool)  -> bool:
    ...


def design_get_monster_list()  -> list:
    ...


def design_get_premade_list()  -> list:
    ...


def empire_add_ship_design(number: int, string: str)  -> None:
    ...


def empire_set_homeworld(number1: int, number2: int, string: str)  -> bool:
    ...


def empire_set_name(number: int, string: str)  -> None:
    ...


def empire_unlock_item(number: int, unlockable_item_type: unlockableItemType, string: str)  -> None:
    ...


def generate_sitrep(number: int, string1: str, dictionary: dict, string2: str)  -> None:
    ...


def generate_starlanes(number1: int, number2: int)  -> None:
    ...


def getBuildingType(string: str)  -> buildingType:
    """
    Returns the building type (BuildingType) with the indicated name (string).
    """


def getFieldType(string: str)  -> fieldType:
    ...


def getGameRules()  -> GameRules:
    """
    Returns the game rules manager, which can be used to look up the names (string) of rules are defined with what type (boolean / toggle, int, double, string), and what values the rules have in the current game.
    """


def getShipHull(string: str)  -> shipHull:
    """
    Returns the ship hull (shipHull) with the indicated name (string).
    """


def getPredefinedShipDesign(string: str)  -> shipDesign:
    """
    Returns the ship design (ShipDesign) with the indicated name (string).
    """


def getShipDesign(number: int)  -> shipDesign:
    """
    Returns the ship design (ShipDesign) with the indicated id number (int).
    """


def getShipPart(string: str)  -> shipPart:
    """
    Returns the ShipPart with the indicated name (string).
    """


def getSpecial(string: str)  -> special:
    """
    Returns the special (Special) with the indicated name (string).
    """


def getSpecies(string: str)  -> species:
    """
    Returns the species (Species) with the indicated name (string).
    """


def getTech(string: str)  -> tech:
    """
    Returns the tech (Tech) with the indicated name (string).
    """


def getTechCategories(obj: object)  -> StringVec:
    """
    Returns the names of all tech categories (StringVec).
    """


def get_all_empires()  -> list:
    ...


def get_all_objects()  -> list:
    ...


def get_all_specials()  -> list:
    ...


def get_all_species()  -> list:
    ...


def get_empire(number: int)  -> empire:
    ...


def get_galaxy_setup_data()  -> GalaxySetupData:
    ...


def get_name(number: int)  -> object:
    ...


def get_native_species()  -> list:
    ...


def get_options_db_option_bool(string: str)  -> object:
    """
    Returns the bool value of option in OptionsDB or None if the option does not exist.
    """


def get_options_db_option_double(string: str)  -> object:
    """
    Returns the double value of option in OptionsDB or None if the option does not exist.
    """


def get_options_db_option_int(string: str)  -> object:
    """
    Returns the integer value of option in OptionsDB or None if the option does not exist.
    """


def get_options_db_option_str(string: str)  -> object:
    """
    Returns the string value of option in OptionsDB or None if the option does not exist.
    """


def get_owner(number: int)  -> int:
    ...


def get_playable_species()  -> list:
    ...


def get_pos(number: int)  -> tuple:
    ...


def get_resource_dir()  -> object:
    ...


def get_systems()  -> list:
    ...


def get_universe()  -> universe:
    ...


def get_universe_width()  -> float:
    ...


def get_user_config_dir()  -> str:
    """
    Returns path to directory where FreeOrion stores user specific configuration.
    """


def get_user_data_dir()  -> str:
    """
    Returns path to directory where FreeOrion stores user specific data (saves, etc.).
    """


def get_x(number: int)  -> float:
    ...


def get_y(number: int)  -> float:
    ...


def invalid_object()  -> int:
    ...


def invalid_position()  -> float:
    ...


def jump_distance(number1: int, number2: int)  -> int:
    ...


def large_meter_value()  -> float:
    ...


def linear_distance(number1: int, number2: int)  -> float:
    ...


def load_fleet_plan_list()  -> list:
    ...


def load_monster_fleet_plan_list()  -> list:
    ...


def load_starting_buildings()  -> list:
    ...


def load_unlockable_item_list()  -> list:
    ...


def objs_get_systems(item_list: list)  -> list:
    ...


def planet_available_foci(number: int)  -> list:
    ...


def planet_cardinal_suffix(number: int)  -> object:
    ...


def planet_get_focus(number: int)  -> object:
    ...


def planet_get_size(number: int)  -> planetSize:
    ...


def planet_get_species(number: int)  -> object:
    ...


def planet_get_type(number: int)  -> planetType:
    ...


def planet_make_colony(number1: int, number2: int, string: str, floating_number: float)  -> bool:
    ...


def planet_make_outpost(number1: int, number2: int)  -> bool:
    ...


def planet_set_focus(number: int, string: str)  -> None:
    ...


def planet_set_size(number: int, planet_size: planetSize)  -> None:
    ...


def planet_set_species(number: int, string: str)  -> None:
    ...


def planet_set_type(number: int, planet_type: planetType)  -> None:
    ...


def remove_special(number: int, string: str)  -> None:
    ...


def roman_number(number: int)  -> str:
    ...


def set_name(number: int, string: str)  -> None:
    ...


def set_universe_width(floating_number: float)  -> None:
    ...


def special_has_location(string: str)  -> bool:
    ...


def special_locations(string: str, item_list: list)  -> list:
    ...


def special_spawn_limit(string: str)  -> int:
    ...


def special_spawn_rate(string: str)  -> float:
    ...


def species_add_homeworld(string: str, number: int)  -> None:
    ...


def species_can_colonize(string: str)  -> bool:
    ...


def species_get_planet_environment(string: str, planet_type: planetType)  -> planetEnvironment:
    ...


def species_preferred_focus(string: str)  -> object:
    ...


def species_remove_homeworld(string: str, number: int)  -> None:
    ...


def sys_add_starlane(number1: int, number2: int)  -> None:
    ...


def sys_free_orbits(number: int)  -> list:
    ...


def sys_get_fleets(number: int)  -> list:
    ...


def sys_get_num_orbits(number: int)  -> int:
    ...


def sys_get_planets(number: int)  -> list:
    ...


def sys_get_star_type(number: int)  -> starType:
    ...


def sys_get_starlanes(number: int)  -> list:
    ...


def sys_orbit_occupied(number1: int, number2: int)  -> bool:
    ...


def sys_orbit_of_planet(number1: int, number2: int)  -> int:
    ...


def sys_remove_starlane(number1: int, number2: int)  -> None:
    ...


def sys_set_star_type(number: int, star_type: starType)  -> None:
    ...


def systems_within_jumps_unordered(number: int, item_list: list)  -> list:
    """
    Return all systems within ''jumps'' of the systems with ids ''sys_ids''
    """


def techs()  -> StringVec:
    ...


def techsInCategory(string: str)  -> StringVec:
    ...


def user_string(string: str)  -> str:
    ...


def validShipDesign(string: str, string_list: StringVec)  -> bool:
    """
    Returns true (boolean) if the passed hull (string) and parts (StringVec) make up a valid ship design, and false (boolean) otherwise. Valid ship designs don't have any parts in slots that can't accept that type of part, and contain only hulls and parts that exist (and may also need to contain the correct number of parts - this needs to be verified).
    """
