import typing

import java
import java.chaquopy
import java.io
import java.lang
import java.math

class BigDecimal(java.io.Serializable, java.lang.Comparable[BigDecimal], java.lang.Number):
    ONE: typing.ClassVar[BigDecimal] = ...
    ROUND_CEILING: typing.ClassVar[int] = ...
    ROUND_DOWN: typing.ClassVar[int] = ...
    ROUND_FLOOR: typing.ClassVar[int] = ...
    ROUND_HALF_DOWN: typing.ClassVar[int] = ...
    ROUND_HALF_EVEN: typing.ClassVar[int] = ...
    ROUND_HALF_UP: typing.ClassVar[int] = ...
    ROUND_UNNECESSARY: typing.ClassVar[int] = ...
    ROUND_UP: typing.ClassVar[int] = ...
    TEN: typing.ClassVar[BigDecimal] = ...
    ZERO: typing.ClassVar[BigDecimal] = ...
    @typing.overload
    def __init__(self, num: float | java.jdouble | java.lang.Double, /) -> None: ...
    @typing.overload
    def __init__(self, num: int | java.jint | java.lang.Integer, /) -> None: ...
    @typing.overload
    def __init__(self, num: int | java.jlong | java.lang.Long, /) -> None: ...
    @typing.overload
    def __init__(self, string: str | java.lang.String, /) -> None: ...
    @typing.overload
    def __init__(self, bd: java.math.BigDecimal, /) -> None: ...
    @typing.overload
    def __init__(self, bi: java.math.BigInteger, /) -> None: ...
    @typing.overload
    def __init__(self, inchars: java.chaquopy.JavaArrayJChar, /) -> None: ...
    @typing.overload
    def __init__(self, bi: java.math.BigInteger, scale: int | java.jint | java.lang.Integer, /) -> None: ...
    @typing.overload
    def __init__(self, inchars: java.chaquopy.JavaArrayJChar, offset: int | java.jint | java.lang.Integer, length: int | java.jint | java.lang.Integer, /) -> None: ...
    @typing.overload
    def abs(self) -> BigDecimal: ...
    @typing.overload
    def abs(self, set: MathContext, /) -> BigDecimal: ...
    @typing.overload
    def add(self, rhs: BigDecimal, /) -> BigDecimal: ...
    @typing.overload
    def add(self, rhs: BigDecimal, set: MathContext, /) -> BigDecimal: ...
    def byteValueExact(self) -> int: ...
    @typing.overload
    def compareTo(self, rhs: BigDecimal, /) -> int: ...
    @typing.overload
    def compareTo(self, rhs: BigDecimal, set: MathContext, /) -> int: ...
    @typing.overload
    def divide(self, rhs: BigDecimal, /) -> BigDecimal: ...
    @typing.overload
    def divide(self, rhs: BigDecimal, round: int | java.jint | java.lang.Integer, /) -> BigDecimal: ...
    @typing.overload
    def divide(self, rhs: BigDecimal, set: MathContext, /) -> BigDecimal: ...
    @typing.overload
    def divide(self, rhs: BigDecimal, scale: int | java.jint | java.lang.Integer, round: int | java.jint | java.lang.Integer, /) -> BigDecimal: ...
    @typing.overload
    def divideInteger(self, rhs: BigDecimal, /) -> BigDecimal: ...
    @typing.overload
    def divideInteger(self, rhs: BigDecimal, set: MathContext, /) -> BigDecimal: ...
    def doubleValue(self) -> float: ...
    def equals(self, obj: java.lang.Object | int | bool | float | str, /) -> bool: ...
    def floatValue(self) -> float: ...
    @typing.overload
    def format(self, before: int | java.jint | java.lang.Integer, after: int | java.jint | java.lang.Integer, /) -> str: ...
    @typing.overload
    def format(self, before: int | java.jint | java.lang.Integer, after: int | java.jint | java.lang.Integer, explaces: int | java.jint | java.lang.Integer, exdigits: int | java.jint | java.lang.Integer, exformint: int | java.jint | java.lang.Integer, exround: int | java.jint | java.lang.Integer, /) -> str: ...
    def hashCode(self) -> int: ...
    def intValue(self) -> int: ...
    def intValueExact(self) -> int: ...
    def longValue(self) -> int: ...
    def longValueExact(self) -> int: ...
    @typing.overload
    def max(self, rhs: BigDecimal, /) -> BigDecimal: ...
    @typing.overload
    def max(self, rhs: BigDecimal, set: MathContext, /) -> BigDecimal: ...
    @typing.overload
    def min(self, rhs: BigDecimal, /) -> BigDecimal: ...
    @typing.overload
    def min(self, rhs: BigDecimal, set: MathContext, /) -> BigDecimal: ...
    def movePointLeft(self, n: int | java.jint | java.lang.Integer, /) -> BigDecimal: ...
    def movePointRight(self, n: int | java.jint | java.lang.Integer, /) -> BigDecimal: ...
    @typing.overload
    def multiply(self, rhs: BigDecimal, /) -> BigDecimal: ...
    @typing.overload
    def multiply(self, rhs: BigDecimal, set: MathContext, /) -> BigDecimal: ...
    @typing.overload
    def negate(self) -> BigDecimal: ...
    @typing.overload
    def negate(self, set: MathContext, /) -> BigDecimal: ...
    @typing.overload
    def plus(self) -> BigDecimal: ...
    @typing.overload
    def plus(self, set: MathContext, /) -> BigDecimal: ...
    @typing.overload
    def pow(self, rhs: BigDecimal, /) -> BigDecimal: ...
    @typing.overload
    def pow(self, rhs: BigDecimal, set: MathContext, /) -> BigDecimal: ...
    @typing.overload
    def remainder(self, rhs: BigDecimal, /) -> BigDecimal: ...
    @typing.overload
    def remainder(self, rhs: BigDecimal, set: MathContext, /) -> BigDecimal: ...
    def scale(self) -> int: ...
    @typing.overload
    def setScale(self, scale: int | java.jint | java.lang.Integer, /) -> BigDecimal: ...
    @typing.overload
    def setScale(self, scale: int | java.jint | java.lang.Integer, round: int | java.jint | java.lang.Integer, /) -> BigDecimal: ...
    def shortValueExact(self) -> int: ...
    def signum(self) -> int: ...
    @typing.overload
    def subtract(self, rhs: BigDecimal, /) -> BigDecimal: ...
    @typing.overload
    def subtract(self, rhs: BigDecimal, set: MathContext, /) -> BigDecimal: ...
    def toBigDecimal(self) -> java.math.BigDecimal: ...
    def toBigInteger(self) -> java.math.BigInteger: ...
    def toBigIntegerExact(self) -> java.math.BigInteger: ...
    def toCharArray(self) -> java.chaquopy.JavaArrayJChar: ...
    def toString(self) -> str: ...
    def unscaledValue(self) -> java.math.BigInteger: ...
    @typing.overload
    @staticmethod
    def valueOf(dub: float | java.jdouble | java.lang.Double, /) -> BigDecimal: ...
    @typing.overload
    @staticmethod
    def valueOf(lint: int | java.jlong | java.lang.Long, /) -> BigDecimal: ...
    @typing.overload
    @staticmethod
    def valueOf(lint: int | java.jlong | java.lang.Long, scale: int | java.jint | java.lang.Integer, /) -> BigDecimal: ...

