jvolkman / rules_pycross

Bazel + Python rules for cross-platform external dependencies
Apache License 2.0
54 stars 18 forks source link

building pytensor@2.12.3 fails on numpy native libs for cross-compile to linux aarch64 #41

Open mark-thm opened 11 months ago

mark-thm commented 11 months ago

I'm running into a pretty cryptic problem where building pytensor@2.12.3 fails with missing numpy C libraries even though building numpy directly succeeds. I have the pretty much same setup as the crossenv example but with a linux_aarch64 platform and toolchains defined, and have added pytensor to pyproject.toml/poetry.lock, re-generated the bzl lockfile. Then, building:

bazel build //deps:pytensor --platforms=linux_aarch64

Fails with error:

IMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!

Importing the numpy C-extensions failed. This error can happen for
many reasons, often due to issues with your setup or how NumPy was
installed.

We have compiled some common reasons and troubleshooting tips at:

    https://numpy.org/devdocs/user/troubleshooting-importerror.html

Please note and check the following:

  * The Python version is: Python3.10 from "/var/folders/7p/mk19d_nn53b5s4wtmkllf4dr0000gn/T/wheelbuild7r8m1se5/env/bin/python"
  * The NumPy version is: "1.25.2"

and make sure that they are the versions you expect.
Please carefully study the documentation linked above for further help.

Original error was: No module named 'numpy.core._multiarray_umath'

Even though this succeeds:

bazel build //deps:numpy --platforms=//:linux_aarch64

If it helps, here's the contents of numpy from the sandbox

