# Retrieve the native architecture of the target.
# See https://docs.micropython.org/en/latest/reference/mpyfiles.html#versioning-and-compatibility-of-mpy-files
# for more details.

import sys

platform = getattr(sys, "platform", "minimal")
sys_mpy = getattr(sys.implementation, "_mpy", 0)
arch = [
    None,
    "x86",
    "x64",
    "armv6",
    "armv6m",
    "armv7m",
    "armv7em",
    "armv7emsp",
    "armv7emdp",
    "xtensa",
    "xtensawin",
    "rv32imc",
    "rv64imc",
][(sys_mpy >> 10) & 0x0F]
arch_flags = sys_mpy >> 16
build = getattr(sys.implementation, "_build", "unknown")
thread = getattr(sys.implementation, "_thread", None)

# Detect how many bits of precision the floating point implementation has.
try:
    if float("1.0000001") == float("1.0"):
        float_prec = 30
    elif float("1e300") == float("inf"):
        float_prec = 32
    else:
        float_prec = 64
except NameError:
    float_prec = 0

# Detect the error reporting level (based on the length of the raised exception message).
try:
    (lambda: 0)(0)
except TypeError as er:
    error_reporting = {0: "none", 27: "terse", 54: "normal", 56: "detailed"}[len(er.value)]

print(platform, arch, arch_flags, build, thread, float_prec, len("α") == 1, error_reporting)
