a-ma72 / rainflow

Fast rainflow counting written in C (C99). Including wrappers for MATLAB and Python
BSD 2-Clause "Simplified" License
37 stars 8 forks source link

Building wheel fails on M1 MacOS #2

Closed till-m closed 1 year ago

till-m commented 1 year ago

Numpy 1.19 does not work on Apple Silicon chips, see numpy/numpy#17807. This causes the installation of this package to fail.

till-m commented 1 year ago

NB: Installation also fails on my linux machine and on github codespaces

Log ```bash $ pip install rfcnt Collecting rfcnt Downloading rfcnt-0.4.3.tar.gz (90 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 90.7/90.7 kB 4.4 MB/s eta 0:00:00 Installing build dependencies ... error error: subprocess-exited-with-error × pip subprocess to install build dependencies did not run successfully. │ exit code: 1 ╰─> [960 lines of output] Collecting setuptools>=42 Using cached setuptools-65.5.1-py3-none-any.whl (1.2 MB) Collecting wheel Using cached wheel-0.38.4-py3-none-any.whl (36 kB) Collecting numpy~=1.19.5 Using cached numpy-1.19.5.zip (7.3 MB) Installing build dependencies: started Installing build dependencies: finished with status 'done' Getting requirements to build wheel: started Getting requirements to build wheel: finished with status 'done' Preparing metadata (pyproject.toml): started Preparing metadata (pyproject.toml): finished with status 'done' Building wheels for collected packages: numpy Building wheel for numpy (pyproject.toml): started Building wheel for numpy (pyproject.toml): still running... Building wheel for numpy (pyproject.toml): finished with status 'error' error: subprocess-exited-with-error × Building wheel for numpy (pyproject.toml) did not run successfully. │ exit code: 1 ╰─> [930 lines of output] setup.py:67: RuntimeWarning: NumPy 1.19.5 may not yet support Python 3.10. warnings.warn( Running from numpy source directory. /tmp/pip-install-e_xb4pdh/numpy_2d1a03645a1d447b8fe9483adb819d45/tools/cythonize.py:67: DeprecationWarning: The distutils package is deprecated and slated for removal in Python 3.12. Use setuptools or check PEP 632 for potential alternatives from distutils.version import LooseVersion numpy/random/_bounded_integers.pxd.in has not changed numpy/random/bit_generator.pyx has not changed numpy/random/_bounded_integers.pyx.in has not changed numpy/random/_philox.pyx has not changed numpy/random/mtrand.pyx has not changed Processing numpy/random/_bounded_integers.pyx numpy/random/_generator.pyx has not changed numpy/random/_common.pyx has not changed numpy/random/_sfc64.pyx has not changed numpy/random/_mt19937.pyx has not changed numpy/random/_pcg64.pyx has not changed Cythonizing sources blas_opt_info: blas_mkl_info: customize UnixCCompiler libraries mkl_rt not found in ['/usr/local/python/3.10.4/lib', '/usr/local/lib', '/usr/lib64', '/usr/lib', '/usr/lib/x86_64-linux-gnu'] NOT AVAILABLE blis_info: libraries blis not found in ['/usr/local/python/3.10.4/lib', '/usr/local/lib', '/usr/lib64', '/usr/lib', '/usr/lib/x86_64-linux-gnu'] NOT AVAILABLE openblas_info: libraries openblas not found in ['/usr/local/python/3.10.4/lib', '/usr/local/lib', '/usr/lib64', '/usr/lib', '/usr/lib/x86_64-linux-gnu'] NOT AVAILABLE atlas_3_10_blas_threads_info: Setting PTATLAS=ATLAS libraries tatlas not found in ['/usr/local/python/3.10.4/lib', '/usr/local/lib', '/usr/lib64', '/usr/lib', '/usr/lib/x86_64-linux-gnu'] NOT AVAILABLE atlas_3_10_blas_info: libraries satlas not found in ['/usr/local/python/3.10.4/lib', '/usr/local/lib', '/usr/lib64', '/usr/lib', '/usr/lib/x86_64-linux-gnu'] NOT AVAILABLE atlas_blas_threads_info: Setting PTATLAS=ATLAS libraries ptf77blas,ptcblas,atlas not found in ['/usr/local/python/3.10.4/lib', '/usr/local/lib', '/usr/lib64', '/usr/lib', '/usr/lib/x86_64-linux-gnu'] NOT AVAILABLE atlas_blas_info: libraries f77blas,cblas,atlas not found in ['/usr/local/python/3.10.4/lib', '/usr/local/lib', '/usr/lib64', '/usr/lib', '/usr/lib/x86_64-linux-gnu'] NOT AVAILABLE accelerate_info: NOT AVAILABLE /tmp/pip-install-e_xb4pdh/numpy_2d1a03645a1d447b8fe9483adb819d45/numpy/distutils/system_info.py:1914: UserWarning: Optimized (vendor) Blas libraries are not found. Falls back to netlib Blas library which has worse performance. A better performance should be easily gained by switching Blas library. if self._calc_info(blas): blas_info: libraries blas not found in ['/usr/local/python/3.10.4/lib', '/usr/local/lib', '/usr/lib64', '/usr/lib', '/usr/lib/x86_64-linux-gnu'] NOT AVAILABLE /tmp/pip-install-e_xb4pdh/numpy_2d1a03645a1d447b8fe9483adb819d45/numpy/distutils/system_info.py:1914: UserWarning: Blas (http://www.netlib.org/blas/) libraries not found. Directories to search for the libraries can be specified in the numpy/distutils/site.cfg file (section [blas]) or by setting the BLAS environment variable. if self._calc_info(blas): blas_src_info: NOT AVAILABLE /tmp/pip-install-e_xb4pdh/numpy_2d1a03645a1d447b8fe9483adb819d45/numpy/distutils/system_info.py:1914: UserWarning: Blas (http://www.netlib.org/blas/) sources not found. Directories to search for the sources can be specified in the numpy/distutils/site.cfg file (section [blas_src]) or by setting the BLAS_SRC environment variable. if self._calc_info(blas): NOT AVAILABLE non-existing path in 'numpy/distutils': 'site.cfg' lapack_opt_info: lapack_mkl_info: libraries mkl_rt not found in ['/usr/local/python/3.10.4/lib', '/usr/local/lib', '/usr/lib64', '/usr/lib', '/usr/lib/x86_64-linux-gnu'] NOT AVAILABLE openblas_lapack_info: libraries openblas not found in ['/usr/local/python/3.10.4/lib', '/usr/local/lib', '/usr/lib64', '/usr/lib', '/usr/lib/x86_64-linux-gnu'] NOT AVAILABLE openblas_clapack_info: libraries openblas,lapack not found in ['/usr/local/python/3.10.4/lib', '/usr/local/lib', '/usr/lib64', '/usr/lib', '/usr/lib/x86_64-linux-gnu'] NOT AVAILABLE flame_info: libraries flame not found in ['/usr/local/python/3.10.4/lib', '/usr/local/lib', '/usr/lib64', '/usr/lib', '/usr/lib/x86_64-linux-gnu'] NOT AVAILABLE atlas_3_10_threads_info: Setting PTATLAS=ATLAS libraries lapack_atlas not found in /usr/local/python/3.10.4/lib libraries tatlas,tatlas not found in /usr/local/python/3.10.4/lib libraries lapack_atlas not found in /usr/local/lib libraries tatlas,tatlas not found in /usr/local/lib libraries lapack_atlas not found in /usr/lib64 libraries tatlas,tatlas not found in /usr/lib64 libraries lapack_atlas not found in /usr/lib libraries tatlas,tatlas not found in /usr/lib libraries lapack_atlas not found in /usr/lib/x86_64-linux-gnu libraries tatlas,tatlas not found in /usr/lib/x86_64-linux-gnu NOT AVAILABLE atlas_3_10_info: libraries lapack_atlas not found in /usr/local/python/3.10.4/lib libraries satlas,satlas not found in /usr/local/python/3.10.4/lib libraries lapack_atlas not found in /usr/local/lib libraries satlas,satlas not found in /usr/local/lib libraries lapack_atlas not found in /usr/lib64 libraries satlas,satlas not found in /usr/lib64 libraries lapack_atlas not found in /usr/lib libraries satlas,satlas not found in /usr/lib libraries lapack_atlas not found in /usr/lib/x86_64-linux-gnu libraries satlas,satlas not found in /usr/lib/x86_64-linux-gnu NOT AVAILABLE atlas_threads_info: Setting PTATLAS=ATLAS libraries lapack_atlas not found in /usr/local/python/3.10.4/lib libraries ptf77blas,ptcblas,atlas not found in /usr/local/python/3.10.4/lib libraries lapack_atlas not found in /usr/local/lib libraries ptf77blas,ptcblas,atlas not found in /usr/local/lib libraries lapack_atlas not found in /usr/lib64 libraries ptf77blas,ptcblas,atlas not found in /usr/lib64 libraries lapack_atlas not found in /usr/lib libraries ptf77blas,ptcblas,atlas not found in /usr/lib libraries lapack_atlas not found in /usr/lib/x86_64-linux-gnu libraries ptf77blas,ptcblas,atlas not found in /usr/lib/x86_64-linux-gnu NOT AVAILABLE atlas_info: libraries lapack_atlas not found in /usr/local/python/3.10.4/lib libraries f77blas,cblas,atlas not found in /usr/local/python/3.10.4/lib libraries lapack_atlas not found in /usr/local/lib libraries f77blas,cblas,atlas not found in /usr/local/lib libraries lapack_atlas not found in /usr/lib64 libraries f77blas,cblas,atlas not found in /usr/lib64 libraries lapack_atlas not found in /usr/lib libraries f77blas,cblas,atlas not found in /usr/lib libraries lapack_atlas not found in /usr/lib/x86_64-linux-gnu libraries f77blas,cblas,atlas not found in /usr/lib/x86_64-linux-gnu NOT AVAILABLE lapack_info: libraries lapack not found in ['/usr/local/python/3.10.4/lib', '/usr/local/lib', '/usr/lib64', '/usr/lib', '/usr/lib/x86_64-linux-gnu'] NOT AVAILABLE /tmp/pip-install-e_xb4pdh/numpy_2d1a03645a1d447b8fe9483adb819d45/numpy/distutils/system_info.py:1748: UserWarning: Lapack (http://www.netlib.org/lapack/) libraries not found. Directories to search for the libraries can be specified in the numpy/distutils/site.cfg file (section [lapack]) or by setting the LAPACK environment variable. return getattr(self, '_calc_info_{}'.format(name))() lapack_src_info: NOT AVAILABLE /tmp/pip-install-e_xb4pdh/numpy_2d1a03645a1d447b8fe9483adb819d45/numpy/distutils/system_info.py:1748: UserWarning: Lapack (http://www.netlib.org/lapack/) sources not found. Directories to search for the sources can be specified in the numpy/distutils/site.cfg file (section [lapack_src]) or by setting the LAPACK_SRC environment variable. return getattr(self, '_calc_info_{}'.format(name))() NOT AVAILABLE numpy_linalg_lapack_lite: FOUND: language = c define_macros = [('HAVE_BLAS_ILP64', None), ('BLAS_SYMBOL_SUFFIX', '64_')] /usr/local/python/3.10.4/lib/python3.10/distutils/dist.py:274: UserWarning: Unknown distribution option: 'define_macros' warnings.warn(msg) running bdist_wheel running build running config_cc unifing config_cc, config, build_clib, build_ext, build commands --compiler options running config_fc unifing config_fc, config, build_clib, build_ext, build commands --fcompiler options running build_src build_src building py_modules sources building library "npymath" sources Could not locate executable gfortran Could not locate executable f95 Could not locate executable ifort Could not locate executable ifc Could not locate executable lf95 Could not locate executable pgfortran Could not locate executable nvfortran Could not locate executable f90 Could not locate executable f77 Could not locate executable fort Could not locate executable efort Could not locate executable efc Could not locate executable g77 Could not locate executable g95 Could not locate executable pathf95 Could not locate executable nagfor don't know how to compile Fortran code on platform 'posix' adding 'build/src.linux-x86_64-3.10/numpy/core/src/npymath' to include_dirs. None - nothing done with h_files = ['build/src.linux-x86_64-3.10/numpy/core/src/npymath/npy_math_internal.h'] building library "npysort" sources adding 'build/src.linux-x86_64-3.10/numpy/core/src/common' to include_dirs. None - nothing done with h_files = ['build/src.linux-x86_64-3.10/numpy/core/src/common/npy_sort.h', 'build/src.linux-x86_64-3.10/numpy/core/src/common/npy_partition.h', 'build/src.linux-x86_64-3.10/numpy/core/src/common/npy_binsearch.h'] building library "npyrandom" sources building extension "numpy.core._multiarray_tests" sources building extension "numpy.core._multiarray_umath" sources adding 'build/src.linux-x86_64-3.10/numpy/core/src/umath' to include_dirs. adding 'build/src.linux-x86_64-3.10/numpy/core/src/npymath' to include_dirs. adding 'build/src.linux-x86_64-3.10/numpy/core/src/common' to include_dirs. numpy.core - nothing done with h_files = ['build/src.linux-x86_64-3.10/numpy/core/src/umath/funcs.inc', 'build/src.linux-x86_64-3.10/numpy/core/src/umath/simd.inc', 'build/src.linux-x86_64-3.10/numpy/core/src/umath/loops.h', 'build/src.linux-x86_64-3.10/numpy/core/src/umath/matmul.h', 'build/src.linux-x86_64-3.10/numpy/core/src/umath/clip.h', 'build/src.linux-x86_64-3.10/numpy/core/src/npymath/npy_math_internal.h', 'build/src.linux-x86_64-3.10/numpy/core/src/common/templ_common.h', 'build/src.linux-x86_64-3.10/numpy/core/include/numpy/config.h', 'build/src.linux-x86_64-3.10/numpy/core/include/numpy/_numpyconfig.h', 'build/src.linux-x86_64-3.10/numpy/core/include/numpy/__multiarray_api.h', 'build/src.linux-x86_64-3.10/numpy/core/include/numpy/__ufunc_api.h'] building extension "numpy.core._umath_tests" sources building extension "numpy.core._rational_tests" sources building extension "numpy.core._struct_ufunc_tests" sources building extension "numpy.core._operand_flag_tests" sources building extension "numpy.fft._pocketfft_internal" sources building extension "numpy.linalg.lapack_lite" sources ### Warning: Using unoptimized lapack ### building extension "numpy.linalg._umath_linalg" sources ### Warning: Using unoptimized lapack ### building extension "numpy.random._mt19937" sources building extension "numpy.random._philox" sources building extension "numpy.random._pcg64" sources building extension "numpy.random._sfc64" sources building extension "numpy.random._common" sources building extension "numpy.random.bit_generator" sources building extension "numpy.random._generator" sources building extension "numpy.random._bounded_integers" sources building extension "numpy.random.mtrand" sources building data_files sources build_src: building npy-pkg config files running build_py creating build/lib.linux-x86_64-3.10 creating build/lib.linux-x86_64-3.10/numpy copying numpy/__init__.py -> build/lib.linux-x86_64-3.10/numpy copying numpy/ctypeslib.py -> build/lib.linux-x86_64-3.10/numpy copying numpy/_pytesttester.py -> build/lib.linux-x86_64-3.10/numpy copying numpy/_globals.py -> build/lib.linux-x86_64-3.10/numpy copying numpy/_distributor_init.py -> build/lib.linux-x86_64-3.10/numpy copying numpy/setup.py -> build/lib.linux-x86_64-3.10/numpy copying numpy/conftest.py -> build/lib.linux-x86_64-3.10/numpy copying numpy/version.py -> build/lib.linux-x86_64-3.10/numpy copying numpy/matlib.py -> build/lib.linux-x86_64-3.10/numpy copying numpy/dual.py -> build/lib.linux-x86_64-3.10/numpy copying build/src.linux-x86_64-3.10/numpy/__config__.py -> build/lib.linux-x86_64-3.10/numpy creating build/lib.linux-x86_64-3.10/numpy/compat copying numpy/compat/__init__.py -> build/lib.linux-x86_64-3.10/numpy/compat copying numpy/compat/_inspect.py -> build/lib.linux-x86_64-3.10/numpy/compat copying numpy/compat/py3k.py -> build/lib.linux-x86_64-3.10/numpy/compat copying numpy/compat/setup.py -> build/lib.linux-x86_64-3.10/numpy/compat creating build/lib.linux-x86_64-3.10/numpy/compat/tests copying numpy/compat/tests/__init__.py -> build/lib.linux-x86_64-3.10/numpy/compat/tests copying numpy/compat/tests/test_compat.py -> build/lib.linux-x86_64-3.10/numpy/compat/tests creating build/lib.linux-x86_64-3.10/numpy/core copying numpy/core/getlimits.py -> build/lib.linux-x86_64-3.10/numpy/core copying numpy/core/__init__.py -> build/lib.linux-x86_64-3.10/numpy/core copying numpy/core/machar.py -> build/lib.linux-x86_64-3.10/numpy/core copying numpy/core/_ufunc_config.py -> build/lib.linux-x86_64-3.10/numpy/core copying numpy/core/einsumfunc.py -> build/lib.linux-x86_64-3.10/numpy/core copying numpy/core/umath_tests.py -> build/lib.linux-x86_64-3.10/numpy/core copying numpy/core/_dtype_ctypes.py -> build/lib.linux-x86_64-3.10/numpy/core copying numpy/core/umath.py -> build/lib.linux-x86_64-3.10/numpy/core copying numpy/core/numeric.py -> build/lib.linux-x86_64-3.10/numpy/core copying numpy/core/_dtype.py -> build/lib.linux-x86_64-3.10/numpy/core copying numpy/core/setup.py -> build/lib.linux-x86_64-3.10/numpy/core copying numpy/core/_string_helpers.py -> build/lib.linux-x86_64-3.10/numpy/core copying numpy/core/multiarray.py -> build/lib.linux-x86_64-3.10/numpy/core copying numpy/core/_exceptions.py -> build/lib.linux-x86_64-3.10/numpy/core copying numpy/core/function_base.py -> build/lib.linux-x86_64-3.10/numpy/core copying numpy/core/_asarray.py -> build/lib.linux-x86_64-3.10/numpy/core copying numpy/core/fromnumeric.py -> build/lib.linux-x86_64-3.10/numpy/core copying numpy/core/defchararray.py -> build/lib.linux-x86_64-3.10/numpy/core copying numpy/core/overrides.py -> build/lib.linux-x86_64-3.10/numpy/core copying numpy/core/numerictypes.py -> build/lib.linux-x86_64-3.10/numpy/core copying numpy/core/memmap.py -> build/lib.linux-x86_64-3.10/numpy/core copying numpy/core/_methods.py -> build/lib.linux-x86_64-3.10/numpy/core copying numpy/core/arrayprint.py -> build/lib.linux-x86_64-3.10/numpy/core copying numpy/core/_type_aliases.py -> build/lib.linux-x86_64-3.10/numpy/core copying numpy/core/shape_base.py -> build/lib.linux-x86_64-3.10/numpy/core copying numpy/core/cversions.py -> build/lib.linux-x86_64-3.10/numpy/core copying numpy/core/_internal.py -> build/lib.linux-x86_64-3.10/numpy/core copying numpy/core/setup_common.py -> build/lib.linux-x86_64-3.10/numpy/core copying numpy/core/records.py -> build/lib.linux-x86_64-3.10/numpy/core copying numpy/core/_add_newdocs.py -> build/lib.linux-x86_64-3.10/numpy/core copying numpy/core/code_generators/generate_numpy_api.py -> build/lib.linux-x86_64-3.10/numpy/core creating build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/test_scalarbuffer.py -> build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/_locales.py -> build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/test_arrayprint.py -> build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/test_function_base.py -> build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/__init__.py -> build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/test_machar.py -> build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/test_scalar_ctors.py -> build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/test_overrides.py -> build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/test_errstate.py -> build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/test_scalarinherit.py -> build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/test_deprecations.py -> build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/test_multiarray.py -> build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/test_unicode.py -> build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/test_defchararray.py -> build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/test_print.py -> build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/test_api.py -> build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/test_umath_accuracy.py -> build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/test_conversion_utils.py -> build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/test_scalarmath.py -> build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/test_records.py -> build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/test_umath.py -> build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/test_memmap.py -> build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/test_scalar_methods.py -> build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/test_numeric.py -> build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/test_numerictypes.py -> build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/test_datetime.py -> build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/test_abc.py -> build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/test_nditer.py -> build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/test_longdouble.py -> build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/test_indexerrors.py -> build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/test_extint128.py -> build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/test_half.py -> build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/test_indexing.py -> build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/test_shape_base.py -> build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/test_protocols.py -> build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/test_ufunc.py -> build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/test_umath_complex.py -> build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/test__exceptions.py -> build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/test_regression.py -> build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/test_scalarprint.py -> build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/test_mem_overlap.py -> build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/test_item_selection.py -> build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/test_cpu_features.py -> build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/test_dtype.py -> build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/test_getlimits.py -> build/lib.linux-x86_64-3.10/numpy/core/tests copying numpy/core/tests/test_einsum.py -> build/lib.linux-x86_64-3.10/numpy/core/tests creating build/lib.linux-x86_64-3.10/numpy/distutils copying numpy/distutils/exec_command.py -> build/lib.linux-x86_64-3.10/numpy/distutils copying numpy/distutils/system_info.py -> build/lib.linux-x86_64-3.10/numpy/distutils copying numpy/distutils/__init__.py -> build/lib.linux-x86_64-3.10/numpy/distutils copying numpy/distutils/lib2def.py -> build/lib.linux-x86_64-3.10/numpy/distutils copying numpy/distutils/cpuinfo.py -> build/lib.linux-x86_64-3.10/numpy/distutils copying numpy/distutils/ccompiler.py -> build/lib.linux-x86_64-3.10/numpy/distutils copying numpy/distutils/line_endings.py -> build/lib.linux-x86_64-3.10/numpy/distutils copying numpy/distutils/npy_pkg_config.py -> build/lib.linux-x86_64-3.10/numpy/distutils copying numpy/distutils/setup.py -> build/lib.linux-x86_64-3.10/numpy/distutils copying numpy/distutils/extension.py -> build/lib.linux-x86_64-3.10/numpy/distutils copying numpy/distutils/misc_util.py -> build/lib.linux-x86_64-3.10/numpy/distutils copying numpy/distutils/mingw32ccompiler.py -> build/lib.linux-x86_64-3.10/numpy/distutils copying numpy/distutils/log.py -> build/lib.linux-x86_64-3.10/numpy/distutils copying numpy/distutils/_shell_utils.py -> build/lib.linux-x86_64-3.10/numpy/distutils copying numpy/distutils/unixccompiler.py -> build/lib.linux-x86_64-3.10/numpy/distutils copying numpy/distutils/conv_template.py -> build/lib.linux-x86_64-3.10/numpy/distutils copying numpy/distutils/intelccompiler.py -> build/lib.linux-x86_64-3.10/numpy/distutils copying numpy/distutils/from_template.py -> build/lib.linux-x86_64-3.10/numpy/distutils copying numpy/distutils/pathccompiler.py -> build/lib.linux-x86_64-3.10/numpy/distutils copying numpy/distutils/msvc9compiler.py -> build/lib.linux-x86_64-3.10/numpy/distutils copying numpy/distutils/numpy_distribution.py -> build/lib.linux-x86_64-3.10/numpy/distutils copying numpy/distutils/core.py -> build/lib.linux-x86_64-3.10/numpy/distutils copying numpy/distutils/msvccompiler.py -> build/lib.linux-x86_64-3.10/numpy/distutils copying build/src.linux-x86_64-3.10/numpy/distutils/__config__.py -> build/lib.linux-x86_64-3.10/numpy/distutils creating build/lib.linux-x86_64-3.10/numpy/distutils/command copying numpy/distutils/command/config.py -> build/lib.linux-x86_64-3.10/numpy/distutils/command copying numpy/distutils/command/__init__.py -> build/lib.linux-x86_64-3.10/numpy/distutils/command copying numpy/distutils/command/develop.py -> build/lib.linux-x86_64-3.10/numpy/distutils/command copying numpy/distutils/command/egg_info.py -> build/lib.linux-x86_64-3.10/numpy/distutils/command copying numpy/distutils/command/bdist_rpm.py -> build/lib.linux-x86_64-3.10/numpy/distutils/command copying numpy/distutils/command/install_clib.py -> build/lib.linux-x86_64-3.10/numpy/distutils/command copying numpy/distutils/command/build_py.py -> build/lib.linux-x86_64-3.10/numpy/distutils/command copying numpy/distutils/command/build.py -> build/lib.linux-x86_64-3.10/numpy/distutils/command copying numpy/distutils/command/sdist.py -> build/lib.linux-x86_64-3.10/numpy/distutils/command copying numpy/distutils/command/install.py -> build/lib.linux-x86_64-3.10/numpy/distutils/command copying numpy/distutils/command/build_ext.py -> build/lib.linux-x86_64-3.10/numpy/distutils/command copying numpy/distutils/command/install_headers.py -> build/lib.linux-x86_64-3.10/numpy/distutils/command copying numpy/distutils/command/autodist.py -> build/lib.linux-x86_64-3.10/numpy/distutils/command copying numpy/distutils/command/config_compiler.py -> build/lib.linux-x86_64-3.10/numpy/distutils/command copying numpy/distutils/command/build_scripts.py -> build/lib.linux-x86_64-3.10/numpy/distutils/command copying numpy/distutils/command/install_data.py -> build/lib.linux-x86_64-3.10/numpy/distutils/command copying numpy/distutils/command/build_src.py -> build/lib.linux-x86_64-3.10/numpy/distutils/command copying numpy/distutils/command/build_clib.py -> build/lib.linux-x86_64-3.10/numpy/distutils/command creating build/lib.linux-x86_64-3.10/numpy/distutils/fcompiler copying numpy/distutils/fcompiler/lahey.py -> build/lib.linux-x86_64-3.10/numpy/distutils/fcompiler copying numpy/distutils/fcompiler/nv.py -> build/lib.linux-x86_64-3.10/numpy/distutils/fcompiler copying numpy/distutils/fcompiler/compaq.py -> build/lib.linux-x86_64-3.10/numpy/distutils/fcompiler copying numpy/distutils/fcompiler/__init__.py -> build/lib.linux-x86_64-3.10/numpy/distutils/fcompiler copying numpy/distutils/fcompiler/sun.py -> build/lib.linux-x86_64-3.10/numpy/distutils/fcompiler copying numpy/distutils/fcompiler/g95.py -> build/lib.linux-x86_64-3.10/numpy/distutils/fcompiler copying numpy/distutils/fcompiler/gnu.py -> build/lib.linux-x86_64-3.10/numpy/distutils/fcompiler copying numpy/distutils/fcompiler/pathf95.py -> build/lib.linux-x86_64-3.10/numpy/distutils/fcompiler copying numpy/distutils/fcompiler/vast.py -> build/lib.linux-x86_64-3.10/numpy/distutils/fcompiler copying numpy/distutils/fcompiler/environment.py -> build/lib.linux-x86_64-3.10/numpy/distutils/fcompiler copying numpy/distutils/fcompiler/nag.py -> build/lib.linux-x86_64-3.10/numpy/distutils/fcompiler copying numpy/distutils/fcompiler/intel.py -> build/lib.linux-x86_64-3.10/numpy/distutils/fcompiler copying numpy/distutils/fcompiler/none.py -> build/lib.linux-x86_64-3.10/numpy/distutils/fcompiler copying numpy/distutils/fcompiler/mips.py -> build/lib.linux-x86_64-3.10/numpy/distutils/fcompiler copying numpy/distutils/fcompiler/hpux.py -> build/lib.linux-x86_64-3.10/numpy/distutils/fcompiler copying numpy/distutils/fcompiler/pg.py -> build/lib.linux-x86_64-3.10/numpy/distutils/fcompiler copying numpy/distutils/fcompiler/ibm.py -> build/lib.linux-x86_64-3.10/numpy/distutils/fcompiler copying numpy/distutils/fcompiler/absoft.py -> build/lib.linux-x86_64-3.10/numpy/distutils/fcompiler creating build/lib.linux-x86_64-3.10/numpy/distutils/tests copying numpy/distutils/tests/__init__.py -> build/lib.linux-x86_64-3.10/numpy/distutils/tests copying numpy/distutils/tests/test_mingw32ccompiler.py -> build/lib.linux-x86_64-3.10/numpy/distutils/tests copying numpy/distutils/tests/test_fcompiler_intel.py -> build/lib.linux-x86_64-3.10/numpy/distutils/tests copying numpy/distutils/tests/test_fcompiler.py -> build/lib.linux-x86_64-3.10/numpy/distutils/tests copying numpy/distutils/tests/test_from_template.py -> build/lib.linux-x86_64-3.10/numpy/distutils/tests copying numpy/distutils/tests/test_misc_util.py -> build/lib.linux-x86_64-3.10/numpy/distutils/tests copying numpy/distutils/tests/test_fcompiler_nagfor.py -> build/lib.linux-x86_64-3.10/numpy/distutils/tests copying numpy/distutils/tests/test_shell_utils.py -> build/lib.linux-x86_64-3.10/numpy/distutils/tests copying numpy/distutils/tests/test_fcompiler_gnu.py -> build/lib.linux-x86_64-3.10/numpy/distutils/tests copying numpy/distutils/tests/test_exec_command.py -> build/lib.linux-x86_64-3.10/numpy/distutils/tests copying numpy/distutils/tests/test_npy_pkg_config.py -> build/lib.linux-x86_64-3.10/numpy/distutils/tests copying numpy/distutils/tests/test_system_info.py -> build/lib.linux-x86_64-3.10/numpy/distutils/tests creating build/lib.linux-x86_64-3.10/numpy/doc copying numpy/doc/__init__.py -> build/lib.linux-x86_64-3.10/numpy/doc copying numpy/doc/misc.py -> build/lib.linux-x86_64-3.10/numpy/doc copying numpy/doc/internals.py -> build/lib.linux-x86_64-3.10/numpy/doc copying numpy/doc/structured_arrays.py -> build/lib.linux-x86_64-3.10/numpy/doc copying numpy/doc/glossary.py -> build/lib.linux-x86_64-3.10/numpy/doc copying numpy/doc/dispatch.py -> build/lib.linux-x86_64-3.10/numpy/doc copying numpy/doc/constants.py -> build/lib.linux-x86_64-3.10/numpy/doc copying numpy/doc/basics.py -> build/lib.linux-x86_64-3.10/numpy/doc copying numpy/doc/broadcasting.py -> build/lib.linux-x86_64-3.10/numpy/doc copying numpy/doc/subclassing.py -> build/lib.linux-x86_64-3.10/numpy/doc copying numpy/doc/creation.py -> build/lib.linux-x86_64-3.10/numpy/doc copying numpy/doc/ufuncs.py -> build/lib.linux-x86_64-3.10/numpy/doc copying numpy/doc/byteswapping.py -> build/lib.linux-x86_64-3.10/numpy/doc copying numpy/doc/indexing.py -> build/lib.linux-x86_64-3.10/numpy/doc creating build/lib.linux-x86_64-3.10/numpy/f2py copying numpy/f2py/__init__.py -> build/lib.linux-x86_64-3.10/numpy/f2py copying numpy/f2py/rules.py -> build/lib.linux-x86_64-3.10/numpy/f2py copying numpy/f2py/cb_rules.py -> build/lib.linux-x86_64-3.10/numpy/f2py copying numpy/f2py/f2py_testing.py -> build/lib.linux-x86_64-3.10/numpy/f2py copying numpy/f2py/f90mod_rules.py -> build/lib.linux-x86_64-3.10/numpy/f2py copying numpy/f2py/func2subr.py -> build/lib.linux-x86_64-3.10/numpy/f2py copying numpy/f2py/setup.py -> build/lib.linux-x86_64-3.10/numpy/f2py copying numpy/f2py/crackfortran.py -> build/lib.linux-x86_64-3.10/numpy/f2py copying numpy/f2py/diagnose.py -> build/lib.linux-x86_64-3.10/numpy/f2py copying numpy/f2py/use_rules.py -> build/lib.linux-x86_64-3.10/numpy/f2py copying numpy/f2py/capi_maps.py -> build/lib.linux-x86_64-3.10/numpy/f2py copying numpy/f2py/auxfuncs.py -> build/lib.linux-x86_64-3.10/numpy/f2py copying numpy/f2py/__main__.py -> build/lib.linux-x86_64-3.10/numpy/f2py copying numpy/f2py/cfuncs.py -> build/lib.linux-x86_64-3.10/numpy/f2py copying numpy/f2py/f2py2e.py -> build/lib.linux-x86_64-3.10/numpy/f2py copying numpy/f2py/__version__.py -> build/lib.linux-x86_64-3.10/numpy/f2py copying numpy/f2py/common_rules.py -> build/lib.linux-x86_64-3.10/numpy/f2py creating build/lib.linux-x86_64-3.10/numpy/f2py/tests copying numpy/f2py/tests/test_kind.py -> build/lib.linux-x86_64-3.10/numpy/f2py/tests copying numpy/f2py/tests/test_return_logical.py -> build/lib.linux-x86_64-3.10/numpy/f2py/tests copying numpy/f2py/tests/test_quoted_character.py -> build/lib.linux-x86_64-3.10/numpy/f2py/tests copying numpy/f2py/tests/__init__.py -> build/lib.linux-x86_64-3.10/numpy/f2py/tests copying numpy/f2py/tests/test_string.py -> build/lib.linux-x86_64-3.10/numpy/f2py/tests copying numpy/f2py/tests/test_block_docstring.py -> build/lib.linux-x86_64-3.10/numpy/f2py/tests copying numpy/f2py/tests/test_assumed_shape.py -> build/lib.linux-x86_64-3.10/numpy/f2py/tests copying numpy/f2py/tests/test_semicolon_split.py -> build/lib.linux-x86_64-3.10/numpy/f2py/tests copying numpy/f2py/tests/test_crackfortran.py -> build/lib.linux-x86_64-3.10/numpy/f2py/tests copying numpy/f2py/tests/test_return_complex.py -> build/lib.linux-x86_64-3.10/numpy/f2py/tests copying numpy/f2py/tests/test_return_character.py -> build/lib.linux-x86_64-3.10/numpy/f2py/tests copying numpy/f2py/tests/test_mixed.py -> build/lib.linux-x86_64-3.10/numpy/f2py/tests copying numpy/f2py/tests/test_parameter.py -> build/lib.linux-x86_64-3.10/numpy/f2py/tests copying numpy/f2py/tests/test_callback.py -> build/lib.linux-x86_64-3.10/numpy/f2py/tests copying numpy/f2py/tests/test_return_integer.py -> build/lib.linux-x86_64-3.10/numpy/f2py/tests copying numpy/f2py/tests/util.py -> build/lib.linux-x86_64-3.10/numpy/f2py/tests copying numpy/f2py/tests/test_return_real.py -> build/lib.linux-x86_64-3.10/numpy/f2py/tests copying numpy/f2py/tests/test_array_from_pyobj.py -> build/lib.linux-x86_64-3.10/numpy/f2py/tests copying numpy/f2py/tests/test_common.py -> build/lib.linux-x86_64-3.10/numpy/f2py/tests copying numpy/f2py/tests/test_compile_function.py -> build/lib.linux-x86_64-3.10/numpy/f2py/tests copying numpy/f2py/tests/test_size.py -> build/lib.linux-x86_64-3.10/numpy/f2py/tests copying numpy/f2py/tests/test_regression.py -> build/lib.linux-x86_64-3.10/numpy/f2py/tests creating build/lib.linux-x86_64-3.10/numpy/fft copying numpy/fft/__init__.py -> build/lib.linux-x86_64-3.10/numpy/fft copying numpy/fft/setup.py -> build/lib.linux-x86_64-3.10/numpy/fft copying numpy/fft/helper.py -> build/lib.linux-x86_64-3.10/numpy/fft copying numpy/fft/_pocketfft.py -> build/lib.linux-x86_64-3.10/numpy/fft creating build/lib.linux-x86_64-3.10/numpy/fft/tests copying numpy/fft/tests/test_pocketfft.py -> build/lib.linux-x86_64-3.10/numpy/fft/tests copying numpy/fft/tests/__init__.py -> build/lib.linux-x86_64-3.10/numpy/fft/tests copying numpy/fft/tests/test_helper.py -> build/lib.linux-x86_64-3.10/numpy/fft/tests creating build/lib.linux-x86_64-3.10/numpy/lib copying numpy/lib/__init__.py -> build/lib.linux-x86_64-3.10/numpy/lib copying numpy/lib/arraypad.py -> build/lib.linux-x86_64-3.10/numpy/lib copying numpy/lib/format.py -> build/lib.linux-x86_64-3.10/numpy/lib copying numpy/lib/stride_tricks.py -> build/lib.linux-x86_64-3.10/numpy/lib copying numpy/lib/_datasource.py -> build/lib.linux-x86_64-3.10/numpy/lib copying numpy/lib/ufunclike.py -> build/lib.linux-x86_64-3.10/numpy/lib copying numpy/lib/histograms.py -> build/lib.linux-x86_64-3.10/numpy/lib copying numpy/lib/twodim_base.py -> build/lib.linux-x86_64-3.10/numpy/lib copying numpy/lib/setup.py -> build/lib.linux-x86_64-3.10/numpy/lib copying numpy/lib/_version.py -> build/lib.linux-x86_64-3.10/numpy/lib copying numpy/lib/arraysetops.py -> build/lib.linux-x86_64-3.10/numpy/lib copying numpy/lib/user_array.py -> build/lib.linux-x86_64-3.10/numpy/lib copying numpy/lib/function_base.py -> build/lib.linux-x86_64-3.10/numpy/lib copying numpy/lib/utils.py -> build/lib.linux-x86_64-3.10/numpy/lib copying numpy/lib/type_check.py -> build/lib.linux-x86_64-3.10/numpy/lib copying numpy/lib/index_tricks.py -> build/lib.linux-x86_64-3.10/numpy/lib copying numpy/lib/npyio.py -> build/lib.linux-x86_64-3.10/numpy/lib copying numpy/lib/_iotools.py -> build/lib.linux-x86_64-3.10/numpy/lib copying numpy/lib/nanfunctions.py -> build/lib.linux-x86_64-3.10/numpy/lib copying numpy/lib/recfunctions.py -> build/lib.linux-x86_64-3.10/numpy/lib copying numpy/lib/polynomial.py -> build/lib.linux-x86_64-3.10/numpy/lib copying numpy/lib/shape_base.py -> build/lib.linux-x86_64-3.10/numpy/lib copying numpy/lib/financial.py -> build/lib.linux-x86_64-3.10/numpy/lib copying numpy/lib/scimath.py -> build/lib.linux-x86_64-3.10/numpy/lib copying numpy/lib/arrayterator.py -> build/lib.linux-x86_64-3.10/numpy/lib copying numpy/lib/mixins.py -> build/lib.linux-x86_64-3.10/numpy/lib creating build/lib.linux-x86_64-3.10/numpy/lib/tests copying numpy/lib/tests/test_ufunclike.py -> build/lib.linux-x86_64-3.10/numpy/lib/tests copying numpy/lib/tests/test__datasource.py -> build/lib.linux-x86_64-3.10/numpy/lib/tests copying numpy/lib/tests/test_mixins.py -> build/lib.linux-x86_64-3.10/numpy/lib/tests copying numpy/lib/tests/test_function_base.py -> build/lib.linux-x86_64-3.10/numpy/lib/tests copying numpy/lib/tests/__init__.py -> build/lib.linux-x86_64-3.10/numpy/lib/tests copying numpy/lib/tests/test_arraysetops.py -> build/lib.linux-x86_64-3.10/numpy/lib/tests copying numpy/lib/tests/test_financial.py -> build/lib.linux-x86_64-3.10/numpy/lib/tests copying numpy/lib/tests/test_packbits.py -> build/lib.linux-x86_64-3.10/numpy/lib/tests copying numpy/lib/tests/test_io.py -> build/lib.linux-x86_64-3.10/numpy/lib/tests copying numpy/lib/tests/test__iotools.py -> build/lib.linux-x86_64-3.10/numpy/lib/tests copying numpy/lib/tests/test_twodim_base.py -> build/lib.linux-x86_64-3.10/numpy/lib/tests copying numpy/lib/tests/test_arraypad.py -> build/lib.linux-x86_64-3.10/numpy/lib/tests copying numpy/lib/tests/test_recfunctions.py -> build/lib.linux-x86_64-3.10/numpy/lib/tests copying numpy/lib/tests/test_polynomial.py -> build/lib.linux-x86_64-3.10/numpy/lib/tests copying numpy/lib/tests/test_format.py -> build/lib.linux-x86_64-3.10/numpy/lib/tests copying numpy/lib/tests/test__version.py -> build/lib.linux-x86_64-3.10/numpy/lib/tests copying numpy/lib/tests/test_index_tricks.py -> build/lib.linux-x86_64-3.10/numpy/lib/tests copying numpy/lib/tests/test_histograms.py -> build/lib.linux-x86_64-3.10/numpy/lib/tests copying numpy/lib/tests/test_arrayterator.py -> build/lib.linux-x86_64-3.10/numpy/lib/tests copying numpy/lib/tests/test_shape_base.py -> build/lib.linux-x86_64-3.10/numpy/lib/tests copying numpy/lib/tests/test_utils.py -> build/lib.linux-x86_64-3.10/numpy/lib/tests copying numpy/lib/tests/test_nanfunctions.py -> build/lib.linux-x86_64-3.10/numpy/lib/tests copying numpy/lib/tests/test_regression.py -> build/lib.linux-x86_64-3.10/numpy/lib/tests copying numpy/lib/tests/test_type_check.py -> build/lib.linux-x86_64-3.10/numpy/lib/tests copying numpy/lib/tests/test_stride_tricks.py -> build/lib.linux-x86_64-3.10/numpy/lib/tests creating build/lib.linux-x86_64-3.10/numpy/linalg copying numpy/linalg/__init__.py -> build/lib.linux-x86_64-3.10/numpy/linalg copying numpy/linalg/setup.py -> build/lib.linux-x86_64-3.10/numpy/linalg copying numpy/linalg/linalg.py -> build/lib.linux-x86_64-3.10/numpy/linalg creating build/lib.linux-x86_64-3.10/numpy/linalg/tests copying numpy/linalg/tests/__init__.py -> build/lib.linux-x86_64-3.10/numpy/linalg/tests copying numpy/linalg/tests/test_linalg.py -> build/lib.linux-x86_64-3.10/numpy/linalg/tests copying numpy/linalg/tests/test_deprecations.py -> build/lib.linux-x86_64-3.10/numpy/linalg/tests copying numpy/linalg/tests/test_build.py -> build/lib.linux-x86_64-3.10/numpy/linalg/tests copying numpy/linalg/tests/test_regression.py -> build/lib.linux-x86_64-3.10/numpy/linalg/tests creating build/lib.linux-x86_64-3.10/numpy/ma copying numpy/ma/__init__.py -> build/lib.linux-x86_64-3.10/numpy/ma copying numpy/ma/extras.py -> build/lib.linux-x86_64-3.10/numpy/ma copying numpy/ma/setup.py -> build/lib.linux-x86_64-3.10/numpy/ma copying numpy/ma/testutils.py -> build/lib.linux-x86_64-3.10/numpy/ma copying numpy/ma/timer_comparison.py -> build/lib.linux-x86_64-3.10/numpy/ma copying numpy/ma/mrecords.py -> build/lib.linux-x86_64-3.10/numpy/ma copying numpy/ma/bench.py -> build/lib.linux-x86_64-3.10/numpy/ma copying numpy/ma/core.py -> build/lib.linux-x86_64-3.10/numpy/ma creating build/lib.linux-x86_64-3.10/numpy/ma/tests copying numpy/ma/tests/__init__.py -> build/lib.linux-x86_64-3.10/numpy/ma/tests copying numpy/ma/tests/test_core.py -> build/lib.linux-x86_64-3.10/numpy/ma/tests copying numpy/ma/tests/test_deprecations.py -> build/lib.linux-x86_64-3.10/numpy/ma/tests copying numpy/ma/tests/test_extras.py -> build/lib.linux-x86_64-3.10/numpy/ma/tests copying numpy/ma/tests/test_subclassing.py -> build/lib.linux-x86_64-3.10/numpy/ma/tests copying numpy/ma/tests/test_old_ma.py -> build/lib.linux-x86_64-3.10/numpy/ma/tests copying numpy/ma/tests/test_regression.py -> build/lib.linux-x86_64-3.10/numpy/ma/tests copying numpy/ma/tests/test_mrecords.py -> build/lib.linux-x86_64-3.10/numpy/ma/tests creating build/lib.linux-x86_64-3.10/numpy/matrixlib copying numpy/matrixlib/__init__.py -> build/lib.linux-x86_64-3.10/numpy/matrixlib copying numpy/matrixlib/setup.py -> build/lib.linux-x86_64-3.10/numpy/matrixlib copying numpy/matrixlib/defmatrix.py -> build/lib.linux-x86_64-3.10/numpy/matrixlib creating build/lib.linux-x86_64-3.10/numpy/matrixlib/tests copying numpy/matrixlib/tests/test_matrix_linalg.py -> build/lib.linux-x86_64-3.10/numpy/matrixlib/tests copying numpy/matrixlib/tests/__init__.py -> build/lib.linux-x86_64-3.10/numpy/matrixlib/tests copying numpy/matrixlib/tests/test_multiarray.py -> build/lib.linux-x86_64-3.10/numpy/matrixlib/tests copying numpy/matrixlib/tests/test_masked_matrix.py -> build/lib.linux-x86_64-3.10/numpy/matrixlib/tests copying numpy/matrixlib/tests/test_defmatrix.py -> build/lib.linux-x86_64-3.10/numpy/matrixlib/tests copying numpy/matrixlib/tests/test_numeric.py -> build/lib.linux-x86_64-3.10/numpy/matrixlib/tests copying numpy/matrixlib/tests/test_regression.py -> build/lib.linux-x86_64-3.10/numpy/matrixlib/tests copying numpy/matrixlib/tests/test_interaction.py -> build/lib.linux-x86_64-3.10/numpy/matrixlib/tests creating build/lib.linux-x86_64-3.10/numpy/polynomial copying numpy/polynomial/legendre.py -> build/lib.linux-x86_64-3.10/numpy/polynomial copying numpy/polynomial/__init__.py -> build/lib.linux-x86_64-3.10/numpy/polynomial copying numpy/polynomial/_polybase.py -> build/lib.linux-x86_64-3.10/numpy/polynomial copying numpy/polynomial/chebyshev.py -> build/lib.linux-x86_64-3.10/numpy/polynomial copying numpy/polynomial/setup.py -> build/lib.linux-x86_64-3.10/numpy/polynomial copying numpy/polynomial/polynomial.py -> build/lib.linux-x86_64-3.10/numpy/polynomial copying numpy/polynomial/polyutils.py -> build/lib.linux-x86_64-3.10/numpy/polynomial copying numpy/polynomial/laguerre.py -> build/lib.linux-x86_64-3.10/numpy/polynomial copying numpy/polynomial/hermite_e.py -> build/lib.linux-x86_64-3.10/numpy/polynomial copying numpy/polynomial/hermite.py -> build/lib.linux-x86_64-3.10/numpy/polynomial creating build/lib.linux-x86_64-3.10/numpy/polynomial/tests copying numpy/polynomial/tests/test_legendre.py -> build/lib.linux-x86_64-3.10/numpy/polynomial/tests copying numpy/polynomial/tests/__init__.py -> build/lib.linux-x86_64-3.10/numpy/polynomial/tests copying numpy/polynomial/tests/test_hermite.py -> build/lib.linux-x86_64-3.10/numpy/polynomial/tests copying numpy/polynomial/tests/test_laguerre.py -> build/lib.linux-x86_64-3.10/numpy/polynomial/tests copying numpy/polynomial/tests/test_hermite_e.py -> build/lib.linux-x86_64-3.10/numpy/polynomial/tests copying numpy/polynomial/tests/test_polynomial.py -> build/lib.linux-x86_64-3.10/numpy/polynomial/tests copying numpy/polynomial/tests/test_polyutils.py -> build/lib.linux-x86_64-3.10/numpy/polynomial/tests copying numpy/polynomial/tests/test_classes.py -> build/lib.linux-x86_64-3.10/numpy/polynomial/tests copying numpy/polynomial/tests/test_printing.py -> build/lib.linux-x86_64-3.10/numpy/polynomial/tests copying numpy/polynomial/tests/test_chebyshev.py -> build/lib.linux-x86_64-3.10/numpy/polynomial/tests creating build/lib.linux-x86_64-3.10/numpy/random copying numpy/random/__init__.py -> build/lib.linux-x86_64-3.10/numpy/random copying numpy/random/_pickle.py -> build/lib.linux-x86_64-3.10/numpy/random copying numpy/random/setup.py -> build/lib.linux-x86_64-3.10/numpy/random creating build/lib.linux-x86_64-3.10/numpy/random/tests copying numpy/random/tests/__init__.py -> build/lib.linux-x86_64-3.10/numpy/random/tests copying numpy/random/tests/test_randomstate_regression.py -> build/lib.linux-x86_64-3.10/numpy/random/tests copying numpy/random/tests/test_generator_mt19937.py -> build/lib.linux-x86_64-3.10/numpy/random/tests copying numpy/random/tests/test_generator_mt19937_regressions.py -> build/lib.linux-x86_64-3.10/numpy/random/tests copying numpy/random/tests/test_random.py -> build/lib.linux-x86_64-3.10/numpy/random/tests copying numpy/random/tests/test_smoke.py -> build/lib.linux-x86_64-3.10/numpy/random/tests copying numpy/random/tests/test_seed_sequence.py -> build/lib.linux-x86_64-3.10/numpy/random/tests copying numpy/random/tests/test_extending.py -> build/lib.linux-x86_64-3.10/numpy/random/tests copying numpy/random/tests/test_regression.py -> build/lib.linux-x86_64-3.10/numpy/random/tests copying numpy/random/tests/test_direct.py -> build/lib.linux-x86_64-3.10/numpy/random/tests copying numpy/random/tests/test_randomstate.py -> build/lib.linux-x86_64-3.10/numpy/random/tests creating build/lib.linux-x86_64-3.10/numpy/testing copying numpy/testing/__init__.py -> build/lib.linux-x86_64-3.10/numpy/testing copying numpy/testing/print_coercion_tables.py -> build/lib.linux-x86_64-3.10/numpy/testing copying numpy/testing/setup.py -> build/lib.linux-x86_64-3.10/numpy/testing copying numpy/testing/utils.py -> build/lib.linux-x86_64-3.10/numpy/testing creating build/lib.linux-x86_64-3.10/numpy/testing/_private copying numpy/testing/_private/__init__.py -> build/lib.linux-x86_64-3.10/numpy/testing/_private copying numpy/testing/_private/decorators.py -> build/lib.linux-x86_64-3.10/numpy/testing/_private copying numpy/testing/_private/parameterized.py -> build/lib.linux-x86_64-3.10/numpy/testing/_private copying numpy/testing/_private/utils.py -> build/lib.linux-x86_64-3.10/numpy/testing/_private copying numpy/testing/_private/noseclasses.py -> build/lib.linux-x86_64-3.10/numpy/testing/_private copying numpy/testing/_private/nosetester.py -> build/lib.linux-x86_64-3.10/numpy/testing/_private creating build/lib.linux-x86_64-3.10/numpy/testing/tests copying numpy/testing/tests/__init__.py -> build/lib.linux-x86_64-3.10/numpy/testing/tests copying numpy/testing/tests/test_doctesting.py -> build/lib.linux-x86_64-3.10/numpy/testing/tests copying numpy/testing/tests/test_utils.py -> build/lib.linux-x86_64-3.10/numpy/testing/tests copying numpy/testing/tests/test_decorators.py -> build/lib.linux-x86_64-3.10/numpy/testing/tests creating build/lib.linux-x86_64-3.10/numpy/tests copying numpy/tests/__init__.py -> build/lib.linux-x86_64-3.10/numpy/tests copying numpy/tests/test_matlib.py -> build/lib.linux-x86_64-3.10/numpy/tests copying numpy/tests/test_public_api.py -> build/lib.linux-x86_64-3.10/numpy/tests copying numpy/tests/test_reloading.py -> build/lib.linux-x86_64-3.10/numpy/tests copying numpy/tests/test_ctypeslib.py -> build/lib.linux-x86_64-3.10/numpy/tests copying numpy/tests/test_warnings.py -> build/lib.linux-x86_64-3.10/numpy/tests copying numpy/tests/test_numpy_version.py -> build/lib.linux-x86_64-3.10/numpy/tests copying numpy/tests/test_scripts.py -> build/lib.linux-x86_64-3.10/numpy/tests running build_clib customize UnixCCompiler customize UnixCCompiler using new_build_clib building 'npymath' library compiling C sources C compiler: gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC creating build/temp.linux-x86_64-3.10 creating build/temp.linux-x86_64-3.10/numpy creating build/temp.linux-x86_64-3.10/numpy/core creating build/temp.linux-x86_64-3.10/numpy/core/src creating build/temp.linux-x86_64-3.10/numpy/core/src/npymath creating build/temp.linux-x86_64-3.10/build creating build/temp.linux-x86_64-3.10/build/src.linux-x86_64-3.10 creating build/temp.linux-x86_64-3.10/build/src.linux-x86_64-3.10/numpy creating build/temp.linux-x86_64-3.10/build/src.linux-x86_64-3.10/numpy/core creating build/temp.linux-x86_64-3.10/build/src.linux-x86_64-3.10/numpy/core/src creating build/temp.linux-x86_64-3.10/build/src.linux-x86_64-3.10/numpy/core/src/npymath compile options: '-Ibuild/src.linux-x86_64-3.10/numpy/core/src/npymath -Inumpy/core/include -Ibuild/src.linux-x86_64-3.10/numpy/core/include/numpy -Inumpy/core/src/common -Inumpy/core/src -Inumpy/core -Inumpy/core/src/npymath -Inumpy/core/src/multiarray -Inumpy/core/src/umath -Inumpy/core/src/npysort -I/usr/local/python/3.10.4/include/python3.10 -Ibuild/src.linux-x86_64-3.10/numpy/core/src/common -Ibuild/src.linux-x86_64-3.10/numpy/core/src/npymath -c' extra options: '-std=c99' gcc: numpy/core/src/npymath/npy_math.c gcc: build/src.linux-x86_64-3.10/numpy/core/src/npymath/ieee754.c gcc: build/src.linux-x86_64-3.10/numpy/core/src/npymath/npy_math_complex.c gcc: numpy/core/src/npymath/halffloat.c ar: adding 4 object files to build/temp.linux-x86_64-3.10/libnpymath.a building 'npysort' library compiling C sources C compiler: gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC creating build/temp.linux-x86_64-3.10/build/src.linux-x86_64-3.10/numpy/core/src/npysort compile options: '-Ibuild/src.linux-x86_64-3.10/numpy/core/src/common -Inumpy/core/include -Ibuild/src.linux-x86_64-3.10/numpy/core/include/numpy -Inumpy/core/src/common -Inumpy/core/src -Inumpy/core -Inumpy/core/src/npymath -Inumpy/core/src/multiarray -Inumpy/core/src/umath -Inumpy/core/src/npysort -I/usr/local/python/3.10.4/include/python3.10 -Ibuild/src.linux-x86_64-3.10/numpy/core/src/common -Ibuild/src.linux-x86_64-3.10/numpy/core/src/npymath -c' extra options: '-std=c99' gcc: build/src.linux-x86_64-3.10/numpy/core/src/npysort/mergesort.c gcc: build/src.linux-x86_64-3.10/numpy/core/src/npysort/quicksort.c gcc: build/src.linux-x86_64-3.10/numpy/core/src/npysort/timsort.c gcc: build/src.linux-x86_64-3.10/numpy/core/src/npysort/heapsort.c gcc: build/src.linux-x86_64-3.10/numpy/core/src/npysort/radixsort.c gcc: build/src.linux-x86_64-3.10/numpy/core/src/npysort/selection.c gcc: build/src.linux-x86_64-3.10/numpy/core/src/npysort/binsearch.c ar: adding 7 object files to build/temp.linux-x86_64-3.10/libnpysort.a building 'npyrandom' library compiling C sources C compiler: gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC creating build/temp.linux-x86_64-3.10/numpy/random creating build/temp.linux-x86_64-3.10/numpy/random/src creating build/temp.linux-x86_64-3.10/numpy/random/src/distributions compile options: '-Inumpy/core/include -Ibuild/src.linux-x86_64-3.10/numpy/core/include/numpy -Inumpy/core/src/common -Inumpy/core/src -Inumpy/core -Inumpy/core/src/npymath -Inumpy/core/src/multiarray -Inumpy/core/src/umath -Inumpy/core/src/npysort -I/usr/local/python/3.10.4/include/python3.10 -Ibuild/src.linux-x86_64-3.10/numpy/core/src/common -Ibuild/src.linux-x86_64-3.10/numpy/core/src/npymath -c' extra options: '-std=c99' gcc: numpy/random/src/distributions/distributions.c gcc: numpy/random/src/distributions/logfactorial.c gcc: numpy/random/src/distributions/random_mvhg_count.c gcc: numpy/random/src/distributions/random_mvhg_marginals.c gcc: numpy/random/src/distributions/random_hypergeometric.c ar: adding 5 object files to build/temp.linux-x86_64-3.10/libnpyrandom.a running build_ext customize UnixCCompiler customize UnixCCompiler using new_build_ext building 'numpy.core._multiarray_tests' extension compiling C sources C compiler: gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC creating build/temp.linux-x86_64-3.10/build/src.linux-x86_64-3.10/numpy/core/src/multiarray creating build/temp.linux-x86_64-3.10/numpy/core/src/common compile options: '-DNPY_INTERNAL_BUILD=1 -DHAVE_NPY_CONFIG_H=1 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1 -D_LARGEFILE64_SOURCE=1 -Inumpy/core/include -Ibuild/src.linux-x86_64-3.10/numpy/core/include/numpy -Inumpy/core/src/common -Inumpy/core/src -Inumpy/core -Inumpy/core/src/npymath -Inumpy/core/src/multiarray -Inumpy/core/src/umath -Inumpy/core/src/npysort -I/usr/local/python/3.10.4/include/python3.10 -Ibuild/src.linux-x86_64-3.10/numpy/core/src/common -Ibuild/src.linux-x86_64-3.10/numpy/core/src/npymath -c' extra options: '-std=c99' gcc: build/src.linux-x86_64-3.10/numpy/core/src/multiarray/_multiarray_tests.c gcc: numpy/core/src/common/mem_overlap.c gcc -pthread -shared build/temp.linux-x86_64-3.10/build/src.linux-x86_64-3.10/numpy/core/src/multiarray/_multiarray_tests.o build/temp.linux-x86_64-3.10/numpy/core/src/common/mem_overlap.o -Lbuild/temp.linux-x86_64-3.10 -lnpymath -o build/lib.linux-x86_64-3.10/numpy/core/_multiarray_tests.cpython-310-x86_64-linux-gnu.so building 'numpy.core._multiarray_umath' extension compiling C sources C compiler: gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC creating build/temp.linux-x86_64-3.10/numpy/core/src/multiarray creating build/temp.linux-x86_64-3.10/numpy/core/src/umath creating build/temp.linux-x86_64-3.10/build/src.linux-x86_64-3.10/numpy/core/src/umath creating build/temp.linux-x86_64-3.10/build/src.linux-x86_64-3.10/numpy/core/src/common compile options: '-DNPY_INTERNAL_BUILD=1 -DHAVE_NPY_CONFIG_H=1 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1 -D_LARGEFILE64_SOURCE=1 -Ibuild/src.linux-x86_64-3.10/numpy/core/src/umath -Ibuild/src.linux-x86_64-3.10/numpy/core/src/npymath -Ibuild/src.linux-x86_64-3.10/numpy/core/src/common -Inumpy/core/include -Ibuild/src.linux-x86_64-3.10/numpy/core/include/numpy -Inumpy/core/src/common -Inumpy/core/src -Inumpy/core -Inumpy/core/src/npymath -Inumpy/core/src/multiarray -Inumpy/core/src/umath -Inumpy/core/src/npysort -I/usr/local/python/3.10.4/include/python3.10 -Ibuild/src.linux-x86_64-3.10/numpy/core/src/common -Ibuild/src.linux-x86_64-3.10/numpy/core/src/npymath -c' extra options: '-std=c99' gcc: numpy/core/src/multiarray/alloc.c gcc: numpy/core/src/multiarray/common.c gcc: numpy/core/src/multiarray/arrayobject.c gcc: numpy/core/src/multiarray/convert.c gcc: numpy/core/src/multiarray/convert_datatype.c gcc: build/src.linux-x86_64-3.10/numpy/core/src/multiarray/arraytypes.c gcc: numpy/core/src/multiarray/conversion_utils.c gcc: numpy/core/src/multiarray/ctors.c gcc: numpy/core/src/multiarray/datetime.c gcc: numpy/core/src/multiarray/datetime_strings.c gcc: numpy/core/src/multiarray/datetime_busday.c gcc: numpy/core/src/multiarray/datetime_busdaycal.c gcc: numpy/core/src/multiarray/descriptor.c gcc: numpy/core/src/multiarray/dragon4.c gcc: numpy/core/src/multiarray/dtype_transfer.c gcc: build/src.linux-x86_64-3.10/numpy/core/src/multiarray/einsum.c gcc: numpy/core/src/multiarray/array_assign_scalar.c gcc: numpy/core/src/multiarray/array_assign_array.c gcc: numpy/core/src/multiarray/arrayfunction_override.c gcc: numpy/core/src/multiarray/buffer.c gcc: numpy/core/src/multiarray/calculation.c gcc: numpy/core/src/multiarray/compiled_base.c gcc: build/src.linux-x86_64-3.10/numpy/core/src/multiarray/lowlevel_strided_loops.c gcc: numpy/core/src/multiarray/flagsobject.c gcc: numpy/core/src/multiarray/getset.c gcc: numpy/core/src/multiarray/hashdescr.c gcc: numpy/core/src/multiarray/item_selection.c gcc: numpy/core/src/multiarray/iterators.c gcc: numpy/core/src/multiarray/refcount.c gcc: numpy/core/src/multiarray/sequence.c gcc: numpy/core/src/multiarray/shape.c gcc: numpy/core/src/multiarray/scalarapi.c gcc: build/src.linux-x86_64-3.10/numpy/core/src/multiarray/scalartypes.c numpy/core/src/multiarray/scalartypes.c.src: In function ‘float_arrtype_hash’: numpy/core/src/multiarray/scalartypes.c.src:2968:27: error: incompatible type for argument 1 of ‘_Py_HashDouble’ 2968 | return _Py_HashDouble((double) PyArrayScalar_VAL(obj, @name@)); In file included from /usr/local/python/3.10.4/include/python3.10/Python.h:77, from numpy/core/src/multiarray/scalartypes.c.src:3: /usr/local/python/3.10.4/include/python3.10/pyhash.h:10:38: note: expected ‘PyObject *’ {aka ‘struct _object *’} but argument is of type ‘double’ 10 | PyAPI_FUNC(Py_hash_t) _Py_HashDouble(PyObject *, double); | ^~~~~~~~~~ numpy/core/src/multiarray/scalartypes.c.src:2968:12: error: too few arguments to function ‘_Py_HashDouble’ 2968 | return _Py_HashDouble((double) PyArrayScalar_VAL(obj, @name@)); | ^~~~~~~~~~~~~~ In file included from /usr/local/python/3.10.4/include/python3.10/Python.h:77, from numpy/core/src/multiarray/scalartypes.c.src:3: /usr/local/python/3.10.4/include/python3.10/pyhash.h:10:23: note: declared here 10 | PyAPI_FUNC(Py_hash_t) _Py_HashDouble(PyObject *, double); | ^~~~~~~~~~~~~~ numpy/core/src/multiarray/scalartypes.c.src: In function ‘cfloat_arrtype_hash’: numpy/core/src/multiarray/scalartypes.c.src:2976:31: error: incompatible type for argument 1 of ‘_Py_HashDouble’ 2976 | hashreal = _Py_HashDouble((double) | ^~~~~~~~ | | | double 2977 | PyArrayScalar_VAL(obj, C@name@).real); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/local/python/3.10.4/include/python3.10/Python.h:77, from numpy/core/src/multiarray/scalartypes.c.src:3: /usr/local/python/3.10.4/include/python3.10/pyhash.h:10:38: note: expected ‘PyObject *’ {aka ‘struct _object *’} but argument is of type ‘double’ 10 | PyAPI_FUNC(Py_hash_t) _Py_HashDouble(PyObject *, double); | ^~~~~~~~~~ numpy/core/src/multiarray/scalartypes.c.src:2976:16: error: too few arguments to function ‘_Py_HashDouble’ 2976 | hashreal = _Py_HashDouble((double) | ^~~~~~~~~~~~~~ In file included from /usr/local/python/3.10.4/include/python3.10/Python.h:77, from numpy/core/src/multiarray/scalartypes.c.src:3: /usr/local/python/3.10.4/include/python3.10/pyhash.h:10:23: note: declared here 10 | PyAPI_FUNC(Py_hash_t) _Py_HashDouble(PyObject *, double); | ^~~~~~~~~~~~~~ numpy/core/src/multiarray/scalartypes.c.src:2982:31: error: incompatible type for argument 1 of ‘_Py_HashDouble’ 2982 | hashimag = _Py_HashDouble((double) | ^~~~~~~~ | | | double 2983 | PyArrayScalar_VAL(obj, C@name@).imag); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/local/python/3.10.4/include/python3.10/Python.h:77, from numpy/core/src/multiarray/scalartypes.c.src:3: /usr/local/python/3.10.4/include/python3.10/pyhash.h:10:38: note: expected ‘PyObject *’ {aka ‘struct _object *’} but argument is of type ‘double’ 10 | PyAPI_FUNC(Py_hash_t) _Py_HashDouble(PyObject *, double); | ^~~~~~~~~~ numpy/core/src/multiarray/scalartypes.c.src:2982:16: error: too few arguments to function ‘_Py_HashDouble’ 2982 | hashimag = _Py_HashDouble((double) | ^~~~~~~~~~~~~~ In file included from /usr/local/python/3.10.4/include/python3.10/Python.h:77, from numpy/core/src/multiarray/scalartypes.c.src:3: /usr/local/python/3.10.4/include/python3.10/pyhash.h:10:23: note: declared here 10 | PyAPI_FUNC(Py_hash_t) _Py_HashDouble(PyObject *, double); | ^~~~~~~~~~~~~~ numpy/core/src/multiarray/scalartypes.c.src: In function ‘longdouble_arrtype_hash’: numpy/core/src/multiarray/scalartypes.c.src:2968:27: error: incompatible type for argument 1 of ‘_Py_HashDouble’ 2968 | return _Py_HashDouble((double) PyArrayScalar_VAL(obj, @name@)); In file included from /usr/local/python/3.10.4/include/python3.10/Python.h:77, from numpy/core/src/multiarray/scalartypes.c.src:3: /usr/local/python/3.10.4/include/python3.10/pyhash.h:10:38: note: expected ‘PyObject *’ {aka ‘struct _object *’} but argument is of type ‘double’ 10 | PyAPI_FUNC(Py_hash_t) _Py_HashDouble(PyObject *, double); | ^~~~~~~~~~ numpy/core/src/multiarray/scalartypes.c.src:2968:12: error: too few arguments to function ‘_Py_HashDouble’ 2968 | return _Py_HashDouble((double) PyArrayScalar_VAL(obj, @name@)); | ^~~~~~~~~~~~~~ In file included from /usr/local/python/3.10.4/include/python3.10/Python.h:77, from numpy/core/src/multiarray/scalartypes.c.src:3: /usr/local/python/3.10.4/include/python3.10/pyhash.h:10:23: note: declared here 10 | PyAPI_FUNC(Py_hash_t) _Py_HashDouble(PyObject *, double); | ^~~~~~~~~~~~~~ numpy/core/src/multiarray/scalartypes.c.src: In function ‘clongdouble_arrtype_hash’: numpy/core/src/multiarray/scalartypes.c.src:2976:31: error: incompatible type for argument 1 of ‘_Py_HashDouble’ 2976 | hashreal = _Py_HashDouble((double) | ^~~~~~~~ | | | double 2977 | PyArrayScalar_VAL(obj, C@name@).real); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/local/python/3.10.4/include/python3.10/Python.h:77, from numpy/core/src/multiarray/scalartypes.c.src:3: /usr/local/python/3.10.4/include/python3.10/pyhash.h:10:38: note: expected ‘PyObject *’ {aka ‘struct _object *’} but argument is of type ‘double’ 10 | PyAPI_FUNC(Py_hash_t) _Py_HashDouble(PyObject *, double); | ^~~~~~~~~~ numpy/core/src/multiarray/scalartypes.c.src:2976:16: error: too few arguments to function ‘_Py_HashDouble’ 2976 | hashreal = _Py_HashDouble((double) | ^~~~~~~~~~~~~~ In file included from /usr/local/python/3.10.4/include/python3.10/Python.h:77, from numpy/core/src/multiarray/scalartypes.c.src:3: /usr/local/python/3.10.4/include/python3.10/pyhash.h:10:23: note: declared here 10 | PyAPI_FUNC(Py_hash_t) _Py_HashDouble(PyObject *, double); | ^~~~~~~~~~~~~~ numpy/core/src/multiarray/scalartypes.c.src:2982:31: error: incompatible type for argument 1 of ‘_Py_HashDouble’ 2982 | hashimag = _Py_HashDouble((double) | ^~~~~~~~ | | | double 2983 | PyArrayScalar_VAL(obj, C@name@).imag); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/local/python/3.10.4/include/python3.10/Python.h:77, from numpy/core/src/multiarray/scalartypes.c.src:3: /usr/local/python/3.10.4/include/python3.10/pyhash.h:10:38: note: expected ‘PyObject *’ {aka ‘struct _object *’} but argument is of type ‘double’ 10 | PyAPI_FUNC(Py_hash_t) _Py_HashDouble(PyObject *, double); | ^~~~~~~~~~ numpy/core/src/multiarray/scalartypes.c.src:2982:16: error: too few arguments to function ‘_Py_HashDouble’ 2982 | hashimag = _Py_HashDouble((double) | ^~~~~~~~~~~~~~ In file included from /usr/local/python/3.10.4/include/python3.10/Python.h:77, from numpy/core/src/multiarray/scalartypes.c.src:3: /usr/local/python/3.10.4/include/python3.10/pyhash.h:10:23: note: declared here 10 | PyAPI_FUNC(Py_hash_t) _Py_HashDouble(PyObject *, double); | ^~~~~~~~~~~~~~ numpy/core/src/multiarray/scalartypes.c.src: In function ‘half_arrtype_hash’: numpy/core/src/multiarray/scalartypes.c.src:2998:27: error: incompatible type for argument 1 of ‘_Py_HashDouble’ 2998 | return _Py_HashDouble(npy_half_to_double(PyArrayScalar_VAL(obj, Half))); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | double In file included from /usr/local/python/3.10.4/include/python3.10/Python.h:77, from numpy/core/src/multiarray/scalartypes.c.src:3: /usr/local/python/3.10.4/include/python3.10/pyhash.h:10:38: note: expected ‘PyObject *’ {aka ‘struct _object *’} but argument is of type ‘double’ 10 | PyAPI_FUNC(Py_hash_t) _Py_HashDouble(PyObject *, double); | ^~~~~~~~~~ numpy/core/src/multiarray/scalartypes.c.src:2998:12: error: too few arguments to function ‘_Py_HashDouble’ 2998 | return _Py_HashDouble(npy_half_to_double(PyArrayScalar_VAL(obj, Half))); | ^~~~~~~~~~~~~~ In file included from /usr/local/python/3.10.4/include/python3.10/Python.h:77, from numpy/core/src/multiarray/scalartypes.c.src:3: /usr/local/python/3.10.4/include/python3.10/pyhash.h:10:23: note: declared here 10 | PyAPI_FUNC(Py_hash_t) _Py_HashDouble(PyObject *, double); | ^~~~~~~~~~~~~~ numpy/core/src/multiarray/scalartypes.c.src: In function ‘longdouble_arrtype_hash’: numpy/core/src/multiarray/scalartypes.c.src:2969:1: warning: control reaches end of non-void function [-Wreturn-type] 2969 | } | ^ numpy/core/src/multiarray/scalartypes.c.src: In function ‘float_arrtype_hash’: numpy/core/src/multiarray/scalartypes.c.src:2969:1: warning: control reaches end of non-void function [-Wreturn-type] 2969 | } | ^ numpy/core/src/multiarray/scalartypes.c.src: In function ‘half_arrtype_hash’: numpy/core/src/multiarray/scalartypes.c.src:2999:1: warning: control reaches end of non-void function [-Wreturn-type] 2999 | } | ^ gcc: numpy/core/src/multiarray/vdot.c gcc: numpy/core/src/umath/umathmodule.c gcc: numpy/core/src/umath/reduction.c gcc: build/src.linux-x86_64-3.10/numpy/core/src/umath/loops.c gcc: numpy/core/src/multiarray/mapping.c gcc: numpy/core/src/multiarray/methods.c gcc: numpy/core/src/multiarray/multiarraymodule.c gcc: build/src.linux-x86_64-3.10/numpy/core/src/multiarray/nditer_templ.c gcc: numpy/core/src/multiarray/nditer_api.c gcc: numpy/core/src/multiarray/nditer_constr.c gcc: numpy/core/src/multiarray/nditer_pywrap.c gcc: numpy/core/src/multiarray/number.c gcc: numpy/core/src/umath/ufunc_type_resolution.c gcc: numpy/core/src/umath/override.c gcc: numpy/core/src/npymath/npy_math.c gcc: build/src.linux-x86_64-3.10/numpy/core/src/npymath/ieee754.c gcc: build/src.linux-x86_64-3.10/numpy/core/src/npymath/npy_math_complex.c gcc: numpy/core/src/npymath/halffloat.c gcc: numpy/core/src/common/array_assign.c gcc: numpy/core/src/common/mem_overlap.c gcc: numpy/core/src/common/npy_longdouble.c gcc: numpy/core/src/common/ucsnarrow.c gcc: numpy/core/src/common/ufunc_override.c gcc: numpy/core/src/common/numpyos.c gcc: build/src.linux-x86_64-3.10/numpy/core/src/common/npy_cpu_features.c gcc: build/src.linux-x86_64-3.10/numpy/core/src/umath/matmul.c gcc: build/src.linux-x86_64-3.10/numpy/core/src/umath/clip.c gcc: numpy/core/src/umath/ufunc_object.c gcc: numpy/core/src/umath/extobj.c gcc: build/src.linux-x86_64-3.10/numpy/core/src/umath/scalarmath.c error: Command "gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -DNPY_INTERNAL_BUILD=1 -DHAVE_NPY_CONFIG_H=1 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1 -D_LARGEFILE64_SOURCE=1 -Ibuild/src.linux-x86_64-3.10/numpy/core/src/umath -Ibuild/src.linux-x86_64-3.10/numpy/core/src/npymath -Ibuild/src.linux-x86_64-3.10/numpy/core/src/common -Inumpy/core/include -Ibuild/src.linux-x86_64-3.10/numpy/core/include/numpy -Inumpy/core/src/common -Inumpy/core/src -Inumpy/core -Inumpy/core/src/npymath -Inumpy/core/src/multiarray -Inumpy/core/src/umath -Inumpy/core/src/npysort -I/usr/local/python/3.10.4/include/python3.10 -Ibuild/src.linux-x86_64-3.10/numpy/core/src/common -Ibuild/src.linux-x86_64-3.10/numpy/core/src/npymath -c build/src.linux-x86_64-3.10/numpy/core/src/multiarray/scalartypes.c -o build/temp.linux-x86_64-3.10/build/src.linux-x86_64-3.10/numpy/core/src/multiarray/scalartypes.o -MMD -MF build/temp.linux-x86_64-3.10/build/src.linux-x86_64-3.10/numpy/core/src/multiarray/scalartypes.o.d -std=c99" failed with exit status 1 [end of output] note: This error originates from a subprocess, and is likely not a problem with pip. ERROR: Failed building wheel for numpy Failed to build numpy ERROR: Could not build wheels for numpy, which is required to install pyproject.toml-based projects [notice] A new release of pip available: 22.3 -> 22.3.1 [notice] To update, run: python -m pip install --upgrade pip [end of output] note: This error originates from a subprocess, and is likely not a problem with pip. error: subprocess-exited-with-error × pip subprocess to install build dependencies did not run successfully. │ exit code: 1 ╰─> See above for output. note: This error originates from a subprocess, and is likely not a problem with pip. ```
a-ma72 commented 1 year ago

