"""
Auto-generated Python stub file from main.py
Module: main
"""


from stdint import *
import w32.win32console
import t, c
from t import CInt, CPtr, CChar, CInt32T, CUInt64T, CFloat64T, CExport, State
import viperlib
import stdlib
import definetest
import enumtest
import mpooltest
import vectortest
import fileiotest
import testcheck

def add[T](a: T, b: T) -> T: pass

def add_u64[T](a: T, b: T, c: CUInt64T) -> T: pass

def fxi[T1, T2](a: T1, b: T2) -> T1: pass

def fxi2[T1, T2, T3](a: T1, b: T2, c: T3) -> T1: pass

def wrap_add[T](a: T, b: T) -> T: pass

def double_add[T](a: T, b: T) -> T: pass


class A[T]:
    def __init__(self: A, a: T) -> t.CInt: pass
    def get_a(self: A) -> T: pass
class Pair[T1, T2]:
    def __init__(self: Pair, first: T1, second: T2) -> t.CInt: pass
    def get_first(self: Pair) -> T1: pass
    def get_second(self: Pair) -> T2: pass
class Calculator[T]:
    def __init__(self: Calculator, init_val: T) -> t.CInt: pass
    def compute(self: Calculator, other: T) -> T: pass
    def double_compute(self: Calculator, other: T) -> T: pass
class Container[T]:
    def __init__(self: Container, v: T) -> t.CInt: pass
    def get_value(self: Container) -> T: pass
    def get_flag(self: Container) -> CInt32T: pass
@t.CVTable
class Shape:
    def __init__(self: Shape, x: CFloat64T, y: CFloat64T) -> t.CInt: pass
    def area(self: Shape) -> CFloat64T: pass
    def perimeter(self: Shape) -> CFloat64T: pass
    def describe(self: Shape) -> CFloat64T: pass
@t.CVTable
class Circle(Shape):
    def __init__(self: Circle, x: CFloat64T, y: CFloat64T, r: CFloat64T) -> t.CInt: pass
    def area(self: Circle) -> CFloat64T: pass
    def perimeter(self: Circle) -> CFloat64T: pass
    def scale(self: Circle, factor: CFloat64T) -> 'Circle' | CPtr: pass
    def move(self: Circle, dx: CFloat64T, dy: CFloat64T) -> 'Circle' | CPtr: pass
@t.CVTable
class Rect(Shape):
    def __init__(self: Rect, x: CFloat64T, y: CFloat64T, w: CFloat64T, h: CFloat64T) -> t.CInt: pass
    def area(self: Rect) -> CFloat64T: pass
    def perimeter(self: Rect) -> CFloat64T: pass
    def scale(self: Rect, factor: CFloat64T) -> 'Rect' | CPtr: pass
class Vec2:
    x: CFloat64T
    y: CFloat64T
    def __new__() -> 'Vec2' | CPtr: pass
    def __init__(self: Vec2, x: CFloat64T, y: CFloat64T) -> t.CInt: pass
    def __add__(self: Vec2, b: 'Vec2' | CPtr) -> 'Vec2' | CPtr: pass
    def __sub__(self: Vec2, b: 'Vec2' | CPtr) -> 'Vec2' | CPtr: pass
    def __mul__(self: Vec2, s: CFloat64T) -> 'Vec2' | CPtr: pass
    def __neg__(self: Vec2) -> 'Vec2' | CPtr: pass
    def dot(self: Vec2, b: 'Vec2' | CPtr) -> CFloat64T: pass
    def len_sq(self: Vec2) -> CFloat64T: pass
class Vec3:
    x: CFloat64T
    y: CFloat64T
    z: CFloat64T
    def __new__() -> 'Vec3' | CPtr: pass
    def __init__(self: Vec3, x: CFloat64T, y: CFloat64T, z: CFloat64T) -> t.CInt: pass
    def __add__(self: Vec3, b: 'Vec3' | CPtr) -> 'Vec3' | CPtr: pass
    def __sub__(self: Vec3, b: 'Vec3' | CPtr) -> 'Vec3' | CPtr: pass
    def __mul__(self: Vec3, s: CFloat64T) -> 'Vec3' | CPtr: pass
    def __neg__(self: Vec3) -> 'Vec3' | CPtr: pass
    def dot(self: Vec3, b: 'Vec3' | CPtr) -> CFloat64T: pass
    def cross(self: Vec3, b: 'Vec3' | CPtr) -> 'Vec3' | CPtr: pass
    def len_sq(self: Vec3) -> CFloat64T: pass
@t.CVTable
class Dog:
    def __init__(self: Dog, name_val: CInt, bark_power: CInt32T) -> t.CInt: pass
    def speak(self: Dog) -> CInt: pass
    def bite(self: Dog) -> CInt32T: pass
    def take_damage(self: Dog, dmg: CInt32T) -> 'Dog' | CPtr: pass
    def is_alive(self: Dog) -> CInt: pass
@t.CVTable
class Cat:
    def __init__(self: Cat, name_val: CInt, lives: CInt32T) -> t.CInt: pass
    def speak(self: Cat) -> CInt: pass
    def scratch(self: Cat) -> CInt32T: pass
    def take_damage(self: Cat, dmg: CInt32T) -> 'Cat' | CPtr: pass
    def is_alive(self: Cat) -> CInt: pass
class Transform:
    px: CFloat64T
    py: CFloat64T
    pz: CFloat64T
    scale_x: CFloat64T
    scale_y: CFloat64T
    scale_z: CFloat64T
    def __new__() -> 'Transform' | CPtr: pass
    def __init__(self: Transform, px: CFloat64T, py: CFloat64T, pz: CFloat64T) -> t.CInt: pass
    def apply_scale(self: Transform, sx: CFloat64T, sy: CFloat64T, sz: CFloat64T) -> 'Transform' | CPtr: pass
    def world_position(self: Transform) -> 'Vec3' | CPtr: pass
@t.CVTable
class Vehicle:
    def __init__(self: Vehicle, speed: CInt32T) -> t.CInt: pass
    def move(self: Vehicle) -> CInt: pass
    def is_running(self: Vehicle) -> CInt: pass
@t.CVTable
class Car(Vehicle):
    def __init__(self: Car, speed: CInt32T, doors: CInt32T) -> t.CInt: pass
    def honk(self: Car) -> CInt: pass
@t.CVTable
class ElectricCar(Car):
    def __init__(self: ElectricCar, speed: CInt32T, doors: CInt32T, battery: CInt32T) -> t.CInt: pass
    def charge(self: ElectricCar) -> t.CInt: pass
    def move(self: ElectricCar) -> CInt: pass

def main() -> CInt | CExport: pass