❯ tree ./bazel-out/darwin-fastbuild/bin/deps/numpy_1.25.2
./bazel-out/darwin-fastbuild/bin/deps/numpy_1.22.3/site-packages/numpy
├── LICENSE.txt
├── __config__.py
├── __init__.cython-30.pxd
├── __init__.pxd
├── __init__.py
├── __init__.pyi
├── __pycache__
│   ├── __config__.cpython-39.opt-1.pyc
│   ├── __config__.cpython-39.pyc
│   ├── __init__.cpython-39.opt-1.pyc
│   ├── __init__.cpython-39.pyc
│   ├── __init__.py
│   ├── _distributor_init.cpython-39.opt-1.pyc
│   ├── _distributor_init.cpython-39.pyc
│   ├── _globals.cpython-39.opt-1.pyc
│   ├── _globals.cpython-39.pyc
│   ├── _pytesttester.cpython-39.opt-1.pyc
│   ├── _pytesttester.cpython-39.pyc
│   ├── _version.cpython-39.opt-1.pyc
│   ├── _version.cpython-39.pyc
│   ├── conftest.cpython-39.opt-1.pyc
│   ├── conftest.cpython-39.pyc
│   ├── ctypeslib.cpython-39.opt-1.pyc
│   ├── ctypeslib.cpython-39.pyc
│   ├── dual.cpython-39.opt-1.pyc
│   ├── dual.cpython-39.pyc
│   ├── matlib.cpython-39.opt-1.pyc
│   ├── matlib.cpython-39.pyc
│   ├── setup.cpython-39.opt-1.pyc
│   ├── setup.cpython-39.pyc
│   ├── version.cpython-39.opt-1.pyc
│   └── version.cpython-39.pyc
├── _distributor_init.py
├── _globals.py
├── _pytesttester.py
├── _pytesttester.pyi
├── _version.py
├── array_api
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-39.opt-1.pyc
│   │   ├── __init__.cpython-39.pyc
│   │   ├── __init__.py
│   │   ├── _array_object.cpython-39.opt-1.pyc
│   │   ├── _array_object.cpython-39.pyc
│   │   ├── _constants.cpython-39.opt-1.pyc
│   │   ├── _constants.cpython-39.pyc
│   │   ├── _creation_functions.cpython-39.opt-1.pyc
│   │   ├── _creation_functions.cpython-39.pyc
│   │   ├── _data_type_functions.cpython-39.opt-1.pyc
│   │   ├── _data_type_functions.cpython-39.pyc
│   │   ├── _dtypes.cpython-39.opt-1.pyc
│   │   ├── _dtypes.cpython-39.pyc
│   │   ├── _elementwise_functions.cpython-39.opt-1.pyc
│   │   ├── _elementwise_functions.cpython-39.pyc
│   │   ├── _manipulation_functions.cpython-39.opt-1.pyc
│   │   ├── _manipulation_functions.cpython-39.pyc
│   │   ├── _searching_functions.cpython-39.opt-1.pyc
│   │   ├── _searching_functions.cpython-39.pyc
│   │   ├── _set_functions.cpython-39.opt-1.pyc
│   │   ├── _set_functions.cpython-39.pyc
│   │   ├── _sorting_functions.cpython-39.opt-1.pyc
│   │   ├── _sorting_functions.cpython-39.pyc
│   │   ├── _statistical_functions.cpython-39.opt-1.pyc
│   │   ├── _statistical_functions.cpython-39.pyc
│   │   ├── _typing.cpython-39.opt-1.pyc
│   │   ├── _typing.cpython-39.pyc
│   │   ├── _utility_functions.cpython-39.opt-1.pyc
│   │   ├── _utility_functions.cpython-39.pyc
│   │   ├── linalg.cpython-39.opt-1.pyc
│   │   ├── linalg.cpython-39.pyc
│   │   ├── setup.cpython-39.opt-1.pyc
│   │   └── setup.cpython-39.pyc
│   ├── _array_object.py
│   ├── _constants.py
│   ├── _creation_functions.py
│   ├── _data_type_functions.py
│   ├── _dtypes.py
│   ├── _elementwise_functions.py
│   ├── _manipulation_functions.py
│   ├── _searching_functions.py
│   ├── _set_functions.py
│   ├── _sorting_functions.py
│   ├── _statistical_functions.py
│   ├── _typing.py
│   ├── _utility_functions.py
│   ├── linalg.py
│   ├── setup.py
│   └── tests
│       ├── __init__.py
│       ├── __pycache__
│       │   ├── __init__.cpython-39.opt-1.pyc
│       │   ├── __init__.cpython-39.pyc
│       │   ├── __init__.py
│       │   ├── test_array_object.cpython-39.opt-1.pyc
│       │   ├── test_array_object.cpython-39.pyc
│       │   ├── test_creation_functions.cpython-39.opt-1.pyc
│       │   ├── test_creation_functions.cpython-39.pyc
│       │   ├── test_elementwise_functions.cpython-39.opt-1.pyc
│       │   ├── test_elementwise_functions.cpython-39.pyc
│       │   ├── test_set_functions.cpython-39.opt-1.pyc
│       │   ├── test_set_functions.cpython-39.pyc
│       │   ├── test_sorting_functions.cpython-39.opt-1.pyc
│       │   └── test_sorting_functions.cpython-39.pyc
│       ├── test_array_object.py
│       ├── test_creation_functions.py
│       ├── test_elementwise_functions.py
│       ├── test_set_functions.py
│       └── test_sorting_functions.py
├── compat
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-39.opt-1.pyc
│   │   ├── __init__.cpython-39.pyc
│   │   ├── __init__.py
│   │   ├── _inspect.cpython-39.opt-1.pyc
│   │   ├── _inspect.cpython-39.pyc
│   │   ├── py3k.cpython-39.opt-1.pyc
│   │   ├── py3k.cpython-39.pyc
│   │   ├── setup.cpython-39.opt-1.pyc
│   │   └── setup.cpython-39.pyc
│   ├── _inspect.py
│   ├── py3k.py
│   ├── setup.py
│   └── tests
│       ├── __init__.py
│       ├── __pycache__
│       │   ├── __init__.cpython-39.opt-1.pyc
│       │   ├── __init__.cpython-39.pyc
│       │   ├── __init__.py
│       │   ├── test_compat.cpython-39.opt-1.pyc
│       │   └── test_compat.cpython-39.pyc
│       └── test_compat.py
├── conftest.py
├── core
│   ├── __init__.py
│   ├── __init__.pyi
│   ├── __pycache__
│   │   ├── __init__.cpython-39.opt-1.pyc
│   │   ├── __init__.cpython-39.pyc
│   │   ├── __init__.py
│   │   ├── _add_newdocs.cpython-39.opt-1.pyc
│   │   ├── _add_newdocs.cpython-39.pyc
│   │   ├── _add_newdocs_scalars.cpython-39.opt-1.pyc
│   │   ├── _add_newdocs_scalars.cpython-39.pyc
│   │   ├── _asarray.cpython-39.opt-1.pyc
│   │   ├── _asarray.cpython-39.pyc
│   │   ├── _dtype.cpython-39.opt-1.pyc
│   │   ├── _dtype.cpython-39.pyc
│   │   ├── _dtype_ctypes.cpython-39.opt-1.pyc
│   │   ├── _dtype_ctypes.cpython-39.pyc
│   │   ├── _exceptions.cpython-39.opt-1.pyc
│   │   ├── _exceptions.cpython-39.pyc
│   │   ├── _internal.cpython-39.opt-1.pyc
│   │   ├── _internal.cpython-39.pyc
│   │   ├── _machar.cpython-39.opt-1.pyc
│   │   ├── _machar.cpython-39.pyc
│   │   ├── _methods.cpython-39.opt-1.pyc
│   │   ├── _methods.cpython-39.pyc
│   │   ├── _string_helpers.cpython-39.opt-1.pyc
│   │   ├── _string_helpers.cpython-39.pyc
│   │   ├── _type_aliases.cpython-39.opt-1.pyc
│   │   ├── _type_aliases.cpython-39.pyc
│   │   ├── _ufunc_config.cpython-39.opt-1.pyc
│   │   ├── _ufunc_config.cpython-39.pyc
│   │   ├── arrayprint.cpython-39.opt-1.pyc
│   │   ├── arrayprint.cpython-39.pyc
│   │   ├── cversions.cpython-39.opt-1.pyc
│   │   ├── cversions.cpython-39.pyc
│   │   ├── defchararray.cpython-39.opt-1.pyc
│   │   ├── defchararray.cpython-39.pyc
│   │   ├── einsumfunc.cpython-39.opt-1.pyc
│   │   ├── einsumfunc.cpython-39.pyc
│   │   ├── fromnumeric.cpython-39.opt-1.pyc
│   │   ├── fromnumeric.cpython-39.pyc
│   │   ├── function_base.cpython-39.opt-1.pyc
│   │   ├── function_base.cpython-39.pyc
│   │   ├── generate_numpy_api.cpython-39.opt-1.pyc
│   │   ├── generate_numpy_api.cpython-39.pyc
│   │   ├── getlimits.cpython-39.opt-1.pyc
│   │   ├── getlimits.cpython-39.pyc
│   │   ├── memmap.cpython-39.opt-1.pyc
│   │   ├── memmap.cpython-39.pyc
│   │   ├── multiarray.cpython-39.opt-1.pyc
│   │   ├── multiarray.cpython-39.pyc
│   │   ├── numeric.cpython-39.opt-1.pyc
│   │   ├── numeric.cpython-39.pyc
│   │   ├── numerictypes.cpython-39.opt-1.pyc
│   │   ├── numerictypes.cpython-39.pyc
│   │   ├── overrides.cpython-39.opt-1.pyc
│   │   ├── overrides.cpython-39.pyc
│   │   ├── records.cpython-39.opt-1.pyc
│   │   ├── records.cpython-39.pyc
│   │   ├── setup.cpython-39.opt-1.pyc
│   │   ├── setup.cpython-39.pyc
│   │   ├── setup_common.cpython-39.opt-1.pyc
│   │   ├── setup_common.cpython-39.pyc
│   │   ├── shape_base.cpython-39.opt-1.pyc
│   │   ├── shape_base.cpython-39.pyc
│   │   ├── umath.cpython-39.opt-1.pyc
│   │   ├── umath.cpython-39.pyc
│   │   ├── umath_tests.cpython-39.opt-1.pyc
│   │   └── umath_tests.cpython-39.pyc
│   ├── _add_newdocs.py
│   ├── _add_newdocs_scalars.py
│   ├── _asarray.py
│   ├── _asarray.pyi
│   ├── _dtype.py
│   ├── _dtype_ctypes.py
│   ├── _exceptions.py
│   ├── _internal.py
│   ├── _internal.pyi
│   ├── _machar.py
│   ├── _methods.py
│   ├── _multiarray_tests.cpython-39-aarch64-linux-gnu.so
│   ├── _multiarray_umath.cpython-39-aarch64-linux-gnu.so
│   ├── _operand_flag_tests.cpython-39-aarch64-linux-gnu.so
│   ├── _rational_tests.cpython-39-aarch64-linux-gnu.so
│   ├── _simd.cpython-39-aarch64-linux-gnu.so
│   ├── _string_helpers.py
│   ├── _struct_ufunc_tests.cpython-39-aarch64-linux-gnu.so
│   ├── _type_aliases.py
│   ├── _type_aliases.pyi
│   ├── _ufunc_config.py
│   ├── _ufunc_config.pyi
│   ├── _umath_tests.cpython-39-aarch64-linux-gnu.so
│   ├── arrayprint.py
│   ├── arrayprint.pyi
│   ├── cversions.py
│   ├── defchararray.py
│   ├── defchararray.pyi
│   ├── einsumfunc.py
│   ├── einsumfunc.pyi
│   ├── fromnumeric.py
│   ├── fromnumeric.pyi
│   ├── function_base.py
│   ├── function_base.pyi
│   ├── generate_numpy_api.py
│   ├── getlimits.py
│   ├── getlimits.pyi
│   ├── include
│   │   └── numpy
│   │       ├── __multiarray_api.h
│   │       ├── __ufunc_api.h
│   │       ├── _neighborhood_iterator_imp.h
│   │       ├── _numpyconfig.h
│   │       ├── arrayobject.h
│   │       ├── arrayscalars.h
│   │       ├── experimental_dtype_api.h
│   │       ├── halffloat.h
│   │       ├── libdivide
│   │       │   ├── LICENSE.txt
│   │       │   └── libdivide.h
│   │       ├── multiarray_api.txt
│   │       ├── ndarrayobject.h
│   │       ├── ndarraytypes.h
│   │       ├── noprefix.h
│   │       ├── npy_1_7_deprecated_api.h
│   │       ├── npy_3kcompat.h
│   │       ├── npy_common.h
│   │       ├── npy_cpu.h
│   │       ├── npy_endian.h
│   │       ├── npy_interrupt.h
│   │       ├── npy_math.h
│   │       ├── npy_no_deprecated_api.h
│   │       ├── npy_os.h
│   │       ├── numpyconfig.h
│   │       ├── old_defines.h
│   │       ├── oldnumeric.h
│   │       ├── random
│   │       │   ├── bitgen.h
│   │       │   └── distributions.h
│   │       ├── ufunc_api.txt
│   │       ├── ufuncobject.h
│   │       └── utils.h
│   ├── lib
│   │   ├── libnpymath.a
│   │   └── npy-pkg-config
│   │       ├── mlib.ini
│   │       └── npymath.ini
│   ├── memmap.py
│   ├── memmap.pyi
│   ├── multiarray.py
│   ├── multiarray.pyi
│   ├── numeric.py
│   ├── numeric.pyi
│   ├── numerictypes.py
│   ├── numerictypes.pyi
│   ├── overrides.py
│   ├── records.py
│   ├── records.pyi
│   ├── setup.py
│   ├── setup_common.py
│   ├── shape_base.py
│   ├── shape_base.pyi
│   ├── tests
│   │   ├── __init__.py
│   │   ├── __pycache__
│   │   │   ├── __init__.cpython-39.opt-1.pyc
│   │   │   ├── __init__.cpython-39.pyc
│   │   │   ├── __init__.py
│   │   │   ├── _locales.cpython-39.opt-1.pyc
│   │   │   ├── _locales.cpython-39.pyc
│   │   │   ├── test__exceptions.cpython-39.opt-1.pyc
│   │   │   ├── test__exceptions.cpython-39.pyc
│   │   │   ├── test_abc.cpython-39.opt-1.pyc
│   │   │   ├── test_abc.cpython-39.pyc
│   │   │   ├── test_api.cpython-39.opt-1.pyc
│   │   │   ├── test_api.cpython-39.pyc
│   │   │   ├── test_argparse.cpython-39.opt-1.pyc
│   │   │   ├── test_argparse.cpython-39.pyc
│   │   │   ├── test_array_coercion.cpython-39.opt-1.pyc
│   │   │   ├── test_array_coercion.cpython-39.pyc
│   │   │   ├── test_arraymethod.cpython-39.opt-1.pyc
│   │   │   ├── test_arraymethod.cpython-39.pyc
│   │   │   ├── test_arrayprint.cpython-39.opt-1.pyc
│   │   │   ├── test_arrayprint.cpython-39.pyc
│   │   │   ├── test_casting_unittests.cpython-39.opt-1.pyc
│   │   │   ├── test_casting_unittests.cpython-39.pyc
│   │   │   ├── test_conversion_utils.cpython-39.opt-1.pyc
│   │   │   ├── test_conversion_utils.cpython-39.pyc
│   │   │   ├── test_cpu_dispatcher.cpython-39.opt-1.pyc
│   │   │   ├── test_cpu_dispatcher.cpython-39.pyc
│   │   │   ├── test_cpu_features.cpython-39.opt-1.pyc
│   │   │   ├── test_cpu_features.cpython-39.pyc
│   │   │   ├── test_custom_dtypes.cpython-39.opt-1.pyc
│   │   │   ├── test_custom_dtypes.cpython-39.pyc
│   │   │   ├── test_cython.cpython-39.opt-1.pyc
│   │   │   ├── test_cython.cpython-39.pyc
│   │   │   ├── test_datetime.cpython-39.opt-1.pyc
│   │   │   ├── test_datetime.cpython-39.pyc
│   │   │   ├── test_defchararray.cpython-39.opt-1.pyc
│   │   │   ├── test_defchararray.cpython-39.pyc
│   │   │   ├── test_deprecations.cpython-39.opt-1.pyc
│   │   │   ├── test_deprecations.cpython-39.pyc
│   │   │   ├── test_dlpack.cpython-39.opt-1.pyc
│   │   │   ├── test_dlpack.cpython-39.pyc
│   │   │   ├── test_dtype.cpython-39.opt-1.pyc
│   │   │   ├── test_dtype.cpython-39.pyc
│   │   │   ├── test_einsum.cpython-39.opt-1.pyc
│   │   │   ├── test_einsum.cpython-39.pyc
│   │   │   ├── test_errstate.cpython-39.opt-1.pyc
│   │   │   ├── test_errstate.cpython-39.pyc
│   │   │   ├── test_extint128.cpython-39.opt-1.pyc
│   │   │   ├── test_extint128.cpython-39.pyc
│   │   │   ├── test_function_base.cpython-39.opt-1.pyc
│   │   │   ├── test_function_base.cpython-39.pyc
│   │   │   ├── test_getlimits.cpython-39.opt-1.pyc
│   │   │   ├── test_getlimits.cpython-39.pyc
│   │   │   ├── test_half.cpython-39.opt-1.pyc
│   │   │   ├── test_half.cpython-39.pyc
│   │   │   ├── test_hashtable.cpython-39.opt-1.pyc
│   │   │   ├── test_hashtable.cpython-39.pyc
│   │   │   ├── test_indexerrors.cpython-39.opt-1.pyc
│   │   │   ├── test_indexerrors.cpython-39.pyc
│   │   │   ├── test_indexing.cpython-39.opt-1.pyc
│   │   │   ├── test_indexing.cpython-39.pyc
│   │   │   ├── test_item_selection.cpython-39.opt-1.pyc
│   │   │   ├── test_item_selection.cpython-39.pyc
│   │   │   ├── test_limited_api.cpython-39.opt-1.pyc
│   │   │   ├── test_limited_api.cpython-39.pyc
│   │   │   ├── test_longdouble.cpython-39.opt-1.pyc
│   │   │   ├── test_longdouble.cpython-39.pyc
│   │   │   ├── test_machar.cpython-39.opt-1.pyc
│   │   │   ├── test_machar.cpython-39.pyc
│   │   │   ├── test_mem_overlap.cpython-39.opt-1.pyc
│   │   │   ├── test_mem_overlap.cpython-39.pyc
│   │   │   ├── test_mem_policy.cpython-39.opt-1.pyc
│   │   │   ├── test_mem_policy.cpython-39.pyc
│   │   │   ├── test_memmap.cpython-39.opt-1.pyc
│   │   │   ├── test_memmap.cpython-39.pyc
│   │   │   ├── test_multiarray.cpython-39.opt-1.pyc
│   │   │   ├── test_multiarray.cpython-39.pyc
│   │   │   ├── test_nditer.cpython-39.opt-1.pyc
│   │   │   ├── test_nditer.cpython-39.pyc
│   │   │   ├── test_numeric.cpython-39.opt-1.pyc
│   │   │   ├── test_numeric.cpython-39.pyc
│   │   │   ├── test_numerictypes.cpython-39.opt-1.pyc
│   │   │   ├── test_numerictypes.cpython-39.pyc
│   │   │   ├── test_overrides.cpython-39.opt-1.pyc
│   │   │   ├── test_overrides.cpython-39.pyc
│   │   │   ├── test_print.cpython-39.opt-1.pyc
│   │   │   ├── test_print.cpython-39.pyc
│   │   │   ├── test_protocols.cpython-39.opt-1.pyc
│   │   │   ├── test_protocols.cpython-39.pyc
│   │   │   ├── test_records.cpython-39.opt-1.pyc
│   │   │   ├── test_records.cpython-39.pyc
│   │   │   ├── test_regression.cpython-39.opt-1.pyc
│   │   │   ├── test_regression.cpython-39.pyc
│   │   │   ├── test_scalar_ctors.cpython-39.opt-1.pyc
│   │   │   ├── test_scalar_ctors.cpython-39.pyc
│   │   │   ├── test_scalar_methods.cpython-39.opt-1.pyc
│   │   │   ├── test_scalar_methods.cpython-39.pyc
│   │   │   ├── test_scalarbuffer.cpython-39.opt-1.pyc
│   │   │   ├── test_scalarbuffer.cpython-39.pyc
│   │   │   ├── test_scalarinherit.cpython-39.opt-1.pyc
│   │   │   ├── test_scalarinherit.cpython-39.pyc
│   │   │   ├── test_scalarmath.cpython-39.opt-1.pyc
│   │   │   ├── test_scalarmath.cpython-39.pyc
│   │   │   ├── test_scalarprint.cpython-39.opt-1.pyc
│   │   │   ├── test_scalarprint.cpython-39.pyc
│   │   │   ├── test_shape_base.cpython-39.opt-1.pyc
│   │   │   ├── test_shape_base.cpython-39.pyc
│   │   │   ├── test_simd.cpython-39.opt-1.pyc
│   │   │   ├── test_simd.cpython-39.pyc
│   │   │   ├── test_simd_module.cpython-39.opt-1.pyc
│   │   │   ├── test_simd_module.cpython-39.pyc
│   │   │   ├── test_ufunc.cpython-39.opt-1.pyc
│   │   │   ├── test_ufunc.cpython-39.pyc
│   │   │   ├── test_umath.cpython-39.opt-1.pyc
│   │   │   ├── test_umath.cpython-39.pyc
│   │   │   ├── test_umath_accuracy.cpython-39.opt-1.pyc
│   │   │   ├── test_umath_accuracy.cpython-39.pyc
│   │   │   ├── test_umath_complex.cpython-39.opt-1.pyc
│   │   │   ├── test_umath_complex.cpython-39.pyc
│   │   │   ├── test_unicode.cpython-39.opt-1.pyc
│   │   │   └── test_unicode.cpython-39.pyc
│   │   ├── _locales.py
│   │   ├── data
│   │   │   ├── astype_copy.pkl
│   │   │   ├── generate_umath_validation_data.cpp
│   │   │   ├── recarray_from_file.fits
│   │   │   ├── umath-validation-set-README.txt
│   │   │   ├── umath-validation-set-arccos.csv
│   │   │   ├── umath-validation-set-arccosh.csv
│   │   │   ├── umath-validation-set-arcsin.csv
│   │   │   ├── umath-validation-set-arcsinh.csv
│   │   │   ├── umath-validation-set-arctan.csv
│   │   │   ├── umath-validation-set-arctanh.csv
│   │   │   ├── umath-validation-set-cbrt.csv
│   │   │   ├── umath-validation-set-cos.csv
│   │   │   ├── umath-validation-set-cosh.csv
│   │   │   ├── umath-validation-set-exp.csv
│   │   │   ├── umath-validation-set-exp2.csv
│   │   │   ├── umath-validation-set-expm1.csv
│   │   │   ├── umath-validation-set-log.csv
│   │   │   ├── umath-validation-set-log10.csv
│   │   │   ├── umath-validation-set-log1p.csv
│   │   │   ├── umath-validation-set-log2.csv
│   │   │   ├── umath-validation-set-sin.csv
│   │   │   ├── umath-validation-set-sinh.csv
│   │   │   ├── umath-validation-set-tan.csv
│   │   │   └── umath-validation-set-tanh.csv
│   │   ├── examples
│   │   │   ├── __init__.py
│   │   │   ├── cython
│   │   │   │   ├── __init__.py
│   │   │   │   ├── __pycache__
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── setup.cpython-39.opt-1.pyc
│   │   │   │   │   └── setup.cpython-39.pyc
│   │   │   │   ├── checks.pyx
│   │   │   │   └── setup.py
│   │   │   └── limited_api
│   │   │       ├── __init__.py
│   │   │       ├── __pycache__
│   │   │       │   ├── __init__.py
│   │   │       │   ├── setup.cpython-39.opt-1.pyc
│   │   │       │   └── setup.cpython-39.pyc
│   │   │       ├── limited_api.c
│   │   │       └── setup.py
│   │   ├── test__exceptions.py
│   │   ├── test_abc.py
│   │   ├── test_api.py
│   │   ├── test_argparse.py
│   │   ├── test_array_coercion.py
│   │   ├── test_arraymethod.py
│   │   ├── test_arrayprint.py
│   │   ├── test_casting_unittests.py
│   │   ├── test_conversion_utils.py
│   │   ├── test_cpu_dispatcher.py
│   │   ├── test_cpu_features.py
│   │   ├── test_custom_dtypes.py
│   │   ├── test_cython.py
│   │   ├── test_datetime.py
│   │   ├── test_defchararray.py
│   │   ├── test_deprecations.py
│   │   ├── test_dlpack.py
│   │   ├── test_dtype.py
│   │   ├── test_einsum.py
│   │   ├── test_errstate.py
│   │   ├── test_extint128.py
│   │   ├── test_function_base.py
│   │   ├── test_getlimits.py
│   │   ├── test_half.py
│   │   ├── test_hashtable.py
│   │   ├── test_indexerrors.py
│   │   ├── test_indexing.py
│   │   ├── test_item_selection.py
│   │   ├── test_limited_api.py
│   │   ├── test_longdouble.py
│   │   ├── test_machar.py
│   │   ├── test_mem_overlap.py
│   │   ├── test_mem_policy.py
│   │   ├── test_memmap.py
│   │   ├── test_multiarray.py
│   │   ├── test_nditer.py
│   │   ├── test_numeric.py
│   │   ├── test_numerictypes.py
│   │   ├── test_overrides.py
│   │   ├── test_print.py
│   │   ├── test_protocols.py
│   │   ├── test_records.py
│   │   ├── test_regression.py
│   │   ├── test_scalar_ctors.py
│   │   ├── test_scalar_methods.py
│   │   ├── test_scalarbuffer.py
│   │   ├── test_scalarinherit.py
│   │   ├── test_scalarmath.py
│   │   ├── test_scalarprint.py
│   │   ├── test_shape_base.py
│   │   ├── test_simd.py
│   │   ├── test_simd_module.py
│   │   ├── test_ufunc.py
│   │   ├── test_umath.py
│   │   ├── test_umath_accuracy.py
│   │   ├── test_umath_complex.py
│   │   └── test_unicode.py
│   ├── umath.py
│   └── umath_tests.py
├── ctypeslib.py
├── ctypeslib.pyi
├── distutils
│   ├── __config__.py
│   ├── __init__.py
│   ├── __init__.pyi
│   ├── __pycache__
│   │   ├── __config__.cpython-39.opt-1.pyc
│   │   ├── __config__.cpython-39.pyc
│   │   ├── __init__.cpython-39.opt-1.pyc
│   │   ├── __init__.cpython-39.pyc
│   │   ├── __init__.py
│   │   ├── _shell_utils.cpython-39.opt-1.pyc
│   │   ├── _shell_utils.cpython-39.pyc
│   │   ├── armccompiler.cpython-39.opt-1.pyc
│   │   ├── armccompiler.cpython-39.pyc
│   │   ├── ccompiler.cpython-39.opt-1.pyc
│   │   ├── ccompiler.cpython-39.pyc
│   │   ├── ccompiler_opt.cpython-39.opt-1.pyc
│   │   ├── ccompiler_opt.cpython-39.pyc
│   │   ├── conv_template.cpython-39.opt-1.pyc
│   │   ├── conv_template.cpython-39.pyc
│   │   ├── core.cpython-39.opt-1.pyc
│   │   ├── core.cpython-39.pyc
│   │   ├── cpuinfo.cpython-39.opt-1.pyc
│   │   ├── cpuinfo.cpython-39.pyc
│   │   ├── exec_command.cpython-39.opt-1.pyc
│   │   ├── exec_command.cpython-39.pyc
│   │   ├── extension.cpython-39.opt-1.pyc
│   │   ├── extension.cpython-39.pyc
│   │   ├── from_template.cpython-39.opt-1.pyc
│   │   ├── from_template.cpython-39.pyc
│   │   ├── intelccompiler.cpython-39.opt-1.pyc
│   │   ├── intelccompiler.cpython-39.pyc
│   │   ├── lib2def.cpython-39.opt-1.pyc
│   │   ├── lib2def.cpython-39.pyc
│   │   ├── line_endings.cpython-39.opt-1.pyc
│   │   ├── line_endings.cpython-39.pyc
│   │   ├── log.cpython-39.opt-1.pyc
│   │   ├── log.cpython-39.pyc
│   │   ├── mingw32ccompiler.cpython-39.opt-1.pyc
│   │   ├── mingw32ccompiler.cpython-39.pyc
│   │   ├── misc_util.cpython-39.opt-1.pyc
│   │   ├── misc_util.cpython-39.pyc
│   │   ├── msvc9compiler.cpython-39.opt-1.pyc
│   │   ├── msvc9compiler.cpython-39.pyc
│   │   ├── msvccompiler.cpython-39.opt-1.pyc
│   │   ├── msvccompiler.cpython-39.pyc
│   │   ├── npy_pkg_config.cpython-39.opt-1.pyc
│   │   ├── npy_pkg_config.cpython-39.pyc
│   │   ├── numpy_distribution.cpython-39.opt-1.pyc
│   │   ├── numpy_distribution.cpython-39.pyc
│   │   ├── pathccompiler.cpython-39.opt-1.pyc
│   │   ├── pathccompiler.cpython-39.pyc
│   │   ├── setup.cpython-39.opt-1.pyc
│   │   ├── setup.cpython-39.pyc
│   │   ├── system_info.cpython-39.opt-1.pyc
│   │   ├── system_info.cpython-39.pyc
│   │   ├── unixccompiler.cpython-39.opt-1.pyc
│   │   └── unixccompiler.cpython-39.pyc
│   ├── _shell_utils.py
│   ├── armccompiler.py
│   ├── ccompiler.py
│   ├── ccompiler_opt.py
│   ├── checks
│   │   ├── cpu_asimd.c
│   │   ├── cpu_asimddp.c
│   │   ├── cpu_asimdfhm.c
│   │   ├── cpu_asimdhp.c
│   │   ├── cpu_avx.c
│   │   ├── cpu_avx2.c
│   │   ├── cpu_avx512_clx.c
│   │   ├── cpu_avx512_cnl.c
│   │   ├── cpu_avx512_icl.c
│   │   ├── cpu_avx512_knl.c
│   │   ├── cpu_avx512_knm.c
│   │   ├── cpu_avx512_skx.c
│   │   ├── cpu_avx512cd.c
│   │   ├── cpu_avx512f.c
│   │   ├── cpu_f16c.c
│   │   ├── cpu_fma3.c
│   │   ├── cpu_fma4.c
│   │   ├── cpu_neon.c
│   │   ├── cpu_neon_fp16.c
│   │   ├── cpu_neon_vfpv4.c
│   │   ├── cpu_popcnt.c
│   │   ├── cpu_sse.c
│   │   ├── cpu_sse2.c
│   │   ├── cpu_sse3.c
│   │   ├── cpu_sse41.c
│   │   ├── cpu_sse42.c
│   │   ├── cpu_ssse3.c
│   │   ├── cpu_vsx.c
│   │   ├── cpu_vsx2.c
│   │   ├── cpu_vsx3.c
│   │   ├── cpu_xop.c
│   │   ├── extra_avx512bw_mask.c
│   │   ├── extra_avx512dq_mask.c
│   │   ├── extra_avx512f_reduce.c
│   │   ├── extra_vsx_asm.c
│   │   └── test_flags.c
│   ├── command
│   │   ├── __init__.py
│   │   ├── __pycache__
│   │   │   ├── __init__.cpython-39.opt-1.pyc
│   │   │   ├── __init__.cpython-39.pyc
│   │   │   ├── __init__.py
│   │   │   ├── autodist.cpython-39.opt-1.pyc
│   │   │   ├── autodist.cpython-39.pyc
│   │   │   ├── bdist_rpm.cpython-39.opt-1.pyc
│   │   │   ├── bdist_rpm.cpython-39.pyc
│   │   │   ├── build.cpython-39.opt-1.pyc
│   │   │   ├── build.cpython-39.pyc
│   │   │   ├── build_clib.cpython-39.opt-1.pyc
│   │   │   ├── build_clib.cpython-39.pyc
│   │   │   ├── build_ext.cpython-39.opt-1.pyc
│   │   │   ├── build_ext.cpython-39.pyc
│   │   │   ├── build_py.cpython-39.opt-1.pyc
│   │   │   ├── build_py.cpython-39.pyc
│   │   │   ├── build_scripts.cpython-39.opt-1.pyc
│   │   │   ├── build_scripts.cpython-39.pyc
│   │   │   ├── build_src.cpython-39.opt-1.pyc
│   │   │   ├── build_src.cpython-39.pyc
│   │   │   ├── config.cpython-39.opt-1.pyc
│   │   │   ├── config.cpython-39.pyc
│   │   │   ├── config_compiler.cpython-39.opt-1.pyc
│   │   │   ├── config_compiler.cpython-39.pyc
│   │   │   ├── develop.cpython-39.opt-1.pyc
│   │   │   ├── develop.cpython-39.pyc
│   │   │   ├── egg_info.cpython-39.opt-1.pyc
│   │   │   ├── egg_info.cpython-39.pyc
│   │   │   ├── install.cpython-39.opt-1.pyc
│   │   │   ├── install.cpython-39.pyc
│   │   │   ├── install_clib.cpython-39.opt-1.pyc
│   │   │   ├── install_clib.cpython-39.pyc
│   │   │   ├── install_data.cpython-39.opt-1.pyc
│   │   │   ├── install_data.cpython-39.pyc
│   │   │   ├── install_headers.cpython-39.opt-1.pyc
│   │   │   ├── install_headers.cpython-39.pyc
│   │   │   ├── sdist.cpython-39.opt-1.pyc
│   │   │   └── sdist.cpython-39.pyc
│   │   ├── autodist.py
│   │   ├── bdist_rpm.py
│   │   ├── build.py
│   │   ├── build_clib.py
│   │   ├── build_ext.py
│   │   ├── build_py.py
│   │   ├── build_scripts.py
│   │   ├── build_src.py
│   │   ├── config.py
│   │   ├── config_compiler.py
│   │   ├── develop.py
│   │   ├── egg_info.py
│   │   ├── install.py
│   │   ├── install_clib.py
│   │   ├── install_data.py
│   │   ├── install_headers.py
│   │   └── sdist.py
│   ├── conv_template.py
│   ├── core.py
│   ├── cpuinfo.py
│   ├── exec_command.py
│   ├── extension.py
│   ├── fcompiler
│   │   ├── __init__.py
│   │   ├── __pycache__
│   │   │   ├── __init__.cpython-39.opt-1.pyc
│   │   │   ├── __init__.cpython-39.pyc
│   │   │   ├── __init__.py
│   │   │   ├── absoft.cpython-39.opt-1.pyc
│   │   │   ├── absoft.cpython-39.pyc
│   │   │   ├── arm.cpython-39.opt-1.pyc
│   │   │   ├── arm.cpython-39.pyc
│   │   │   ├── compaq.cpython-39.opt-1.pyc
│   │   │   ├── compaq.cpython-39.pyc
│   │   │   ├── environment.cpython-39.opt-1.pyc
│   │   │   ├── environment.cpython-39.pyc
│   │   │   ├── fujitsu.cpython-39.opt-1.pyc
│   │   │   ├── fujitsu.cpython-39.pyc
│   │   │   ├── g95.cpython-39.opt-1.pyc
│   │   │   ├── g95.cpython-39.pyc
│   │   │   ├── gnu.cpython-39.opt-1.pyc
│   │   │   ├── gnu.cpython-39.pyc
│   │   │   ├── hpux.cpython-39.opt-1.pyc
│   │   │   ├── hpux.cpython-39.pyc
│   │   │   ├── ibm.cpython-39.opt-1.pyc
│   │   │   ├── ibm.cpython-39.pyc
│   │   │   ├── intel.cpython-39.opt-1.pyc
│   │   │   ├── intel.cpython-39.pyc
│   │   │   ├── lahey.cpython-39.opt-1.pyc
│   │   │   ├── lahey.cpython-39.pyc
│   │   │   ├── mips.cpython-39.opt-1.pyc
│   │   │   ├── mips.cpython-39.pyc
│   │   │   ├── nag.cpython-39.opt-1.pyc
│   │   │   ├── nag.cpython-39.pyc
│   │   │   ├── none.cpython-39.opt-1.pyc
│   │   │   ├── none.cpython-39.pyc
│   │   │   ├── nv.cpython-39.opt-1.pyc
│   │   │   ├── nv.cpython-39.pyc
│   │   │   ├── pathf95.cpython-39.opt-1.pyc
│   │   │   ├── pathf95.cpython-39.pyc
│   │   │   ├── pg.cpython-39.opt-1.pyc
│   │   │   ├── pg.cpython-39.pyc
│   │   │   ├── sun.cpython-39.opt-1.pyc
│   │   │   ├── sun.cpython-39.pyc
│   │   │   ├── vast.cpython-39.opt-1.pyc
│   │   │   └── vast.cpython-39.pyc
│   │   ├── absoft.py
│   │   ├── arm.py
│   │   ├── compaq.py
│   │   ├── environment.py
│   │   ├── fujitsu.py
│   │   ├── g95.py
│   │   ├── gnu.py
│   │   ├── hpux.py
│   │   ├── ibm.py
│   │   ├── intel.py
│   │   ├── lahey.py
│   │   ├── mips.py
│   │   ├── nag.py
│   │   ├── none.py
│   │   ├── nv.py
│   │   ├── pathf95.py
│   │   ├── pg.py
│   │   ├── sun.py
│   │   └── vast.py
│   ├── from_template.py
│   ├── intelccompiler.py
│   ├── lib2def.py
│   ├── line_endings.py
│   ├── log.py
│   ├── mingw
│   │   └── gfortran_vs2003_hack.c
│   ├── mingw32ccompiler.py
│   ├── misc_util.py
│   ├── msvc9compiler.py
│   ├── msvccompiler.py
│   ├── npy_pkg_config.py
│   ├── numpy_distribution.py
│   ├── pathccompiler.py
│   ├── setup.py
│   ├── system_info.py
│   ├── tests
│   │   ├── __init__.py
│   │   ├── __pycache__
│   │   │   ├── __init__.cpython-39.opt-1.pyc
│   │   │   ├── __init__.cpython-39.pyc
│   │   │   ├── __init__.py
│   │   │   ├── test_build_ext.cpython-39.opt-1.pyc
│   │   │   ├── test_build_ext.cpython-39.pyc
│   │   │   ├── test_ccompiler_opt.cpython-39.opt-1.pyc
│   │   │   ├── test_ccompiler_opt.cpython-39.pyc
│   │   │   ├── test_ccompiler_opt_conf.cpython-39.opt-1.pyc
│   │   │   ├── test_ccompiler_opt_conf.cpython-39.pyc
│   │   │   ├── test_exec_command.cpython-39.opt-1.pyc
│   │   │   ├── test_exec_command.cpython-39.pyc
│   │   │   ├── test_fcompiler.cpython-39.opt-1.pyc
│   │   │   ├── test_fcompiler.cpython-39.pyc
│   │   │   ├── test_fcompiler_gnu.cpython-39.opt-1.pyc
│   │   │   ├── test_fcompiler_gnu.cpython-39.pyc
│   │   │   ├── test_fcompiler_intel.cpython-39.opt-1.pyc
│   │   │   ├── test_fcompiler_intel.cpython-39.pyc
│   │   │   ├── test_fcompiler_nagfor.cpython-39.opt-1.pyc
│   │   │   ├── test_fcompiler_nagfor.cpython-39.pyc
│   │   │   ├── test_from_template.cpython-39.opt-1.pyc
│   │   │   ├── test_from_template.cpython-39.pyc
│   │   │   ├── test_log.cpython-39.opt-1.pyc
│   │   │   ├── test_log.cpython-39.pyc
│   │   │   ├── test_mingw32ccompiler.cpython-39.opt-1.pyc
│   │   │   ├── test_mingw32ccompiler.cpython-39.pyc
│   │   │   ├── test_misc_util.cpython-39.opt-1.pyc
│   │   │   ├── test_misc_util.cpython-39.pyc
│   │   │   ├── test_npy_pkg_config.cpython-39.opt-1.pyc
│   │   │   ├── test_npy_pkg_config.cpython-39.pyc
│   │   │   ├── test_shell_utils.cpython-39.opt-1.pyc
│   │   │   ├── test_shell_utils.cpython-39.pyc
│   │   │   ├── test_system_info.cpython-39.opt-1.pyc
│   │   │   └── test_system_info.cpython-39.pyc
│   │   ├── test_build_ext.py
│   │   ├── test_ccompiler_opt.py
│   │   ├── test_ccompiler_opt_conf.py
│   │   ├── test_exec_command.py
│   │   ├── test_fcompiler.py
│   │   ├── test_fcompiler_gnu.py
│   │   ├── test_fcompiler_intel.py
│   │   ├── test_fcompiler_nagfor.py
│   │   ├── test_from_template.py
│   │   ├── test_log.py
│   │   ├── test_mingw32ccompiler.py
│   │   ├── test_misc_util.py
│   │   ├── test_npy_pkg_config.py
│   │   ├── test_shell_utils.py
│   │   └── test_system_info.py
│   └── unixccompiler.py
├── doc
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-39.opt-1.pyc
│   │   ├── __init__.cpython-39.pyc
│   │   ├── __init__.py
│   │   ├── constants.cpython-39.opt-1.pyc
│   │   ├── constants.cpython-39.pyc
│   │   ├── ufuncs.cpython-39.opt-1.pyc
│   │   └── ufuncs.cpython-39.pyc
│   ├── constants.py
│   └── ufuncs.py
├── dual.py
├── f2py
│   ├── __init__.py
│   ├── __init__.pyi
│   ├── __main__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-39.opt-1.pyc
│   │   ├── __init__.cpython-39.pyc
│   │   ├── __init__.py
│   │   ├── __main__.cpython-39.opt-1.pyc
│   │   ├── __main__.cpython-39.pyc
│   │   ├── __version__.cpython-39.opt-1.pyc
│   │   ├── __version__.cpython-39.pyc
│   │   ├── auxfuncs.cpython-39.opt-1.pyc
│   │   ├── auxfuncs.cpython-39.pyc
│   │   ├── capi_maps.cpython-39.opt-1.pyc
│   │   ├── capi_maps.cpython-39.pyc
│   │   ├── cb_rules.cpython-39.opt-1.pyc
│   │   ├── cb_rules.cpython-39.pyc
│   │   ├── cfuncs.cpython-39.opt-1.pyc
│   │   ├── cfuncs.cpython-39.pyc
│   │   ├── common_rules.cpython-39.opt-1.pyc
│   │   ├── common_rules.cpython-39.pyc
│   │   ├── crackfortran.cpython-39.opt-1.pyc
│   │   ├── crackfortran.cpython-39.pyc
│   │   ├── diagnose.cpython-39.opt-1.pyc
│   │   ├── diagnose.cpython-39.pyc
│   │   ├── f2py2e.cpython-39.opt-1.pyc
│   │   ├── f2py2e.cpython-39.pyc
│   │   ├── f2py_testing.cpython-39.opt-1.pyc
│   │   ├── f2py_testing.cpython-39.pyc
│   │   ├── f90mod_rules.cpython-39.opt-1.pyc
│   │   ├── f90mod_rules.cpython-39.pyc
│   │   ├── func2subr.cpython-39.opt-1.pyc
│   │   ├── func2subr.cpython-39.pyc
│   │   ├── rules.cpython-39.opt-1.pyc
│   │   ├── rules.cpython-39.pyc
│   │   ├── setup.cpython-39.opt-1.pyc
│   │   ├── setup.cpython-39.pyc
│   │   ├── symbolic.cpython-39.opt-1.pyc
│   │   ├── symbolic.cpython-39.pyc
│   │   ├── use_rules.cpython-39.opt-1.pyc
│   │   └── use_rules.cpython-39.pyc
│   ├── __version__.py
│   ├── auxfuncs.py
│   ├── capi_maps.py
│   ├── cb_rules.py
│   ├── cfuncs.py
│   ├── common_rules.py
│   ├── crackfortran.py
│   ├── diagnose.py
│   ├── f2py2e.py
│   ├── f2py_testing.py
│   ├── f90mod_rules.py
│   ├── func2subr.py
│   ├── rules.py
│   ├── setup.py
│   ├── src
│   │   ├── fortranobject.c
│   │   └── fortranobject.h
│   ├── symbolic.py
│   ├── tests
│   │   ├── __init__.py
│   │   ├── __pycache__
│   │   │   ├── __init__.cpython-39.opt-1.pyc
│   │   │   ├── __init__.cpython-39.pyc
│   │   │   ├── __init__.py
│   │   │   ├── test_abstract_interface.cpython-39.opt-1.pyc
│   │   │   ├── test_abstract_interface.cpython-39.pyc
│   │   │   ├── test_array_from_pyobj.cpython-39.opt-1.pyc
│   │   │   ├── test_array_from_pyobj.cpython-39.pyc
│   │   │   ├── test_assumed_shape.cpython-39.opt-1.pyc
│   │   │   ├── test_assumed_shape.cpython-39.pyc
│   │   │   ├── test_block_docstring.cpython-39.opt-1.pyc
│   │   │   ├── test_block_docstring.cpython-39.pyc
│   │   │   ├── test_callback.cpython-39.opt-1.pyc
│   │   │   ├── test_callback.cpython-39.pyc
│   │   │   ├── test_common.cpython-39.opt-1.pyc
│   │   │   ├── test_common.cpython-39.pyc
│   │   │   ├── test_compile_function.cpython-39.opt-1.pyc
│   │   │   ├── test_compile_function.cpython-39.pyc
│   │   │   ├── test_crackfortran.cpython-39.opt-1.pyc
│   │   │   ├── test_crackfortran.cpython-39.pyc
│   │   │   ├── test_kind.cpython-39.opt-1.pyc
│   │   │   ├── test_kind.cpython-39.pyc
│   │   │   ├── test_mixed.cpython-39.opt-1.pyc
│   │   │   ├── test_mixed.cpython-39.pyc
│   │   │   ├── test_module_doc.cpython-39.opt-1.pyc
│   │   │   ├── test_module_doc.cpython-39.pyc
│   │   │   ├── test_parameter.cpython-39.opt-1.pyc
│   │   │   ├── test_parameter.cpython-39.pyc
│   │   │   ├── test_quoted_character.cpython-39.opt-1.pyc
│   │   │   ├── test_quoted_character.cpython-39.pyc
│   │   │   ├── test_regression.cpython-39.opt-1.pyc
│   │   │   ├── test_regression.cpython-39.pyc
│   │   │   ├── test_return_character.cpython-39.opt-1.pyc
│   │   │   ├── test_return_character.cpython-39.pyc
│   │   │   ├── test_return_complex.cpython-39.opt-1.pyc
│   │   │   ├── test_return_complex.cpython-39.pyc
│   │   │   ├── test_return_integer.cpython-39.opt-1.pyc
│   │   │   ├── test_return_integer.cpython-39.pyc
│   │   │   ├── test_return_logical.cpython-39.opt-1.pyc
│   │   │   ├── test_return_logical.cpython-39.pyc
│   │   │   ├── test_return_real.cpython-39.opt-1.pyc
│   │   │   ├── test_return_real.cpython-39.pyc
│   │   │   ├── test_semicolon_split.cpython-39.opt-1.pyc
│   │   │   ├── test_semicolon_split.cpython-39.pyc
│   │   │   ├── test_size.cpython-39.opt-1.pyc
│   │   │   ├── test_size.cpython-39.pyc
│   │   │   ├── test_string.cpython-39.opt-1.pyc
│   │   │   ├── test_string.cpython-39.pyc
│   │   │   ├── test_symbolic.cpython-39.opt-1.pyc
│   │   │   ├── test_symbolic.cpython-39.pyc
│   │   │   ├── util.cpython-39.opt-1.pyc
│   │   │   └── util.cpython-39.pyc
│   │   ├── src
│   │   │   ├── array_from_pyobj
│   │   │   │   └── wrapmodule.c
│   │   │   ├── assumed_shape
│   │   │   │   ├── foo_free.f90
│   │   │   │   ├── foo_mod.f90
│   │   │   │   ├── foo_use.f90
│   │   │   │   └── precision.f90
│   │   │   ├── common
│   │   │   │   └── block.f
│   │   │   ├── kind
│   │   │   │   └── foo.f90
│   │   │   ├── mixed
│   │   │   │   ├── foo.f
│   │   │   │   ├── foo_fixed.f90
│   │   │   │   └── foo_free.f90
│   │   │   ├── module_data
│   │   │   │   ├── mod.mod
│   │   │   │   └── module_data_docstring.f90
│   │   │   ├── parameter
│   │   │   │   ├── constant_both.f90
│   │   │   │   ├── constant_compound.f90
│   │   │   │   ├── constant_integer.f90
│   │   │   │   ├── constant_non_compound.f90
│   │   │   │   └── constant_real.f90
│   │   │   ├── regression
│   │   │   │   └── inout.f90
│   │   │   ├── size
│   │   │   │   └── foo.f90
│   │   │   └── string
│   │   │       └── char.f90
│   │   ├── test_abstract_interface.py
│   │   ├── test_array_from_pyobj.py
│   │   ├── test_assumed_shape.py
│   │   ├── test_block_docstring.py
│   │   ├── test_callback.py
│   │   ├── test_common.py
│   │   ├── test_compile_function.py
│   │   ├── test_crackfortran.py
│   │   ├── test_kind.py
│   │   ├── test_mixed.py
│   │   ├── test_module_doc.py
│   │   ├── test_parameter.py
│   │   ├── test_quoted_character.py
│   │   ├── test_regression.py
│   │   ├── test_return_character.py
│   │   ├── test_return_complex.py
│   │   ├── test_return_integer.py
│   │   ├── test_return_logical.py
│   │   ├── test_return_real.py
│   │   ├── test_semicolon_split.py
│   │   ├── test_size.py
│   │   ├── test_string.py
│   │   ├── test_symbolic.py
│   │   └── util.py
│   └── use_rules.py
├── fft
│   ├── __init__.py
│   ├── __init__.pyi
│   ├── __pycache__
│   │   ├── __init__.cpython-39.opt-1.pyc
│   │   ├── __init__.cpython-39.pyc
│   │   ├── __init__.py
│   │   ├── _pocketfft.cpython-39.opt-1.pyc
│   │   ├── _pocketfft.cpython-39.pyc
│   │   ├── helper.cpython-39.opt-1.pyc
│   │   ├── helper.cpython-39.pyc
│   │   ├── setup.cpython-39.opt-1.pyc
│   │   └── setup.cpython-39.pyc
│   ├── _pocketfft.py
│   ├── _pocketfft.pyi
│   ├── _pocketfft_internal.cpython-39-aarch64-linux-gnu.so
│   ├── helper.py
│   ├── helper.pyi
│   ├── setup.py
│   └── tests
│       ├── __init__.py
│       ├── __pycache__
│       │   ├── __init__.cpython-39.opt-1.pyc
│       │   ├── __init__.cpython-39.pyc
│       │   ├── __init__.py
│       │   ├── test_helper.cpython-39.opt-1.pyc
│       │   ├── test_helper.cpython-39.pyc
│       │   ├── test_pocketfft.cpython-39.opt-1.pyc
│       │   └── test_pocketfft.cpython-39.pyc
│       ├── test_helper.py
│       └── test_pocketfft.py
├── lib
│   ├── __init__.py
│   ├── __init__.pyi
│   ├── __pycache__
│   │   ├── __init__.cpython-39.opt-1.pyc
│   │   ├── __init__.cpython-39.pyc
│   │   ├── __init__.py
│   │   ├── _datasource.cpython-39.opt-1.pyc
│   │   ├── _datasource.cpython-39.pyc
│   │   ├── _iotools.cpython-39.opt-1.pyc
│   │   ├── _iotools.cpython-39.pyc
│   │   ├── _version.cpython-39.opt-1.pyc
│   │   ├── _version.cpython-39.pyc
│   │   ├── arraypad.cpython-39.opt-1.pyc
│   │   ├── arraypad.cpython-39.pyc
│   │   ├── arraysetops.cpython-39.opt-1.pyc
│   │   ├── arraysetops.cpython-39.pyc
│   │   ├── arrayterator.cpython-39.opt-1.pyc
│   │   ├── arrayterator.cpython-39.pyc
│   │   ├── format.cpython-39.opt-1.pyc
│   │   ├── format.cpython-39.pyc
│   │   ├── function_base.cpython-39.opt-1.pyc
│   │   ├── function_base.cpython-39.pyc
│   │   ├── histograms.cpython-39.opt-1.pyc
│   │   ├── histograms.cpython-39.pyc
│   │   ├── index_tricks.cpython-39.opt-1.pyc
│   │   ├── index_tricks.cpython-39.pyc
│   │   ├── mixins.cpython-39.opt-1.pyc
│   │   ├── mixins.cpython-39.pyc
│   │   ├── nanfunctions.cpython-39.opt-1.pyc
│   │   ├── nanfunctions.cpython-39.pyc
│   │   ├── npyio.cpython-39.opt-1.pyc
│   │   ├── npyio.cpython-39.pyc
│   │   ├── polynomial.cpython-39.opt-1.pyc
│   │   ├── polynomial.cpython-39.pyc
│   │   ├── recfunctions.cpython-39.opt-1.pyc
│   │   ├── recfunctions.cpython-39.pyc
│   │   ├── scimath.cpython-39.opt-1.pyc
│   │   ├── scimath.cpython-39.pyc
│   │   ├── setup.cpython-39.opt-1.pyc
│   │   ├── setup.cpython-39.pyc
│   │   ├── shape_base.cpython-39.opt-1.pyc
│   │   ├── shape_base.cpython-39.pyc
│   │   ├── stride_tricks.cpython-39.opt-1.pyc
│   │   ├── stride_tricks.cpython-39.pyc
│   │   ├── twodim_base.cpython-39.opt-1.pyc
│   │   ├── twodim_base.cpython-39.pyc
│   │   ├── type_check.cpython-39.opt-1.pyc
│   │   ├── type_check.cpython-39.pyc
│   │   ├── ufunclike.cpython-39.opt-1.pyc
│   │   ├── ufunclike.cpython-39.pyc
│   │   ├── user_array.cpython-39.opt-1.pyc
│   │   ├── user_array.cpython-39.pyc
│   │   ├── utils.cpython-39.opt-1.pyc
│   │   └── utils.cpython-39.pyc
│   ├── _datasource.py
│   ├── _iotools.py
│   ├── _version.py
│   ├── _version.pyi
│   ├── arraypad.py
│   ├── arraypad.pyi
│   ├── arraysetops.py
│   ├── arraysetops.pyi
│   ├── arrayterator.py
│   ├── arrayterator.pyi
│   ├── format.py
│   ├── format.pyi
│   ├── function_base.py
│   ├── function_base.pyi
│   ├── histograms.py
│   ├── histograms.pyi
│   ├── index_tricks.py
│   ├── index_tricks.pyi
│   ├── mixins.py
│   ├── mixins.pyi
│   ├── nanfunctions.py
│   ├── nanfunctions.pyi
│   ├── npyio.py
│   ├── npyio.pyi
│   ├── polynomial.py
│   ├── polynomial.pyi
│   ├── recfunctions.py
│   ├── scimath.py
│   ├── scimath.pyi
│   ├── setup.py
│   ├── shape_base.py
│   ├── shape_base.pyi
│   ├── stride_tricks.py
│   ├── stride_tricks.pyi
│   ├── tests
│   │   ├── __init__.py
│   │   ├── __pycache__
│   │   │   ├── __init__.cpython-39.opt-1.pyc
│   │   │   ├── __init__.cpython-39.pyc
│   │   │   ├── __init__.py
│   │   │   ├── test__datasource.cpython-39.opt-1.pyc
│   │   │   ├── test__datasource.cpython-39.pyc
│   │   │   ├── test__iotools.cpython-39.opt-1.pyc
│   │   │   ├── test__iotools.cpython-39.pyc
│   │   │   ├── test__version.cpython-39.opt-1.pyc
│   │   │   ├── test__version.cpython-39.pyc
│   │   │   ├── test_arraypad.cpython-39.opt-1.pyc
│   │   │   ├── test_arraypad.cpython-39.pyc
│   │   │   ├── test_arraysetops.cpython-39.opt-1.pyc
│   │   │   ├── test_arraysetops.cpython-39.pyc
│   │   │   ├── test_arrayterator.cpython-39.opt-1.pyc
│   │   │   ├── test_arrayterator.cpython-39.pyc
│   │   │   ├── test_financial_expired.cpython-39.opt-1.pyc
│   │   │   ├── test_financial_expired.cpython-39.pyc
│   │   │   ├── test_format.cpython-39.opt-1.pyc
│   │   │   ├── test_format.cpython-39.pyc
│   │   │   ├── test_function_base.cpython-39.opt-1.pyc
│   │   │   ├── test_function_base.cpython-39.pyc
│   │   │   ├── test_histograms.cpython-39.opt-1.pyc
│   │   │   ├── test_histograms.cpython-39.pyc
│   │   │   ├── test_index_tricks.cpython-39.opt-1.pyc
│   │   │   ├── test_index_tricks.cpython-39.pyc
│   │   │   ├── test_io.cpython-39.opt-1.pyc
│   │   │   ├── test_io.cpython-39.pyc
│   │   │   ├── test_mixins.cpython-39.opt-1.pyc
│   │   │   ├── test_mixins.cpython-39.pyc
│   │   │   ├── test_nanfunctions.cpython-39.opt-1.pyc
│   │   │   ├── test_nanfunctions.cpython-39.pyc
│   │   │   ├── test_packbits.cpython-39.opt-1.pyc
│   │   │   ├── test_packbits.cpython-39.pyc
│   │   │   ├── test_polynomial.cpython-39.opt-1.pyc
│   │   │   ├── test_polynomial.cpython-39.pyc
│   │   │   ├── test_recfunctions.cpython-39.opt-1.pyc
│   │   │   ├── test_recfunctions.cpython-39.pyc
│   │   │   ├── test_regression.cpython-39.opt-1.pyc
│   │   │   ├── test_regression.cpython-39.pyc
│   │   │   ├── test_shape_base.cpython-39.opt-1.pyc
│   │   │   ├── test_shape_base.cpython-39.pyc
│   │   │   ├── test_stride_tricks.cpython-39.opt-1.pyc
│   │   │   ├── test_stride_tricks.cpython-39.pyc
│   │   │   ├── test_twodim_base.cpython-39.opt-1.pyc
│   │   │   ├── test_twodim_base.cpython-39.pyc
│   │   │   ├── test_type_check.cpython-39.opt-1.pyc
│   │   │   ├── test_type_check.cpython-39.pyc
│   │   │   ├── test_ufunclike.cpython-39.opt-1.pyc
│   │   │   ├── test_ufunclike.cpython-39.pyc
│   │   │   ├── test_utils.cpython-39.opt-1.pyc
│   │   │   └── test_utils.cpython-39.pyc
│   │   ├── data
│   │   │   ├── py2-objarr.npy
│   │   │   ├── py2-objarr.npz
│   │   │   ├── py3-objarr.npy
│   │   │   ├── py3-objarr.npz
│   │   │   ├── python3.npy
│   │   │   └── win64python2.npy
│   │   ├── test__datasource.py
│   │   ├── test__iotools.py
│   │   ├── test__version.py
│   │   ├── test_arraypad.py
│   │   ├── test_arraysetops.py
│   │   ├── test_arrayterator.py
│   │   ├── test_financial_expired.py
│   │   ├── test_format.py
│   │   ├── test_function_base.py
│   │   ├── test_histograms.py
│   │   ├── test_index_tricks.py
│   │   ├── test_io.py
│   │   ├── test_mixins.py
│   │   ├── test_nanfunctions.py
│   │   ├── test_packbits.py
│   │   ├── test_polynomial.py
│   │   ├── test_recfunctions.py
│   │   ├── test_regression.py
│   │   ├── test_shape_base.py
│   │   ├── test_stride_tricks.py
│   │   ├── test_twodim_base.py
│   │   ├── test_type_check.py
│   │   ├── test_ufunclike.py
│   │   └── test_utils.py
│   ├── twodim_base.py
│   ├── twodim_base.pyi
│   ├── type_check.py
│   ├── type_check.pyi
│   ├── ufunclike.py
│   ├── ufunclike.pyi
│   ├── user_array.py
│   ├── utils.py
│   └── utils.pyi
├── linalg
│   ├── __init__.py
│   ├── __init__.pyi
│   ├── __pycache__
│   │   ├── __init__.cpython-39.opt-1.pyc
│   │   ├── __init__.cpython-39.pyc
│   │   ├── __init__.py
│   │   ├── linalg.cpython-39.opt-1.pyc
│   │   ├── linalg.cpython-39.pyc
│   │   ├── setup.cpython-39.opt-1.pyc
│   │   └── setup.cpython-39.pyc
│   ├── _umath_linalg.cpython-39-aarch64-linux-gnu.so
│   ├── lapack_lite.cpython-39-aarch64-linux-gnu.so
│   ├── linalg.py
│   ├── linalg.pyi
│   ├── setup.py
│   └── tests
│       ├── __init__.py
│       ├── __pycache__
│       │   ├── __init__.cpython-39.opt-1.pyc
│       │   ├── __init__.cpython-39.pyc
│       │   ├── __init__.py
│       │   ├── test_deprecations.cpython-39.opt-1.pyc
│       │   ├── test_deprecations.cpython-39.pyc
│       │   ├── test_linalg.cpython-39.opt-1.pyc
│       │   ├── test_linalg.cpython-39.pyc
│       │   ├── test_regression.cpython-39.opt-1.pyc
│       │   └── test_regression.cpython-39.pyc
│       ├── test_deprecations.py
│       ├── test_linalg.py
│       └── test_regression.py
├── ma
│   ├── __init__.py
│   ├── __init__.pyi
│   ├── __pycache__
│   │   ├── __init__.cpython-39.opt-1.pyc
│   │   ├── __init__.cpython-39.pyc
│   │   ├── __init__.py
│   │   ├── bench.cpython-39.opt-1.pyc
│   │   ├── bench.cpython-39.pyc
│   │   ├── core.cpython-39.opt-1.pyc
│   │   ├── core.cpython-39.pyc
│   │   ├── extras.cpython-39.opt-1.pyc
│   │   ├── extras.cpython-39.pyc
│   │   ├── mrecords.cpython-39.opt-1.pyc
│   │   ├── mrecords.cpython-39.pyc
│   │   ├── setup.cpython-39.opt-1.pyc
│   │   ├── setup.cpython-39.pyc
│   │   ├── testutils.cpython-39.opt-1.pyc
│   │   ├── testutils.cpython-39.pyc
│   │   ├── timer_comparison.cpython-39.opt-1.pyc
│   │   └── timer_comparison.cpython-39.pyc
│   ├── bench.py
│   ├── core.py
│   ├── core.pyi
│   ├── extras.py
│   ├── extras.pyi
│   ├── mrecords.py
│   ├── mrecords.pyi
│   ├── setup.py
│   ├── tests
│   │   ├── __init__.py
│   │   ├── __pycache__
│   │   │   ├── __init__.cpython-39.opt-1.pyc
│   │   │   ├── __init__.cpython-39.pyc
│   │   │   ├── __init__.py
│   │   │   ├── test_core.cpython-39.opt-1.pyc
│   │   │   ├── test_core.cpython-39.pyc
│   │   │   ├── test_deprecations.cpython-39.opt-1.pyc
│   │   │   ├── test_deprecations.cpython-39.pyc
│   │   │   ├── test_extras.cpython-39.opt-1.pyc
│   │   │   ├── test_extras.cpython-39.pyc
│   │   │   ├── test_mrecords.cpython-39.opt-1.pyc
│   │   │   ├── test_mrecords.cpython-39.pyc
│   │   │   ├── test_old_ma.cpython-39.opt-1.pyc
│   │   │   ├── test_old_ma.cpython-39.pyc
│   │   │   ├── test_regression.cpython-39.opt-1.pyc
│   │   │   ├── test_regression.cpython-39.pyc
│   │   │   ├── test_subclassing.cpython-39.opt-1.pyc
│   │   │   └── test_subclassing.cpython-39.pyc
│   │   ├── test_core.py
│   │   ├── test_deprecations.py
│   │   ├── test_extras.py
│   │   ├── test_mrecords.py
│   │   ├── test_old_ma.py
│   │   ├── test_regression.py
│   │   └── test_subclassing.py
│   ├── testutils.py
│   └── timer_comparison.py
├── matlib.py
├── matrixlib
│   ├── __init__.py
│   ├── __init__.pyi
│   ├── __pycache__
│   │   ├── __init__.cpython-39.opt-1.pyc
│   │   ├── __init__.cpython-39.pyc
│   │   ├── __init__.py
│   │   ├── defmatrix.cpython-39.opt-1.pyc
│   │   ├── defmatrix.cpython-39.pyc
│   │   ├── setup.cpython-39.opt-1.pyc
│   │   └── setup.cpython-39.pyc
│   ├── defmatrix.py
│   ├── defmatrix.pyi
│   ├── setup.py
│   └── tests
│       ├── __init__.py
│       ├── __pycache__
│       │   ├── __init__.cpython-39.opt-1.pyc
│       │   ├── __init__.cpython-39.pyc
│       │   ├── __init__.py
│       │   ├── test_defmatrix.cpython-39.opt-1.pyc
│       │   ├── test_defmatrix.cpython-39.pyc
│       │   ├── test_interaction.cpython-39.opt-1.pyc
│       │   ├── test_interaction.cpython-39.pyc
│       │   ├── test_masked_matrix.cpython-39.opt-1.pyc
│       │   ├── test_masked_matrix.cpython-39.pyc
│       │   ├── test_matrix_linalg.cpython-39.opt-1.pyc
│       │   ├── test_matrix_linalg.cpython-39.pyc
│       │   ├── test_multiarray.cpython-39.opt-1.pyc
│       │   ├── test_multiarray.cpython-39.pyc
│       │   ├── test_numeric.cpython-39.opt-1.pyc
│       │   ├── test_numeric.cpython-39.pyc
│       │   ├── test_regression.cpython-39.opt-1.pyc
│       │   └── test_regression.cpython-39.pyc
│       ├── test_defmatrix.py
│       ├── test_interaction.py
│       ├── test_masked_matrix.py
│       ├── test_matrix_linalg.py
│       ├── test_multiarray.py
│       ├── test_numeric.py
│       └── test_regression.py
├── polynomial
│   ├── __init__.py
│   ├── __init__.pyi
│   ├── __pycache__
│   │   ├── __init__.cpython-39.opt-1.pyc
│   │   ├── __init__.cpython-39.pyc
│   │   ├── __init__.py
│   │   ├── _polybase.cpython-39.opt-1.pyc
│   │   ├── _polybase.cpython-39.pyc
│   │   ├── chebyshev.cpython-39.opt-1.pyc
│   │   ├── chebyshev.cpython-39.pyc
│   │   ├── hermite.cpython-39.opt-1.pyc
│   │   ├── hermite.cpython-39.pyc
│   │   ├── hermite_e.cpython-39.opt-1.pyc
│   │   ├── hermite_e.cpython-39.pyc
│   │   ├── laguerre.cpython-39.opt-1.pyc
│   │   ├── laguerre.cpython-39.pyc
│   │   ├── legendre.cpython-39.opt-1.pyc
│   │   ├── legendre.cpython-39.pyc
│   │   ├── polynomial.cpython-39.opt-1.pyc
│   │   ├── polynomial.cpython-39.pyc
│   │   ├── polyutils.cpython-39.opt-1.pyc
│   │   ├── polyutils.cpython-39.pyc
│   │   ├── setup.cpython-39.opt-1.pyc
│   │   └── setup.cpython-39.pyc
│   ├── _polybase.py
│   ├── _polybase.pyi
│   ├── chebyshev.py
│   ├── chebyshev.pyi
│   ├── hermite.py
│   ├── hermite.pyi
│   ├── hermite_e.py
│   ├── hermite_e.pyi
│   ├── laguerre.py
│   ├── laguerre.pyi
│   ├── legendre.py
│   ├── legendre.pyi
│   ├── polynomial.py
│   ├── polynomial.pyi
│   ├── polyutils.py
│   ├── polyutils.pyi
│   ├── setup.py
│   └── tests
│       ├── __init__.py
│       ├── __pycache__
│       │   ├── __init__.cpython-39.opt-1.pyc
│       │   ├── __init__.cpython-39.pyc
│       │   ├── __init__.py
│       │   ├── test_chebyshev.cpython-39.opt-1.pyc
│       │   ├── test_chebyshev.cpython-39.pyc
│       │   ├── test_classes.cpython-39.opt-1.pyc
│       │   ├── test_classes.cpython-39.pyc
│       │   ├── test_hermite.cpython-39.opt-1.pyc
│       │   ├── test_hermite.cpython-39.pyc
│       │   ├── test_hermite_e.cpython-39.opt-1.pyc
│       │   ├── test_hermite_e.cpython-39.pyc
│       │   ├── test_laguerre.cpython-39.opt-1.pyc
│       │   ├── test_laguerre.cpython-39.pyc
│       │   ├── test_legendre.cpython-39.opt-1.pyc
│       │   ├── test_legendre.cpython-39.pyc
│       │   ├── test_polynomial.cpython-39.opt-1.pyc
│       │   ├── test_polynomial.cpython-39.pyc
│       │   ├── test_polyutils.cpython-39.opt-1.pyc
│       │   ├── test_polyutils.cpython-39.pyc
│       │   ├── test_printing.cpython-39.opt-1.pyc
│       │   └── test_printing.cpython-39.pyc
│       ├── test_chebyshev.py
│       ├── test_classes.py
│       ├── test_hermite.py
│       ├── test_hermite_e.py
│       ├── test_laguerre.py
│       ├── test_legendre.py
│       ├── test_polynomial.py
│       ├── test_polyutils.py
│       └── test_printing.py
├── py.typed
├── random
│   ├── __init__.pxd
│   ├── __init__.py
│   ├── __init__.pyi
│   ├── __pycache__
│   │   ├── __init__.cpython-39.opt-1.pyc
│   │   ├── __init__.cpython-39.pyc
│   │   ├── __init__.py
│   │   ├── _pickle.cpython-39.opt-1.pyc
│   │   ├── _pickle.cpython-39.pyc
│   │   ├── setup.cpython-39.opt-1.pyc
│   │   └── setup.cpython-39.pyc
│   ├── _bounded_integers.cpython-39-aarch64-linux-gnu.so
│   ├── _bounded_integers.pxd
│   ├── _common.cpython-39-aarch64-linux-gnu.so
│   ├── _common.pxd
│   ├── _examples
│   │   ├── __init__.py
│   │   ├── cffi
│   │   │   ├── __init__.py
│   │   │   ├── __pycache__
│   │   │   │   ├── __init__.py
│   │   │   │   ├── extending.cpython-39.opt-1.pyc
│   │   │   │   ├── extending.cpython-39.pyc
│   │   │   │   ├── parse.cpython-39.opt-1.pyc
│   │   │   │   └── parse.cpython-39.pyc
│   │   │   ├── extending.py
│   │   │   └── parse.py
│   │   ├── cython
│   │   │   ├── __init__.py
│   │   │   ├── __pycache__
│   │   │   │   ├── __init__.py
│   │   │   │   ├── setup.cpython-39.opt-1.pyc
│   │   │   │   └── setup.cpython-39.pyc
│   │   │   ├── extending.pyx
│   │   │   ├── extending_distributions.pyx
│   │   │   └── setup.py
│   │   └── numba
│   │       ├── __init__.py
│   │       ├── __pycache__
│   │       │   ├── __init__.py
│   │       │   ├── extending.cpython-39.opt-1.pyc
│   │       │   ├── extending.cpython-39.pyc
│   │       │   ├── extending_distributions.cpython-39.opt-1.pyc
│   │       │   └── extending_distributions.cpython-39.pyc
│   │       ├── extending.py
│   │       └── extending_distributions.py
│   ├── _generator.cpython-39-aarch64-linux-gnu.so
│   ├── _generator.pyi
│   ├── _mt19937.cpython-39-aarch64-linux-gnu.so
│   ├── _mt19937.pyi
│   ├── _pcg64.cpython-39-aarch64-linux-gnu.so
│   ├── _pcg64.pyi
│   ├── _philox.cpython-39-aarch64-linux-gnu.so
│   ├── _philox.pyi
│   ├── _pickle.py
│   ├── _sfc64.cpython-39-aarch64-linux-gnu.so
│   ├── _sfc64.pyi
│   ├── bit_generator.cpython-39-aarch64-linux-gnu.so
│   ├── bit_generator.pxd
│   ├── bit_generator.pyi
│   ├── c_distributions.pxd
│   ├── lib
│   │   └── libnpyrandom.a
│   ├── mtrand.cpython-39-aarch64-linux-gnu.so
│   ├── mtrand.pyi
│   ├── setup.py
│   └── tests
│       ├── __init__.py
│       ├── __pycache__
│       │   ├── __init__.cpython-39.opt-1.pyc
│       │   ├── __init__.cpython-39.pyc
│       │   ├── __init__.py
│       │   ├── test_direct.cpython-39.opt-1.pyc
│       │   ├── test_direct.cpython-39.pyc
│       │   ├── test_extending.cpython-39.opt-1.pyc
│       │   ├── test_extending.cpython-39.pyc
│       │   ├── test_generator_mt19937.cpython-39.opt-1.pyc
│       │   ├── test_generator_mt19937.cpython-39.pyc
│       │   ├── test_generator_mt19937_regressions.cpython-39.opt-1.pyc
│       │   ├── test_generator_mt19937_regressions.cpython-39.pyc
│       │   ├── test_random.cpython-39.opt-1.pyc
│       │   ├── test_random.cpython-39.pyc
│       │   ├── test_randomstate.cpython-39.opt-1.pyc
│       │   ├── test_randomstate.cpython-39.pyc
│       │   ├── test_randomstate_regression.cpython-39.opt-1.pyc
│       │   ├── test_randomstate_regression.cpython-39.pyc
│       │   ├── test_regression.cpython-39.opt-1.pyc
│       │   ├── test_regression.cpython-39.pyc
│       │   ├── test_seed_sequence.cpython-39.opt-1.pyc
│       │   ├── test_seed_sequence.cpython-39.pyc
│       │   ├── test_smoke.cpython-39.opt-1.pyc
│       │   └── test_smoke.cpython-39.pyc
│       ├── data
│       │   ├── __init__.py
│       │   ├── __pycache__
│       │   │   ├── __init__.cpython-39.opt-1.pyc
│       │   │   ├── __init__.cpython-39.pyc
│       │   │   └── __init__.py
│       │   ├── mt19937-testset-1.csv
│       │   ├── mt19937-testset-2.csv
│       │   ├── pcg64-testset-1.csv
│       │   ├── pcg64-testset-2.csv
│       │   ├── pcg64dxsm-testset-1.csv
│       │   ├── pcg64dxsm-testset-2.csv
│       │   ├── philox-testset-1.csv
│       │   ├── philox-testset-2.csv
│       │   ├── sfc64-testset-1.csv
│       │   └── sfc64-testset-2.csv
│       ├── test_direct.py
│       ├── test_extending.py
│       ├── test_generator_mt19937.py
│       ├── test_generator_mt19937_regressions.py
│       ├── test_random.py
│       ├── test_randomstate.py
│       ├── test_randomstate_regression.py
│       ├── test_regression.py
│       ├── test_seed_sequence.py
│       └── test_smoke.py
├── setup.py
├── testing
│   ├── __init__.py
│   ├── __init__.pyi
│   ├── __pycache__
│   │   ├── __init__.cpython-39.opt-1.pyc
│   │   ├── __init__.cpython-39.pyc
│   │   ├── __init__.py
│   │   ├── print_coercion_tables.cpython-39.opt-1.pyc
│   │   ├── print_coercion_tables.cpython-39.pyc
│   │   ├── setup.cpython-39.opt-1.pyc
│   │   ├── setup.cpython-39.pyc
│   │   ├── utils.cpython-39.opt-1.pyc
│   │   └── utils.cpython-39.pyc
│   ├── _private
│   │   ├── __init__.py
│   │   ├── __pycache__
│   │   │   ├── __init__.cpython-39.opt-1.pyc
│   │   │   ├── __init__.cpython-39.pyc
│   │   │   ├── __init__.py
│   │   │   ├── decorators.cpython-39.opt-1.pyc
│   │   │   ├── decorators.cpython-39.pyc
│   │   │   ├── extbuild.cpython-39.opt-1.pyc
│   │   │   ├── extbuild.cpython-39.pyc
│   │   │   ├── noseclasses.cpython-39.opt-1.pyc
│   │   │   ├── noseclasses.cpython-39.pyc
│   │   │   ├── nosetester.cpython-39.opt-1.pyc
│   │   │   ├── nosetester.cpython-39.pyc
│   │   │   ├── parameterized.cpython-39.opt-1.pyc
│   │   │   ├── parameterized.cpython-39.pyc
│   │   │   ├── utils.cpython-39.opt-1.pyc
│   │   │   └── utils.cpython-39.pyc
│   │   ├── decorators.py
│   │   ├── extbuild.py
│   │   ├── noseclasses.py
│   │   ├── nosetester.py
│   │   ├── parameterized.py
│   │   ├── utils.py
│   │   └── utils.pyi
│   ├── print_coercion_tables.py
│   ├── setup.py
│   ├── tests
│   │   ├── __init__.py
│   │   ├── __pycache__
│   │   │   ├── __init__.cpython-39.opt-1.pyc
│   │   │   ├── __init__.cpython-39.pyc
│   │   │   ├── __init__.py
│   │   │   ├── test_doctesting.cpython-39.opt-1.pyc
│   │   │   ├── test_doctesting.cpython-39.pyc
│   │   │   ├── test_utils.cpython-39.opt-1.pyc
│   │   │   └── test_utils.cpython-39.pyc
│   │   ├── test_doctesting.py
│   │   └── test_utils.py
│   └── utils.py
├── tests
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-39.opt-1.pyc
│   │   ├── __init__.cpython-39.pyc
│   │   ├── __init__.py
│   │   ├── test__all__.cpython-39.opt-1.pyc
│   │   ├── test__all__.cpython-39.pyc
│   │   ├── test_ctypeslib.cpython-39.opt-1.pyc
│   │   ├── test_ctypeslib.cpython-39.pyc
│   │   ├── test_matlib.cpython-39.opt-1.pyc
│   │   ├── test_matlib.cpython-39.pyc
│   │   ├── test_numpy_version.cpython-39.opt-1.pyc
│   │   ├── test_numpy_version.cpython-39.pyc
│   │   ├── test_public_api.cpython-39.opt-1.pyc
│   │   ├── test_public_api.cpython-39.pyc
│   │   ├── test_reloading.cpython-39.opt-1.pyc
│   │   ├── test_reloading.cpython-39.pyc
│   │   ├── test_scripts.cpython-39.opt-1.pyc
│   │   ├── test_scripts.cpython-39.pyc
│   │   ├── test_warnings.cpython-39.opt-1.pyc
│   │   └── test_warnings.cpython-39.pyc
│   ├── test__all__.py
│   ├── test_ctypeslib.py
│   ├── test_matlib.py
│   ├── test_numpy_version.py
│   ├── test_public_api.py
│   ├── test_reloading.py
│   ├── test_scripts.py
│   └── test_warnings.py
├── typing
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-39.opt-1.pyc
│   │   ├── __init__.cpython-39.pyc
│   │   ├── __init__.py
│   │   ├── _add_docstring.cpython-39.opt-1.pyc
│   │   ├── _add_docstring.cpython-39.pyc
│   │   ├── _array_like.cpython-39.opt-1.pyc
│   │   ├── _array_like.cpython-39.pyc
│   │   ├── _char_codes.cpython-39.opt-1.pyc
│   │   ├── _char_codes.cpython-39.pyc
│   │   ├── _dtype_like.cpython-39.opt-1.pyc
│   │   ├── _dtype_like.cpython-39.pyc
│   │   ├── _extended_precision.cpython-39.opt-1.pyc
│   │   ├── _extended_precision.cpython-39.pyc
│   │   ├── _generic_alias.cpython-39.opt-1.pyc
│   │   ├── _generic_alias.cpython-39.pyc
│   │   ├── _nbit.cpython-39.opt-1.pyc
│   │   ├── _nbit.cpython-39.pyc
│   │   ├── _nested_sequence.cpython-39.opt-1.pyc
│   │   ├── _nested_sequence.cpython-39.pyc
│   │   ├── _scalars.cpython-39.opt-1.pyc
│   │   ├── _scalars.cpython-39.pyc
│   │   ├── _shape.cpython-39.opt-1.pyc
│   │   ├── _shape.cpython-39.pyc
│   │   ├── mypy_plugin.cpython-39.opt-1.pyc
│   │   ├── mypy_plugin.cpython-39.pyc
│   │   ├── setup.cpython-39.opt-1.pyc
│   │   └── setup.cpython-39.pyc
│   ├── _add_docstring.py
│   ├── _array_like.py
│   ├── _callable.pyi
│   ├── _char_codes.py
│   ├── _dtype_like.py
│   ├── _extended_precision.py
│   ├── _generic_alias.py
│   ├── _nbit.py
│   ├── _nested_sequence.py
│   ├── _scalars.py
│   ├── _shape.py
│   ├── _ufunc.pyi
│   ├── mypy_plugin.py
│   ├── setup.py
│   └── tests
│       ├── __init__.py
│       ├── __pycache__
│       │   ├── __init__.cpython-39.opt-1.pyc
│       │   ├── __init__.cpython-39.pyc
│       │   ├── __init__.py
│       │   ├── test_generic_alias.cpython-39.opt-1.pyc
│       │   ├── test_generic_alias.cpython-39.pyc
│       │   ├── test_isfile.cpython-39.opt-1.pyc
│       │   ├── test_isfile.cpython-39.pyc
│       │   ├── test_runtime.cpython-39.opt-1.pyc
│       │   ├── test_runtime.cpython-39.pyc
│       │   ├── test_typing.cpython-39.opt-1.pyc
│       │   └── test_typing.cpython-39.pyc
│       ├── data
│       │   ├── __init__.py
│       │   ├── fail
│       │   │   ├── arithmetic.pyi
│       │   │   ├── array_constructors.pyi
│       │   │   ├── array_like.pyi
│       │   │   ├── array_pad.pyi
│       │   │   ├── arrayprint.pyi
│       │   │   ├── arrayterator.pyi
│       │   │   ├── bitwise_ops.pyi
│       │   │   ├── char.pyi
│       │   │   ├── chararray.pyi
│       │   │   ├── comparisons.pyi
│       │   │   ├── constants.pyi
│       │   │   ├── datasource.pyi
│       │   │   ├── dtype.pyi
│       │   │   ├── einsumfunc.pyi
│       │   │   ├── false_positives.pyi
│       │   │   ├── flatiter.pyi
│       │   │   ├── fromnumeric.pyi
│       │   │   ├── histograms.pyi
│       │   │   ├── index_tricks.pyi
│       │   │   ├── lib_function_base.pyi
│       │   │   ├── lib_polynomial.pyi
│       │   │   ├── lib_utils.pyi
│       │   │   ├── lib_version.pyi
│       │   │   ├── linalg.pyi
│       │   │   ├── memmap.pyi
│       │   │   ├── modules.pyi
│       │   │   ├── multiarray.pyi
│       │   │   ├── ndarray.pyi
│       │   │   ├── ndarray_misc.pyi
│       │   │   ├── nditer.pyi
│       │   │   ├── nested_sequence.pyi
│       │   │   ├── npyio.pyi
│       │   │   ├── numerictypes.pyi
│       │   │   ├── random.pyi
│       │   │   ├── rec.pyi
│       │   │   ├── scalars.pyi
│       │   │   ├── shape_base.pyi
│       │   │   ├── stride_tricks.pyi
│       │   │   ├── testing.pyi
│       │   │   ├── twodim_base.pyi
│       │   │   ├── type_check.pyi
│       │   │   ├── ufunc_config.pyi
│       │   │   ├── ufunclike.pyi
│       │   │   ├── ufuncs.pyi
│       │   │   └── warnings_and_errors.pyi
│       │   ├── misc
│       │   │   └── extended_precision.pyi
│       │   ├── mypy.ini
│       │   ├── pass
│       │   │   ├── __init__.py
│       │   │   ├── __pycache__
│       │   │   │   ├── __init__.py
│       │   │   │   ├── arithmetic.cpython-39.opt-1.pyc
│       │   │   │   ├── arithmetic.cpython-39.pyc
│       │   │   │   ├── array_constructors.cpython-39.opt-1.pyc
│       │   │   │   ├── array_constructors.cpython-39.pyc
│       │   │   │   ├── array_like.cpython-39.opt-1.pyc
│       │   │   │   ├── array_like.cpython-39.pyc
│       │   │   │   ├── arrayprint.cpython-39.opt-1.pyc
│       │   │   │   ├── arrayprint.cpython-39.pyc
│       │   │   │   ├── arrayterator.cpython-39.opt-1.pyc
│       │   │   │   ├── arrayterator.cpython-39.pyc
│       │   │   │   ├── bitwise_ops.cpython-39.opt-1.pyc
│       │   │   │   ├── bitwise_ops.cpython-39.pyc
│       │   │   │   ├── comparisons.cpython-39.opt-1.pyc
│       │   │   │   ├── comparisons.cpython-39.pyc
│       │   │   │   ├── dtype.cpython-39.opt-1.pyc
│       │   │   │   ├── dtype.cpython-39.pyc
│       │   │   │   ├── einsumfunc.cpython-39.opt-1.pyc
│       │   │   │   ├── einsumfunc.cpython-39.pyc
│       │   │   │   ├── flatiter.cpython-39.opt-1.pyc
│       │   │   │   ├── flatiter.cpython-39.pyc
│       │   │   │   ├── fromnumeric.cpython-39.opt-1.pyc
│       │   │   │   ├── fromnumeric.cpython-39.pyc
│       │   │   │   ├── index_tricks.cpython-39.opt-1.pyc
│       │   │   │   ├── index_tricks.cpython-39.pyc
│       │   │   │   ├── lib_utils.cpython-39.opt-1.pyc
│       │   │   │   ├── lib_utils.cpython-39.pyc
│       │   │   │   ├── lib_version.cpython-39.opt-1.pyc
│       │   │   │   ├── lib_version.cpython-39.pyc
│       │   │   │   ├── literal.cpython-39.opt-1.pyc
│       │   │   │   ├── literal.cpython-39.pyc
│       │   │   │   ├── mod.cpython-39.opt-1.pyc
│       │   │   │   ├── mod.cpython-39.pyc
│       │   │   │   ├── modules.cpython-39.opt-1.pyc
│       │   │   │   ├── modules.cpython-39.pyc
│       │   │   │   ├── multiarray.cpython-39.opt-1.pyc
│       │   │   │   ├── multiarray.cpython-39.pyc
│       │   │   │   ├── ndarray_conversion.cpython-39.opt-1.pyc
│       │   │   │   ├── ndarray_conversion.cpython-39.pyc
│       │   │   │   ├── ndarray_misc.cpython-39.opt-1.pyc
│       │   │   │   ├── ndarray_misc.cpython-39.pyc
│       │   │   │   ├── ndarray_shape_manipulation.cpython-39.opt-1.pyc
│       │   │   │   ├── ndarray_shape_manipulation.cpython-39.pyc
│       │   │   │   ├── numeric.cpython-39.opt-1.pyc
│       │   │   │   ├── numeric.cpython-39.pyc
│       │   │   │   ├── numerictypes.cpython-39.opt-1.pyc
│       │   │   │   ├── numerictypes.cpython-39.pyc
│       │   │   │   ├── random.cpython-39.opt-1.pyc
│       │   │   │   ├── random.cpython-39.pyc
│       │   │   │   ├── scalars.cpython-39.opt-1.pyc
│       │   │   │   ├── scalars.cpython-39.pyc
│       │   │   │   ├── simple.cpython-39.opt-1.pyc
│       │   │   │   ├── simple.cpython-39.pyc
│       │   │   │   ├── simple_py3.cpython-39.opt-1.pyc
│       │   │   │   ├── simple_py3.cpython-39.pyc
│       │   │   │   ├── ufunc_config.cpython-39.opt-1.pyc
│       │   │   │   ├── ufunc_config.cpython-39.pyc
│       │   │   │   ├── ufunclike.cpython-39.opt-1.pyc
│       │   │   │   ├── ufunclike.cpython-39.pyc
│       │   │   │   ├── ufuncs.cpython-39.opt-1.pyc
│       │   │   │   ├── ufuncs.cpython-39.pyc
│       │   │   │   ├── warnings_and_errors.cpython-39.opt-1.pyc
│       │   │   │   └── warnings_and_errors.cpython-39.pyc
│       │   │   ├── arithmetic.py
│       │   │   ├── array_constructors.py
│       │   │   ├── array_like.py
│       │   │   ├── arrayprint.py
│       │   │   ├── arrayterator.py
│       │   │   ├── bitwise_ops.py
│       │   │   ├── comparisons.py
│       │   │   ├── dtype.py
│       │   │   ├── einsumfunc.py
│       │   │   ├── flatiter.py
│       │   │   ├── fromnumeric.py
│       │   │   ├── index_tricks.py
│       │   │   ├── lib_utils.py
│       │   │   ├── lib_version.py
│       │   │   ├── literal.py
│       │   │   ├── mod.py
│       │   │   ├── modules.py
│       │   │   ├── multiarray.py
│       │   │   ├── ndarray_conversion.py
│       │   │   ├── ndarray_misc.py
│       │   │   ├── ndarray_shape_manipulation.py
│       │   │   ├── numeric.py
│       │   │   ├── numerictypes.py
│       │   │   ├── random.py
│       │   │   ├── scalars.py
│       │   │   ├── simple.py
│       │   │   ├── simple_py3.py
│       │   │   ├── ufunc_config.py
│       │   │   ├── ufunclike.py
│       │   │   ├── ufuncs.py
│       │   │   └── warnings_and_errors.py
│       │   └── reveal
│       │       ├── arithmetic.pyi
│       │       ├── array_constructors.pyi
│       │       ├── arraypad.pyi
│       │       ├── arrayprint.pyi
│       │       ├── arraysetops.pyi
│       │       ├── arrayterator.pyi
│       │       ├── bitwise_ops.pyi
│       │       ├── char.pyi
│       │       ├── chararray.pyi
│       │       ├── comparisons.pyi
│       │       ├── constants.pyi
│       │       ├── ctypeslib.pyi
│       │       ├── datasource.pyi
│       │       ├── dtype.pyi
│       │       ├── einsumfunc.pyi
│       │       ├── false_positives.pyi
│       │       ├── fft.pyi
│       │       ├── flatiter.pyi
│       │       ├── fromnumeric.pyi
│       │       ├── getlimits.pyi
│       │       ├── histograms.pyi
│       │       ├── index_tricks.pyi
│       │       ├── lib_function_base.pyi
│       │       ├── lib_polynomial.pyi
│       │       ├── lib_utils.pyi
│       │       ├── lib_version.pyi
│       │       ├── linalg.pyi
│       │       ├── matrix.pyi
│       │       ├── memmap.pyi
│       │       ├── mod.pyi
│       │       ├── modules.pyi
│       │       ├── multiarray.pyi
│       │       ├── nbit_base_example.pyi
│       │       ├── ndarray_conversion.pyi
│       │       ├── ndarray_misc.pyi
│       │       ├── ndarray_shape_manipulation.pyi
│       │       ├── nditer.pyi
│       │       ├── nested_sequence.pyi
│       │       ├── npyio.pyi
│       │       ├── numeric.pyi
│       │       ├── numerictypes.pyi
│       │       ├── random.pyi
│       │       ├── rec.pyi
│       │       ├── scalars.pyi
│       │       ├── shape_base.pyi
│       │       ├── stride_tricks.pyi
│       │       ├── testing.pyi
│       │       ├── twodim_base.pyi
│       │       ├── type_check.pyi
│       │       ├── ufunc_config.pyi
│       │       ├── ufunclike.pyi
│       │       ├── ufuncs.pyi
│       │       ├── version.pyi
│       │       └── warnings_and_errors.pyi
│       ├── test_generic_alias.py
│       ├── test_isfile.py
│       ├── test_runtime.py
│       └── test_typing.py
└── version.py

