diff --git a/.github/azure-pipelines.yaml b/.github/azure-pipelines.yaml new file mode 100644 index 000000000..17b6b1f47 --- /dev/null +++ b/.github/azure-pipelines.yaml @@ -0,0 +1,32 @@ +trigger: + branches: + include: + - main + tags: + include: + - v*.*.* + +pr: +- main + +resources: + repositories: + - repository: azure_template + type: github + name: mdolab/.github + endpoint: mdolab + +stages: +- template: azure/azure_template.yaml@azure_template + parameters: + REPO_NAME: OpenAeroStruct + COVERAGE: true + +- stage: + dependsOn: + - Test_Real + - Style + displayName: PyPI + condition: and(succeeded(), contains(variables['build.sourceBranch'], 'tags')) + jobs: + - template: azure/azure_pypi.yaml@azure_template diff --git a/.github/build_real.sh b/.github/build_real.sh new file mode 100755 index 000000000..72a3eaef8 --- /dev/null +++ b/.github/build_real.sh @@ -0,0 +1,3 @@ +#!/bin/bash +set -e +pip install .[testing,mphys] diff --git a/.github/test_real.sh b/.github/test_real.sh new file mode 100755 index 000000000..af17f9a49 --- /dev/null +++ b/.github/test_real.sh @@ -0,0 +1,4 @@ +#!/bin/bash +set -e + +testflo -n 2 -v . --coverage --coverpkg openaerostruct diff --git a/.github/workflows/oas.yml b/.github/workflows/oas.yml deleted file mode 100644 index 5144a51f8..000000000 --- a/.github/workflows/oas.yml +++ /dev/null @@ -1,186 +0,0 @@ -name: OAS build - -# This workflow runs all unit and regression tests, as well as coveralls. -# On the pull-request events, this workflow runs OAS tests, checks code format by flake8/black, and builds the docs. -# On the push-to-main events, it also deploys the docs. - -on: - pull_request: - push: - branches: - - main - tags: - - v*.*.* - schedule: - # Run the tests at 7:23pm UTC on the 2nd and 17th of every month - - cron: '23 19 2,17 * *' - -jobs: - # --- run OAS unit and regression tests --- - test: - runs-on: ubuntu-latest - strategy: - fail-fast: false # continue other jobs even if one of the jobs in matrix fails - matrix: - dep-versions: ["oldest", "latest"] - # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Set versions to test here ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - PYTHON_VERSION_OLDEST: ['3.8'] - PYTHON_VERSION_LATEST: ['3.11'] - PIP_VERSION_OLDEST: ['23.3.2'] # OpenMDAO 3.15 doesn't install with pip>=24 - WHEEL_VERSION_OLDEST: ['0.38.4'] # latest wheel cannot build the oldest OpenMDAO (3.17 or older) - NUMPY_VERSION_OLDEST: ['1.20'] # latest is most recent on PyPI - SCIPY_VERSION_OLDEST: ['1.6.0'] # latest is most recent on PyPI - OPENMDAO_VERSION_OLDEST: ['3.15'] # latest is most recent on PyPI - MPHYS_VERSION_OLDEST: ['1.0.0'] # latest is most recent on PyPI - PYGEO_VERSION_OLDEST: ['1.6.0'] # latest is pulled from main branch, for some reason anything after 1.12.2 seg faults on the old build - VSP_VERSION: ['3.27.1'] # used for both builds - PETSC_VERSION_LATEST: ['3.19.1'] - CYTHON_VERSION: ['0.29.36'] # used for both builds - - steps: - - uses: actions/checkout@v2 - - name: Set up Python ${{ matrix.PYTHON_VERSION_OLDEST }} - if: ${{ matrix.dep-versions == 'oldest' }} - uses: actions/setup-python@v2 - with: - python-version: ${{ matrix.PYTHON_VERSION_OLDEST }} - - name: Set up Python ${{ matrix.PYTHON_VERSION_LATEST }} - if: ${{ matrix.dep-versions == 'latest' }} - uses: actions/setup-python@v2 - with: - python-version: ${{ matrix.PYTHON_VERSION_LATEST }} - - # we need OpenVSP to run vsp tests. - - name: Install OpenVSP - run: | - sudo apt-get update - export PYTHON_INCLUDE_DIR=$(python -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") - export PYTHON_LIBRARY=$(python -c "import distutils.sysconfig as sysconfig; print(sysconfig.get_config_var('LIBDIR'))") - export INST_PREFIX=$(python -c "import distutils.sysconfig as sysconfig; print(sysconfig.get_config_var('prefix'))") - cd .. - sudo apt-get install cmake libx11-dev libfltk1.3-dev libcpptest-dev libglm-dev libeigen3-dev libcminpack-dev \ - libglew-dev doxygen graphviz texlive-latex-base - mkdir OpenVSP - cd OpenVSP - mkdir build buildlibs - # Download source code - wget -q https://github.com/OpenVSP/OpenVSP/archive/refs/tags/OpenVSP_${{ matrix.VSP_VERSION }}.tar.gz - tar -xf OpenVSP_${{ matrix.VSP_VERSION }}.tar.gz - mv OpenVSP-OpenVSP_${{ matrix.VSP_VERSION }} repo - # Build dependency libs - cd buildlibs - cmake -DVSP_USE_SYSTEM_LIBXML2=true -DVSP_USE_SYSTEM_FLTK=true -DVSP_USE_SYSTEM_GLM=true \ - -DVSP_USE_SYSTEM_GLEW=true -DVSP_USE_SYSTEM_CMINPACK=true -DVSP_USE_SYSTEM_LIBIGES=false \ - -DVSP_USE_SYSTEM_EIGEN=false -DVSP_USE_SYSTEM_CODEELI=false -DVSP_USE_SYSTEM_CPPTEST=false \ - -DPYTHON_INCLUDE_DIR=${PYTHON_INCLUDE_DIR} -DPYTHON_LIBRARY=${PYTHON_LIBRARY} ../repo/Libraries -DCMAKE_BUILD_TYPE=Release - make -j8 - # Build OpenVSP - cd .. - export BUILD_LIBS_PATH=`pwd` - cd build - cmake ../repo/src/ -DVSP_NO_GRAPHICS=true -DVSP_LIBRARY_PATH=${BUILD_LIBS_PATH}/buildlibs \ - -DPYTHON_INCLUDE_DIR=${PYTHON_INCLUDE_DIR} -DPYTHON_LIBRARY=${PYTHON_LIBRARY} \ - -DCMAKE_BUILD_TYPE=Release - make -j8 - make package - # Install python interface - pushd _CPack_Packages/Linux/ZIP/OpenVSP-${{ matrix.VSP_VERSION }}-Linux/python - pip install -r requirements.txt - pushd .. - cp vspaero vspscript vspslicer $INST_PREFIX/bin - popd - popd - - # OAS dependencies are specified in setup.py. - - name: Install OAS and its dependencies (oldest versions) - if: ${{ matrix.dep-versions == 'oldest' }} - run: | - python -m pip install pip==${{ matrix.PIP_VERSION_OLDEST }} - python -m pip install wheel==${{ matrix.WHEEL_VERSION_OLDEST }} - pip install numpy==${{ matrix.NUMPY_VERSION_OLDEST }} scipy==${{ matrix.SCIPY_VERSION_OLDEST }} openmdao==${{ matrix.OPENMDAO_VERSION_OLDEST }} mphys==${{ matrix.MPHYS_VERSION_OLDEST }} - pip install -e .[test] - - name: Install OAS and its dependencies (latest versions) - if: ${{ matrix.dep-versions == 'latest' }} - run: | - python -m pip install --upgrade pip wheel - pip install -e .[test,mphys] - - - name: Install MPI - run: | - sudo apt-get install openmpi-bin libopenmpi-dev - pip install mpi4py - - # install PETSc on the latest for MPI tests - - name: Install PETSc - if: ${{ matrix.dep-versions == 'latest' }} - run: | - cd .. - pip download petsc==${{ matrix.PETSC_VERSION_LATEST }} - tar -xf petsc-${{ matrix.PETSC_VERSION_LATEST }}.tar.gz - cd petsc-${{ matrix.PETSC_VERSION_LATEST }} - export PETSC_ARCH=real-debug - export PETSC_DIR=`pwd` - ./configure --PETSC_ARCH=$PETSC_ARCH --download-fblaslapack - make PETSC_DIR=$PETSC_DIR PETSC_ARCH=$PETSC_ARCH all - # Cython 3.0.0 break petsc4py install - pip install cython==${{ matrix.CYTHON_VERSION }} - pip install petsc4py==${{ matrix.PETSC_VERSION_LATEST }} - - # We need pySpline/pyGeo to run FFD tests. - - name: Install pySpline - run: | - cd .. - git clone https://github.com/mdolab/pyspline.git - cd pyspline - cp config/defaults/config.LINUX_GFORTRAN.mk config/config.mk - make - pip install -e . - - - name: Install pyGeo ${{ matrix.PYGEO_VERSION_OLDEST }} - if: ${{ matrix.dep-versions == 'oldest' }} - run: | - pip install "pygeo[testing] @ git+https://github.com/mdolab/pygeo.git@v${{ matrix.PYGEO_VERSION_OLDEST }}" - - name: Install pyGeo latest - if: ${{ matrix.dep-versions == 'latest' }} - run: | - pip install "pygeo[testing] @ git+https://github.com/mdolab/pygeo.git" - - - name: List installed Python packages - run: | - pip list -v - - - name: Run tests (latest) - env: - OMPI_MCA_btl: ^openib # prevent OpenMPI warning messages - if: ${{ matrix.dep-versions == 'latest' }} - run: | - testflo -n 2 -v openaerostruct --coverage --coverpkg openaerostruct - coverage xml - # skip MPI tests on the oldest - - name: Run tests (oldest) - env: - OMPI_MCA_btl: ^openib # prevent OpenMPI warning messages - if: ${{ matrix.dep-versions == 'oldest' }} - run: | - testflo -n 2 -v --exclude \*MPI\* openaerostruct --coverage --coverpkg openaerostruct - coverage xml - - - name: Upload Coverage to Codecov - uses: codecov/codecov-action@v4 - with: - fail_ci_if_error: true - verbose: true - env: - CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} - - # --- linting and formatting --- - black: - uses: mdolab/.github/.github/workflows/black.yaml@main - flake8: - uses: mdolab/.github/.github/workflows/flake8.yaml@main - - # --- publish to PyPI - pypi: - needs: [test, flake8, black] - uses: mdolab/.github/.github/workflows/pypi.yaml@main - secrets: inherit diff --git a/openaerostruct/__init__.py b/openaerostruct/__init__.py index 573a7705c..892994aa6 100644 --- a/openaerostruct/__init__.py +++ b/openaerostruct/__init__.py @@ -1 +1 @@ -__version__ = "2.7.3" +__version__ = "2.8.0" diff --git a/openaerostruct/structures/tests/__init__.py b/openaerostruct/structures/tests/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/openaerostruct/tests/__init__.py b/openaerostruct/tests/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/openaerostruct/aerodynamics/tests/test_2d_lift.py b/tests/aerodynamics_tests/test_2d_lift.py similarity index 100% rename from openaerostruct/aerodynamics/tests/test_2d_lift.py rename to tests/aerodynamics_tests/test_2d_lift.py diff --git a/openaerostruct/aerodynamics/tests/test_coeffs.py b/tests/aerodynamics_tests/test_coeffs.py similarity index 100% rename from openaerostruct/aerodynamics/tests/test_coeffs.py rename to tests/aerodynamics_tests/test_coeffs.py diff --git a/openaerostruct/aerodynamics/tests/test_collocation_points.py b/tests/aerodynamics_tests/test_collocation_points.py similarity index 100% rename from openaerostruct/aerodynamics/tests/test_collocation_points.py rename to tests/aerodynamics_tests/test_collocation_points.py diff --git a/openaerostruct/aerodynamics/tests/test_convert_velocity.py b/tests/aerodynamics_tests/test_convert_velocity.py similarity index 100% rename from openaerostruct/aerodynamics/tests/test_convert_velocity.py rename to tests/aerodynamics_tests/test_convert_velocity.py diff --git a/openaerostruct/aerodynamics/tests/test_eval_mtx.py b/tests/aerodynamics_tests/test_eval_mtx.py similarity index 100% rename from openaerostruct/aerodynamics/tests/test_eval_mtx.py rename to tests/aerodynamics_tests/test_eval_mtx.py diff --git a/openaerostruct/aerodynamics/tests/test_eval_velocities.py b/tests/aerodynamics_tests/test_eval_velocities.py similarity index 100% rename from openaerostruct/aerodynamics/tests/test_eval_velocities.py rename to tests/aerodynamics_tests/test_eval_velocities.py diff --git a/openaerostruct/aerodynamics/tests/test_functionals.py b/tests/aerodynamics_tests/test_functionals.py similarity index 100% rename from openaerostruct/aerodynamics/tests/test_functionals.py rename to tests/aerodynamics_tests/test_functionals.py diff --git a/openaerostruct/aerodynamics/tests/test_geometry.py b/tests/aerodynamics_tests/test_geometry.py similarity index 100% rename from openaerostruct/aerodynamics/tests/test_geometry.py rename to tests/aerodynamics_tests/test_geometry.py diff --git a/openaerostruct/aerodynamics/tests/test_get_vectors.py b/tests/aerodynamics_tests/test_get_vectors.py similarity index 100% rename from openaerostruct/aerodynamics/tests/test_get_vectors.py rename to tests/aerodynamics_tests/test_get_vectors.py diff --git a/openaerostruct/aerodynamics/tests/test_horseshoe_circulations.py b/tests/aerodynamics_tests/test_horseshoe_circulations.py similarity index 100% rename from openaerostruct/aerodynamics/tests/test_horseshoe_circulations.py rename to tests/aerodynamics_tests/test_horseshoe_circulations.py diff --git a/openaerostruct/aerodynamics/tests/test_lift_drag.py b/tests/aerodynamics_tests/test_lift_drag.py similarity index 100% rename from openaerostruct/aerodynamics/tests/test_lift_drag.py rename to tests/aerodynamics_tests/test_lift_drag.py diff --git a/openaerostruct/aerodynamics/tests/test_mesh_point_forces.py b/tests/aerodynamics_tests/test_mesh_point_forces.py similarity index 100% rename from openaerostruct/aerodynamics/tests/test_mesh_point_forces.py rename to tests/aerodynamics_tests/test_mesh_point_forces.py diff --git a/openaerostruct/aerodynamics/tests/test_mtx_rhs.py b/tests/aerodynamics_tests/test_mtx_rhs.py similarity index 100% rename from openaerostruct/aerodynamics/tests/test_mtx_rhs.py rename to tests/aerodynamics_tests/test_mtx_rhs.py diff --git a/openaerostruct/aerodynamics/tests/test_panel_forces.py b/tests/aerodynamics_tests/test_panel_forces.py similarity index 100% rename from openaerostruct/aerodynamics/tests/test_panel_forces.py rename to tests/aerodynamics_tests/test_panel_forces.py diff --git a/openaerostruct/aerodynamics/tests/test_panel_forces_surf.py b/tests/aerodynamics_tests/test_panel_forces_surf.py similarity index 100% rename from openaerostruct/aerodynamics/tests/test_panel_forces_surf.py rename to tests/aerodynamics_tests/test_panel_forces_surf.py diff --git a/openaerostruct/aerodynamics/tests/test_pg_transform.py b/tests/aerodynamics_tests/test_pg_transform.py similarity index 100% rename from openaerostruct/aerodynamics/tests/test_pg_transform.py rename to tests/aerodynamics_tests/test_pg_transform.py diff --git a/openaerostruct/aerodynamics/tests/test_rotational_velocity.py b/tests/aerodynamics_tests/test_rotational_velocity.py similarity index 100% rename from openaerostruct/aerodynamics/tests/test_rotational_velocity.py rename to tests/aerodynamics_tests/test_rotational_velocity.py diff --git a/openaerostruct/aerodynamics/tests/test_solve_matrix.py b/tests/aerodynamics_tests/test_solve_matrix.py similarity index 100% rename from openaerostruct/aerodynamics/tests/test_solve_matrix.py rename to tests/aerodynamics_tests/test_solve_matrix.py diff --git a/openaerostruct/aerodynamics/tests/test_total_drag.py b/tests/aerodynamics_tests/test_total_drag.py similarity index 100% rename from openaerostruct/aerodynamics/tests/test_total_drag.py rename to tests/aerodynamics_tests/test_total_drag.py diff --git a/openaerostruct/aerodynamics/tests/test_total_lift.py b/tests/aerodynamics_tests/test_total_lift.py similarity index 100% rename from openaerostruct/aerodynamics/tests/test_total_lift.py rename to tests/aerodynamics_tests/test_total_lift.py diff --git a/openaerostruct/aerodynamics/tests/test_viscous_drag.py b/tests/aerodynamics_tests/test_viscous_drag.py similarity index 100% rename from openaerostruct/aerodynamics/tests/test_viscous_drag.py rename to tests/aerodynamics_tests/test_viscous_drag.py diff --git a/openaerostruct/aerodynamics/tests/test_vortex_mesh.py b/tests/aerodynamics_tests/test_vortex_mesh.py similarity index 100% rename from openaerostruct/aerodynamics/tests/test_vortex_mesh.py rename to tests/aerodynamics_tests/test_vortex_mesh.py diff --git a/openaerostruct/aerodynamics/tests/test_wave_drag.py b/tests/aerodynamics_tests/test_wave_drag.py similarity index 100% rename from openaerostruct/aerodynamics/tests/test_wave_drag.py rename to tests/aerodynamics_tests/test_wave_drag.py diff --git a/openaerostruct/common/tests/test_atmos_comp.py b/tests/common_tests/test_atmos_comp.py similarity index 100% rename from openaerostruct/common/tests/test_atmos_comp.py rename to tests/common_tests/test_atmos_comp.py diff --git a/openaerostruct/common/tests/test_reynolds_comp.py b/tests/common_tests/test_reynolds_comp.py similarity index 100% rename from openaerostruct/common/tests/test_reynolds_comp.py rename to tests/common_tests/test_reynolds_comp.py diff --git a/openaerostruct/functionals/tests/test_breguet_range.py b/tests/functionals_tests/test_breguet_range.py similarity index 100% rename from openaerostruct/functionals/tests/test_breguet_range.py rename to tests/functionals_tests/test_breguet_range.py diff --git a/openaerostruct/functionals/tests/test_center_of_gravity.py b/tests/functionals_tests/test_center_of_gravity.py similarity index 100% rename from openaerostruct/functionals/tests/test_center_of_gravity.py rename to tests/functionals_tests/test_center_of_gravity.py diff --git a/openaerostruct/functionals/tests/test_equilibrium.py b/tests/functionals_tests/test_equilibrium.py similarity index 100% rename from openaerostruct/functionals/tests/test_equilibrium.py rename to tests/functionals_tests/test_equilibrium.py diff --git a/openaerostruct/functionals/tests/test_moment_coefficient.py b/tests/functionals_tests/test_moment_coefficient.py similarity index 100% rename from openaerostruct/functionals/tests/test_moment_coefficient.py rename to tests/functionals_tests/test_moment_coefficient.py diff --git a/openaerostruct/functionals/tests/test_sum_areas.py b/tests/functionals_tests/test_sum_areas.py similarity index 100% rename from openaerostruct/functionals/tests/test_sum_areas.py rename to tests/functionals_tests/test_sum_areas.py diff --git a/openaerostruct/functionals/tests/test_total_lift_drag.py b/tests/functionals_tests/test_total_lift_drag.py similarity index 100% rename from openaerostruct/functionals/tests/test_total_lift_drag.py rename to tests/functionals_tests/test_total_lift_drag.py diff --git a/openaerostruct/geometry/tests/rect_wing.vsp3 b/tests/geometry_tests/rect_wing.vsp3 similarity index 100% rename from openaerostruct/geometry/tests/rect_wing.vsp3 rename to tests/geometry_tests/rect_wing.vsp3 diff --git a/openaerostruct/geometry/tests/test_geometry_mesh.py b/tests/geometry_tests/test_geometry_mesh.py similarity index 100% rename from openaerostruct/geometry/tests/test_geometry_mesh.py rename to tests/geometry_tests/test_geometry_mesh.py diff --git a/openaerostruct/geometry/tests/test_geometry_mesh_transformations.py b/tests/geometry_tests/test_geometry_mesh_transformations.py similarity index 100% rename from openaerostruct/geometry/tests/test_geometry_mesh_transformations.py rename to tests/geometry_tests/test_geometry_mesh_transformations.py diff --git a/openaerostruct/geometry/tests/test_monotonic_constraint.py b/tests/geometry_tests/test_monotonic_constraint.py similarity index 100% rename from openaerostruct/geometry/tests/test_monotonic_constraint.py rename to tests/geometry_tests/test_monotonic_constraint.py diff --git a/openaerostruct/geometry/tests/test_radius_comp.py b/tests/geometry_tests/test_radius_comp.py similarity index 100% rename from openaerostruct/geometry/tests/test_radius_comp.py rename to tests/geometry_tests/test_radius_comp.py diff --git a/openaerostruct/geometry/tests/test_vsp_mesh.py b/tests/geometry_tests/test_vsp_mesh.py similarity index 100% rename from openaerostruct/geometry/tests/test_vsp_mesh.py rename to tests/geometry_tests/test_vsp_mesh.py diff --git a/openaerostruct/tests/test_aero.py b/tests/integration_tests/test_aero.py similarity index 100% rename from openaerostruct/tests/test_aero.py rename to tests/integration_tests/test_aero.py diff --git a/openaerostruct/tests/test_aero_all_geom.py b/tests/integration_tests/test_aero_all_geom.py similarity index 100% rename from openaerostruct/tests/test_aero_all_geom.py rename to tests/integration_tests/test_aero_all_geom.py diff --git a/openaerostruct/tests/test_aero_analysis.py b/tests/integration_tests/test_aero_analysis.py similarity index 100% rename from openaerostruct/tests/test_aero_analysis.py rename to tests/integration_tests/test_aero_analysis.py diff --git a/openaerostruct/tests/test_aero_analysis_Sref.py b/tests/integration_tests/test_aero_analysis_Sref.py similarity index 100% rename from openaerostruct/tests/test_aero_analysis_Sref.py rename to tests/integration_tests/test_aero_analysis_Sref.py diff --git a/openaerostruct/tests/test_aero_analysis_compressible.py b/tests/integration_tests/test_aero_analysis_compressible.py similarity index 100% rename from openaerostruct/tests/test_aero_analysis_compressible.py rename to tests/integration_tests/test_aero_analysis_compressible.py diff --git a/openaerostruct/tests/test_aero_analysis_no_symmetry.py b/tests/integration_tests/test_aero_analysis_no_symmetry.py similarity index 100% rename from openaerostruct/tests/test_aero_analysis_no_symmetry.py rename to tests/integration_tests/test_aero_analysis_no_symmetry.py diff --git a/openaerostruct/tests/test_aero_analysis_no_symmetry_wavedrag.py b/tests/integration_tests/test_aero_analysis_no_symmetry_wavedrag.py similarity index 100% rename from openaerostruct/tests/test_aero_analysis_no_symmetry_wavedrag.py rename to tests/integration_tests/test_aero_analysis_no_symmetry_wavedrag.py diff --git a/openaerostruct/tests/test_aero_atmos.py b/tests/integration_tests/test_aero_atmos.py similarity index 100% rename from openaerostruct/tests/test_aero_atmos.py rename to tests/integration_tests/test_aero_atmos.py diff --git a/openaerostruct/tests/test_aero_ffd.py b/tests/integration_tests/test_aero_ffd.py similarity index 100% rename from openaerostruct/tests/test_aero_ffd.py rename to tests/integration_tests/test_aero_ffd.py diff --git a/openaerostruct/tests/test_aero_ground_effect.py b/tests/integration_tests/test_aero_ground_effect.py similarity index 100% rename from openaerostruct/tests/test_aero_ground_effect.py rename to tests/integration_tests/test_aero_ground_effect.py diff --git a/openaerostruct/tests/test_aero_ground_effect_right.py b/tests/integration_tests/test_aero_ground_effect_right.py similarity index 100% rename from openaerostruct/tests/test_aero_ground_effect_right.py rename to tests/integration_tests/test_aero_ground_effect_right.py diff --git a/openaerostruct/tests/test_aero_morphing_multipoint.py b/tests/integration_tests/test_aero_morphing_multipoint.py similarity index 100% rename from openaerostruct/tests/test_aero_morphing_multipoint.py rename to tests/integration_tests/test_aero_morphing_multipoint.py diff --git a/openaerostruct/tests/test_aero_opt_no_symmetry.py b/tests/integration_tests/test_aero_opt_no_symmetry.py similarity index 100% rename from openaerostruct/tests/test_aero_opt_no_symmetry.py rename to tests/integration_tests/test_aero_opt_no_symmetry.py diff --git a/openaerostruct/tests/test_aero_opt_wavedrag.py b/tests/integration_tests/test_aero_opt_wavedrag.py similarity index 100% rename from openaerostruct/tests/test_aero_opt_wavedrag.py rename to tests/integration_tests/test_aero_opt_wavedrag.py diff --git a/openaerostruct/tests/test_aerostruct.py b/tests/integration_tests/test_aerostruct.py similarity index 100% rename from openaerostruct/tests/test_aerostruct.py rename to tests/integration_tests/test_aerostruct.py diff --git a/openaerostruct/tests/test_aerostruct_analysis.py b/tests/integration_tests/test_aerostruct_analysis.py similarity index 100% rename from openaerostruct/tests/test_aerostruct_analysis.py rename to tests/integration_tests/test_aerostruct_analysis.py diff --git a/openaerostruct/tests/test_aerostruct_analysis_Sref.py b/tests/integration_tests/test_aerostruct_analysis_Sref.py similarity index 100% rename from openaerostruct/tests/test_aerostruct_analysis_Sref.py rename to tests/integration_tests/test_aerostruct_analysis_Sref.py diff --git a/openaerostruct/tests/test_aerostruct_analysis_compressible.py b/tests/integration_tests/test_aerostruct_analysis_compressible.py similarity index 100% rename from openaerostruct/tests/test_aerostruct_analysis_compressible.py rename to tests/integration_tests/test_aerostruct_analysis_compressible.py diff --git a/openaerostruct/tests/test_aerostruct_engine_thrusts.py b/tests/integration_tests/test_aerostruct_engine_thrusts.py similarity index 100% rename from openaerostruct/tests/test_aerostruct_engine_thrusts.py rename to tests/integration_tests/test_aerostruct_engine_thrusts.py diff --git a/openaerostruct/tests/test_aerostruct_ffd.py b/tests/integration_tests/test_aerostruct_ffd.py similarity index 100% rename from openaerostruct/tests/test_aerostruct_ffd.py rename to tests/integration_tests/test_aerostruct_ffd.py diff --git a/openaerostruct/tests/test_aerostruct_groundeffect.py b/tests/integration_tests/test_aerostruct_groundeffect.py similarity index 100% rename from openaerostruct/tests/test_aerostruct_groundeffect.py rename to tests/integration_tests/test_aerostruct_groundeffect.py diff --git a/openaerostruct/tests/test_aerostruct_point_loads.py b/tests/integration_tests/test_aerostruct_point_loads.py similarity index 100% rename from openaerostruct/tests/test_aerostruct_point_loads.py rename to tests/integration_tests/test_aerostruct_point_loads.py diff --git a/openaerostruct/tests/test_aerostruct_wingbox_+weight_analysis.py b/tests/integration_tests/test_aerostruct_wingbox_+weight_analysis.py similarity index 100% rename from openaerostruct/tests/test_aerostruct_wingbox_+weight_analysis.py rename to tests/integration_tests/test_aerostruct_wingbox_+weight_analysis.py diff --git a/openaerostruct/tests/test_aerostruct_wingbox_analysis.py b/tests/integration_tests/test_aerostruct_wingbox_analysis.py similarity index 100% rename from openaerostruct/tests/test_aerostruct_wingbox_analysis.py rename to tests/integration_tests/test_aerostruct_wingbox_analysis.py diff --git a/openaerostruct/tests/test_aerostruct_wingbox_fuel_vol_constraint_opt.py b/tests/integration_tests/test_aerostruct_wingbox_fuel_vol_constraint_opt.py similarity index 100% rename from openaerostruct/tests/test_aerostruct_wingbox_fuel_vol_constraint_opt.py rename to tests/integration_tests/test_aerostruct_wingbox_fuel_vol_constraint_opt.py diff --git a/openaerostruct/tests/test_aerostruct_wingbox_opt.py b/tests/integration_tests/test_aerostruct_wingbox_opt.py similarity index 100% rename from openaerostruct/tests/test_aerostruct_wingbox_opt.py rename to tests/integration_tests/test_aerostruct_wingbox_opt.py diff --git a/openaerostruct/tests/test_aerostruct_wingbox_wave_fuel_vol_constraint_opt.py b/tests/integration_tests/test_aerostruct_wingbox_wave_fuel_vol_constraint_opt.py similarity index 100% rename from openaerostruct/tests/test_aerostruct_wingbox_wave_fuel_vol_constraint_opt.py rename to tests/integration_tests/test_aerostruct_wingbox_wave_fuel_vol_constraint_opt.py diff --git a/openaerostruct/tests/test_morphing_aerostruct.py b/tests/integration_tests/test_morphing_aerostruct.py similarity index 100% rename from openaerostruct/tests/test_morphing_aerostruct.py rename to tests/integration_tests/test_morphing_aerostruct.py diff --git a/openaerostruct/tests/test_multiple_aero_analysis.py b/tests/integration_tests/test_multiple_aero_analysis.py similarity index 100% rename from openaerostruct/tests/test_multiple_aero_analysis.py rename to tests/integration_tests/test_multiple_aero_analysis.py diff --git a/openaerostruct/tests/test_multiple_rect.py b/tests/integration_tests/test_multiple_rect.py similarity index 100% rename from openaerostruct/tests/test_multiple_rect.py rename to tests/integration_tests/test_multiple_rect.py diff --git a/openaerostruct/tests/test_multipoint_aero.py b/tests/integration_tests/test_multipoint_aero.py similarity index 100% rename from openaerostruct/tests/test_multipoint_aero.py rename to tests/integration_tests/test_multipoint_aero.py diff --git a/openaerostruct/tests/test_multipoint_aero_ffd.py b/tests/integration_tests/test_multipoint_aero_ffd.py similarity index 100% rename from openaerostruct/tests/test_multipoint_aero_ffd.py rename to tests/integration_tests/test_multipoint_aero_ffd.py diff --git a/openaerostruct/tests/test_multipoint_parallel.py b/tests/integration_tests/test_multipoint_parallel.py similarity index 100% rename from openaerostruct/tests/test_multipoint_parallel.py rename to tests/integration_tests/test_multipoint_parallel.py diff --git a/openaerostruct/tests/test_multipoint_wingbox_aerostruct.py b/tests/integration_tests/test_multipoint_wingbox_aerostruct.py similarity index 100% rename from openaerostruct/tests/test_multipoint_wingbox_aerostruct.py rename to tests/integration_tests/test_multipoint_wingbox_aerostruct.py diff --git a/openaerostruct/tests/test_multipoint_wingbox_derivs.py b/tests/integration_tests/test_multipoint_wingbox_derivs.py similarity index 100% rename from openaerostruct/tests/test_multipoint_wingbox_derivs.py rename to tests/integration_tests/test_multipoint_wingbox_derivs.py diff --git a/openaerostruct/tests/test_scaneagle.py b/tests/integration_tests/test_scaneagle.py similarity index 100% rename from openaerostruct/tests/test_scaneagle.py rename to tests/integration_tests/test_scaneagle.py diff --git a/openaerostruct/tests/test_simple_rect_AS.py b/tests/integration_tests/test_simple_rect_AS.py similarity index 100% rename from openaerostruct/tests/test_simple_rect_AS.py rename to tests/integration_tests/test_simple_rect_AS.py diff --git a/openaerostruct/tests/test_simple_rect_aero.py b/tests/integration_tests/test_simple_rect_aero.py similarity index 100% rename from openaerostruct/tests/test_simple_rect_aero.py rename to tests/integration_tests/test_simple_rect_aero.py diff --git a/openaerostruct/tests/test_simple_rect_aero_roll.py b/tests/integration_tests/test_simple_rect_aero_roll.py similarity index 100% rename from openaerostruct/tests/test_simple_rect_aero_roll.py rename to tests/integration_tests/test_simple_rect_aero_roll.py diff --git a/openaerostruct/tests/test_simple_rect_aero_sideslip.py b/tests/integration_tests/test_simple_rect_aero_sideslip.py similarity index 100% rename from openaerostruct/tests/test_simple_rect_aero_sideslip.py rename to tests/integration_tests/test_simple_rect_aero_sideslip.py diff --git a/openaerostruct/tests/test_simple_rect_aero_wo_symmetry.py b/tests/integration_tests/test_simple_rect_aero_wo_symmetry.py similarity index 100% rename from openaerostruct/tests/test_simple_rect_aero_wo_symmetry.py rename to tests/integration_tests/test_simple_rect_aero_wo_symmetry.py diff --git a/openaerostruct/tests/test_simple_rect_mphys_aero.py b/tests/integration_tests/test_simple_rect_mphys_aero.py similarity index 100% rename from openaerostruct/tests/test_simple_rect_mphys_aero.py rename to tests/integration_tests/test_simple_rect_mphys_aero.py diff --git a/openaerostruct/tests/test_simple_rect_mphys_aero_compressible.py b/tests/integration_tests/test_simple_rect_mphys_aero_compressible.py similarity index 100% rename from openaerostruct/tests/test_simple_rect_mphys_aero_compressible.py rename to tests/integration_tests/test_simple_rect_mphys_aero_compressible.py diff --git a/openaerostruct/tests/test_simple_rect_right_aero.py b/tests/integration_tests/test_simple_rect_right_aero.py similarity index 100% rename from openaerostruct/tests/test_simple_rect_right_aero.py rename to tests/integration_tests/test_simple_rect_right_aero.py diff --git a/openaerostruct/tests/test_struct.py b/tests/integration_tests/test_struct.py similarity index 100% rename from openaerostruct/tests/test_struct.py rename to tests/integration_tests/test_struct.py diff --git a/openaerostruct/tests/test_struct_analysis.py b/tests/integration_tests/test_struct_analysis.py similarity index 100% rename from openaerostruct/tests/test_struct_analysis.py rename to tests/integration_tests/test_struct_analysis.py diff --git a/openaerostruct/tests/test_struct_analysis_2g.py b/tests/integration_tests/test_struct_analysis_2g.py similarity index 100% rename from openaerostruct/tests/test_struct_analysis_2g.py rename to tests/integration_tests/test_struct_analysis_2g.py diff --git a/openaerostruct/tests/test_struct_engine_thrusts.py b/tests/integration_tests/test_struct_engine_thrusts.py similarity index 100% rename from openaerostruct/tests/test_struct_engine_thrusts.py rename to tests/integration_tests/test_struct_engine_thrusts.py diff --git a/openaerostruct/tests/test_struct_no_loads.py b/tests/integration_tests/test_struct_no_loads.py similarity index 100% rename from openaerostruct/tests/test_struct_no_loads.py rename to tests/integration_tests/test_struct_no_loads.py diff --git a/openaerostruct/tests/test_struct_point_masses.py b/tests/integration_tests/test_struct_point_masses.py similarity index 100% rename from openaerostruct/tests/test_struct_point_masses.py rename to tests/integration_tests/test_struct_point_masses.py diff --git a/openaerostruct/tests/test_v1_aero_analysis.py b/tests/integration_tests/test_v1_aero_analysis.py similarity index 100% rename from openaerostruct/tests/test_v1_aero_analysis.py rename to tests/integration_tests/test_v1_aero_analysis.py diff --git a/openaerostruct/tests/test_v1_aero_opt.py b/tests/integration_tests/test_v1_aero_opt.py similarity index 100% rename from openaerostruct/tests/test_v1_aero_opt.py rename to tests/integration_tests/test_v1_aero_opt.py diff --git a/openaerostruct/tests/test_v1_aero_viscous.py b/tests/integration_tests/test_v1_aero_viscous.py similarity index 100% rename from openaerostruct/tests/test_v1_aero_viscous.py rename to tests/integration_tests/test_v1_aero_viscous.py diff --git a/openaerostruct/tests/test_v1_aero_viscous_opt.py b/tests/integration_tests/test_v1_aero_viscous_opt.py similarity index 100% rename from openaerostruct/tests/test_v1_aero_viscous_opt.py rename to tests/integration_tests/test_v1_aero_viscous_opt.py diff --git a/openaerostruct/tests/test_v1_aerostruct_analysis.py b/tests/integration_tests/test_v1_aerostruct_analysis.py similarity index 100% rename from openaerostruct/tests/test_v1_aerostruct_analysis.py rename to tests/integration_tests/test_v1_aerostruct_analysis.py diff --git a/openaerostruct/tests/test_v1_aerostruct_opt.py b/tests/integration_tests/test_v1_aerostruct_opt.py similarity index 100% rename from openaerostruct/tests/test_v1_aerostruct_opt.py rename to tests/integration_tests/test_v1_aerostruct_opt.py diff --git a/openaerostruct/tests/test_v1_struct_analysis.py b/tests/integration_tests/test_v1_struct_analysis.py similarity index 100% rename from openaerostruct/tests/test_v1_struct_analysis.py rename to tests/integration_tests/test_v1_struct_analysis.py diff --git a/openaerostruct/tests/test_v1_struct_opt.py b/tests/integration_tests/test_v1_struct_opt.py similarity index 100% rename from openaerostruct/tests/test_v1_struct_opt.py rename to tests/integration_tests/test_v1_struct_opt.py diff --git a/openaerostruct/tests/test_vsp_aero_analysis.py b/tests/integration_tests/test_vsp_aero_analysis.py similarity index 100% rename from openaerostruct/tests/test_vsp_aero_analysis.py rename to tests/integration_tests/test_vsp_aero_analysis.py diff --git a/openaerostruct/tests/test_wingbox_analysis.py b/tests/integration_tests/test_wingbox_analysis.py similarity index 100% rename from openaerostruct/tests/test_wingbox_analysis.py rename to tests/integration_tests/test_wingbox_analysis.py diff --git a/openaerostruct/tests/test_wingbox_derivs.py b/tests/integration_tests/test_wingbox_derivs.py similarity index 100% rename from openaerostruct/tests/test_wingbox_derivs.py rename to tests/integration_tests/test_wingbox_derivs.py diff --git a/openaerostruct/tests/test_wingbox_distributed_fuel.py b/tests/integration_tests/test_wingbox_distributed_fuel.py similarity index 100% rename from openaerostruct/tests/test_wingbox_distributed_fuel.py rename to tests/integration_tests/test_wingbox_distributed_fuel.py diff --git a/openaerostruct/tests/vsp_model.vsp3 b/tests/integration_tests/vsp_model.vsp3 similarity index 100% rename from openaerostruct/tests/vsp_model.vsp3 rename to tests/integration_tests/vsp_model.vsp3 diff --git a/openaerostruct/mphys/tests/test_aero_builder.py b/tests/mphys_tests/test_aero_builder.py similarity index 100% rename from openaerostruct/mphys/tests/test_aero_builder.py rename to tests/mphys_tests/test_aero_builder.py diff --git a/openaerostruct/mphys/tests/test_aero_funcs_group.py b/tests/mphys_tests/test_aero_funcs_group.py similarity index 100% rename from openaerostruct/mphys/tests/test_aero_funcs_group.py rename to tests/mphys_tests/test_aero_funcs_group.py diff --git a/openaerostruct/mphys/tests/test_aero_solver_group.py b/tests/mphys_tests/test_aero_solver_group.py similarity index 100% rename from openaerostruct/mphys/tests/test_aero_solver_group.py rename to tests/mphys_tests/test_aero_solver_group.py diff --git a/openaerostruct/mphys/tests/test_demux_mesh.py b/tests/mphys_tests/test_demux_mesh.py similarity index 100% rename from openaerostruct/mphys/tests/test_demux_mesh.py rename to tests/mphys_tests/test_demux_mesh.py diff --git a/openaerostruct/mphys/tests/test_mux_forces.py b/tests/mphys_tests/test_mux_forces.py similarity index 100% rename from openaerostruct/mphys/tests/test_mux_forces.py rename to tests/mphys_tests/test_mux_forces.py diff --git a/openaerostruct/structures/tests/test_add_point_masses.py b/tests/structures_tests/test_add_point_masses.py similarity index 100% rename from openaerostruct/structures/tests/test_add_point_masses.py rename to tests/structures_tests/test_add_point_masses.py diff --git a/openaerostruct/structures/tests/test_compute_nodes.py b/tests/structures_tests/test_compute_nodes.py similarity index 100% rename from openaerostruct/structures/tests/test_compute_nodes.py rename to tests/structures_tests/test_compute_nodes.py diff --git a/openaerostruct/structures/tests/test_create_rhs.py b/tests/structures_tests/test_create_rhs.py similarity index 100% rename from openaerostruct/structures/tests/test_create_rhs.py rename to tests/structures_tests/test_create_rhs.py diff --git a/openaerostruct/structures/tests/test_disp.py b/tests/structures_tests/test_disp.py similarity index 100% rename from openaerostruct/structures/tests/test_disp.py rename to tests/structures_tests/test_disp.py diff --git a/openaerostruct/structures/tests/test_energy.py b/tests/structures_tests/test_energy.py similarity index 100% rename from openaerostruct/structures/tests/test_energy.py rename to tests/structures_tests/test_energy.py diff --git a/openaerostruct/structures/tests/test_failure_exact.py b/tests/structures_tests/test_failure_exact.py similarity index 100% rename from openaerostruct/structures/tests/test_failure_exact.py rename to tests/structures_tests/test_failure_exact.py diff --git a/openaerostruct/structures/tests/test_failure_ks.py b/tests/structures_tests/test_failure_ks.py similarity index 100% rename from openaerostruct/structures/tests/test_failure_ks.py rename to tests/structures_tests/test_failure_ks.py diff --git a/openaerostruct/structures/tests/test_fem.py b/tests/structures_tests/test_fem.py similarity index 100% rename from openaerostruct/structures/tests/test_fem.py rename to tests/structures_tests/test_fem.py diff --git a/openaerostruct/structures/tests/test_fuel_loads.py b/tests/structures_tests/test_fuel_loads.py similarity index 100% rename from openaerostruct/structures/tests/test_fuel_loads.py rename to tests/structures_tests/test_fuel_loads.py diff --git a/openaerostruct/structures/tests/test_materials_tube.py b/tests/structures_tests/test_materials_tube.py similarity index 100% rename from openaerostruct/structures/tests/test_materials_tube.py rename to tests/structures_tests/test_materials_tube.py diff --git a/openaerostruct/structures/tests/test_materials_wingbox.py b/tests/structures_tests/test_materials_wingbox.py similarity index 100% rename from openaerostruct/structures/tests/test_materials_wingbox.py rename to tests/structures_tests/test_materials_wingbox.py diff --git a/openaerostruct/structures/tests/test_non_intersecting_thickness.py b/tests/structures_tests/test_non_intersecting_thickness.py similarity index 100% rename from openaerostruct/structures/tests/test_non_intersecting_thickness.py rename to tests/structures_tests/test_non_intersecting_thickness.py diff --git a/openaerostruct/structures/tests/test_spar_within_wing.py b/tests/structures_tests/test_spar_within_wing.py similarity index 100% rename from openaerostruct/structures/tests/test_spar_within_wing.py rename to tests/structures_tests/test_spar_within_wing.py diff --git a/openaerostruct/structures/tests/test_structural_cg.py b/tests/structures_tests/test_structural_cg.py similarity index 100% rename from openaerostruct/structures/tests/test_structural_cg.py rename to tests/structures_tests/test_structural_cg.py diff --git a/openaerostruct/structures/tests/test_thrust_loads.py b/tests/structures_tests/test_thrust_loads.py similarity index 100% rename from openaerostruct/structures/tests/test_thrust_loads.py rename to tests/structures_tests/test_thrust_loads.py diff --git a/openaerostruct/structures/tests/test_total_load_derivs.py b/tests/structures_tests/test_total_load_derivs.py similarity index 100% rename from openaerostruct/structures/tests/test_total_load_derivs.py rename to tests/structures_tests/test_total_load_derivs.py diff --git a/openaerostruct/structures/tests/test_vonmises_tube.py b/tests/structures_tests/test_vonmises_tube.py similarity index 100% rename from openaerostruct/structures/tests/test_vonmises_tube.py rename to tests/structures_tests/test_vonmises_tube.py diff --git a/openaerostruct/structures/tests/test_vonmises_wingbox.py b/tests/structures_tests/test_vonmises_wingbox.py similarity index 100% rename from openaerostruct/structures/tests/test_vonmises_wingbox.py rename to tests/structures_tests/test_vonmises_wingbox.py diff --git a/openaerostruct/structures/tests/test_weight.py b/tests/structures_tests/test_weight.py similarity index 100% rename from openaerostruct/structures/tests/test_weight.py rename to tests/structures_tests/test_weight.py diff --git a/openaerostruct/structures/tests/test_wingbox_geometry.py b/tests/structures_tests/test_wingbox_geometry.py similarity index 100% rename from openaerostruct/structures/tests/test_wingbox_geometry.py rename to tests/structures_tests/test_wingbox_geometry.py diff --git a/openaerostruct/transfer/tests/test_compute_transformation_matrix.py b/tests/transfer_tests/test_compute_transformation_matrix.py similarity index 100% rename from openaerostruct/transfer/tests/test_compute_transformation_matrix.py rename to tests/transfer_tests/test_compute_transformation_matrix.py diff --git a/openaerostruct/transfer/tests/test_displacement_transfer.py b/tests/transfer_tests/test_displacement_transfer.py similarity index 100% rename from openaerostruct/transfer/tests/test_displacement_transfer.py rename to tests/transfer_tests/test_displacement_transfer.py diff --git a/openaerostruct/transfer/tests/test_load_transfer.py b/tests/transfer_tests/test_load_transfer.py similarity index 100% rename from openaerostruct/transfer/tests/test_load_transfer.py rename to tests/transfer_tests/test_load_transfer.py