<?php

// === SUPPORTED ===

define('M_PI', 3.1415926535897932384626433832795);
define('M_E', 2.7182818284590452354);
define('M_LOG2E', 1.4426950408889634074);
define('M_LOG10E', 0.43429448190325182765);
define('M_LN2', 0.69314718055994530942);
define('M_LN10', 2.30258509299404568402);
define('M_PI_2', 1.57079632679489661923);
define('M_PI_4', 0.78539816339744830962);
define('M_1_PI', 0.31830988618379067154);
define('M_2_PI', 0.63661977236758134308);
define('M_SQRTPI', 1.77245385090551602729);
define('M_2_SQRTPI', 1.12837916709551257390);
define('M_SQRT2', 1.41421356237309504880);
define('M_SQRT3', 1.73205080756887729352);
define('M_SQRT1_2', 0.70710678118654752440);
define('M_LNPI', 1.14472988584940017414);
define('M_EULER', 0.57721566490153286061);

function mt_rand ($l ::: int = TODO_OVERLOAD, $r ::: int = TODO_OVERLOAD): int;

function mt_getrandmax(): int;

function mt_srand ($seed ::: int = PHP_INT_MIN): void;

function rand ($l ::: int = TODO_OVERLOAD, $r ::: int = TODO_OVERLOAD): int;

function dechex ($number ::: int): string;

function hexdec ($number ::: string): int;

// === UNSUPPORTED ===

/**
 * @kphp-pure-function
 */
function abs ($v ::: mixed) ::: ^1 | int;
/**
 * @kphp-extern-func-info generate-stub
 * @kphp-pure-function
 */
function acos ($v ::: float) ::: float;
/**
 * @kphp-extern-func-info generate-stub
 * @kphp-pure-function
 */
function atan ($v ::: float) ::: float;
/**
 * @kphp-extern-func-info generate-stub
 * @kphp-pure-function
 */
function atan2 ($y ::: float, $x ::: float) ::: float;
/**
 * @kphp-pure-function
 */
function ceil ($v ::: float) ::: float;
/**
 * @kphp-pure-function
 */
function cos ($v ::: float) ::: float;
/**
 * @kphp-pure-function
 */
function deg2rad ($v ::: float) ::: float;
/**
 * @kphp-extern-func-info generate-stub
 * @kphp-pure-function
 */
function exp ($v ::: float) ::: float;
/**
 * @kphp-pure-function
 */
function floor ($v ::: float) ::: float;
/**
 * @kphp-extern-func-info generate-stub
 * @kphp-pure-function
 */
function fmod ($x ::: float, $y ::: float) ::: float;
/**
 * @kphp-pure-function
 */
function log ($v ::: float, $base ::: float = 2.7182818284590452353602874713527) ::: float;
/**
 * @kphp-pure-function
 */
function round ($v ::: float, $precision ::: int = 0) ::: float;
/**
 * @kphp-extern-func-info generate-stub
 * @kphp-pure-function
 */
function sin ($v ::: float) ::: float;
/**
 * @kphp-pure-function
 */
function sqrt ($v ::: float) ::: float;
/**
 * @kphp-extern-func-info generate-stub
 * @kphp-pure-function
 */
function tan ($v ::: float) ::: float;
/**
 * @kphp-pure-function
 */
function pi() ::: float;
/**
 * @kphp-extern-func-info generate-stub
 * @kphp-pure-function
 */
function rad2deg ($v ::: float) ::: float;

/** @kphp-extern-func-info generate-stub */
function lcg_value() ::: float;
/** @kphp-extern-func-info generate-stub */
function levenshtein ($str1 ::: string, $str2 ::: string) ::: int;

/** @kphp-extern-func-info generate-stub */
function uniqid ($prefix ::: string = '', $more_entropy ::: bool = false) ::: string;

/**
 * @kphp-extern-func-info cpp_template_call cpp_variadic_call
 * @kphp-pure-function
 */
function min (...$a) ::: ^1[*];
/**
 * @kphp-extern-func-info cpp_template_call cpp_variadic_call
 * @kphp-pure-function
 */
function max (...$a) ::: ^1[*];


define('PHP_ROUND_HALF_UP', 123423141);
define('PHP_ROUND_HALF_DOWN', 123423144);
define('PHP_ROUND_HALF_EVEN', 123423145);
define('PHP_ROUND_HALF_ODD', 123423146);


/** @kphp-extern-func-info generate-stub */
function bcadd ($lhs ::: string, $rhs ::: string, $scale ::: int = PHP_INT_MIN) ::: string;
/** @kphp-extern-func-info generate-stub */
function bccomp ($lhs ::: string, $rhs ::: string, $scale ::: int = PHP_INT_MIN) ::: int;
/** @kphp-extern-func-info generate-stub */
function bcdiv ($lhs ::: string, $rhs ::: string, $scale ::: int = PHP_INT_MIN) ::: string;
/** @kphp-extern-func-info generate-stub */
function bcmod ($lhs ::: string, $rhs ::: string, $scale ::: int = PHP_INT_MIN) ::: string;
/** @kphp-extern-func-info generate-stub */
function bcpow ($lhs ::: string, $rhs ::: string, $scale ::: int = PHP_INT_MIN) ::: string;
/** @kphp-extern-func-info generate-stub */
function bcmul ($lhs ::: string, $rhs ::: string, $scale ::: int = PHP_INT_MIN) ::: string;
/** @kphp-extern-func-info generate-stub */
function bcscale ($scale ::: int) ::: void;
/** @kphp-extern-func-info generate-stub */
function bcsqrt($num ::: string, $scale ::: int = PHP_INT_MIN): string;
/** @kphp-extern-func-info generate-stub */
function bcsub ($lhs ::: string, $rhs ::: string, $scale ::: int = PHP_INT_MIN) ::: string;

/** @kphp-extern-func-info generate-stub */
function is_finite ($v ::: float) ::: bool;
/** @kphp-extern-func-info generate-stub */
function is_infinite ($v ::: float) ::: bool;
/** @kphp-extern-func-info generate-stub */
function is_nan ($v ::: float) ::: bool;
/** @kphp-extern-func-info generate-stub */
function random_int($l ::: int, $r ::: int) ::: int | false;
/** @kphp-extern-func-info generate-stub */
function random_bytes($length ::: int) ::: string | false;

