Skip to content

Order of numpy array inputs needs to be checked #473

@dmdunla

Description

@dmdunla

Related to #457, as @ntjohnson1 pointed out, the order of numpy arrays coming into pyttb needs to be checked. PR #463 fixed many of these, but another entry point is in the from_function classmethods for some of the tensors:

>>> K = ttb.ktensor.from_function(np.random.random_sample, (2, 3, 4), 2)
WARNING:root:Selected no copy, but input factor matrices aren't F ordered so must copy.
>>> K = ttb.tensor.from_function(np.random.random_sample, (2, 3, 4))
WARNING:root:Selected no copy, but input data isn't F ordered so must copy.

We need to verify all entry points, but I am not sure how to check/enforce this automatically to help with future-proofing.

I tried to track down all of these warnings and flag them as errors via a call to pytest to see if we can capture them during CI. Although I can show them, I am unsure why they are not flagged as errors. For example:

$ pytest -W error --log-cli-level=WARNING --log-cli-format="%(levelname)s %(name)s:%(lineno)s %(message)s" -W error
============================================= test session starts ==============================================
platform darwin -- Python 3.13.9, pytest-9.0.2, pluggy-1.6.0
rootdir: <rootdir>
configfile: pyproject.toml
plugins: cov-7.0.0
collected 208 items                                                                                            

pyttb/cp_als.py::pyttb.cp_als.cp_als PASSED                                                              [  0%]
pyttb/create_problem.py::pyttb.create_problem.create_problem PASSED                                      [  0%]
pyttb/hosvd.py::pyttb.hosvd.hosvd PASSED                                                                 [  1%]
pyttb/khatrirao.py::pyttb.khatrirao.khatrirao PASSED                                                     [  1%]
pyttb/ktensor.py::pyttb.ktensor.ktensor PASSED                                                           [  2%]
pyttb/ktensor.py::pyttb.ktensor.ktensor.arrange PASSED                                                   [  2%]
pyttb/ktensor.py::pyttb.ktensor.ktensor.copy 
------------------------------------------------ live log call -------------------------------------------------
WARNING root:210 Selected no copy, but input factor matrices aren't F ordered so must copy.
PASSED                                                                                                   [  3%]
...
pyttb/ktensor.py::pyttb.ktensor.ktensor.from_function 
------------------------------------------------ live log call -------------------------------------------------
WARNING root:210 Selected no copy, but input factor matrices aren't F ordered so must copy.
WARNING root:210 Selected no copy, but input factor matrices aren't F ordered so must copy.
WARNING root:210 Selected no copy, but input factor matrices aren't F ordered so must copy.
PASSED                                                                                                   [  5%]
...
pyttb/ktensor.py::pyttb.ktensor.ktensor.innerprod 
------------------------------------------------ live log call -------------------------------------------------
WARNING root:210 Selected no copy, but input factor matrices aren't F ordered so must copy.
PASSED                                                                                                   [  6%]
...
pyttb/ktensor.py::pyttb.ktensor.ktensor.isequal 
------------------------------------------------ live log call -------------------------------------------------
WARNING root:210 Selected no copy, but input factor matrices aren't F ordered so must copy.
PASSED                                                                                                   [  7%]
pyttb/ktensor.py::pyttb.ktensor.ktensor.issymmetric 
------------------------------------------------ live log call -------------------------------------------------
WARNING root:210 Selected no copy, but input factor matrices aren't F ordered so must copy.
PASSED                                                                                                   [  7%]
pyttb/ktensor.py::pyttb.ktensor.ktensor.mask PASSED                                                      [  8%]
pyttb/ktensor.py::pyttb.ktensor.ktensor.mttkrp 
------------------------------------------------ live log call -------------------------------------------------
WARNING root:210 Selected no copy, but input factor matrices aren't F ordered so must copy.
PASSED                                                                                                   [  8%]
pyttb/ktensor.py::pyttb.ktensor.ktensor.ncomponents 
------------------------------------------------ live log call -------------------------------------------------
WARNING root:210 Selected no copy, but input factor matrices aren't F ordered so must copy.
PASSED                                                                                                   [  9%]
pyttb/ktensor.py::pyttb.ktensor.ktensor.ndims 
------------------------------------------------ live log call -------------------------------------------------
WARNING root:210 Selected no copy, but input factor matrices aren't F ordered so must copy.
PASSED                                                                                                   [  9%]
pyttb/ktensor.py::pyttb.ktensor.ktensor.norm 
------------------------------------------------ live log call -------------------------------------------------
WARNING root:210 Selected no copy, but input factor matrices aren't F ordered so must copy.
PASSED                                                                                                   [ 10%]
pyttb/ktensor.py::pyttb.ktensor.ktensor.normalize 
------------------------------------------------ live log call -------------------------------------------------
WARNING root:210 Selected no copy, but input factor matrices aren't F ordered so must copy.
PASSED                                                                                                   [ 10%]
pyttb/ktensor.py::pyttb.ktensor.ktensor.nvecs 
------------------------------------------------ live log call -------------------------------------------------
WARNING root:210 Selected no copy, but input factor matrices aren't F ordered so must copy.
PASSED                                                                                                   [ 11%]
...
pyttb/ktensor.py::pyttb.ktensor.ktensor.update 
------------------------------------------------ live log call -------------------------------------------------
WARNING root:210 Selected no copy, but input factor matrices aren't F ordered so must copy.
PASSED                                                                                                   [ 15%]
pyttb/ktensor.py::pyttb.ktensor.ktensor.viz 
------------------------------------------------ live log call -------------------------------------------------
WARNING root:210 Selected no copy, but input factor matrices aren't F ordered so must copy.
PASSED                                                                                                   [ 15%]
...
pyttb/tensor.py::pyttb.tensor.tensor.from_function 
------------------------------------------------ live log call -------------------------------------------------
WARNING root:192 Selected no copy, but input data isn't F ordered so must copy.
PASSED                                                                                                   [ 85%]
...

============================================= 208 passed in 0.42s ==============================================

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingtestingTesting related

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions