Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Incomplete tests #301

Open
2 of 34 tasks
asmeurer opened this issue Nov 14, 2024 · 2 comments
Open
2 of 34 tasks

Incomplete tests #301

asmeurer opened this issue Nov 14, 2024 · 2 comments
Labels
high priority High-priority issue

Comments

@asmeurer
Copy link
Member

asmeurer commented Nov 14, 2024

This is a tracking issue for tests that are currently incomplete. These are mostly notated in the code by TODO comments, but it's useful to note them all here too. I haven't checked everything throughly so if there is something missing that isn't noted in a comment it might not be listed here.

Note there are also some functions that aren't yet tested at all, but those are covered in separate issues (e.g., #248 #299). I also am not including tests that are currently skipped entirely as flaky (#300).

test_array_object.py

  • test_getitem_masking.py (key.ndim < x.ndim not tested)

test_creation_functions.py

The device keyword is never tested (see below)

test_data_type_functions.py

  • test_astype (no complex types, no values testing, no test for copy)
  • test_broadcast_arrays (no values testing)
  • test_broadcast_to (no values testing)
  • test_can_cast (no complex types) -- ENH: add a test for can_cast(complex dtypes) #320
  • test_finfo (no values testing)
  • test_iinfo (no values testing)

test_fft.py

test_has_names.py

test_indexing.py

test_inspection_functions.py

Basically none of the inspection APIs are currently tested, beyond the basic signature tests. Note that for many of these functions, we may not even need to use hypothesis. Just a basic test that the function outputs the right thing and a smoke test that the data outputted is correct.

test_linalg.py

(note: values testing here might be hard. Values testing isn't as high priority for functions that already generally work)

  • test_det (no values testing)
  • test_eigh (no values testing)
  • test_eigvalsh (no values testing)
  • test_inv (no values testing)
  • test_matmul (the @ __matmul__ operator methods are not tested)
  • test_matrix_norm (no values testing)
  • test_qr (no test that Q is orthonormal)
  • test_slogdet (no values testing)
  • test_svdvals (no values testing; no test that it agrees with svd())
  • test_trace (need to update dtype assertion, this should match test_sum)
  • test_vector_norm (no values testing)

Additionally, there are some limitations in the hypothesis strategies used by some of the functions. These should be made more general so that the functions are actually tested on a full gamut of possible inputs:

  • symmetric_matrices (does not generate complex Hermitian matrices
  • positive_definite_matrices (only generates stacks of identity matrices
  • invertable_matrices (only generates stacks of diagonal matrices)

test_manipulation_functions.py

  • test_tile (no shapes or values testing)

test_operators_and_elementwise_functions.py

test_signatures.py

Several issues tracked in other issues: #256, #171

test_sorting_functions.py

  • test_argsort (no testing of signed zeros or nans)
  • test_sort (no testing of signed zeros or nans)

test_special_cases.py

Many special cases are not tested. This is tracked at #284

test_statistical_functions.py

See also #167

  • test_mean (no values testing)
  • test_std (no values testing)
  • test_var (no values testing)

OTHER

@asmeurer asmeurer added the high priority High-priority issue label Nov 14, 2024
@asmeurer asmeurer mentioned this issue Nov 14, 2024
21 tasks
@ev-br
Copy link
Contributor

ev-br commented Nov 16, 2024

test_negative (there is a TODO about uints)

The TODO is # TODO: clarify if uints are acceptable, adjust accordingly and apparently negative(uint) wraps around in at least several libraries:

In [1]: import torch

In [2]: torch.negative
Out[2]: <function torch._VariableFunctionsClass.negative>

In [3]: torch.negative(torch.as_tensor(3, dtype=torch.uint8))
Out[3]: tensor(253, dtype=torch.uint8)

In [4]: import jax.numpy as jnp

In [5]: jnp.negative(jnp.asarray(3, dtype=jnp.uint8))
Out[5]: Array(253, dtype=uint8)

In [6]: import numpy as np

In [7]: np.negative(np.asarray(3, dtype=np.uint8))
Out[7]: np.uint8(253)

In [8]: np.__version__
Out[8]: '2.1.0'

In [9]: import array_api_strict as xp

In [10]: xp.negative(xp.asarray(3, dtype=xp.uint8))
Out[10]: Array(253, dtype=array_api_strict.uint8)

The spec does not seem to fix the behavior for unsigned ints: https://data-apis.org/array-api/latest/API_specification/generated/array_api.negative.html

So maybe a first action item is to clarify the spec?

@asmeurer
Copy link
Member Author

That sounds right. I thought I remember this already being addressed in the standard, but I guess it never was. At any rate, it's pretty clear to me that this behavior should be undefined in the standard, because we generally don't require wraparound behavior for integers to be defined. Maybe there is (or should be) something in the standard that just states that generally.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
high priority High-priority issue
Projects
None yet
Development

No branches or pull requests

2 participants