# generated by datamodel-codegen:
#   filename:  argo-workflows-3.5.5.json

from __future__ import annotations

from typing_extensions import Annotated

from hera.shared._pydantic import BaseModel, Field


class Quantity(BaseModel):
    __root__: Annotated[
        str,
        Field(
            description=(
                "Quantity is a fixed-point representation of a number. It provides"
                " convenient marshaling/unmarshaling in JSON and YAML, in addition to"
                " String() and AsInt64() accessors.\n\nThe serialization format"
                " is:\n\n<quantity>        ::= <signedNumber><suffix>\n  (Note that"
                ' <suffix> may be empty, from the "" case in <decimalSI>.)\n<digit>    '
                "       ::= 0 | 1 | ... | 9 <digits>          ::= <digit> |"
                " <digit><digits> <number>          ::= <digits> | <digits>.<digits> |"
                ' <digits>. | .<digits> <sign>            ::= "+" | "-" <signedNumber> '
                "   ::= <number> | <sign><number> <suffix>          ::= <binarySI> |"
                " <decimalExponent> | <decimalSI> <binarySI>        ::= Ki | Mi | Gi |"
                " Ti | Pi | Ei\n  (International System of units; See:"
                " http://physics.nist.gov/cuu/Units/binary.html)\n<decimalSI>       ::="
                ' m | "" | k | M | G | T | P | E\n  (Note that 1024 = 1Ki but 1000 ='
                ' 1k; I didn\'t choose the capitalization.)\n<decimalExponent> ::= "e"'
                ' <signedNumber> | "E" <signedNumber>\n\nNo matter which of the three'
                " exponent forms is used, no quantity may represent a number greater"
                " than 2^63-1 in magnitude, nor may it have more than 3 decimal places."
                " Numbers larger or more precise will be capped or rounded up. (E.g.:"
                " 0.1m will rounded up to 1m.) This may be extended in the future if we"
                " require larger or smaller quantities.\n\nWhen a Quantity is parsed"
                " from a string, it will remember the type of suffix it had, and will"
                " use the same type again when it is serialized.\n\nBefore serializing,"
                ' Quantity will be put in "canonical form". This means that'
                " Exponent/suffix will be adjusted up or down (with a corresponding"
                " increase or decrease in Mantissa) such that:\n  a. No precision is"
                " lost\n  b. No fractional digits will be emitted\n  c. The exponent"
                " (or suffix) is as large as possible.\nThe sign will be omitted unless"
                " the number is negative.\n\nExamples:\n  1.5 will be serialized as"
                ' "1500m"\n  1.5Gi will be serialized as "1536Mi"\n\nNote that the'
                " quantity will NEVER be internally represented by a floating point"
                " number. That is the whole point of this exercise.\n\nNon-canonical"
                " values will still parse as long as they are well formed, but will be"
                " re-emitted in their canonical form. (So always use canonical form, or"
                " don't diff.)\n\nThis format is intended to make it difficult to use"
                " these numbers without writing some sort of special handling code in"
                " the hopes that that will cause implementors to also use a fixed point"
                " implementation."
            )
        ),
    ]
