ivy icon indicating copy to clipboard operation
ivy copied to clipboard

[Bug]: `ivy.vector_norm` and `ivy.lgamma` when backend=numpy return rounded values

Open 34j opened this issue 1 year ago • 1 comments

Bug Explanation

> python -c "import ivy; ivy.set_backend('numpy'); print(ivy.lgamma(5)); print(ivy.lgamma(5.))"
ivy.array(3)
ivy.array(3.1780539)
> python -c "import ivy; ivy.set_backend('numpy'); print(ivy.vector_norm([1, 1])); print(ivy.vector_norm([1., 1.]))"
ivy.array(1)
ivy.array(1.4142135)

https://data-apis.org/array-api/latest/extensions/generated/array_api.linalg.vector_norm.html

According to array-api, there is no specified behavior when a non-floating point type is given for vector_norm, but I would like to suggest, with all due respect, to stop this casting or to output an error, for the following reasons. (For lgamma, not even defined in array-api.)

  • There are very limited situations where such behavior is needed.
  • It does not match the behavior of other functions in numpy; np.sin(1) returns 0.8414709848078965 instead of 0.
  • This behavior can be easily achieved by ivy.astype(ivy.lgamma(x), dtype=x.dtype)
  • Package maintainers using ivy need to worry about the type of input, and casts need to be made.

Thanks for this great project anyway.

Steps to Reproduce Bug

python -c "import ivy; ivy.set_backend('numpy'); print(ivy.lgamma(5)); print(ivy.lgamma(5.))"
python -c "import ivy; ivy.set_backend('numpy'); print(ivy.vector_norm([1, 1])); print(ivy.vector_norm([1., 1.]))"

Environment

NixOS 24.05, Python 3.11

Ivy Version

1.0.0.1

Backend

  • [X] NumPy
  • [ ] TensorFlow
  • [ ] PyTorch
  • [ ] JAX

Device

CPU

34j avatar Nov 27 '24 14:11 34j

(Temporary workaround would be to add + 0. to the argument)

34j avatar Nov 29 '24 04:11 34j