Compare commits
3 Commits
f020d61cbb
...
5c5620692f
Author | SHA1 | Date |
---|---|---|
David Mak | 5c5620692f | |
David Mak | 0af1e37e99 | |
David Mak | 854e33ed48 |
|
@ -148,9 +148,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clap"
|
name = "clap"
|
||||||
version = "4.4.7"
|
version = "4.4.8"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ac495e00dcec98c83465d5ad66c5c4fabd652fd6686e7c6269b117e729a6f17b"
|
checksum = "2275f18819641850fa26c89acc84d465c1bf91ce57bc2748b28c420473352f64"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap_builder",
|
"clap_builder",
|
||||||
"clap_derive",
|
"clap_derive",
|
||||||
|
@ -158,9 +158,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clap_builder"
|
name = "clap_builder"
|
||||||
version = "4.4.7"
|
version = "4.4.8"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c77ed9a32a62e6ca27175d00d29d05ca32e396ea1eb5fb01d8256b669cec7663"
|
checksum = "07cdf1b148b25c1e1f7a42225e30a0d99a615cd4637eae7365548dd4529b95bc"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anstream",
|
"anstream",
|
||||||
"anstyle",
|
"anstyle",
|
||||||
|
@ -333,9 +333,9 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "errno"
|
name = "errno"
|
||||||
version = "0.3.6"
|
version = "0.3.7"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7c18ee0ed65a5f1f81cac6b1d213b69c35fa47d4252ad41f1486dbd8226fe36e"
|
checksum = "f258a7194e7f7c2a7837a8913aeab7fd8c383457034fa20ce4dd3dcb813e8eb8"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
"windows-sys 0.48.0",
|
"windows-sys 0.48.0",
|
||||||
|
@ -1026,9 +1026,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rustix"
|
name = "rustix"
|
||||||
version = "0.38.21"
|
version = "0.38.25"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2b426b0506e5d50a7d8dafcf2e81471400deb602392c7dd110815afb4eaf02a3"
|
checksum = "dc99bc2d4f1fed22595588a013687477aedf3cdcfb26558c559edb67b4d9b22e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags 2.4.1",
|
"bitflags 2.4.1",
|
||||||
"errno",
|
"errno",
|
||||||
|
@ -1063,18 +1063,18 @@ checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde"
|
name = "serde"
|
||||||
version = "1.0.192"
|
version = "1.0.193"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "bca2a08484b285dcb282d0f67b26cadc0df8b19f8c12502c13d966bf9482f001"
|
checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde_derive",
|
"serde_derive",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_derive"
|
name = "serde_derive"
|
||||||
version = "1.0.192"
|
version = "1.0.193"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d6c7207fbec9faa48073f3e3074cbe553af6ea512d7c21ba46e434e70ea9fbc1"
|
checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
@ -1118,9 +1118,9 @@ checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "smallvec"
|
name = "smallvec"
|
||||||
version = "1.11.1"
|
version = "1.11.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a"
|
checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "string-interner"
|
name = "string-interner"
|
||||||
|
@ -1544,18 +1544,18 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "zerocopy"
|
name = "zerocopy"
|
||||||
version = "0.7.25"
|
version = "0.7.26"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8cd369a67c0edfef15010f980c3cbe45d7f651deac2cd67ce097cd801de16557"
|
checksum = "e97e415490559a91254a2979b4829267a57d2fcd741a98eee8b722fb57289aa0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"zerocopy-derive",
|
"zerocopy-derive",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "zerocopy-derive"
|
name = "zerocopy-derive"
|
||||||
version = "0.7.25"
|
version = "0.7.26"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c2f140bda219a26ccc0cdb03dba58af72590c53b22642577d88a927bc5c87d6b"
|
checksum = "dd7e48ccf166952882ca8bd778a43502c64f33bf94c12ebe2a7f08e5a0f6689f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
|
|
@ -881,6 +881,33 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
Ok(Some(val_toint.into()))
|
Ok(Some(val_toint.into()))
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
|
create_fn_by_codegen(
|
||||||
|
primitives,
|
||||||
|
&var_map,
|
||||||
|
"np_round",
|
||||||
|
float,
|
||||||
|
&[(float, "n")],
|
||||||
|
Box::new(|ctx, _, _, args, generator| {
|
||||||
|
let llvm_f64 = ctx.ctx.f64_type();
|
||||||
|
|
||||||
|
let arg = args[0].1.clone()
|
||||||
|
.to_basic_value_enum(ctx, generator, ctx.primitives.float)?;
|
||||||
|
|
||||||
|
let intrinsic_fn = ctx.module.get_function("llvm.roundeven.f64").unwrap_or_else(|| {
|
||||||
|
let fn_type = llvm_f64.fn_type(&[llvm_f64.into()], false);
|
||||||
|
|
||||||
|
ctx.module.add_function("llvm.roundeven.f64", fn_type, None)
|
||||||
|
});
|
||||||
|
|
||||||
|
let val = ctx
|
||||||
|
.builder
|
||||||
|
.build_call(intrinsic_fn, &[arg.into()], "")
|
||||||
|
.try_as_basic_value()
|
||||||
|
.left()
|
||||||
|
.unwrap();
|
||||||
|
Ok(Some(val.into()))
|
||||||
|
}),
|
||||||
|
),
|
||||||
Arc::new(RwLock::new(TopLevelDef::Function {
|
Arc::new(RwLock::new(TopLevelDef::Function {
|
||||||
name: "range".into(),
|
name: "range".into(),
|
||||||
simple_name: "range".into(),
|
simple_name: "range".into(),
|
||||||
|
@ -1123,6 +1150,33 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
Ok(Some(val_toint.into()))
|
Ok(Some(val_toint.into()))
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
|
create_fn_by_codegen(
|
||||||
|
primitives,
|
||||||
|
&var_map,
|
||||||
|
"np_floor",
|
||||||
|
float,
|
||||||
|
&[(float, "n")],
|
||||||
|
Box::new(|ctx, _, _, args, generator| {
|
||||||
|
let llvm_f64 = ctx.ctx.f64_type();
|
||||||
|
|
||||||
|
let arg = args[0].1.clone()
|
||||||
|
.to_basic_value_enum(ctx, generator, ctx.primitives.float)?;
|
||||||
|
|
||||||
|
let intrinsic_fn = ctx.module.get_function("llvm.floor.f64").unwrap_or_else(|| {
|
||||||
|
let fn_type = llvm_f64.fn_type(&[llvm_f64.into()], false);
|
||||||
|
|
||||||
|
ctx.module.add_function("llvm.floor.f64", fn_type, None)
|
||||||
|
});
|
||||||
|
|
||||||
|
let val = ctx
|
||||||
|
.builder
|
||||||
|
.build_call(intrinsic_fn, &[arg.into()], "")
|
||||||
|
.try_as_basic_value()
|
||||||
|
.left()
|
||||||
|
.unwrap();
|
||||||
|
Ok(Some(val.into()))
|
||||||
|
}),
|
||||||
|
),
|
||||||
create_fn_by_codegen(
|
create_fn_by_codegen(
|
||||||
primitives,
|
primitives,
|
||||||
&var_map,
|
&var_map,
|
||||||
|
@ -1183,6 +1237,33 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
Ok(Some(val_toint.into()))
|
Ok(Some(val_toint.into()))
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
|
create_fn_by_codegen(
|
||||||
|
primitives,
|
||||||
|
&var_map,
|
||||||
|
"np_ceil",
|
||||||
|
float,
|
||||||
|
&[(float, "n")],
|
||||||
|
Box::new(|ctx, _, _, args, generator| {
|
||||||
|
let llvm_f64 = ctx.ctx.f64_type();
|
||||||
|
|
||||||
|
let arg = args[0].1.clone()
|
||||||
|
.to_basic_value_enum(ctx, generator, ctx.primitives.float)?;
|
||||||
|
|
||||||
|
let intrinsic_fn = ctx.module.get_function("llvm.ceil.f64").unwrap_or_else(|| {
|
||||||
|
let fn_type = llvm_f64.fn_type(&[llvm_f64.into()], false);
|
||||||
|
|
||||||
|
ctx.module.add_function("llvm.ceil.f64", fn_type, None)
|
||||||
|
});
|
||||||
|
|
||||||
|
let val = ctx
|
||||||
|
.builder
|
||||||
|
.build_call(intrinsic_fn, &[arg.into()], "")
|
||||||
|
.try_as_basic_value()
|
||||||
|
.left()
|
||||||
|
.unwrap();
|
||||||
|
Ok(Some(val.into()))
|
||||||
|
}),
|
||||||
|
),
|
||||||
Arc::new(RwLock::new({
|
Arc::new(RwLock::new({
|
||||||
let list_var = primitives.1.get_fresh_var(Some("L".into()), None);
|
let list_var = primitives.1.get_fresh_var(Some("L".into()), None);
|
||||||
let list = primitives.1.add_ty(TypeEnum::TList { ty: list_var.0 });
|
let list = primitives.1.add_ty(TypeEnum::TList { ty: list_var.0 });
|
||||||
|
@ -1431,7 +1512,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
create_fn_by_codegen(
|
create_fn_by_codegen(
|
||||||
primitives,
|
primitives,
|
||||||
&var_map,
|
&var_map,
|
||||||
"isnan",
|
"np_isnan",
|
||||||
boolean,
|
boolean,
|
||||||
&[(float, "x")],
|
&[(float, "x")],
|
||||||
Box::new(|ctx, _, fun, args, generator| {
|
Box::new(|ctx, _, fun, args, generator| {
|
||||||
|
@ -1451,7 +1532,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
create_fn_by_codegen(
|
create_fn_by_codegen(
|
||||||
primitives,
|
primitives,
|
||||||
&var_map,
|
&var_map,
|
||||||
"isinf",
|
"np_isinf",
|
||||||
boolean,
|
boolean,
|
||||||
&[(float, "x")],
|
&[(float, "x")],
|
||||||
Box::new(|ctx, _, fun, args, generator| {
|
Box::new(|ctx, _, fun, args, generator| {
|
||||||
|
@ -1471,7 +1552,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
create_fn_by_intrinsic(
|
create_fn_by_intrinsic(
|
||||||
primitives,
|
primitives,
|
||||||
&var_map,
|
&var_map,
|
||||||
"sin",
|
"np_sin",
|
||||||
float,
|
float,
|
||||||
&[(float, "x")],
|
&[(float, "x")],
|
||||||
"llvm.sin.f64",
|
"llvm.sin.f64",
|
||||||
|
@ -1479,7 +1560,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
create_fn_by_intrinsic(
|
create_fn_by_intrinsic(
|
||||||
primitives,
|
primitives,
|
||||||
&var_map,
|
&var_map,
|
||||||
"cos",
|
"np_cos",
|
||||||
float,
|
float,
|
||||||
&[(float, "x")],
|
&[(float, "x")],
|
||||||
"llvm.cos.f64",
|
"llvm.cos.f64",
|
||||||
|
@ -1487,7 +1568,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
create_fn_by_intrinsic(
|
create_fn_by_intrinsic(
|
||||||
primitives,
|
primitives,
|
||||||
&var_map,
|
&var_map,
|
||||||
"exp",
|
"np_exp",
|
||||||
float,
|
float,
|
||||||
&[(float, "x")],
|
&[(float, "x")],
|
||||||
"llvm.exp.f64",
|
"llvm.exp.f64",
|
||||||
|
@ -1495,7 +1576,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
create_fn_by_intrinsic(
|
create_fn_by_intrinsic(
|
||||||
primitives,
|
primitives,
|
||||||
&var_map,
|
&var_map,
|
||||||
"exp2",
|
"np_exp2",
|
||||||
float,
|
float,
|
||||||
&[(float, "x")],
|
&[(float, "x")],
|
||||||
"llvm.exp2.f64",
|
"llvm.exp2.f64",
|
||||||
|
@ -1503,7 +1584,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
create_fn_by_intrinsic(
|
create_fn_by_intrinsic(
|
||||||
primitives,
|
primitives,
|
||||||
&var_map,
|
&var_map,
|
||||||
"log",
|
"np_log",
|
||||||
float,
|
float,
|
||||||
&[(float, "x")],
|
&[(float, "x")],
|
||||||
"llvm.log.f64",
|
"llvm.log.f64",
|
||||||
|
@ -1511,7 +1592,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
create_fn_by_intrinsic(
|
create_fn_by_intrinsic(
|
||||||
primitives,
|
primitives,
|
||||||
&var_map,
|
&var_map,
|
||||||
"log10",
|
"np_log10",
|
||||||
float,
|
float,
|
||||||
&[(float, "x")],
|
&[(float, "x")],
|
||||||
"llvm.log10.f64",
|
"llvm.log10.f64",
|
||||||
|
@ -1519,7 +1600,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
create_fn_by_intrinsic(
|
create_fn_by_intrinsic(
|
||||||
primitives,
|
primitives,
|
||||||
&var_map,
|
&var_map,
|
||||||
"log2",
|
"np_log2",
|
||||||
float,
|
float,
|
||||||
&[(float, "x")],
|
&[(float, "x")],
|
||||||
"llvm.log2.f64",
|
"llvm.log2.f64",
|
||||||
|
@ -1527,7 +1608,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
create_fn_by_intrinsic(
|
create_fn_by_intrinsic(
|
||||||
primitives,
|
primitives,
|
||||||
&var_map,
|
&var_map,
|
||||||
"fabs",
|
"np_fabs",
|
||||||
float,
|
float,
|
||||||
&[(float, "x")],
|
&[(float, "x")],
|
||||||
"llvm.fabs.f64",
|
"llvm.fabs.f64",
|
||||||
|
@ -1535,7 +1616,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
create_fn_by_intrinsic(
|
create_fn_by_intrinsic(
|
||||||
primitives,
|
primitives,
|
||||||
&var_map,
|
&var_map,
|
||||||
"sqrt",
|
"np_sqrt",
|
||||||
float,
|
float,
|
||||||
&[(float, "x")],
|
&[(float, "x")],
|
||||||
"llvm.sqrt.f64",
|
"llvm.sqrt.f64",
|
||||||
|
@ -1543,7 +1624,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
create_fn_by_intrinsic(
|
create_fn_by_intrinsic(
|
||||||
primitives,
|
primitives,
|
||||||
&var_map,
|
&var_map,
|
||||||
"rint",
|
"np_rint",
|
||||||
float,
|
float,
|
||||||
&[(float, "x")],
|
&[(float, "x")],
|
||||||
"llvm.roundeven.f64",
|
"llvm.roundeven.f64",
|
||||||
|
@ -1551,7 +1632,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
create_fn_by_extern(
|
create_fn_by_extern(
|
||||||
primitives,
|
primitives,
|
||||||
&var_map,
|
&var_map,
|
||||||
"tan",
|
"np_tan",
|
||||||
float,
|
float,
|
||||||
&[(float, "x")],
|
&[(float, "x")],
|
||||||
"tan",
|
"tan",
|
||||||
|
@ -1560,7 +1641,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
create_fn_by_extern(
|
create_fn_by_extern(
|
||||||
primitives,
|
primitives,
|
||||||
&var_map,
|
&var_map,
|
||||||
"arcsin",
|
"np_arcsin",
|
||||||
float,
|
float,
|
||||||
&[(float, "x")],
|
&[(float, "x")],
|
||||||
"asin",
|
"asin",
|
||||||
|
@ -1569,7 +1650,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
create_fn_by_extern(
|
create_fn_by_extern(
|
||||||
primitives,
|
primitives,
|
||||||
&var_map,
|
&var_map,
|
||||||
"arccos",
|
"np_arccos",
|
||||||
float,
|
float,
|
||||||
&[(float, "x")],
|
&[(float, "x")],
|
||||||
"acos",
|
"acos",
|
||||||
|
@ -1578,7 +1659,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
create_fn_by_extern(
|
create_fn_by_extern(
|
||||||
primitives,
|
primitives,
|
||||||
&var_map,
|
&var_map,
|
||||||
"arctan",
|
"np_arctan",
|
||||||
float,
|
float,
|
||||||
&[(float, "x")],
|
&[(float, "x")],
|
||||||
"atan",
|
"atan",
|
||||||
|
@ -1587,7 +1668,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
create_fn_by_extern(
|
create_fn_by_extern(
|
||||||
primitives,
|
primitives,
|
||||||
&var_map,
|
&var_map,
|
||||||
"sinh",
|
"np_sinh",
|
||||||
float,
|
float,
|
||||||
&[(float, "x")],
|
&[(float, "x")],
|
||||||
"sinh",
|
"sinh",
|
||||||
|
@ -1596,7 +1677,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
create_fn_by_extern(
|
create_fn_by_extern(
|
||||||
primitives,
|
primitives,
|
||||||
&var_map,
|
&var_map,
|
||||||
"cosh",
|
"np_cosh",
|
||||||
float,
|
float,
|
||||||
&[(float, "x")],
|
&[(float, "x")],
|
||||||
"cosh",
|
"cosh",
|
||||||
|
@ -1605,7 +1686,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
create_fn_by_extern(
|
create_fn_by_extern(
|
||||||
primitives,
|
primitives,
|
||||||
&var_map,
|
&var_map,
|
||||||
"tanh",
|
"np_tanh",
|
||||||
float,
|
float,
|
||||||
&[(float, "x")],
|
&[(float, "x")],
|
||||||
"tanh",
|
"tanh",
|
||||||
|
@ -1614,7 +1695,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
create_fn_by_extern(
|
create_fn_by_extern(
|
||||||
primitives,
|
primitives,
|
||||||
&var_map,
|
&var_map,
|
||||||
"arcsinh",
|
"np_arcsinh",
|
||||||
float,
|
float,
|
||||||
&[(float, "x")],
|
&[(float, "x")],
|
||||||
"asinh",
|
"asinh",
|
||||||
|
@ -1623,7 +1704,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
create_fn_by_extern(
|
create_fn_by_extern(
|
||||||
primitives,
|
primitives,
|
||||||
&var_map,
|
&var_map,
|
||||||
"arccosh",
|
"np_arccosh",
|
||||||
float,
|
float,
|
||||||
&[(float, "x")],
|
&[(float, "x")],
|
||||||
"acosh",
|
"acosh",
|
||||||
|
@ -1632,7 +1713,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
create_fn_by_extern(
|
create_fn_by_extern(
|
||||||
primitives,
|
primitives,
|
||||||
&var_map,
|
&var_map,
|
||||||
"arctanh",
|
"np_arctanh",
|
||||||
float,
|
float,
|
||||||
&[(float, "x")],
|
&[(float, "x")],
|
||||||
"atanh",
|
"atanh",
|
||||||
|
@ -1641,7 +1722,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
create_fn_by_extern(
|
create_fn_by_extern(
|
||||||
primitives,
|
primitives,
|
||||||
&var_map,
|
&var_map,
|
||||||
"expm1",
|
"np_expm1",
|
||||||
float,
|
float,
|
||||||
&[(float, "x")],
|
&[(float, "x")],
|
||||||
"expm1",
|
"expm1",
|
||||||
|
@ -1650,7 +1731,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
create_fn_by_extern(
|
create_fn_by_extern(
|
||||||
primitives,
|
primitives,
|
||||||
&var_map,
|
&var_map,
|
||||||
"cbrt",
|
"np_cbrt",
|
||||||
float,
|
float,
|
||||||
&[(float, "x")],
|
&[(float, "x")],
|
||||||
"cbrt",
|
"cbrt",
|
||||||
|
@ -1659,7 +1740,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
create_fn_by_extern(
|
create_fn_by_extern(
|
||||||
primitives,
|
primitives,
|
||||||
&var_map,
|
&var_map,
|
||||||
"erf",
|
"sp_spec_erf",
|
||||||
float,
|
float,
|
||||||
&[(float, "z")],
|
&[(float, "z")],
|
||||||
"erf",
|
"erf",
|
||||||
|
@ -1668,7 +1749,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
create_fn_by_extern(
|
create_fn_by_extern(
|
||||||
primitives,
|
primitives,
|
||||||
&var_map,
|
&var_map,
|
||||||
"erfc",
|
"sp_spec_erfc",
|
||||||
float,
|
float,
|
||||||
&[(float, "x")],
|
&[(float, "x")],
|
||||||
"erfc",
|
"erfc",
|
||||||
|
@ -1677,7 +1758,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
create_fn_by_codegen(
|
create_fn_by_codegen(
|
||||||
primitives,
|
primitives,
|
||||||
&var_map,
|
&var_map,
|
||||||
"gamma",
|
"sp_spec_gamma",
|
||||||
float,
|
float,
|
||||||
&[(float, "z")],
|
&[(float, "z")],
|
||||||
Box::new(|ctx, _, fun, args, generator| {
|
Box::new(|ctx, _, fun, args, generator| {
|
||||||
|
@ -1695,7 +1776,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
create_fn_by_codegen(
|
create_fn_by_codegen(
|
||||||
primitives,
|
primitives,
|
||||||
&var_map,
|
&var_map,
|
||||||
"gammaln",
|
"sp_spec_gammaln",
|
||||||
float,
|
float,
|
||||||
&[(float, "x")],
|
&[(float, "x")],
|
||||||
Box::new(|ctx, _, fun, args, generator| {
|
Box::new(|ctx, _, fun, args, generator| {
|
||||||
|
@ -1713,7 +1794,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
create_fn_by_codegen(
|
create_fn_by_codegen(
|
||||||
primitives,
|
primitives,
|
||||||
&var_map,
|
&var_map,
|
||||||
"j0",
|
"sp_spec_j0",
|
||||||
float,
|
float,
|
||||||
&[(float, "x")],
|
&[(float, "x")],
|
||||||
Box::new(|ctx, _, fun, args, generator| {
|
Box::new(|ctx, _, fun, args, generator| {
|
||||||
|
@ -1731,7 +1812,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
create_fn_by_extern(
|
create_fn_by_extern(
|
||||||
primitives,
|
primitives,
|
||||||
&var_map,
|
&var_map,
|
||||||
"j1",
|
"sp_spec_j1",
|
||||||
float,
|
float,
|
||||||
&[(float, "x")],
|
&[(float, "x")],
|
||||||
"j1",
|
"j1",
|
||||||
|
@ -1741,7 +1822,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
create_fn_by_extern(
|
create_fn_by_extern(
|
||||||
primitives,
|
primitives,
|
||||||
&var_map,
|
&var_map,
|
||||||
"arctan2",
|
"np_arctan2",
|
||||||
float,
|
float,
|
||||||
&[(float, "x1"), (float, "x2")],
|
&[(float, "x1"), (float, "x2")],
|
||||||
"atan2",
|
"atan2",
|
||||||
|
@ -1750,7 +1831,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
create_fn_by_intrinsic(
|
create_fn_by_intrinsic(
|
||||||
primitives,
|
primitives,
|
||||||
&var_map,
|
&var_map,
|
||||||
"copysign",
|
"np_copysign",
|
||||||
float,
|
float,
|
||||||
&[(float, "x1"), (float, "x2")],
|
&[(float, "x1"), (float, "x2")],
|
||||||
"llvm.copysign.f64",
|
"llvm.copysign.f64",
|
||||||
|
@ -1758,7 +1839,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
create_fn_by_intrinsic(
|
create_fn_by_intrinsic(
|
||||||
primitives,
|
primitives,
|
||||||
&var_map,
|
&var_map,
|
||||||
"fmax",
|
"np_fmax",
|
||||||
float,
|
float,
|
||||||
&[(float, "x1"), (float, "x2")],
|
&[(float, "x1"), (float, "x2")],
|
||||||
"llvm.maxnum.f64",
|
"llvm.maxnum.f64",
|
||||||
|
@ -1766,7 +1847,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
create_fn_by_intrinsic(
|
create_fn_by_intrinsic(
|
||||||
primitives,
|
primitives,
|
||||||
&var_map,
|
&var_map,
|
||||||
"fmin",
|
"np_fmin",
|
||||||
float,
|
float,
|
||||||
&[(float, "x1"), (float, "x2")],
|
&[(float, "x1"), (float, "x2")],
|
||||||
"llvm.minnum.f64",
|
"llvm.minnum.f64",
|
||||||
|
@ -1774,7 +1855,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
create_fn_by_extern(
|
create_fn_by_extern(
|
||||||
primitives,
|
primitives,
|
||||||
&var_map,
|
&var_map,
|
||||||
"ldexp",
|
"np_ldexp",
|
||||||
float,
|
float,
|
||||||
&[(float, "x1"), (int32, "x2")],
|
&[(float, "x1"), (int32, "x2")],
|
||||||
"ldexp",
|
"ldexp",
|
||||||
|
@ -1783,7 +1864,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
create_fn_by_extern(
|
create_fn_by_extern(
|
||||||
primitives,
|
primitives,
|
||||||
&var_map,
|
&var_map,
|
||||||
"hypot",
|
"np_hypot",
|
||||||
float,
|
float,
|
||||||
&[(float, "x1"), (float, "x2")],
|
&[(float, "x1"), (float, "x2")],
|
||||||
"hypot",
|
"hypot",
|
||||||
|
@ -1792,7 +1873,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
create_fn_by_extern(
|
create_fn_by_extern(
|
||||||
primitives,
|
primitives,
|
||||||
&var_map,
|
&var_map,
|
||||||
"nextafter",
|
"np_nextafter",
|
||||||
float,
|
float,
|
||||||
&[(float, "x1"), (float, "x2")],
|
&[(float, "x1"), (float, "x2")],
|
||||||
"nextafter",
|
"nextafter",
|
||||||
|
@ -1835,54 +1916,57 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
"float",
|
"float",
|
||||||
"round",
|
"round",
|
||||||
"round64",
|
"round64",
|
||||||
|
"np_round",
|
||||||
"range",
|
"range",
|
||||||
"str",
|
"str",
|
||||||
"bool",
|
"bool",
|
||||||
"floor",
|
"floor",
|
||||||
"floor64",
|
"floor64",
|
||||||
|
"np_floor",
|
||||||
"ceil",
|
"ceil",
|
||||||
"ceil64",
|
"ceil64",
|
||||||
|
"np_ceil",
|
||||||
"len",
|
"len",
|
||||||
"min",
|
"min",
|
||||||
"max",
|
"max",
|
||||||
"abs",
|
"abs",
|
||||||
"isnan",
|
"np_isnan",
|
||||||
"isinf",
|
"np_isinf",
|
||||||
"sin",
|
"np_sin",
|
||||||
"cos",
|
"np_cos",
|
||||||
"exp",
|
"np_exp",
|
||||||
"exp2",
|
"np_exp2",
|
||||||
"log",
|
"np_log",
|
||||||
"log10",
|
"np_log10",
|
||||||
"log2",
|
"np_log2",
|
||||||
"fabs",
|
"np_fabs",
|
||||||
"sqrt",
|
"np_sqrt",
|
||||||
"rint",
|
"np_rint",
|
||||||
"tan",
|
"np_tan",
|
||||||
"arcsin",
|
"np_arcsin",
|
||||||
"arccos",
|
"np_arccos",
|
||||||
"arctan",
|
"np_arctan",
|
||||||
"sinh",
|
"np_sinh",
|
||||||
"cosh",
|
"np_cosh",
|
||||||
"tanh",
|
"np_tanh",
|
||||||
"arcsinh",
|
"np_arcsinh",
|
||||||
"arccosh",
|
"np_arccosh",
|
||||||
"arctanh",
|
"np_arctanh",
|
||||||
"expm1",
|
"np_expm1",
|
||||||
"cbrt",
|
"np_cbrt",
|
||||||
"erf",
|
"sp_spec_erf",
|
||||||
"erfc",
|
"sp_spec_erfc",
|
||||||
"gamma",
|
"sp_spec_gamma",
|
||||||
"gammaln",
|
"sp_spec_gammaln",
|
||||||
"j0",
|
"sp_spec_j0",
|
||||||
"j1",
|
"sp_spec_j1",
|
||||||
"arctan2",
|
"np_arctan2",
|
||||||
"copysign",
|
"np_copysign",
|
||||||
"fmax",
|
"np_fmax",
|
||||||
"fmin",
|
"np_fmin",
|
||||||
"ldexp",
|
"np_ldexp",
|
||||||
"hypot",
|
"np_hypot",
|
||||||
"nextafter",
|
"np_nextafter",
|
||||||
"Some",
|
"Some",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
|
@ -6,9 +6,9 @@ import importlib.machinery
|
||||||
import math
|
import math
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import pathlib
|
import pathlib
|
||||||
import scipy
|
|
||||||
|
|
||||||
from numpy import int32, int64, uint32, uint64
|
from numpy import int32, int64, uint32, uint64
|
||||||
|
from scipy import special
|
||||||
from typing import TypeVar, Generic
|
from typing import TypeVar, Generic
|
||||||
|
|
||||||
T = TypeVar('T')
|
T = TypeVar('T')
|
||||||
|
@ -108,52 +108,55 @@ def patch(module):
|
||||||
# Builtin Math functions
|
# Builtin Math functions
|
||||||
module.round = round_away_zero
|
module.round = round_away_zero
|
||||||
module.round64 = round_away_zero
|
module.round64 = round_away_zero
|
||||||
|
module.np_round = np.round
|
||||||
module.floor = math.floor
|
module.floor = math.floor
|
||||||
module.floor64 = math.floor
|
module.floor64 = math.floor
|
||||||
|
module.np_floor = np.floor
|
||||||
module.ceil = math.ceil
|
module.ceil = math.ceil
|
||||||
module.ceil64 = math.ceil
|
module.ceil64 = math.ceil
|
||||||
|
module.np_ceil = np.ceil
|
||||||
|
|
||||||
# NumPy Math functions
|
# NumPy Math functions
|
||||||
module.isnan = np.isnan
|
module.np_isnan = np.isnan
|
||||||
module.isinf = np.isinf
|
module.np_isinf = np.isinf
|
||||||
module.sin = np.sin
|
module.np_sin = np.sin
|
||||||
module.cos = np.cos
|
module.np_cos = np.cos
|
||||||
module.exp = np.exp
|
module.np_exp = np.exp
|
||||||
module.exp2 = np.exp2
|
module.np_exp2 = np.exp2
|
||||||
module.log = np.log
|
module.np_log = np.log
|
||||||
module.log10 = np.log10
|
module.np_log10 = np.log10
|
||||||
module.log2 = np.log2
|
module.np_log2 = np.log2
|
||||||
module.fabs = np.fabs
|
module.np_fabs = np.fabs
|
||||||
module.trunc = np.trunc
|
module.np_trunc = np.trunc
|
||||||
module.sqrt = np.sqrt
|
module.np_sqrt = np.sqrt
|
||||||
module.rint = np.rint
|
module.np_rint = np.rint
|
||||||
module.tan = np.tan
|
module.np_tan = np.tan
|
||||||
module.arcsin = np.arcsin
|
module.np_arcsin = np.arcsin
|
||||||
module.arccos = np.arccos
|
module.np_arccos = np.arccos
|
||||||
module.arctan = np.arctan
|
module.np_arctan = np.arctan
|
||||||
module.sinh = np.sinh
|
module.np_sinh = np.sinh
|
||||||
module.cosh = np.cosh
|
module.np_cosh = np.cosh
|
||||||
module.tanh = np.tanh
|
module.np_tanh = np.tanh
|
||||||
module.arcsinh = np.arcsinh
|
module.np_arcsinh = np.arcsinh
|
||||||
module.arccosh = np.arccosh
|
module.np_arccosh = np.arccosh
|
||||||
module.arctanh = np.arctanh
|
module.np_arctanh = np.arctanh
|
||||||
module.expm1 = np.expm1
|
module.np_expm1 = np.expm1
|
||||||
module.cbrt = np.cbrt
|
module.np_cbrt = np.cbrt
|
||||||
module.arctan2 = np.arctan2
|
module.np_arctan2 = np.arctan2
|
||||||
module.copysign = np.copysign
|
module.np_copysign = np.copysign
|
||||||
module.fmax = np.fmax
|
module.np_fmax = np.fmax
|
||||||
module.fmin = np.fmin
|
module.np_fmin = np.fmin
|
||||||
module.ldexp = np.ldexp
|
module.np_ldexp = np.ldexp
|
||||||
module.hypot = np.hypot
|
module.np_hypot = np.hypot
|
||||||
module.nextafter = np.nextafter
|
module.np_nextafter = np.nextafter
|
||||||
|
|
||||||
# SciPy Math Functions
|
# SciPy Math Functions
|
||||||
module.erf = scipy.special.erf
|
module.sp_spec_erf = special.erf
|
||||||
module.erfc = scipy.special.erfc
|
module.sp_spec_erfc = special.erfc
|
||||||
module.gamma = scipy.special.gamma
|
module.sp_spec_gamma = special.gamma
|
||||||
module.gammaln = scipy.special.gammaln
|
module.sp_spec_gammaln = special.gammaln
|
||||||
module.j0 = scipy.special.j0
|
module.sp_spec_j0 = special.j0
|
||||||
module.j1 = scipy.special.j1
|
module.sp_spec_j1 = special.j1
|
||||||
|
|
||||||
|
|
||||||
def file_import(filename, prefix="file_import_"):
|
def file_import(filename, prefix="file_import_"):
|
||||||
|
|
|
@ -36,48 +36,52 @@ def test_round64():
|
||||||
for x in [-1.5, -0.5, 0.5, 1.5]:
|
for x in [-1.5, -0.5, 0.5, 1.5]:
|
||||||
output_int64(round64(x))
|
output_int64(round64(x))
|
||||||
|
|
||||||
def test_isnan():
|
def test_np_round():
|
||||||
|
for x in [-1.5, -0.5, 0.5, 1.5, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
||||||
|
output_float64(np_round(x))
|
||||||
|
|
||||||
|
def test_np_isnan():
|
||||||
for x in [dbl_nan(), 0.0, dbl_inf()]:
|
for x in [dbl_nan(), 0.0, dbl_inf()]:
|
||||||
output_bool(isnan(x))
|
output_bool(np_isnan(x))
|
||||||
|
|
||||||
def test_isinf():
|
def test_np_isinf():
|
||||||
for x in [dbl_inf(), -dbl_inf(), 0.0, dbl_nan()]:
|
for x in [dbl_inf(), -dbl_inf(), 0.0, dbl_nan()]:
|
||||||
output_bool(isinf(x))
|
output_bool(np_isinf(x))
|
||||||
|
|
||||||
def test_sin():
|
def test_np_sin():
|
||||||
pi = dbl_pi()
|
pi = dbl_pi()
|
||||||
for x in [-pi, -pi / 2.0, -pi / 4.0, 0.0, pi / 4.0, pi / 2.0, pi, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
for x in [-pi, -pi / 2.0, -pi / 4.0, 0.0, pi / 4.0, pi / 2.0, pi, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
||||||
output_float64(sin(x))
|
output_float64(np_sin(x))
|
||||||
|
|
||||||
def test_cos():
|
def test_np_cos():
|
||||||
pi = dbl_pi()
|
pi = dbl_pi()
|
||||||
for x in [-pi, -pi / 2.0, -pi / 4.0, 0.0, pi / 4.0, pi / 2.0, pi, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
for x in [-pi, -pi / 2.0, -pi / 4.0, 0.0, pi / 4.0, pi / 2.0, pi, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
||||||
output_float64(cos(x))
|
output_float64(np_cos(x))
|
||||||
|
|
||||||
def test_exp():
|
def test_np_exp():
|
||||||
for x in [0.0, 1.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
for x in [0.0, 1.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
||||||
output_float64(exp(x))
|
output_float64(np_exp(x))
|
||||||
|
|
||||||
def test_exp2():
|
def test_np_exp2():
|
||||||
for x in [0.0, 1.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
for x in [0.0, 1.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
||||||
output_float64(exp2(x))
|
output_float64(np_exp2(x))
|
||||||
|
|
||||||
def test_log():
|
def test_np_log():
|
||||||
e = dbl_e()
|
e = dbl_e()
|
||||||
for x in [1.0, e, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
for x in [1.0, e, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
||||||
output_float64(log(x))
|
output_float64(np_log(x))
|
||||||
|
|
||||||
def test_log10():
|
def test_np_log10():
|
||||||
for x in [1.0, 10.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
for x in [1.0, 10.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
||||||
output_float64(log10(x))
|
output_float64(np_log10(x))
|
||||||
|
|
||||||
def test_log2():
|
def test_np_log2():
|
||||||
for x in [1.0, 2.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
for x in [1.0, 2.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
||||||
output_float64(log2(x))
|
output_float64(np_log2(x))
|
||||||
|
|
||||||
def test_fabs():
|
def test_np_fabs():
|
||||||
for x in [-1.0, 0.0, 1.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
for x in [-1.0, 0.0, 1.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
||||||
output_float64(fabs(x))
|
output_float64(np_fabs(x))
|
||||||
|
|
||||||
def test_floor():
|
def test_floor():
|
||||||
for x in [-1.5, -0.5, 0.5, 1.5]:
|
for x in [-1.5, -0.5, 0.5, 1.5]:
|
||||||
|
@ -87,6 +91,10 @@ def test_floor64():
|
||||||
for x in [-1.5, -0.5, 0.5, 1.5]:
|
for x in [-1.5, -0.5, 0.5, 1.5]:
|
||||||
output_int64(floor64(x))
|
output_int64(floor64(x))
|
||||||
|
|
||||||
|
def test_np_floor():
|
||||||
|
for x in [-1.5, -0.5, 0.5, 1.5, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
||||||
|
output_float64(np_floor(x))
|
||||||
|
|
||||||
def test_ceil():
|
def test_ceil():
|
||||||
for x in [-1.5, -0.5, 0.5, 1.5]:
|
for x in [-1.5, -0.5, 0.5, 1.5]:
|
||||||
output_int32(ceil(x))
|
output_int32(ceil(x))
|
||||||
|
@ -95,165 +103,172 @@ def test_ceil64():
|
||||||
for x in [-1.5, -0.5, 0.5, 1.5]:
|
for x in [-1.5, -0.5, 0.5, 1.5]:
|
||||||
output_int64(ceil64(x))
|
output_int64(ceil64(x))
|
||||||
|
|
||||||
def test_sqrt():
|
def test_np_ceil():
|
||||||
for x in [1.0, 2.0, 4.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
|
||||||
output_float64(sqrt(x))
|
|
||||||
|
|
||||||
def test_rint():
|
|
||||||
for x in [-1.5, -0.5, 0.5, 1.5, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
for x in [-1.5, -0.5, 0.5, 1.5, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
||||||
output_float64(rint(x))
|
output_float64(np_ceil(x))
|
||||||
|
|
||||||
def test_tan():
|
def test_np_sqrt():
|
||||||
|
for x in [1.0, 2.0, 4.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
||||||
|
output_float64(np_sqrt(x))
|
||||||
|
|
||||||
|
def test_np_rint():
|
||||||
|
for x in [-1.5, -0.5, 0.5, 1.5, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
||||||
|
output_float64(np_rint(x))
|
||||||
|
|
||||||
|
def test_np_tan():
|
||||||
pi = dbl_pi()
|
pi = dbl_pi()
|
||||||
for x in [-pi, -pi / 2.0, -pi / 4.0, 0.0, pi / 4.0, pi / 2.0, pi, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
for x in [-pi, -pi / 2.0, -pi / 4.0, 0.0, pi / 4.0, pi / 2.0, pi, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
||||||
output_float64(tan(x))
|
output_float64(np_tan(x))
|
||||||
|
|
||||||
def test_arcsin():
|
def test_np_arcsin():
|
||||||
for x in [-1.0, -0.5, 0.0, 0.5, 1.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
for x in [-1.0, -0.5, 0.0, 0.5, 1.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
||||||
output_float64(arcsin(x))
|
output_float64(np_arcsin(x))
|
||||||
|
|
||||||
def test_arccos():
|
def test_np_arccos():
|
||||||
for x in [-1.0, -0.5, 0.0, 0.5, 1.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
for x in [-1.0, -0.5, 0.0, 0.5, 1.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
||||||
output_float64(arccos(x))
|
output_float64(np_arccos(x))
|
||||||
|
|
||||||
def test_arctan():
|
def test_np_arctan():
|
||||||
for x in [-1.0, -0.5, 0.0, 0.5, 1.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
for x in [-1.0, -0.5, 0.0, 0.5, 1.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
||||||
output_float64(arctan(x))
|
output_float64(np_arctan(x))
|
||||||
|
|
||||||
def test_sinh():
|
def test_np_sinh():
|
||||||
for x in [-1.0, -0.5, 0.0, 0.5, 1.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
for x in [-1.0, -0.5, 0.0, 0.5, 1.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
||||||
output_float64(sinh(x))
|
output_float64(np_sinh(x))
|
||||||
|
|
||||||
def test_cosh():
|
def test_np_cosh():
|
||||||
for x in [-1.0, -0.5, 0.0, 0.5, 1.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
for x in [-1.0, -0.5, 0.0, 0.5, 1.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
||||||
output_float64(cosh(x))
|
output_float64(np_cosh(x))
|
||||||
|
|
||||||
def test_tanh():
|
def test_np_tanh():
|
||||||
for x in [-1.0, -0.5, 0.0, 0.5, 1.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
for x in [-1.0, -0.5, 0.0, 0.5, 1.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
||||||
output_float64(tanh(x))
|
output_float64(np_tanh(x))
|
||||||
|
|
||||||
def test_arcsinh():
|
def test_np_arcsinh():
|
||||||
for x in [-1.0, -0.5, 0.0, 0.5, 1.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
for x in [-1.0, -0.5, 0.0, 0.5, 1.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
||||||
output_float64(arcsinh(x))
|
output_float64(np_arcsinh(x))
|
||||||
|
|
||||||
def test_arccosh():
|
def test_np_arccosh():
|
||||||
for x in [-1.0, -0.5, 0.0, 0.5, 1.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
for x in [-1.0, -0.5, 0.0, 0.5, 1.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
||||||
output_float64(arccosh(x))
|
output_float64(np_arccosh(x))
|
||||||
|
|
||||||
def test_arctanh():
|
def test_np_arctanh():
|
||||||
for x in [-1.0, -0.5, 0.0, 0.5, 1.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
for x in [-1.0, -0.5, 0.0, 0.5, 1.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
||||||
output_float64(arctanh(x))
|
output_float64(np_arctanh(x))
|
||||||
|
|
||||||
def test_expm1():
|
def test_np_expm1():
|
||||||
for x in [0.0, 1.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
for x in [0.0, 1.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
||||||
output_float64(expm1(x))
|
output_float64(np_expm1(x))
|
||||||
|
|
||||||
def test_cbrt():
|
def test_np_cbrt():
|
||||||
for x in [1.0, 8.0, 27.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
for x in [1.0, 8.0, 27.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
||||||
output_float64(expm1(x))
|
output_float64(np_expm1(x))
|
||||||
|
|
||||||
def test_erf():
|
def test_sp_spec_erf():
|
||||||
for x in [-3.0, -2.0, -1.0, 0.0, 1.0, 2.0, 3.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
for x in [-3.0, -2.0, -1.0, 0.0, 1.0, 2.0, 3.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
||||||
output_float64(erf(x))
|
output_float64(sp_spec_erf(x))
|
||||||
|
|
||||||
def test_erfc():
|
def test_sp_spec_erfc():
|
||||||
for x in [-3.0, -2.0, -1.0, 0.0, 1.0, 2.0, 3.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
for x in [-3.0, -2.0, -1.0, 0.0, 1.0, 2.0, 3.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
||||||
output_float64(erfc(x))
|
output_float64(sp_spec_erfc(x))
|
||||||
|
|
||||||
def test_gamma():
|
def test_sp_spec_gamma():
|
||||||
for x in [-2.0, -1.5, -1.0, -0.5, 0.0, 0.5, 1.0, 1.5, 2.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
for x in [-2.0, -1.5, -1.0, -0.5, 0.0, 0.5, 1.0, 1.5, 2.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
||||||
output_float64(gamma(x))
|
output_float64(sp_spec_gamma(x))
|
||||||
|
|
||||||
def test_gammaln():
|
def test_sp_spec_gammaln():
|
||||||
for x in [-2.0, -1.5, -1.0, -0.5, 0.0, 0.5, 1.0, 1.5, 2.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
for x in [-2.0, -1.5, -1.0, -0.5, 0.0, 0.5, 1.0, 1.5, 2.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
||||||
output_float64(gammaln(x))
|
output_float64(sp_spec_gammaln(x))
|
||||||
|
|
||||||
def test_j0():
|
def test_sp_spec_j0():
|
||||||
for x in [-2.0, -1.5, -1.0, -0.5, 0.0, 0.5, 1.0, 1.5, 2.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
for x in [-2.0, -1.5, -1.0, -0.5, 0.0, 0.5, 1.0, 1.5, 2.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
||||||
output_float64(j0(x))
|
output_float64(sp_spec_j0(x))
|
||||||
|
|
||||||
def test_j1():
|
def test_sp_spec_j1():
|
||||||
for x in [-2.0, -1.5, -1.0, -0.5, 0.0, 0.5, 1.0, 1.5, 2.0]:
|
for x in [-2.0, -1.5, -1.0, -0.5, 0.0, 0.5, 1.0, 1.5, 2.0]:
|
||||||
output_float64(j1(x))
|
output_float64(sp_spec_j1(x))
|
||||||
|
|
||||||
def test_arctan2():
|
def test_np_arctan2():
|
||||||
for x1 in [-1.0, -0.5, 0.0, 0.5, 1.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
for x1 in [-1.0, -0.5, 0.0, 0.5, 1.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
||||||
for x2 in [-1.0, -0.5, 0.0, 0.5, 1.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
for x2 in [-1.0, -0.5, 0.0, 0.5, 1.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
||||||
output_float64(arctan2(x1, x2))
|
output_float64(np_arctan2(x1, x2))
|
||||||
|
|
||||||
def test_copysign():
|
def test_np_copysign():
|
||||||
for x1 in [-1.0, -0.5, 0.0, 0.5, 1.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
for x1 in [-1.0, -0.5, 0.0, 0.5, 1.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
||||||
for x2 in [-1.0, -0.5, 0.0, 0.5, 1.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
for x2 in [-1.0, -0.5, 0.0, 0.5, 1.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
||||||
output_float64(copysign(x1, x2))
|
output_float64(np_copysign(x1, x2))
|
||||||
|
|
||||||
def test_fmax():
|
def test_np_fmax():
|
||||||
for x1 in [-1.0, -0.5, 0.0, 0.5, 1.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
for x1 in [-1.0, -0.5, 0.0, 0.5, 1.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
||||||
for x2 in [-1.0, -0.5, 0.0, 0.5, 1.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
for x2 in [-1.0, -0.5, 0.0, 0.5, 1.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
||||||
output_float64(fmax(x1, x2))
|
output_float64(np_fmax(x1, x2))
|
||||||
|
|
||||||
def test_fmin():
|
def test_np_fmin():
|
||||||
for x1 in [-1.0, -0.5, 0.0, 0.5, 1.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
for x1 in [-1.0, -0.5, 0.0, 0.5, 1.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
||||||
for x2 in [-1.0, -0.5, 0.0, 0.5, 1.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
for x2 in [-1.0, -0.5, 0.0, 0.5, 1.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
||||||
output_float64(fmin(x1, x2))
|
output_float64(np_fmin(x1, x2))
|
||||||
|
|
||||||
def test_ldexp():
|
def test_np_ldexp():
|
||||||
for x1 in [-2.0, -1.5, -1.0, -0.5, 0.0, 0.5, 1.0, 1.5, 2.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
for x1 in [-2.0, -1.5, -1.0, -0.5, 0.0, 0.5, 1.0, 1.5, 2.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
||||||
for x2 in [-2, -1, 0, 1, 2]:
|
for x2 in [-2, -1, 0, 1, 2]:
|
||||||
output_float64(ldexp(x1, x2))
|
output_float64(np_ldexp(x1, x2))
|
||||||
|
|
||||||
def test_hypot():
|
def test_np_hypot():
|
||||||
for x1 in [-2.0, -1.5, -1.0, -0.5, 0.0, 0.5, 1.0, 1.5, 2.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
for x1 in [-2.0, -1.5, -1.0, -0.5, 0.0, 0.5, 1.0, 1.5, 2.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
||||||
for x2 in [-2.0, -1.5, -1.0, -0.5, 0.0, 0.5, 1.0, 1.5, 2.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
for x2 in [-2.0, -1.5, -1.0, -0.5, 0.0, 0.5, 1.0, 1.5, 2.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
||||||
output_float64(hypot(x1, x2))
|
output_float64(np_hypot(x1, x2))
|
||||||
|
|
||||||
def test_nextafter():
|
def test_np_nextafter():
|
||||||
for x1 in [-2.0, -1.5, -1.0, -0.5, 0.0, 0.5, 1.0, 1.5, 2.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
for x1 in [-2.0, -1.5, -1.0, -0.5, 0.0, 0.5, 1.0, 1.5, 2.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
||||||
for x2 in [-2.0, -1.5, -1.0, -0.5, 0.0, 0.5, 1.0, 1.5, 2.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
for x2 in [-2.0, -1.5, -1.0, -0.5, 0.0, 0.5, 1.0, 1.5, 2.0, dbl_inf(), -dbl_inf(), dbl_nan()]:
|
||||||
output_float64(nextafter(x1, x2))
|
output_float64(np_nextafter(x1, x2))
|
||||||
|
|
||||||
def run() -> int32:
|
def run() -> int32:
|
||||||
test_round()
|
test_round()
|
||||||
test_round64()
|
test_round64()
|
||||||
test_isnan()
|
test_np_round()
|
||||||
test_isinf()
|
test_np_isnan()
|
||||||
test_sin()
|
test_np_isinf()
|
||||||
test_cos()
|
test_np_sin()
|
||||||
test_exp()
|
test_np_cos()
|
||||||
test_exp2()
|
test_np_exp()
|
||||||
test_log()
|
test_np_exp2()
|
||||||
test_log10()
|
test_np_log()
|
||||||
test_log2()
|
test_np_log10()
|
||||||
test_fabs()
|
test_np_log2()
|
||||||
|
test_np_fabs()
|
||||||
test_floor()
|
test_floor()
|
||||||
test_floor64()
|
test_floor64()
|
||||||
|
test_np_floor()
|
||||||
test_ceil()
|
test_ceil()
|
||||||
test_ceil64()
|
test_ceil64()
|
||||||
test_sqrt()
|
test_np_ceil()
|
||||||
test_rint()
|
test_np_sqrt()
|
||||||
test_tan()
|
test_np_rint()
|
||||||
test_arcsin()
|
test_np_tan()
|
||||||
test_arccos()
|
test_np_arcsin()
|
||||||
test_arctan()
|
test_np_arccos()
|
||||||
test_sinh()
|
test_np_arctan()
|
||||||
test_cosh()
|
test_np_sinh()
|
||||||
test_tanh()
|
test_np_cosh()
|
||||||
test_arcsinh()
|
test_np_tanh()
|
||||||
test_arccosh()
|
test_np_arcsinh()
|
||||||
test_arctanh()
|
test_np_arccosh()
|
||||||
test_expm1()
|
test_np_arctanh()
|
||||||
test_cbrt()
|
test_np_expm1()
|
||||||
test_erf()
|
test_np_cbrt()
|
||||||
test_erfc()
|
test_sp_spec_erf()
|
||||||
test_gamma()
|
test_sp_spec_erfc()
|
||||||
test_gammaln()
|
test_sp_spec_gamma()
|
||||||
test_j0()
|
test_sp_spec_gammaln()
|
||||||
test_j1()
|
test_sp_spec_j0()
|
||||||
test_arctan2()
|
test_sp_spec_j1()
|
||||||
test_copysign()
|
test_np_arctan2()
|
||||||
test_fmax()
|
test_np_copysign()
|
||||||
test_fmin()
|
test_np_fmax()
|
||||||
test_ldexp()
|
test_np_fmin()
|
||||||
test_hypot()
|
test_np_ldexp()
|
||||||
test_nextafter()
|
test_np_hypot()
|
||||||
|
test_np_nextafter()
|
||||||
|
|
||||||
return 0
|
return 0
|
Loading…
Reference in New Issue