class MathContext(java.io.Serializable):
    DEFAULT: typing.ClassVar[MathContext] = ...
    ENGINEERING: typing.ClassVar[int] = ...
    PLAIN: typing.ClassVar[int] = ...
    ROUND_CEILING: typing.ClassVar[int] = ...
    ROUND_DOWN: typing.ClassVar[int] = ...
    ROUND_FLOOR: typing.ClassVar[int] = ...
    ROUND_HALF_DOWN: typing.ClassVar[int] = ...
    ROUND_HALF_EVEN: typing.ClassVar[int] = ...
    ROUND_HALF_UP: typing.ClassVar[int] = ...
    ROUND_UNNECESSARY: typing.ClassVar[int] = ...
    ROUND_UP: typing.ClassVar[int] = ...
    SCIENTIFIC: typing.ClassVar[int] = ...
    @typing.overload
    def __init__(self, setdigits: int | java.jint | java.lang.Integer, /) -> None: ...
    @typing.overload
    def __init__(self, setdigits: int | java.jint | java.lang.Integer, setform: int | java.jint | java.lang.Integer, /) -> None: ...
    @typing.overload
    def __init__(self, setdigits: int | java.jint | java.lang.Integer, setform: int | java.jint | java.lang.Integer, setlostdigits: bool | java.jboolean | java.lang.Boolean, /) -> None: ...
    @typing.overload
    def __init__(self, setdigits: int | java.jint | java.lang.Integer, setform: int | java.jint | java.lang.Integer, setlostdigits: bool | java.jboolean | java.lang.Boolean, setroundingmode: int | java.jint | java.lang.Integer, /) -> None: ...
    def getDigits(self) -> int: ...
    def getForm(self) -> int: ...
    def getLostDigits(self) -> bool: ...
    def getRoundingMode(self) -> int: ...
    def toString(self) -> str: ...
