forked from M-Labs/nac3
core: allow np_full to take tuple shapes
This commit is contained in:
parent
abbaa506ad
commit
5640a793e2
@ -1550,36 +1550,29 @@ impl<'a> Inferencer<'a> {
|
|||||||
}
|
}
|
||||||
// 2-argument ndarray n-dimensional creation functions
|
// 2-argument ndarray n-dimensional creation functions
|
||||||
if id == &"np_full".into() && args.len() == 2 {
|
if id == &"np_full".into() && args.len() == 2 {
|
||||||
let ExprKind::List { elts, .. } = &args[0].node else {
|
// Parse arguments
|
||||||
return report_error(
|
let shape_expr = args.remove(0);
|
||||||
format!(
|
let (ndims, shape) =
|
||||||
"Expected List literal for first argument of {id}, got {}",
|
self.fold_numpy_function_call_shape_argument(*id, 0, shape_expr)?; // Special handling for `shape`
|
||||||
args[0].node.name()
|
|
||||||
)
|
|
||||||
.as_str(),
|
|
||||||
args[0].location,
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
let ndims = elts.len() as u64;
|
let fill_value = self.fold_expr(args.remove(0))?;
|
||||||
|
|
||||||
let arg0 = self.fold_expr(args.remove(0))?;
|
// Build the return type
|
||||||
let arg1 = self.fold_expr(args.remove(0))?;
|
let dtype = fill_value.custom.unwrap();
|
||||||
|
|
||||||
let ty = arg1.custom.unwrap();
|
|
||||||
let ndims = self.unifier.get_fresh_literal(vec![SymbolValue::U64(ndims)], None);
|
let ndims = self.unifier.get_fresh_literal(vec![SymbolValue::U64(ndims)], None);
|
||||||
let ret = make_ndarray_ty(self.unifier, self.primitives, Some(ty), Some(ndims));
|
let ret = make_ndarray_ty(self.unifier, self.primitives, Some(dtype), Some(ndims));
|
||||||
|
|
||||||
let custom = self.unifier.add_ty(TypeEnum::TFunc(FunSignature {
|
let custom = self.unifier.add_ty(TypeEnum::TFunc(FunSignature {
|
||||||
args: vec![
|
args: vec![
|
||||||
FuncArg {
|
FuncArg {
|
||||||
name: "shape".into(),
|
name: "shape".into(),
|
||||||
ty: arg0.custom.unwrap(),
|
ty: shape.custom.unwrap(),
|
||||||
default_value: None,
|
default_value: None,
|
||||||
is_vararg: false,
|
is_vararg: false,
|
||||||
},
|
},
|
||||||
FuncArg {
|
FuncArg {
|
||||||
name: "fill_value".into(),
|
name: "fill_value".into(),
|
||||||
ty: arg1.custom.unwrap(),
|
ty: fill_value.custom.unwrap(),
|
||||||
default_value: None,
|
default_value: None,
|
||||||
is_vararg: false,
|
is_vararg: false,
|
||||||
},
|
},
|
||||||
@ -1597,7 +1590,7 @@ impl<'a> Inferencer<'a> {
|
|||||||
location: func.location,
|
location: func.location,
|
||||||
node: ExprKind::Name { id: *id, ctx: *ctx },
|
node: ExprKind::Name { id: *id, ctx: *ctx },
|
||||||
}),
|
}),
|
||||||
args: vec![arg0, arg1],
|
args: vec![shape, fill_value],
|
||||||
keywords: vec![],
|
keywords: vec![],
|
||||||
},
|
},
|
||||||
}));
|
}));
|
||||||
|
Loading…
Reference in New Issue
Block a user