Please check, if rfcnt-0.4.5 solves your problem.

Since the extension from now on no longer requires a specific numpy version, but is compiled against the current numpy version and thus depends on it, the installation cannot be run in an isolated environment. The latter would install a different numpy version and thus render the extension unusable. Therefore, the --no-build-isolation and --no-deps options must be used during installation with pip.

till-m commented 1 year ago

Thanks for the help. It looks like I get one step further in the building process & I can install on GH codespaces (so presumably it works on Linux), but with MacOS I run into a different error now.

pip install rfcnt --no-build-isolation --no-deps
Collecting rfcnt
  Using cached rfcnt-0.4.5.post1.tar.gz (225 kB)
  Preparing metadata (pyproject.toml) ... done
Building wheels for collected packages: rfcnt
  Building wheel for rfcnt (pyproject.toml) ... error
  error: subprocess-exited-with-error

  × Building wheel for rfcnt (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> [31 lines of output]
      running bdist_wheel
      running build
      running build_py
      creating build
      creating build/lib.macosx-11.0-arm64-cpython-310
      creating build/lib.macosx-11.0-arm64-cpython-310/rfcnt
      copying run_tests.py -> build/lib.macosx-11.0-arm64-cpython-310/rfcnt
      copying __init__.py -> build/lib.macosx-11.0-arm64-cpython-310/rfcnt
      copying run_examples.py -> build/lib.macosx-11.0-arm64-cpython-310/rfcnt
      copying setup.py -> build/lib.macosx-11.0-arm64-cpython-310/rfcnt
      copying utils.py -> build/lib.macosx-11.0-arm64-cpython-310/rfcnt
      creating build/lib.macosx-11.0-arm64-cpython-310/rfcnt/tests
      copying tests/__init__.py -> build/lib.macosx-11.0-arm64-cpython-310/rfcnt/tests
      copying tests/examples.py -> build/lib.macosx-11.0-arm64-cpython-310/rfcnt/tests
      copying tests/test_rfcnt.py -> build/lib.macosx-11.0-arm64-cpython-310/rfcnt/tests
      creating build/lib.macosx-11.0-arm64-cpython-310/rfcnt/_ext
      copying _ext/rfcnt_npy_1_19_5.cp39-win_amd64.pyd -> build/lib.macosx-11.0-arm64-cpython-310/rfcnt/_ext
      copying _ext/rfcnt_npy_1_22_4.cp39-win_amd64.pyd -> build/lib.macosx-11.0-arm64-cpython-310/rfcnt/_ext
      copying _ext/rfcnt_npy_1_21_6.cp39-win_amd64.pyd -> build/lib.macosx-11.0-arm64-cpython-310/rfcnt/_ext
      copying _ext/rfcnt_npy_1_23_5.cp39-win_amd64.pyd -> build/lib.macosx-11.0-arm64-cpython-310/rfcnt/_ext
      copying requirements.txt -> build/lib.macosx-11.0-arm64-cpython-310/rfcnt
      copying README.md -> build/lib.macosx-11.0-arm64-cpython-310/rfcnt
      copying LICENSE -> build/lib.macosx-11.0-arm64-cpython-310/rfcnt
      copying tests/long_series.csv -> build/lib.macosx-11.0-arm64-cpython-310/rfcnt/tests
      running build_ext
      building 'rfcnt.rfcnt' extension
      creating build/temp.macosx-11.0-arm64-cpython-310
      creating build/temp.macosx-11.0-arm64-cpython-310/src
      clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -fwrapv -O2 -Wall -fPIC -O2 -isystem /opt/homebrew/Caskroom/miniconda/base/envs/hydro/include -arch arm64 -fPIC -O2 -isystem /opt/homebrew/Caskroom/miniconda/base/envs/hydro/include -arch arm64 -DNPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION -DRFC_HAVE_CONFIG_H=0 -DRFC_VERSION_MAJOR=0 -DRFC_VERSION_MINOR=4 -DRFC_USE_INTEGRAL_COUNTS=0 -DRFC_USE_HYSTERESIS_FILTER=1 -DRFC_MINIMAL=0 -DRFC_TP_SUPPORT=1 -DRFC_HCM_SUPPORT=1 -DRFC_ASTM_SUPPORT=1 -DRFC_USE_DELEGATES=1 -DRFC_GLOBAL_EXTREMA=1 -DRFC_DAMAGE_FAST=1 -DRFC_DH_SUPPORT=1 -DRFC_AT_SUPPORT=1 -DRFC_AR_SUPPORT=1 -DRFC_DEBUG_FLAGS=0 -DRFC_EXPORT_MEX=0 -Isrc -I/opt/homebrew/Caskroom/miniconda/base/envs/hydro/lib/python3.10/site-packages/numpy/core/include -I/opt/homebrew/Caskroom/miniconda/base/envs/hydro/include/python3.10 -c src/rainflow.c -o build/temp.macosx-11.0-arm64-cpython-310/src/rainflow.o -std=c++11
      error: invalid argument '-std=c++11' not allowed with 'C'
      error: command '/usr/bin/clang' failed with exit code 1
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for rfcnt
Failed to build rfcnt
ERROR: Could not build wheels for rfcnt, which is required to install pyproject.toml-based projects

As far as I can tell, the compiler errors because the C++ specific flag is invalid for C files. I tried following the directions here, which allowed me to complete the installation, but I can't seem to run the code:

ImportError: dlopen(/opt/homebrew/Caskroom/miniconda/base/envs/hydro/lib/python3.10/site-packages/rfcnt/rfcnt.cpython-310-darwin.so, 0x0002): symbol not found in flat namespace '_RFC_class_count'

Unfortunately I have no experience with python/C or python/C++ interop, so I'm a bit out of my depth here. I can just use a linux VM to get the package to run, but it would of course be nice the have it work on Mac.

till-m commented 1 year ago

Installing works without problems now, so that's good, but importing the package fails:

$  python -m rfcnt.run_tests
/opt/homebrew/Caskroom/miniconda/base/envs/hydro/bin/python: Error while finding module specification for 'rfcnt.run_tests' (ImportError: dlopen(/opt/homebrew/Caskroom/miniconda/base/envs/hydro/lib/python3.10/site-packages/rfcnt/rfcnt.cpython-310-darwin.so, 0x0002): symbol not found in flat namespace '_RFC_class_count')
a-ma72 commented 1 year ago

Did you surely import the rainflow.c in your extension? (see https://stackoverflow.com/a/41078737) Please let me see your modifications on setup.py.

till-m commented 1 year ago

Hmm I think I might have some caching issues with pip, I did modify setup.py at some point, so maybe that's that. I tried replicating the problem using GH Workflow runners, see till-m/rainflow#1. Looks like wrapping the include statement didn't solve the initial error :/ so we're back at the previous state. Sorry for the confusion.

a-ma72 commented 1 year ago

Yes, I deleted my comment shortly after, since the extern "C" is already part of rainflow.hpp... Could you commit your changes on setup.py to your fork, so I could keep track?

till-m commented 1 year ago

Commit changes. I tried to build using the advice given here but I couldn't get it to work.

a-ma72 commented 1 year ago

Please check recent commit, seems to work now.

till-m commented 1 year ago

I checked it locally and it seems to work! Thanks very much I appreciate the help!

till-m commented 1 year ago

Hi @a-ma72,

tested it some more and it looks good!

Is there any chance you have more documentation on the package available somewhere? The README lists quite a few things but even after researching the terms I don't know what they are exactly, Google doesn't seem to produce meaningful results. I guess a problem is that of the references do not seem to be available online, e.g. the HCM paper. I'm also having trouble with understanding the call signature of the rfc function -- what keywords are optional, what the default values are, etc.

I know that this is probably mostly intended for internal use, so I hope I'm not bothering you too much.

a-ma72 commented 1 year ago

Hi @till-m ,

no, questions are welcome. You can call rfc with the input series only, to get a rainflow counting with defaults. Additionally following keywords are supported:

till-m commented 1 year ago

Thank you @a-ma72, this is super helpful!

I am particularly interested in a solid (i.e. physically realistic) historical description of the damage. Based on your description I assume the most relevant parameter for this is spread_damage, which dictates when the damage of one cycle will be counted. Would you say this is correct?

Additionally, I was wondering whether you know of any literature on this topic?

till-m commented 1 year ago

Also, can you confirm my interpretation of the results is correct?

a-ma72 commented 1 year ago

Hi @till-m ,

yes, using spread_damage seems to be the right way. I must say, however, that the temporal assignment of the partial damage was developed according to my own judgment and experience. For this, I have no verified physical evidence from linear-elastic fracture mechanics. For this reason, and because there was no open source code to do this task, I decided to do my own project.

You may find these papers of interest: https://www.sciencedirect.com/science/article/pii/S0142112315003333 ("Download full issue")

till-m commented 1 year ago

Hey @a-ma72,

thanks this is again super helpful. My idea to construct a physically accurate damage history was to calculate the damage of $0...t_i$ for all $1 < ti < t{end}$. Ignoring for a moment the problem of residuals, this should -- to my understanding -- produce a physically accurate damage history as long as the cycle counting method is accurate. This lines up to some degree with 'dh' (the exact level of closeness depends on the parameters).

Figure_1

I've attached the code below.

Do you have a small example?

If you change residual_method to 7, dh should only have 9998 timesteps compared to the signal's 10001.

Code ```python import numpy as np import pandas as pd import os from rfcnt import rfcnt import matplotlib.pyplot as plt data = pd.read_csv( os.path.join("./python/tests/", "long_series.csv"), header=None) data = data.to_numpy().squeeze() class_count = 50 class_range = data.max() - data.min() class_width = class_range / (class_count - 1) class_offset = data.min() - class_width / 2 seq_damage = [] for i in range(len(data)): res = rfcnt.rfc( data[:i], class_count=class_count, class_offset=class_offset, class_width=class_width, hysteresis=class_width, use_HCM=0, use_ASTM=0, #spread_damage=0, # RFC_SD_HALF_23 spread_damage=8, # RFC_SD_TRANSIENT_23c #residual_method=0, # RFC_RES_NONE residual_method=5, # RFC_RES_REPEATED wl={"sd": 1e3, "nd": 1e7, "k": 5}) seq_damage.append(res["damage"]) print(data.shape) print(res["dh"].shape) fig, axs = plt.subplots(2,1) axs[0].plot(data) axs[0].grid() axs[0].set_ylabel('Stress') axs[0].set_ylabel('Time') axs[1].plot(seq_damage, label='Seq. Damage') axs[1].plot(np.cumsum(res["dh"]), label='DH') axs[1].grid() axs[1].set_ylabel('Damage') axs[1].set_ylabel('Time') axs[1].legend(loc='best') plt.show() ```
a-ma72 commented 1 year ago

Hi @till-m:

short answer: The damage history is only as long as can be addressed by the indices of the reversal points. So you can just fill them up with zeros. (I obviously had the same problem in MATLAB, so the length is determined differently at this point. I will adapt this for python in the next release.)

Long answer: The specific point in time when a partial damage occurs within a closed cycle cannot be clearly determined. Example: If the crack opens and gains length, but can be closed again without dissipating energy, the partial damage is to be assigned to the crack opening process. If, on the other hand, material distortions form during opening, part of the damage can also be attributed to the closing process. Nevertheless, you will always need a fourth reversal point, which may occur by far later, to detect a closed cycle. Therefore, it is difficult to interpret the damage history, even for experienced experts. This was the reason for me to make the distribution of the damage parametric and offer solutions that have proven themselves in practice. Finally, even own ideas can be easily implemented in C by offering to fork to own code, by making usage of delegates at neuralgic points (RFC_USE_DELEGATES). So ideas are welcome!

Thank you for your code example, I will send you my comments on it:

Init ```py import os from enum import Enum from typing import Union import matplotlib.pyplot as plt import numpy as np import numpy.typing import pandas as pd from rfcnt import rfcnt class RFC_ResidualMethod(Enum): NONE = 0 _IGNORE = 1 _NO_FINALIZE = 2 DISCARD = 3 HALFCYCLES = 4 FULLCYCLES = 5 CLORMANN_SEEGER = 6 REPEATED = 7 DIN45667 = 8 class RFC_SpreadDamage(Enum): HALF_23 = 0 RAMP_AMPLITUDE_23 = 1 RAMP_DAMAGE_23 = 2 RAMP_AMPLITUDE_24 = 3 RAMP_DAMAGE_24 = 4 FULL_P2 = 5 FULL_P3 = 6 TRANSIENT_23 = 7 TRANSIENT_23c = 8 def rainflow(data: np.typing.ArrayLike, class_count: int = 100, class_width: float = None, class_offset: float = None, hysteresis: float = None, residual_method: Union[int, RFC_ResidualMethod] = RFC_ResidualMethod.REPEATED, spread_damage: Union[int, RFC_SpreadDamage] = RFC_SpreadDamage.TRANSIENT_23c, use_HCM: Union[int, bool] = 0, use_ASTM: Union[int, bool] = 0, wl: dict = None) -> tuple: """Wrapper for rfcnt.rfc(). """ data = np.asarray_chkfinite(data, dtype=np.double, order="C").flatten() if class_width is None: class_width = data.ptp() / (class_count - 1) if class_offset is None: class_offset = data.min() - class_width / 2 if hysteresis is None: hysteresis = class_width if wl is None: wl = dict(sd=1e3, nd=1e7, k=5, k2=5) if isinstance(residual_method, RFC_ResidualMethod): residual_method = residual_method.value if isinstance(spread_damage, RFC_SpreadDamage): spread_damage = spread_damage.value return rfcnt.rfc( data, class_count=class_count, class_offset=class_offset, class_width=class_width, hysteresis=class_width, use_HCM=int(use_HCM), use_ASTM=int(use_ASTM), spread_damage=spread_damage, residual_method=residual_method, wl=wl) def dh_from_tp(tp: dict, length: int = None) -> np.ndarray: """Calculate the damage history from turning points information. """ if length is None: length = tp[:, 0].max() # indices are base 1! assert length >= tp[:, 0].max() dh = np.zeros(shape=length, dtype=np.double) # Distribute partial damages from turning points over time dh[tp[:, 0].astype(int) - 1] = tp[:, 2] return dh ```
Load data ```py # Load data series data = pd.read_csv( os.path.join("../tests/", "long_series.csv"), header=None) data = data.to_numpy().squeeze() class_count = 50 class_range = data.ptp() class_width = class_range / (class_count - 1) class_offset = data.min() - class_width / 2 ```
Helper functions ```py def inspect_rfc(data: np.typing.ArrayLike) -> tuple: """Do rainflow counting with standard arguments. """ return rainflow( data, class_count=class_count, class_offset=class_offset, class_width=class_width, hysteresis=class_width, spread_damage=RFC_SpreadDamage.FULL_P2, # assign damage for closed cycles to 2nd turning point residual_method=RFC_ResidualMethod._NO_FINALIZE, # don't consider residues and leave internal sequence open wl={"sd": 1e3, "nd": 1e7, "k": 5}) def inspect_sequence(data: np.typing.ArrayLike, max_len: int = 0) -> tuple: """Inspect the damage history by applying rainflow countings successive for one more data point at a time. Consider: At this point of view, damage accumulated until to `i` is attributed to the datapoint at `i`, which is neither P2, nor P3! This is noticeable in that the course of the line shows an apparent latency. """ seq_damage = np.zeros(shape=data.size) # Init for i in range(len(data)): res = inspect_rfc(data[:i+1]) # Data points from indices 0 to i, including i itself if not np.isclose(res["tp"][:, 2].sum(), res["damage"], rtol=1e-10): assert False # Not occuring: Damage is entirely distributed over turning points seq_damage[i] = res["damage"] return inspect_rfc(data), seq_damage ```
Get a close look at the first 150 data points The damage history points out the partial damage attributed to P2 of the cycle: ```py # Get a close look at the first 150 data points chunk = data[:151] res, seq = inspect_sequence(chunk) _, ax = plt.subplots(2, 1, figsize=(14, 6)) ax[0].plot(chunk, label="Data series") ax[0].plot(res["tp"][:, 0]-1, res["tp"][:, 1], "ro", markersize=3, label="Turning (reversal) points") ax[0].set_ylabel("Stress") ax[0].grid(True, which="both") ax[0].legend() ax[1].semilogy(np.cumsum(res["dh"]), label="Damage history") ax[1].semilogy(seq, label="Sequential damage") ax[1].set_ylabel("Damage") ax[1].set_xlabel("Time") ax[1].grid(True) ax[1].legend() plt.show() ``` ![example_damage_history](https://user-images.githubusercontent.com/11562654/208287109-04fa201c-24ec-4ec5-9cbd-c915e7bebbaa.png)
Inspect entire data ```py # Inspect entire data res, seq = inspect_sequence(data) print("Original data shape:", data.shape) print("Data shape of `dh`", res["dh"].shape) # Sanity check for damage history: Compare with reconstruction from turning points assert np.isclose(res["dh"], dh_from_tp(res["tp"], res["dh"].size), rtol=1e-10).all() # Since all partial damage is distributed, `dh` may be padded with zeros if res["dh"].size < data.size: res["dh"] = np.pad(res["dh"], (0, data.size - res["dh"].size)) print("Data shape of `dh` after reshape: ", res["dh"].shape) fig, axs = plt.subplots(2,1, figsize=(14,6)) axs[0].plot(data, label="Data series") axs[0].grid(True, which="both") axs[0].set_ylabel('Stress') axs[1].plot(seq, label='Sequential damage') axs[1].plot(np.cumsum(res["dh"]), label='Damage history') axs[1].grid(True, which="both") axs[1].set_ylabel('Damage') axs[1].set_xlabel('Time') axs[1].legend(loc='best') plt.show() ``` ``` Original data shape: (10001,) Data shape of `dh` (10001,) Data shape of `dh` after reshape: (10001,) ``` ![image](https://user-images.githubusercontent.com/11562654/208263179-161462e0-5cc6-4a95-8aeb-c25208992d62.png)
till-m commented 1 year ago

Hi @a-ma72,

my apologies for bugging you again.

I noticed that for a particular script, I get less damage by adding another point to the time series.

from rfcnt import rfcnt
import numpy as np

RFC_KWARGS = {
        "class_width": 0.2,
        "auto_resize": True,
        "use_HCM": 0,
        "use_ASTM": 1,
        "residual_method": 0, 
        "wl": {"sd": 865/2, "nd": 2e6, "k": 8}
 }

def calculate_damage(signal_):
    damage = rfcnt.rfc(signal_, **RFC_KWARGS)['damage']
    return damage

a = np.array([0.08592532, 0.12260052, -0.16610635, -0.45372438, -0.46113973, -0.95846404, -1.02254961, -1.46266948, -1.65390141, -2.24422445, -2.45138246, -3.16835894, -3.24951033, -4.52535113, -6.40255541, -8.34149745 -10.4478217, -12.75260431, -15.23542341, -18.03041047, -21.06661139, -24.24869862, -23.20667037, -26.39752143, -25.66467476, -28.78903656, -28.28465694, -28.03190764])

#print(a)
print(calculate_damage(a))

a_extended = np.append(a, -31.18122411830486)
print(calculate_damage(a_extended))

Output:

2.679483900941182e-24
2.6794838741463435e-24

I figured that when residual_method=0 is used, this should not happen. Am I missing something?

Thank you very much!

a-ma72 commented 1 year ago

Hi @till-m,

as far as I can tell, the problem is due to autoranging, leads to a rounding errors (since the glitch is small). The class offset is shifted multiple times, following the data points, so small rounding errors accumulate (see autoresize() in rainflow.c). Changing the offset impacts the quantization of the data points. If you set the class_offset to values smaller than -31.18122411830486 the effect vanishes.

Rounding errors due to the location of class boundaries are a troublesome thing in the damage calculation. You can observe the effect if you vary class_offset and observe the calculated damage.

I can report from practical experience that divergences of up to 5% in damage are common if you only change parameters.

Best regards, Andreas

till-m commented 1 year ago

Hi Andreas,

thank you once again, this is super helpful and will let me mitigate the problem.

Cheers, Till