Repository: PyWavelets/pywt (language: python)

Issue:
No aarch64 wheels for python3.7
It looks like no aarch64 [wheels](https://pypi.org/project/PyWavelets/1.2.0/#files) are present for python3.7 in PyWavelets version 1.2.0.
Building it from source on python3.7 or even doing `pip install PyWavelets` throws following error:
```
[ec2-user@ip-172-31-31-140 pywt]$ pip3 install .
Defaulting to user installation because normal site-packages is not writeable
Processing /home/ec2-user/pywt
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
    Preparing wheel metadata ... error
    ERROR: Command errored out with exit status 1:
     command: /usr/bin/python3 /usr/lib/python3.7/site-packages/pip/_vendor/pep517/_in_process.py prepare_metadata_for_build_wheel /tmp/tmp2klq1jku
         cwd: /tmp/pip-req-build-sampf9lj
    Complete output (22 lines):
    setup.py:366: UserWarning: Unrecognized setuptools command, proceeding with generating Cython sources and expanding templates
      warnings.warn("Unrecognized setuptools command, proceeding with "
    Traceback (most recent call last):
      File "/usr/lib/python3.7/site-packages/pip/_vendor/pep517/_in_process.py", line 280, in <module>
        main()
      File "/usr/lib/python3.7/site-packages/pip/_vendor/pep517/_in_process.py", line 263, in main
        json_out['return_val'] = hook(**hook_input['kwargs'])
      File "/usr/lib/python3.7/site-packages/pip/_vendor/pep517/_in_process.py", line 133, in prepare_metadata_for_build_wheel
        return hook(metadata_directory, config_settings)
      File "/tmp/pip-build-env-9im6rdqx/overlay/lib/python3.7/site-packages/setuptools/build_meta.py", line 188, in prepare_metadata_for_build_wheel
        self.run_setup()
      File "/tmp/pip-build-env-9im6rdqx/overlay/lib/python3.7/site-packages/setuptools/build_meta.py", line 282, in run_setup
        self).run_setup(setup_script=setup_script)
      File "/tmp/pip-build-env-9im6rdqx/overlay/lib/python3.7/site-packages/setuptools/build_meta.py", line 174, in run_setup
        exec(compile(code, __file__, 'exec'), locals())
      File "setup.py", line 478, in <module>
        setup_package()
      File "setup.py", line 468, in setup_package
        ext_modules = get_ext_modules(USE_CYTHON)
      File "setup.py", line 182, in get_ext_modules
        from numpy import get_include as get_numpy_include
    ModuleNotFoundError: No module named 'numpy'
    ----------------------------------------
ERROR: Command errored out with exit status 1: /usr/bin/python3 /usr/lib/python3.7/site-packages/pip/_vendor/pep517/_in_process.py prepare_metadata_for_build_wheel /tmp/tmp2klq1jku Check the logs for full command output.
```
This is causing `scikit-image` installation to fail as well, as `scikit-image` as dependency on `PyWavelets>=1.1.1`. Looks like aarch64 wheels existed for python3.7 in version [1.1.1](https://pypi.org/project/PyWavelets/1.1.1/#files) but got removed in latest release. 
Can we enable aarch64 wheels for python3.7 for version 1.2.0 as well?


Discussion / hints:
I will try to see if we can add it

Fix patch:
diff --git a/pyproject.toml b/pyproject.toml
index 1fc9fa2c..f4f9ad45 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -17,6 +17,7 @@ requires = [
 
     # numpy 1.19 was the first minor release to provide aarch64 wheels, but
     # wheels require fixes contained in numpy 1.19.2
+    "numpy==1.19.2; python_version=='3.7' and platform_machine=='aarch64'",
     "numpy==1.19.2; python_version=='3.8' and platform_machine=='aarch64'",
     # aarch64 for py39 is covered by default requirement below
 


Test patch:
diff --git a/.github/workflows/wheel_tests_and_release.yml b/.github/workflows/wheel_tests_and_release.yml
index 682beaca..afc4d1aa 100644
--- a/.github/workflows/wheel_tests_and_release.yml
+++ b/.github/workflows/wheel_tests_and_release.yml
@@ -9,25 +9,35 @@ env:
   # CIBW_BEFORE_BUILD: pip install cython
   CIBW_TEST_REQUIRES: pytest
   CIBW_TEST_COMMAND: pytest --pyargs pywt
+  CIBW_ENVIRONMENT: PIP_PREFER_BINARY=1
 
 
 jobs:
   build_linux_37_and_above_wheels:
-    name: Build python ${{ matrix.cibw_python }} wheels on ${{ matrix.os }}
+    name: Build python ${{ matrix.cibw_python }} ${{ matrix.cibw_arch }} wheels on ${{ matrix.os }}
     runs-on: ${{ matrix.os }}
     strategy:
       fail-fast: false
       matrix:
         os: [ubuntu-18.04]
-        cibw_python: [ "cp37-*", "cp38-*" ]
-        cibw_manylinux: [ manylinux1 ]
+        cibw_python: [ "cp38-*", "cp39-*" ]
+        cibw_manylinux: [ manylinux2014 ]
+        cibw_arch: [ "x86_64", "i686" ]
         include:
+          # manylinux2010 for Python 3.7 cases
+          - os: ubuntu-18.04
+            cibw_python: "cp37-*"
+            cibw_manylinux: manylinux2010
+            cibw_arch: "x86_64"
           - os: ubuntu-18.04
-            cibw_python: "cp39-*"
+            cibw_python: "cp37-*"
             cibw_manylinux: manylinux2010
+            cibw_arch: "i686"
+          # no i686 NumPy 1.21.x wheel for Python 3.10
           - os: ubuntu-18.04
             cibw_python: "cp310-*"
             cibw_manylinux: manylinux2014
+            cibw_arch: "x86_64"
     steps:
       - uses: actions/checkout@v2
         with:
@@ -44,9 +54,10 @@ jobs:
           python -m cibuildwheel --output-dir dist
         env:
           CIBW_BUILD: ${{ matrix.cibw_python }}
-          CIBW_ARCHS_LINUX: x86_64 i686
+          CIBW_ARCHS_LINUX: ${{ matrix.cibw_arch }}
+          CIBW_SKIP: "*-musllinux_*"
           CIBW_MANYLINUX_X86_64_IMAGE: ${{ matrix.cibw_manylinux }}
-          CIBW_MANYLINUX_I686_IMAGE: ${{ matrix.cibw_manylinux }}
+          CIBW_MANYLINUX_I686_IMAGE: "manylinux2010"
       - uses: actions/upload-artifact@v2
         with:
           name: wheels
@@ -59,7 +70,7 @@ jobs:
       fail-fast: false
       matrix:
         os: [ubuntu-18.04]
-        cibw_python: [ "cp38-*" , "cp39-*", "cp310-*"]
+        cibw_python: [ "cp37-*" , "cp38-*" , "cp39-*", "cp310-*"]
         cibw_manylinux: [ manylinux2014 ]
     steps:
       - uses: actions/checkout@v2
@@ -84,7 +95,6 @@ jobs:
           CIBW_ARCHS_LINUX: aarch64
           CIBW_SKIP: "*-musllinux_*"
           CIBW_MANYLINUX_X86_64_IMAGE: ${{ matrix.cibw_manylinux }}
-          CIBW_MANYLINUX_I686_IMAGE: ${{ matrix.cibw_manylinux }}
       - uses: actions/upload-artifact@v2
         with:
           name: wheels