111 directories, 1777 files

I'd add that pytensor has a declared dependency on numpy.

mark-thm commented 11 months ago

Minimal repro in #42

mark-thm commented 11 months ago

It looks like what's happening here is:

Also verified that pytensor already declares the numpy dependency https://github.com/mark-thm/rules_pycross/blob/64e9cfa8651f4d63607c1507a27122a6b115e615/examples/crossenv/example_lock.bzl#L501-L519 -- and the sandbox above shows the dependency is available

codebreach commented 10 months ago

based on the tree shared it seems that py3.9 was used but your error says using py3.10

i had a similar issue with grpc which was fixed by passing the python interpreter to the grpc repo. GRPC is a bazel compatible repo so that might not apply here but just wanted to point that out in case its relevant or helps!

http_archive(
    name = "com_github_grpc_grpc",
    # Due to https://github.com/grpc/grpc/issues/24665
    # See https://github.com/grpc/grpc/issues/24665#issuecomment-1373577865
    # This makes sure we use the right python version and not the local python version
    repo_mapping = {"@local_config_python": "@python3_9"},
    sha256 = "7f42363711eb483a0501239fd5522467b31d8fe98d70d7867c6ca7b52440d828",
    strip_prefix = "grpc-1.51.0",
    urls = [
        "https://github.com/grpc/grpc/archive/refs/tags/v1.51.0.tar.gz",
    ],
)

another thing to check is if you are using zig toolchain and if its correctly configured for linux arm64

jvolkman commented 7 months ago

It looks like what's happening here is:

Also verified that pytensor already declares the numpy dependency https://github.com/mark-thm/rules_pycross/blob/64e9cfa8651f4d63607c1507a27122a6b115e615/examples/crossenv/example_lock.bzl#L501-L519 -- and the sandbox above shows the dependency is available

Sorry for the way late reply. I agree that this is what is happening, and I'm not sure that there is a great answer. There are now hooks in pycross_wheel_build that would allow you to tweak the build environment before the build occurs. In the case of pytensor, numpy is only imported so that numpy.get_include() can be used. So one option would be to just insert a mock numpy module in PYTHONPATH that provides this method with the appropriate path.

You can see some examples of using hooks in the external_linking examples.

brians-neptune commented 2 weeks ago

105 adds the building block for another approach to building libraries like this: build the C/C++ code with Bazel cc_library/etc rules instead of the Python setup.py. I haven't looked at pytensor so I'm not sure if it makes sense here, I'm using depedencies that were already Bazel-ified.