diff --git a/nac3core/src/codegen/builtin_fns.rs b/nac3core/src/codegen/builtin_fns.rs
index c87e2730..f271b457 100644
--- a/nac3core/src/codegen/builtin_fns.rs
+++ b/nac3core/src/codegen/builtin_fns.rs
@@ -4,7 +4,7 @@ use inkwell::{FloatPredicate, IntPredicate, OptimizationLevel};
use itertools::Itertools;
use crate::codegen::classes::{NDArrayValue, ProxyValue, UntypedArrayLikeAccessor};
-use crate::codegen::numpy::ndarray_elementwise_unaryop_impl;
+// use crate::codegen::numpy::ndarray_elementwise_unaryop_impl;
use crate::codegen::stmt::gen_for_callback_incrementing;
use crate::codegen::{extern_fns, irrt, llvm_intrinsics, numpy, CodeGenContext, CodeGenerator};
use crate::toplevel::helper::PrimDef;
@@ -66,18 +66,19 @@ pub fn call_int32<'ctx, G: CodeGenerator + ?Sized>(
BasicValueEnum::PointerValue(n)
if n_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id()) =>
{
- let (elem_ty, _) = unpack_ndarray_var_tys(&mut ctx.unifier, n_ty);
+ todo!()
+ // let (elem_ty, _) = unpack_ndarray_var_tys(&mut ctx.unifier, n_ty);
- let ndarray = ndarray_elementwise_unaryop_impl(
- generator,
- ctx,
- ctx.primitives.int32,
- None,
- NDArrayValue::from_ptr_val(n, llvm_usize, None),
- |generator, ctx, val| call_int32(generator, ctx, (elem_ty, val)),
- )?;
+ // let ndarray = ndarray_elementwise_unaryop_impl(
+ // generator,
+ // ctx,
+ // ctx.primitives.int32,
+ // None,
+ // NDArrayValue::from_ptr_val(n, llvm_usize, None),
+ // |generator, ctx, val| call_int32(generator, ctx, (elem_ty, val)),
+ // )?;
- ndarray.as_base_value().into()
+ // ndarray.as_base_value().into()
}
_ => unsupported_type(ctx, "int32", &[n_ty]),
@@ -128,18 +129,19 @@ pub fn call_int64<'ctx, G: CodeGenerator + ?Sized>(
BasicValueEnum::PointerValue(n)
if n_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id()) =>
{
- let (elem_ty, _) = unpack_ndarray_var_tys(&mut ctx.unifier, n_ty);
+ todo!();
+ // let (elem_ty, _) = unpack_ndarray_var_tys(&mut ctx.unifier, n_ty);
- let ndarray = ndarray_elementwise_unaryop_impl(
- generator,
- ctx,
- ctx.primitives.int64,
- None,
- NDArrayValue::from_ptr_val(n, llvm_usize, None),
- |generator, ctx, val| call_int64(generator, ctx, (elem_ty, val)),
- )?;
+ // let ndarray = ndarray_elementwise_unaryop_impl(
+ // generator,
+ // ctx,
+ // ctx.primitives.int64,
+ // None,
+ // NDArrayValue::from_ptr_val(n, llvm_usize, None),
+ // |generator, ctx, val| call_int64(generator, ctx, (elem_ty, val)),
+ // )?;
- ndarray.as_base_value().into()
+ // ndarray.as_base_value().into()
}
_ => unsupported_type(ctx, "int64", &[n_ty]),
@@ -206,18 +208,19 @@ pub fn call_uint32<'ctx, G: CodeGenerator + ?Sized>(
BasicValueEnum::PointerValue(n)
if n_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id()) =>
{
- let (elem_ty, _) = unpack_ndarray_var_tys(&mut ctx.unifier, n_ty);
+ todo!()
+ // let (elem_ty, _) = unpack_ndarray_var_tys(&mut ctx.unifier, n_ty);
- let ndarray = ndarray_elementwise_unaryop_impl(
- generator,
- ctx,
- ctx.primitives.uint32,
- None,
- NDArrayValue::from_ptr_val(n, llvm_usize, None),
- |generator, ctx, val| call_uint32(generator, ctx, (elem_ty, val)),
- )?;
+ // let ndarray = ndarray_elementwise_unaryop_impl(
+ // generator,
+ // ctx,
+ // ctx.primitives.uint32,
+ // None,
+ // NDArrayValue::from_ptr_val(n, llvm_usize, None),
+ // |generator, ctx, val| call_uint32(generator, ctx, (elem_ty, val)),
+ // )?;
- ndarray.as_base_value().into()
+ // ndarray.as_base_value().into()
}
_ => unsupported_type(ctx, "uint32", &[n_ty]),
@@ -273,18 +276,19 @@ pub fn call_uint64<'ctx, G: CodeGenerator + ?Sized>(
BasicValueEnum::PointerValue(n)
if n_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id()) =>
{
- let (elem_ty, _) = unpack_ndarray_var_tys(&mut ctx.unifier, n_ty);
+ todo!()
+ // let (elem_ty, _) = unpack_ndarray_var_tys(&mut ctx.unifier, n_ty);
- let ndarray = ndarray_elementwise_unaryop_impl(
- generator,
- ctx,
- ctx.primitives.uint64,
- None,
- NDArrayValue::from_ptr_val(n, llvm_usize, None),
- |generator, ctx, val| call_uint64(generator, ctx, (elem_ty, val)),
- )?;
+ // let ndarray = ndarray_elementwise_unaryop_impl(
+ // generator,
+ // ctx,
+ // ctx.primitives.uint64,
+ // None,
+ // NDArrayValue::from_ptr_val(n, llvm_usize, None),
+ // |generator, ctx, val| call_uint64(generator, ctx, (elem_ty, val)),
+ // )?;
- ndarray.as_base_value().into()
+ // ndarray.as_base_value().into()
}
_ => unsupported_type(ctx, "uint64", &[n_ty]),
@@ -339,18 +343,19 @@ pub fn call_float<'ctx, G: CodeGenerator + ?Sized>(
BasicValueEnum::PointerValue(n)
if n_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id()) =>
{
- let (elem_ty, _) = unpack_ndarray_var_tys(&mut ctx.unifier, n_ty);
+ todo!()
+ // let (elem_ty, _) = unpack_ndarray_var_tys(&mut ctx.unifier, n_ty);
- let ndarray = ndarray_elementwise_unaryop_impl(
- generator,
- ctx,
- ctx.primitives.float,
- None,
- NDArrayValue::from_ptr_val(n, llvm_usize, None),
- |generator, ctx, val| call_float(generator, ctx, (elem_ty, val)),
- )?;
+ // let ndarray = ndarray_elementwise_unaryop_impl(
+ // generator,
+ // ctx,
+ // ctx.primitives.float,
+ // None,
+ // NDArrayValue::from_ptr_val(n, llvm_usize, None),
+ // |generator, ctx, val| call_float(generator, ctx, (elem_ty, val)),
+ // )?;
- ndarray.as_base_value().into()
+ // ndarray.as_base_value().into()
}
_ => unsupported_type(ctx, "float", &[n_ty]),
@@ -385,18 +390,19 @@ pub fn call_round<'ctx, G: CodeGenerator + ?Sized>(
BasicValueEnum::PointerValue(n)
if n_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id()) =>
{
- let (elem_ty, _) = unpack_ndarray_var_tys(&mut ctx.unifier, n_ty);
+ todo!()
+ // let (elem_ty, _) = unpack_ndarray_var_tys(&mut ctx.unifier, n_ty);
- let ndarray = ndarray_elementwise_unaryop_impl(
- generator,
- ctx,
- ret_elem_ty,
- None,
- NDArrayValue::from_ptr_val(n, llvm_usize, None),
- |generator, ctx, val| call_round(generator, ctx, (elem_ty, val), ret_elem_ty),
- )?;
+ // let ndarray = ndarray_elementwise_unaryop_impl(
+ // generator,
+ // ctx,
+ // ret_elem_ty,
+ // None,
+ // NDArrayValue::from_ptr_val(n, llvm_usize, None),
+ // |generator, ctx, val| call_round(generator, ctx, (elem_ty, val), ret_elem_ty),
+ // )?;
- ndarray.as_base_value().into()
+ // ndarray.as_base_value().into()
}
_ => unsupported_type(ctx, FN_NAME, &[n_ty]),
@@ -425,18 +431,19 @@ pub fn call_numpy_round<'ctx, G: CodeGenerator + ?Sized>(
BasicValueEnum::PointerValue(n)
if n_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id()) =>
{
- let (elem_ty, _) = unpack_ndarray_var_tys(&mut ctx.unifier, n_ty);
+ todo!()
+ // let (elem_ty, _) = unpack_ndarray_var_tys(&mut ctx.unifier, n_ty);
- let ndarray = ndarray_elementwise_unaryop_impl(
- generator,
- ctx,
- ctx.primitives.float,
- None,
- NDArrayValue::from_ptr_val(n, llvm_usize, None),
- |generator, ctx, val| call_numpy_round(generator, ctx, (elem_ty, val)),
- )?;
+ // let ndarray = ndarray_elementwise_unaryop_impl(
+ // generator,
+ // ctx,
+ // ctx.primitives.float,
+ // None,
+ // NDArrayValue::from_ptr_val(n, llvm_usize, None),
+ // |generator, ctx, val| call_numpy_round(generator, ctx, (elem_ty, val)),
+ // )?;
- ndarray.as_base_value().into()
+ // ndarray.as_base_value().into()
}
_ => unsupported_type(ctx, FN_NAME, &[n_ty]),
@@ -490,22 +497,23 @@ pub fn call_bool<'ctx, G: CodeGenerator + ?Sized>(
BasicValueEnum::PointerValue(n)
if n_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id()) =>
{
- let (elem_ty, _) = unpack_ndarray_var_tys(&mut ctx.unifier, n_ty);
+ todo!()
+ // let (elem_ty, _) = unpack_ndarray_var_tys(&mut ctx.unifier, n_ty);
- let ndarray = ndarray_elementwise_unaryop_impl(
- generator,
- ctx,
- ctx.primitives.bool,
- None,
- NDArrayValue::from_ptr_val(n, llvm_usize, None),
- |generator, ctx, val| {
- let elem = call_bool(generator, ctx, (elem_ty, val))?;
+ // let ndarray = ndarray_elementwise_unaryop_impl(
+ // generator,
+ // ctx,
+ // ctx.primitives.bool,
+ // None,
+ // NDArrayValue::from_ptr_val(n, llvm_usize, None),
+ // |generator, ctx, val| {
+ // let elem = call_bool(generator, ctx, (elem_ty, val))?;
- Ok(generator.bool_to_i8(ctx, elem.into_int_value()).into())
- },
- )?;
+ // Ok(generator.bool_to_i8(ctx, elem.into_int_value()).into())
+ // },
+ // )?;
- ndarray.as_base_value().into()
+ // ndarray.as_base_value().into()
}
_ => unsupported_type(ctx, FN_NAME, &[n_ty]),
@@ -544,18 +552,19 @@ pub fn call_floor<'ctx, G: CodeGenerator + ?Sized>(
BasicValueEnum::PointerValue(n)
if n_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id()) =>
{
- let (elem_ty, _) = unpack_ndarray_var_tys(&mut ctx.unifier, n_ty);
+ todo!()
+ // let (elem_ty, _) = unpack_ndarray_var_tys(&mut ctx.unifier, n_ty);
- let ndarray = ndarray_elementwise_unaryop_impl(
- generator,
- ctx,
- ret_elem_ty,
- None,
- NDArrayValue::from_ptr_val(n, llvm_usize, None),
- |generator, ctx, val| call_floor(generator, ctx, (elem_ty, val), ret_elem_ty),
- )?;
+ // let ndarray = ndarray_elementwise_unaryop_impl(
+ // generator,
+ // ctx,
+ // ret_elem_ty,
+ // None,
+ // NDArrayValue::from_ptr_val(n, llvm_usize, None),
+ // |generator, ctx, val| call_floor(generator, ctx, (elem_ty, val), ret_elem_ty),
+ // )?;
- ndarray.as_base_value().into()
+ // ndarray.as_base_value().into()
}
_ => unsupported_type(ctx, FN_NAME, &[n_ty]),
@@ -594,18 +603,19 @@ pub fn call_ceil<'ctx, G: CodeGenerator + ?Sized>(
BasicValueEnum::PointerValue(n)
if n_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id()) =>
{
- let (elem_ty, _) = unpack_ndarray_var_tys(&mut ctx.unifier, n_ty);
+ todo!()
+ // let (elem_ty, _) = unpack_ndarray_var_tys(&mut ctx.unifier, n_ty);
- let ndarray = ndarray_elementwise_unaryop_impl(
- generator,
- ctx,
- ret_elem_ty,
- None,
- NDArrayValue::from_ptr_val(n, llvm_usize, None),
- |generator, ctx, val| call_floor(generator, ctx, (elem_ty, val), ret_elem_ty),
- )?;
+ // let ndarray = ndarray_elementwise_unaryop_impl(
+ // generator,
+ // ctx,
+ // ret_elem_ty,
+ // None,
+ // NDArrayValue::from_ptr_val(n, llvm_usize, None),
+ // |generator, ctx, val| call_floor(generator, ctx, (elem_ty, val), ret_elem_ty),
+ // )?;
- ndarray.as_base_value().into()
+ // ndarray.as_base_value().into()
}
_ => unsupported_type(ctx, FN_NAME, &[n_ty]),
@@ -786,42 +796,44 @@ pub fn call_numpy_minimum<'ctx, G: CodeGenerator + ?Sized>(
ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id())
}) =>
{
- let is_ndarray1 =
- x1_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id());
- let is_ndarray2 =
- x2_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id());
+ todo!();
- let dtype = if is_ndarray1 && is_ndarray2 {
- let (ndarray_dtype1, _) = unpack_ndarray_var_tys(&mut ctx.unifier, x1_ty);
- let (ndarray_dtype2, _) = unpack_ndarray_var_tys(&mut ctx.unifier, x2_ty);
+ // let is_ndarray1 =
+ // x1_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id());
+ // let is_ndarray2 =
+ // x2_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id());
- debug_assert!(ctx.unifier.unioned(ndarray_dtype1, ndarray_dtype2));
+ // let dtype = if is_ndarray1 && is_ndarray2 {
+ // let (ndarray_dtype1, _) = unpack_ndarray_var_tys(&mut ctx.unifier, x1_ty);
+ // let (ndarray_dtype2, _) = unpack_ndarray_var_tys(&mut ctx.unifier, x2_ty);
- ndarray_dtype1
- } else if is_ndarray1 {
- unpack_ndarray_var_tys(&mut ctx.unifier, x1_ty).0
- } else if is_ndarray2 {
- unpack_ndarray_var_tys(&mut ctx.unifier, x2_ty).0
- } else {
- unreachable!()
- };
+ // debug_assert!(ctx.unifier.unioned(ndarray_dtype1, ndarray_dtype2));
- let x1_scalar_ty = if is_ndarray1 { dtype } else { x1_ty };
- let x2_scalar_ty = if is_ndarray2 { dtype } else { x2_ty };
+ // ndarray_dtype1
+ // } else if is_ndarray1 {
+ // unpack_ndarray_var_tys(&mut ctx.unifier, x1_ty).0
+ // } else if is_ndarray2 {
+ // unpack_ndarray_var_tys(&mut ctx.unifier, x2_ty).0
+ // } else {
+ // unreachable!()
+ // };
- numpy::ndarray_elementwise_binop_impl(
- generator,
- ctx,
- dtype,
- None,
- (x1, !is_ndarray1),
- (x2, !is_ndarray2),
- |generator, ctx, (lhs, rhs)| {
- call_numpy_minimum(generator, ctx, (x1_scalar_ty, lhs), (x2_scalar_ty, rhs))
- },
- )?
- .as_base_value()
- .into()
+ // let x1_scalar_ty = if is_ndarray1 { dtype } else { x1_ty };
+ // let x2_scalar_ty = if is_ndarray2 { dtype } else { x2_ty };
+
+ // numpy::ndarray_elementwise_binop_impl(
+ // generator,
+ // ctx,
+ // dtype,
+ // None,
+ // (x1, !is_ndarray1),
+ // (x2, !is_ndarray2),
+ // |generator, ctx, (lhs, rhs)| {
+ // call_numpy_minimum(generator, ctx, (x1_scalar_ty, lhs), (x2_scalar_ty, rhs))
+ // },
+ // )?
+ // .as_base_value()
+ // .into()
}
_ => unsupported_type(ctx, FN_NAME, &[x1_ty, x2_ty]),
@@ -1002,42 +1014,44 @@ pub fn call_numpy_maximum<'ctx, G: CodeGenerator + ?Sized>(
ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id())
}) =>
{
- let is_ndarray1 =
- x1_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id());
- let is_ndarray2 =
- x2_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id());
+ todo!();
- let dtype = if is_ndarray1 && is_ndarray2 {
- let (ndarray_dtype1, _) = unpack_ndarray_var_tys(&mut ctx.unifier, x1_ty);
- let (ndarray_dtype2, _) = unpack_ndarray_var_tys(&mut ctx.unifier, x2_ty);
+ // let is_ndarray1 =
+ // x1_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id());
+ // let is_ndarray2 =
+ // x2_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id());
- debug_assert!(ctx.unifier.unioned(ndarray_dtype1, ndarray_dtype2));
+ // let dtype = if is_ndarray1 && is_ndarray2 {
+ // let (ndarray_dtype1, _) = unpack_ndarray_var_tys(&mut ctx.unifier, x1_ty);
+ // let (ndarray_dtype2, _) = unpack_ndarray_var_tys(&mut ctx.unifier, x2_ty);
- ndarray_dtype1
- } else if is_ndarray1 {
- unpack_ndarray_var_tys(&mut ctx.unifier, x1_ty).0
- } else if is_ndarray2 {
- unpack_ndarray_var_tys(&mut ctx.unifier, x2_ty).0
- } else {
- unreachable!()
- };
+ // debug_assert!(ctx.unifier.unioned(ndarray_dtype1, ndarray_dtype2));
- let x1_scalar_ty = if is_ndarray1 { dtype } else { x1_ty };
- let x2_scalar_ty = if is_ndarray2 { dtype } else { x2_ty };
+ // ndarray_dtype1
+ // } else if is_ndarray1 {
+ // unpack_ndarray_var_tys(&mut ctx.unifier, x1_ty).0
+ // } else if is_ndarray2 {
+ // unpack_ndarray_var_tys(&mut ctx.unifier, x2_ty).0
+ // } else {
+ // unreachable!()
+ // };
- numpy::ndarray_elementwise_binop_impl(
- generator,
- ctx,
- dtype,
- None,
- (x1, !is_ndarray1),
- (x2, !is_ndarray2),
- |generator, ctx, (lhs, rhs)| {
- call_numpy_maximum(generator, ctx, (x1_scalar_ty, lhs), (x2_scalar_ty, rhs))
- },
- )?
- .as_base_value()
- .into()
+ // let x1_scalar_ty = if is_ndarray1 { dtype } else { x1_ty };
+ // let x2_scalar_ty = if is_ndarray2 { dtype } else { x2_ty };
+
+ // numpy::ndarray_elementwise_binop_impl(
+ // generator,
+ // ctx,
+ // dtype,
+ // None,
+ // (x1, !is_ndarray1),
+ // (x2, !is_ndarray2),
+ // |generator, ctx, (lhs, rhs)| {
+ // call_numpy_maximum(generator, ctx, (x1_scalar_ty, lhs), (x2_scalar_ty, rhs))
+ // },
+ // )?
+ // .as_base_value()
+ // .into()
}
_ => unsupported_type(ctx, FN_NAME, &[x1_ty, x2_ty]),
@@ -1074,28 +1088,30 @@ where
BasicValueEnum::PointerValue(x)
if arg_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id()) =>
{
- let llvm_usize = generator.get_size_type(ctx.ctx);
- let (arg_elem_ty, _) = unpack_ndarray_var_tys(&mut ctx.unifier, arg_ty);
- let ret_elem_ty = get_ret_elem_type(ctx, arg_elem_ty);
+ todo!();
- let ndarray = ndarray_elementwise_unaryop_impl(
- generator,
- ctx,
- ret_elem_ty,
- None,
- NDArrayValue::from_ptr_val(x, llvm_usize, None),
- |generator, ctx, elem_val| {
- helper_call_numpy_unary_elementwise(
- generator,
- ctx,
- (arg_elem_ty, elem_val),
- fn_name,
- get_ret_elem_type,
- on_scalar,
- )
- },
- )?;
- ndarray.as_base_value().into()
+ // let llvm_usize = generator.get_size_type(ctx.ctx);
+ // let (arg_elem_ty, _) = unpack_ndarray_var_tys(&mut ctx.unifier, arg_ty);
+ // let ret_elem_ty = get_ret_elem_type(ctx, arg_elem_ty);
+
+ // let ndarray = ndarray_elementwise_unaryop_impl(
+ // generator,
+ // ctx,
+ // ret_elem_ty,
+ // None,
+ // NDArrayValue::from_ptr_val(x, llvm_usize, None),
+ // |generator, ctx, elem_val| {
+ // helper_call_numpy_unary_elementwise(
+ // generator,
+ // ctx,
+ // (arg_elem_ty, elem_val),
+ // fn_name,
+ // get_ret_elem_type,
+ // on_scalar,
+ // )
+ // },
+ // )?;
+ // ndarray.as_base_value().into()
}
_ => on_scalar(generator, ctx, arg_ty, arg_val)
@@ -1442,42 +1458,44 @@ pub fn call_numpy_arctan2<'ctx, G: CodeGenerator + ?Sized>(
ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id())
}) =>
{
- let is_ndarray1 =
- x1_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id());
- let is_ndarray2 =
- x2_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id());
+ todo!();
- let dtype = if is_ndarray1 && is_ndarray2 {
- let (ndarray_dtype1, _) = unpack_ndarray_var_tys(&mut ctx.unifier, x1_ty);
- let (ndarray_dtype2, _) = unpack_ndarray_var_tys(&mut ctx.unifier, x2_ty);
+ // let is_ndarray1 =
+ // x1_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id());
+ // let is_ndarray2 =
+ // x2_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id());
- debug_assert!(ctx.unifier.unioned(ndarray_dtype1, ndarray_dtype2));
+ // let dtype = if is_ndarray1 && is_ndarray2 {
+ // let (ndarray_dtype1, _) = unpack_ndarray_var_tys(&mut ctx.unifier, x1_ty);
+ // let (ndarray_dtype2, _) = unpack_ndarray_var_tys(&mut ctx.unifier, x2_ty);
- ndarray_dtype1
- } else if is_ndarray1 {
- unpack_ndarray_var_tys(&mut ctx.unifier, x1_ty).0
- } else if is_ndarray2 {
- unpack_ndarray_var_tys(&mut ctx.unifier, x2_ty).0
- } else {
- unreachable!()
- };
+ // debug_assert!(ctx.unifier.unioned(ndarray_dtype1, ndarray_dtype2));
- let x1_scalar_ty = if is_ndarray1 { dtype } else { x1_ty };
- let x2_scalar_ty = if is_ndarray2 { dtype } else { x2_ty };
+ // ndarray_dtype1
+ // } else if is_ndarray1 {
+ // unpack_ndarray_var_tys(&mut ctx.unifier, x1_ty).0
+ // } else if is_ndarray2 {
+ // unpack_ndarray_var_tys(&mut ctx.unifier, x2_ty).0
+ // } else {
+ // unreachable!()
+ // };
- numpy::ndarray_elementwise_binop_impl(
- generator,
- ctx,
- dtype,
- None,
- (x1, !is_ndarray1),
- (x2, !is_ndarray2),
- |generator, ctx, (lhs, rhs)| {
- call_numpy_arctan2(generator, ctx, (x1_scalar_ty, lhs), (x2_scalar_ty, rhs))
- },
- )?
- .as_base_value()
- .into()
+ // let x1_scalar_ty = if is_ndarray1 { dtype } else { x1_ty };
+ // let x2_scalar_ty = if is_ndarray2 { dtype } else { x2_ty };
+
+ // numpy::ndarray_elementwise_binop_impl(
+ // generator,
+ // ctx,
+ // dtype,
+ // None,
+ // (x1, !is_ndarray1),
+ // (x2, !is_ndarray2),
+ // |generator, ctx, (lhs, rhs)| {
+ // call_numpy_arctan2(generator, ctx, (x1_scalar_ty, lhs), (x2_scalar_ty, rhs))
+ // },
+ // )?
+ // .as_base_value()
+ // .into()
}
_ => unsupported_type(ctx, FN_NAME, &[x1_ty, x2_ty]),
@@ -1509,42 +1527,43 @@ pub fn call_numpy_copysign<'ctx, G: CodeGenerator + ?Sized>(
ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id())
}) =>
{
- let is_ndarray1 =
- x1_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id());
- let is_ndarray2 =
- x2_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id());
+ todo!()
+ // let is_ndarray1 =
+ // x1_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id());
+ // let is_ndarray2 =
+ // x2_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id());
- let dtype = if is_ndarray1 && is_ndarray2 {
- let (ndarray_dtype1, _) = unpack_ndarray_var_tys(&mut ctx.unifier, x1_ty);
- let (ndarray_dtype2, _) = unpack_ndarray_var_tys(&mut ctx.unifier, x2_ty);
+ // let dtype = if is_ndarray1 && is_ndarray2 {
+ // let (ndarray_dtype1, _) = unpack_ndarray_var_tys(&mut ctx.unifier, x1_ty);
+ // let (ndarray_dtype2, _) = unpack_ndarray_var_tys(&mut ctx.unifier, x2_ty);
- debug_assert!(ctx.unifier.unioned(ndarray_dtype1, ndarray_dtype2));
+ // debug_assert!(ctx.unifier.unioned(ndarray_dtype1, ndarray_dtype2));
- ndarray_dtype1
- } else if is_ndarray1 {
- unpack_ndarray_var_tys(&mut ctx.unifier, x1_ty).0
- } else if is_ndarray2 {
- unpack_ndarray_var_tys(&mut ctx.unifier, x2_ty).0
- } else {
- unreachable!()
- };
+ // ndarray_dtype1
+ // } else if is_ndarray1 {
+ // unpack_ndarray_var_tys(&mut ctx.unifier, x1_ty).0
+ // } else if is_ndarray2 {
+ // unpack_ndarray_var_tys(&mut ctx.unifier, x2_ty).0
+ // } else {
+ // unreachable!()
+ // };
- let x1_scalar_ty = if is_ndarray1 { dtype } else { x1_ty };
- let x2_scalar_ty = if is_ndarray2 { dtype } else { x2_ty };
+ // let x1_scalar_ty = if is_ndarray1 { dtype } else { x1_ty };
+ // let x2_scalar_ty = if is_ndarray2 { dtype } else { x2_ty };
- numpy::ndarray_elementwise_binop_impl(
- generator,
- ctx,
- dtype,
- None,
- (x1, !is_ndarray1),
- (x2, !is_ndarray2),
- |generator, ctx, (lhs, rhs)| {
- call_numpy_copysign(generator, ctx, (x1_scalar_ty, lhs), (x2_scalar_ty, rhs))
- },
- )?
- .as_base_value()
- .into()
+ // numpy::ndarray_elementwise_binop_impl(
+ // generator,
+ // ctx,
+ // dtype,
+ // None,
+ // (x1, !is_ndarray1),
+ // (x2, !is_ndarray2),
+ // |generator, ctx, (lhs, rhs)| {
+ // call_numpy_copysign(generator, ctx, (x1_scalar_ty, lhs), (x2_scalar_ty, rhs))
+ // },
+ // )?
+ // .as_base_value()
+ // .into()
}
_ => unsupported_type(ctx, FN_NAME, &[x1_ty, x2_ty]),
@@ -1576,42 +1595,43 @@ pub fn call_numpy_fmax<'ctx, G: CodeGenerator + ?Sized>(
ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id())
}) =>
{
- let is_ndarray1 =
- x1_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id());
- let is_ndarray2 =
- x2_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id());
+ todo!()
+ // let is_ndarray1 =
+ // x1_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id());
+ // let is_ndarray2 =
+ // x2_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id());
- let dtype = if is_ndarray1 && is_ndarray2 {
- let (ndarray_dtype1, _) = unpack_ndarray_var_tys(&mut ctx.unifier, x1_ty);
- let (ndarray_dtype2, _) = unpack_ndarray_var_tys(&mut ctx.unifier, x2_ty);
+ // let dtype = if is_ndarray1 && is_ndarray2 {
+ // let (ndarray_dtype1, _) = unpack_ndarray_var_tys(&mut ctx.unifier, x1_ty);
+ // let (ndarray_dtype2, _) = unpack_ndarray_var_tys(&mut ctx.unifier, x2_ty);
- debug_assert!(ctx.unifier.unioned(ndarray_dtype1, ndarray_dtype2));
+ // debug_assert!(ctx.unifier.unioned(ndarray_dtype1, ndarray_dtype2));
- ndarray_dtype1
- } else if is_ndarray1 {
- unpack_ndarray_var_tys(&mut ctx.unifier, x1_ty).0
- } else if is_ndarray2 {
- unpack_ndarray_var_tys(&mut ctx.unifier, x2_ty).0
- } else {
- unreachable!()
- };
+ // ndarray_dtype1
+ // } else if is_ndarray1 {
+ // unpack_ndarray_var_tys(&mut ctx.unifier, x1_ty).0
+ // } else if is_ndarray2 {
+ // unpack_ndarray_var_tys(&mut ctx.unifier, x2_ty).0
+ // } else {
+ // unreachable!()
+ // };
- let x1_scalar_ty = if is_ndarray1 { dtype } else { x1_ty };
- let x2_scalar_ty = if is_ndarray2 { dtype } else { x2_ty };
+ // let x1_scalar_ty = if is_ndarray1 { dtype } else { x1_ty };
+ // let x2_scalar_ty = if is_ndarray2 { dtype } else { x2_ty };
- numpy::ndarray_elementwise_binop_impl(
- generator,
- ctx,
- dtype,
- None,
- (x1, !is_ndarray1),
- (x2, !is_ndarray2),
- |generator, ctx, (lhs, rhs)| {
- call_numpy_fmax(generator, ctx, (x1_scalar_ty, lhs), (x2_scalar_ty, rhs))
- },
- )?
- .as_base_value()
- .into()
+ // numpy::ndarray_elementwise_binop_impl(
+ // generator,
+ // ctx,
+ // dtype,
+ // None,
+ // (x1, !is_ndarray1),
+ // (x2, !is_ndarray2),
+ // |generator, ctx, (lhs, rhs)| {
+ // call_numpy_fmax(generator, ctx, (x1_scalar_ty, lhs), (x2_scalar_ty, rhs))
+ // },
+ // )?
+ // .as_base_value()
+ // .into()
}
_ => unsupported_type(ctx, FN_NAME, &[x1_ty, x2_ty]),
@@ -1643,42 +1663,43 @@ pub fn call_numpy_fmin<'ctx, G: CodeGenerator + ?Sized>(
ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id())
}) =>
{
- let is_ndarray1 =
- x1_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id());
- let is_ndarray2 =
- x2_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id());
+ todo!()
+ // let is_ndarray1 =
+ // x1_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id());
+ // let is_ndarray2 =
+ // x2_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id());
- let dtype = if is_ndarray1 && is_ndarray2 {
- let (ndarray_dtype1, _) = unpack_ndarray_var_tys(&mut ctx.unifier, x1_ty);
- let (ndarray_dtype2, _) = unpack_ndarray_var_tys(&mut ctx.unifier, x2_ty);
+ // let dtype = if is_ndarray1 && is_ndarray2 {
+ // let (ndarray_dtype1, _) = unpack_ndarray_var_tys(&mut ctx.unifier, x1_ty);
+ // let (ndarray_dtype2, _) = unpack_ndarray_var_tys(&mut ctx.unifier, x2_ty);
- debug_assert!(ctx.unifier.unioned(ndarray_dtype1, ndarray_dtype2));
+ // debug_assert!(ctx.unifier.unioned(ndarray_dtype1, ndarray_dtype2));
- ndarray_dtype1
- } else if is_ndarray1 {
- unpack_ndarray_var_tys(&mut ctx.unifier, x1_ty).0
- } else if is_ndarray2 {
- unpack_ndarray_var_tys(&mut ctx.unifier, x2_ty).0
- } else {
- unreachable!()
- };
+ // ndarray_dtype1
+ // } else if is_ndarray1 {
+ // unpack_ndarray_var_tys(&mut ctx.unifier, x1_ty).0
+ // } else if is_ndarray2 {
+ // unpack_ndarray_var_tys(&mut ctx.unifier, x2_ty).0
+ // } else {
+ // unreachable!()
+ // };
- let x1_scalar_ty = if is_ndarray1 { dtype } else { x1_ty };
- let x2_scalar_ty = if is_ndarray2 { dtype } else { x2_ty };
+ // let x1_scalar_ty = if is_ndarray1 { dtype } else { x1_ty };
+ // let x2_scalar_ty = if is_ndarray2 { dtype } else { x2_ty };
- numpy::ndarray_elementwise_binop_impl(
- generator,
- ctx,
- dtype,
- None,
- (x1, !is_ndarray1),
- (x2, !is_ndarray2),
- |generator, ctx, (lhs, rhs)| {
- call_numpy_fmin(generator, ctx, (x1_scalar_ty, lhs), (x2_scalar_ty, rhs))
- },
- )?
- .as_base_value()
- .into()
+ // numpy::ndarray_elementwise_binop_impl(
+ // generator,
+ // ctx,
+ // dtype,
+ // None,
+ // (x1, !is_ndarray1),
+ // (x2, !is_ndarray2),
+ // |generator, ctx, (lhs, rhs)| {
+ // call_numpy_fmin(generator, ctx, (x1_scalar_ty, lhs), (x2_scalar_ty, rhs))
+ // },
+ // )?
+ // .as_base_value()
+ // .into()
}
_ => unsupported_type(ctx, FN_NAME, &[x1_ty, x2_ty]),
@@ -1710,31 +1731,32 @@ pub fn call_numpy_ldexp<'ctx, G: CodeGenerator + ?Sized>(
ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id())
}) =>
{
- let is_ndarray1 =
- x1_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id());
- let is_ndarray2 =
- x2_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id());
+ todo!()
+ // let is_ndarray1 =
+ // x1_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id());
+ // let is_ndarray2 =
+ // x2_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id());
- let dtype =
- if is_ndarray1 { unpack_ndarray_var_tys(&mut ctx.unifier, x1_ty).0 } else { x1_ty };
+ // let dtype =
+ // if is_ndarray1 { unpack_ndarray_var_tys(&mut ctx.unifier, x1_ty).0 } else { x1_ty };
- let x1_scalar_ty = dtype;
- let x2_scalar_ty =
- if is_ndarray2 { unpack_ndarray_var_tys(&mut ctx.unifier, x2_ty).0 } else { x2_ty };
+ // let x1_scalar_ty = dtype;
+ // let x2_scalar_ty =
+ // if is_ndarray2 { unpack_ndarray_var_tys(&mut ctx.unifier, x2_ty).0 } else { x2_ty };
- numpy::ndarray_elementwise_binop_impl(
- generator,
- ctx,
- dtype,
- None,
- (x1, !is_ndarray1),
- (x2, !is_ndarray2),
- |generator, ctx, (lhs, rhs)| {
- call_numpy_ldexp(generator, ctx, (x1_scalar_ty, lhs), (x2_scalar_ty, rhs))
- },
- )?
- .as_base_value()
- .into()
+ // numpy::ndarray_elementwise_binop_impl(
+ // generator,
+ // ctx,
+ // dtype,
+ // None,
+ // (x1, !is_ndarray1),
+ // (x2, !is_ndarray2),
+ // |generator, ctx, (lhs, rhs)| {
+ // call_numpy_ldexp(generator, ctx, (x1_scalar_ty, lhs), (x2_scalar_ty, rhs))
+ // },
+ // )?
+ // .as_base_value()
+ // .into()
}
_ => unsupported_type(ctx, FN_NAME, &[x1_ty, x2_ty]),
@@ -1766,42 +1788,43 @@ pub fn call_numpy_hypot<'ctx, G: CodeGenerator + ?Sized>(
ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id())
}) =>
{
- let is_ndarray1 =
- x1_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id());
- let is_ndarray2 =
- x2_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id());
+ todo!()
+ // let is_ndarray1 =
+ // x1_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id());
+ // let is_ndarray2 =
+ // x2_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id());
- let dtype = if is_ndarray1 && is_ndarray2 {
- let (ndarray_dtype1, _) = unpack_ndarray_var_tys(&mut ctx.unifier, x1_ty);
- let (ndarray_dtype2, _) = unpack_ndarray_var_tys(&mut ctx.unifier, x2_ty);
+ // let dtype = if is_ndarray1 && is_ndarray2 {
+ // let (ndarray_dtype1, _) = unpack_ndarray_var_tys(&mut ctx.unifier, x1_ty);
+ // let (ndarray_dtype2, _) = unpack_ndarray_var_tys(&mut ctx.unifier, x2_ty);
- debug_assert!(ctx.unifier.unioned(ndarray_dtype1, ndarray_dtype2));
+ // debug_assert!(ctx.unifier.unioned(ndarray_dtype1, ndarray_dtype2));
- ndarray_dtype1
- } else if is_ndarray1 {
- unpack_ndarray_var_tys(&mut ctx.unifier, x1_ty).0
- } else if is_ndarray2 {
- unpack_ndarray_var_tys(&mut ctx.unifier, x2_ty).0
- } else {
- unreachable!()
- };
+ // ndarray_dtype1
+ // } else if is_ndarray1 {
+ // unpack_ndarray_var_tys(&mut ctx.unifier, x1_ty).0
+ // } else if is_ndarray2 {
+ // unpack_ndarray_var_tys(&mut ctx.unifier, x2_ty).0
+ // } else {
+ // unreachable!()
+ // };
- let x1_scalar_ty = if is_ndarray1 { dtype } else { x1_ty };
- let x2_scalar_ty = if is_ndarray2 { dtype } else { x2_ty };
+ // let x1_scalar_ty = if is_ndarray1 { dtype } else { x1_ty };
+ // let x2_scalar_ty = if is_ndarray2 { dtype } else { x2_ty };
- numpy::ndarray_elementwise_binop_impl(
- generator,
- ctx,
- dtype,
- None,
- (x1, !is_ndarray1),
- (x2, !is_ndarray2),
- |generator, ctx, (lhs, rhs)| {
- call_numpy_hypot(generator, ctx, (x1_scalar_ty, lhs), (x2_scalar_ty, rhs))
- },
- )?
- .as_base_value()
- .into()
+ // numpy::ndarray_elementwise_binop_impl(
+ // generator,
+ // ctx,
+ // dtype,
+ // None,
+ // (x1, !is_ndarray1),
+ // (x2, !is_ndarray2),
+ // |generator, ctx, (lhs, rhs)| {
+ // call_numpy_hypot(generator, ctx, (x1_scalar_ty, lhs), (x2_scalar_ty, rhs))
+ // },
+ // )?
+ // .as_base_value()
+ // .into()
}
_ => unsupported_type(ctx, FN_NAME, &[x1_ty, x2_ty]),
@@ -1833,42 +1856,43 @@ pub fn call_numpy_nextafter<'ctx, G: CodeGenerator + ?Sized>(
ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id())
}) =>
{
- let is_ndarray1 =
- x1_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id());
- let is_ndarray2 =
- x2_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id());
+ todo!()
+ // let is_ndarray1 =
+ // x1_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id());
+ // let is_ndarray2 =
+ // x2_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id());
- let dtype = if is_ndarray1 && is_ndarray2 {
- let (ndarray_dtype1, _) = unpack_ndarray_var_tys(&mut ctx.unifier, x1_ty);
- let (ndarray_dtype2, _) = unpack_ndarray_var_tys(&mut ctx.unifier, x2_ty);
+ // let dtype = if is_ndarray1 && is_ndarray2 {
+ // let (ndarray_dtype1, _) = unpack_ndarray_var_tys(&mut ctx.unifier, x1_ty);
+ // let (ndarray_dtype2, _) = unpack_ndarray_var_tys(&mut ctx.unifier, x2_ty);
- debug_assert!(ctx.unifier.unioned(ndarray_dtype1, ndarray_dtype2));
+ // debug_assert!(ctx.unifier.unioned(ndarray_dtype1, ndarray_dtype2));
- ndarray_dtype1
- } else if is_ndarray1 {
- unpack_ndarray_var_tys(&mut ctx.unifier, x1_ty).0
- } else if is_ndarray2 {
- unpack_ndarray_var_tys(&mut ctx.unifier, x2_ty).0
- } else {
- unreachable!()
- };
+ // ndarray_dtype1
+ // } else if is_ndarray1 {
+ // unpack_ndarray_var_tys(&mut ctx.unifier, x1_ty).0
+ // } else if is_ndarray2 {
+ // unpack_ndarray_var_tys(&mut ctx.unifier, x2_ty).0
+ // } else {
+ // unreachable!()
+ // };
- let x1_scalar_ty = if is_ndarray1 { dtype } else { x1_ty };
- let x2_scalar_ty = if is_ndarray2 { dtype } else { x2_ty };
+ // let x1_scalar_ty = if is_ndarray1 { dtype } else { x1_ty };
+ // let x2_scalar_ty = if is_ndarray2 { dtype } else { x2_ty };
- numpy::ndarray_elementwise_binop_impl(
- generator,
- ctx,
- dtype,
- None,
- (x1, !is_ndarray1),
- (x2, !is_ndarray2),
- |generator, ctx, (lhs, rhs)| {
- call_numpy_nextafter(generator, ctx, (x1_scalar_ty, lhs), (x2_scalar_ty, rhs))
- },
- )?
- .as_base_value()
- .into()
+ // numpy::ndarray_elementwise_binop_impl(
+ // generator,
+ // ctx,
+ // dtype,
+ // None,
+ // (x1, !is_ndarray1),
+ // (x2, !is_ndarray2),
+ // |generator, ctx, (lhs, rhs)| {
+ // call_numpy_nextafter(generator, ctx, (x1_scalar_ty, lhs), (x2_scalar_ty, rhs))
+ // },
+ // )?
+ // .as_base_value()
+ // .into()
}
_ => unsupported_type(ctx, FN_NAME, &[x1_ty, x2_ty]),
diff --git a/nac3core/src/codegen/expr.rs b/nac3core/src/codegen/expr.rs
index 8c5429a4..4785844f 100644
--- a/nac3core/src/codegen/expr.rs
+++ b/nac3core/src/codegen/expr.rs
@@ -1362,100 +1362,101 @@ pub fn gen_binop_expr_with_values<'ctx, G: CodeGenerator>(
} else if ty1.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id())
|| ty2.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id())
{
- let llvm_usize = generator.get_size_type(ctx.ctx);
+ todo!()
+ // let llvm_usize = generator.get_size_type(ctx.ctx);
- let is_ndarray1 = ty1.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id());
- let is_ndarray2 = ty2.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id());
+ // let is_ndarray1 = ty1.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id());
+ // let is_ndarray2 = ty2.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id());
- if is_ndarray1 && is_ndarray2 {
- let (ndarray_dtype1, _) = unpack_ndarray_var_tys(&mut ctx.unifier, ty1);
- let (ndarray_dtype2, _) = unpack_ndarray_var_tys(&mut ctx.unifier, ty2);
+ // if is_ndarray1 && is_ndarray2 {
+ // let (ndarray_dtype1, _) = unpack_ndarray_var_tys(&mut ctx.unifier, ty1);
+ // let (ndarray_dtype2, _) = unpack_ndarray_var_tys(&mut ctx.unifier, ty2);
- assert!(ctx.unifier.unioned(ndarray_dtype1, ndarray_dtype2));
+ // assert!(ctx.unifier.unioned(ndarray_dtype1, ndarray_dtype2));
- let left_val =
- NDArrayValue::from_ptr_val(left_val.into_pointer_value(), llvm_usize, None);
- let right_val =
- NDArrayValue::from_ptr_val(right_val.into_pointer_value(), llvm_usize, None);
+ // let left_val =
+ // NDArrayValue::from_ptr_val(left_val.into_pointer_value(), llvm_usize, None);
+ // let right_val =
+ // NDArrayValue::from_ptr_val(right_val.into_pointer_value(), llvm_usize, None);
- let res = if op.base == Operator::MatMult {
- // MatMult is the only binop which is not an elementwise op
- numpy::ndarray_matmul_2d(
- generator,
- ctx,
- ndarray_dtype1,
- match op.variant {
- BinopVariant::Normal => None,
- BinopVariant::AugAssign => Some(left_val),
- },
- left_val,
- right_val,
- )?
- } else {
- numpy::ndarray_elementwise_binop_impl(
- generator,
- ctx,
- ndarray_dtype1,
- match op.variant {
- BinopVariant::Normal => None,
- BinopVariant::AugAssign => Some(left_val),
- },
- (left_val.as_base_value().into(), false),
- (right_val.as_base_value().into(), false),
- |generator, ctx, (lhs, rhs)| {
- gen_binop_expr_with_values(
- generator,
- ctx,
- (&Some(ndarray_dtype1), lhs),
- op,
- (&Some(ndarray_dtype2), rhs),
- ctx.current_loc,
- )?
- .unwrap()
- .to_basic_value_enum(
- ctx,
- generator,
- ndarray_dtype1,
- )
- },
- )?
- };
+ // let res = if op.base == Operator::MatMult {
+ // // MatMult is the only binop which is not an elementwise op
+ // numpy::ndarray_matmul_2d(
+ // generator,
+ // ctx,
+ // ndarray_dtype1,
+ // match op.variant {
+ // BinopVariant::Normal => None,
+ // BinopVariant::AugAssign => Some(left_val),
+ // },
+ // left_val,
+ // right_val,
+ // )?
+ // } else {
+ // numpy::ndarray_elementwise_binop_impl(
+ // generator,
+ // ctx,
+ // ndarray_dtype1,
+ // match op.variant {
+ // BinopVariant::Normal => None,
+ // BinopVariant::AugAssign => Some(left_val),
+ // },
+ // (left_val.as_base_value().into(), false),
+ // (right_val.as_base_value().into(), false),
+ // |generator, ctx, (lhs, rhs)| {
+ // gen_binop_expr_with_values(
+ // generator,
+ // ctx,
+ // (&Some(ndarray_dtype1), lhs),
+ // op,
+ // (&Some(ndarray_dtype2), rhs),
+ // ctx.current_loc,
+ // )?
+ // .unwrap()
+ // .to_basic_value_enum(
+ // ctx,
+ // generator,
+ // ndarray_dtype1,
+ // )
+ // },
+ // )?
+ // };
- Ok(Some(res.as_base_value().into()))
- } else {
- let (ndarray_dtype, _) =
- unpack_ndarray_var_tys(&mut ctx.unifier, if is_ndarray1 { ty1 } else { ty2 });
- let ndarray_val = NDArrayValue::from_ptr_val(
- if is_ndarray1 { left_val } else { right_val }.into_pointer_value(),
- llvm_usize,
- None,
- );
- let res = numpy::ndarray_elementwise_binop_impl(
- generator,
- ctx,
- ndarray_dtype,
- match op.variant {
- BinopVariant::Normal => None,
- BinopVariant::AugAssign => Some(ndarray_val),
- },
- (left_val, !is_ndarray1),
- (right_val, !is_ndarray2),
- |generator, ctx, (lhs, rhs)| {
- gen_binop_expr_with_values(
- generator,
- ctx,
- (&Some(ndarray_dtype), lhs),
- op,
- (&Some(ndarray_dtype), rhs),
- ctx.current_loc,
- )?
- .unwrap()
- .to_basic_value_enum(ctx, generator, ndarray_dtype)
- },
- )?;
+ // Ok(Some(res.as_base_value().into()))
+ // } else {
+ // let (ndarray_dtype, _) =
+ // unpack_ndarray_var_tys(&mut ctx.unifier, if is_ndarray1 { ty1 } else { ty2 });
+ // let ndarray_val = NDArrayValue::from_ptr_val(
+ // if is_ndarray1 { left_val } else { right_val }.into_pointer_value(),
+ // llvm_usize,
+ // None,
+ // );
+ // let res = numpy::ndarray_elementwise_binop_impl(
+ // generator,
+ // ctx,
+ // ndarray_dtype,
+ // match op.variant {
+ // BinopVariant::Normal => None,
+ // BinopVariant::AugAssign => Some(ndarray_val),
+ // },
+ // (left_val, !is_ndarray1),
+ // (right_val, !is_ndarray2),
+ // |generator, ctx, (lhs, rhs)| {
+ // gen_binop_expr_with_values(
+ // generator,
+ // ctx,
+ // (&Some(ndarray_dtype), lhs),
+ // op,
+ // (&Some(ndarray_dtype), rhs),
+ // ctx.current_loc,
+ // )?
+ // .unwrap()
+ // .to_basic_value_enum(ctx, generator, ndarray_dtype)
+ // },
+ // )?;
- Ok(Some(res.as_base_value().into()))
- }
+ // Ok(Some(res.as_base_value().into()))
+ // }
} else {
let left_ty_enum = ctx.unifier.get_ty_immutable(left_ty.unwrap());
let TypeEnum::TObj { fields, obj_id, .. } = left_ty_enum.as_ref() else {
@@ -1612,40 +1613,41 @@ pub fn gen_unaryop_expr_with_values<'ctx, G: CodeGenerator>(
_ => val.into(),
}
} else if ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id()) {
- let llvm_usize = generator.get_size_type(ctx.ctx);
- let (ndarray_dtype, _) = unpack_ndarray_var_tys(&mut ctx.unifier, ty);
+ todo!()
+ // let llvm_usize = generator.get_size_type(ctx.ctx);
+ // let (ndarray_dtype, _) = unpack_ndarray_var_tys(&mut ctx.unifier, ty);
- let val = NDArrayValue::from_ptr_val(val.into_pointer_value(), llvm_usize, None);
+ // let val = NDArrayValue::from_ptr_val(val.into_pointer_value(), llvm_usize, None);
- // ndarray uses `~` rather than `not` to perform elementwise inversion, convert it before
- // passing it to the elementwise codegen function
- let op = if ndarray_dtype.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::Bool.id()) {
- if op == ast::Unaryop::Invert {
- ast::Unaryop::Not
- } else {
- unreachable!(
- "ufunc {} not supported for ndarray[bool, N]",
- op.op_info().method_name,
- )
- }
- } else {
- op
- };
+ // // ndarray uses `~` rather than `not` to perform elementwise inversion, convert it before
+ // // passing it to the elementwise codegen function
+ // let op = if ndarray_dtype.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::Bool.id()) {
+ // if op == ast::Unaryop::Invert {
+ // ast::Unaryop::Not
+ // } else {
+ // unreachable!(
+ // "ufunc {} not supported for ndarray[bool, N]",
+ // op.op_info().method_name,
+ // )
+ // }
+ // } else {
+ // op
+ // };
- let res = numpy::ndarray_elementwise_unaryop_impl(
- generator,
- ctx,
- ndarray_dtype,
- None,
- val,
- |generator, ctx, val| {
- gen_unaryop_expr_with_values(generator, ctx, op, (&Some(ndarray_dtype), val))?
- .unwrap()
- .to_basic_value_enum(ctx, generator, ndarray_dtype)
- },
- )?;
+ // let res = numpy::ndarray_elementwise_unaryop_impl(
+ // generator,
+ // ctx,
+ // ndarray_dtype,
+ // None,
+ // val,
+ // |generator, ctx, val| {
+ // gen_unaryop_expr_with_values(generator, ctx, op, (&Some(ndarray_dtype), val))?
+ // .unwrap()
+ // .to_basic_value_enum(ctx, generator, ndarray_dtype)
+ // },
+ // )?;
- res.as_base_value().into()
+ // res.as_base_value().into()
} else {
unimplemented!()
}))
@@ -1688,85 +1690,86 @@ pub fn gen_cmpop_expr_with_values<'ctx, G: CodeGenerator>(
if left_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id())
|| right_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id())
{
- let llvm_usize = generator.get_size_type(ctx.ctx);
+ todo!()
+ // let llvm_usize = generator.get_size_type(ctx.ctx);
- let (Some(left_ty), lhs) = left else { unreachable!() };
- let (Some(right_ty), rhs) = comparators[0] else { unreachable!() };
- let op = ops[0];
+ // let (Some(left_ty), lhs) = left else { unreachable!() };
+ // let (Some(right_ty), rhs) = comparators[0] else { unreachable!() };
+ // let op = ops[0];
- let is_ndarray1 =
- left_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id());
- let is_ndarray2 =
- right_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id());
+ // let is_ndarray1 =
+ // left_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id());
+ // let is_ndarray2 =
+ // right_ty.obj_id(&ctx.unifier).is_some_and(|id| id == PrimDef::NDArray.id());
- return if is_ndarray1 && is_ndarray2 {
- let (ndarray_dtype1, _) = unpack_ndarray_var_tys(&mut ctx.unifier, left_ty);
- let (ndarray_dtype2, _) = unpack_ndarray_var_tys(&mut ctx.unifier, right_ty);
+ // return if is_ndarray1 && is_ndarray2 {
+ // let (ndarray_dtype1, _) = unpack_ndarray_var_tys(&mut ctx.unifier, left_ty);
+ // let (ndarray_dtype2, _) = unpack_ndarray_var_tys(&mut ctx.unifier, right_ty);
- assert!(ctx.unifier.unioned(ndarray_dtype1, ndarray_dtype2));
+ // assert!(ctx.unifier.unioned(ndarray_dtype1, ndarray_dtype2));
- let left_val =
- NDArrayValue::from_ptr_val(lhs.into_pointer_value(), llvm_usize, None);
- let res = numpy::ndarray_elementwise_binop_impl(
- generator,
- ctx,
- ctx.primitives.bool,
- None,
- (left_val.as_base_value().into(), false),
- (rhs, false),
- |generator, ctx, (lhs, rhs)| {
- let val = gen_cmpop_expr_with_values(
- generator,
- ctx,
- (Some(ndarray_dtype1), lhs),
- &[op],
- &[(Some(ndarray_dtype2), rhs)],
- )?
- .unwrap()
- .to_basic_value_enum(
- ctx,
- generator,
- ctx.primitives.bool,
- )?;
+ // let left_val =
+ // NDArrayValue::from_ptr_val(lhs.into_pointer_value(), llvm_usize, None);
+ // let res = numpy::ndarray_elementwise_binop_impl(
+ // generator,
+ // ctx,
+ // ctx.primitives.bool,
+ // None,
+ // (left_val.as_base_value().into(), false),
+ // (rhs, false),
+ // |generator, ctx, (lhs, rhs)| {
+ // let val = gen_cmpop_expr_with_values(
+ // generator,
+ // ctx,
+ // (Some(ndarray_dtype1), lhs),
+ // &[op],
+ // &[(Some(ndarray_dtype2), rhs)],
+ // )?
+ // .unwrap()
+ // .to_basic_value_enum(
+ // ctx,
+ // generator,
+ // ctx.primitives.bool,
+ // )?;
- Ok(generator.bool_to_i8(ctx, val.into_int_value()).into())
- },
- )?;
+ // Ok(generator.bool_to_i8(ctx, val.into_int_value()).into())
+ // },
+ // )?;
- Ok(Some(res.as_base_value().into()))
- } else {
- let (ndarray_dtype, _) = unpack_ndarray_var_tys(
- &mut ctx.unifier,
- if is_ndarray1 { left_ty } else { right_ty },
- );
- let res = numpy::ndarray_elementwise_binop_impl(
- generator,
- ctx,
- ctx.primitives.bool,
- None,
- (lhs, !is_ndarray1),
- (rhs, !is_ndarray2),
- |generator, ctx, (lhs, rhs)| {
- let val = gen_cmpop_expr_with_values(
- generator,
- ctx,
- (Some(ndarray_dtype), lhs),
- &[op],
- &[(Some(ndarray_dtype), rhs)],
- )?
- .unwrap()
- .to_basic_value_enum(
- ctx,
- generator,
- ctx.primitives.bool,
- )?;
+ // Ok(Some(res.as_base_value().into()))
+ // } else {
+ // let (ndarray_dtype, _) = unpack_ndarray_var_tys(
+ // &mut ctx.unifier,
+ // if is_ndarray1 { left_ty } else { right_ty },
+ // );
+ // let res = numpy::ndarray_elementwise_binop_impl(
+ // generator,
+ // ctx,
+ // ctx.primitives.bool,
+ // None,
+ // (lhs, !is_ndarray1),
+ // (rhs, !is_ndarray2),
+ // |generator, ctx, (lhs, rhs)| {
+ // let val = gen_cmpop_expr_with_values(
+ // generator,
+ // ctx,
+ // (Some(ndarray_dtype), lhs),
+ // &[op],
+ // &[(Some(ndarray_dtype), rhs)],
+ // )?
+ // .unwrap()
+ // .to_basic_value_enum(
+ // ctx,
+ // generator,
+ // ctx.primitives.bool,
+ // )?;
- Ok(generator.bool_to_i8(ctx, val.into_int_value()).into())
- },
- )?;
+ // Ok(generator.bool_to_i8(ctx, val.into_int_value()).into())
+ // },
+ // )?;
- Ok(Some(res.as_base_value().into()))
- };
+ // Ok(Some(res.as_base_value().into()))
+ // };
}
}
@@ -2102,310 +2105,312 @@ fn gen_ndarray_subscript_expr<'ctx, G: CodeGenerator>(
v: NDArrayValue<'ctx>,
slice: &Expr