gwpy 3.0.8__tar.gz → 3.0.10__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of gwpy might be problematic. Click here for more details.
- gwpy-3.0.10/.gitlab/ci/compatibility.yml +79 -0
- gwpy-3.0.10/.gitlab/ci/coverage.yml +32 -0
- gwpy-3.0.10/.gitlab/ci/init-creds.sh +28 -0
- gwpy-3.0.10/.gitlab/ci/init-cvmfs.sh +42 -0
- gwpy-3.0.10/.gitlab/ci/platforms.yml +30 -0
- gwpy-3.0.10/.gitlab/ci/python-base.yml +37 -0
- gwpy-3.0.10/.gitlab/ci/python-dist.yml +42 -0
- gwpy-3.0.10/.gitlab/ci/qa.yml +52 -0
- gwpy-3.0.10/.gitlab/ci/rules.yml +70 -0
- gwpy-3.0.10/.gitlab/ci/sphinx.yml +65 -0
- gwpy-3.0.10/.gitlab/ci/test-job.yml +84 -0
- gwpy-3.0.10/.gitlab/ci/test.yml +249 -0
- gwpy-3.0.10/.gitlab/ci/twine.yml +68 -0
- gwpy-3.0.10/.gitlab-ci.yml +44 -0
- gwpy-3.0.10/CONTRIBUTING.md +160 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/PKG-INFO +14 -13
- {gwpy-3.0.8 → gwpy-3.0.10}/README.md +7 -5
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/conf.py +3 -4
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/external/lalsuite.rst +1 -1
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/references.rst +10 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/spectrogram/index.rst +7 -5
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/spectrum/index.rst +7 -4
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/timeseries/datafind.rst +12 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/examples/miscellaneous/open-data-spectrogram.py +32 -18
- {gwpy-3.0.8 → gwpy-3.0.10}/examples/test_examples.py +1 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/_version.py +2 -2
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/astro/range.py +3 -3
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/astro/tests/test_range.py +4 -5
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/cli/gwpy_plot.py +1 -1
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/cli/qtransform.py +1 -1
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/cli/tests/base.py +11 -1
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/detector/units.py +2 -1
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/frequencyseries/tests/test_hist.py +4 -3
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/io/datafind.py +1 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/io/ffldatafind.py +27 -16
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/io/tests/test_ffldatafind.py +10 -3
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/plot/plot.py +12 -2
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/plot/tests/test_segments.py +1 -1
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/plot/tex.py +6 -4
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/segments/flag.py +13 -11
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/signal/filter_design.py +5 -4
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/signal/tests/test_coherence.py +31 -10
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/signal/tests/test_filter_design.py +3 -3
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/spectrogram/tests/test_spectrogram.py +2 -2
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/table/io/ligolw.py +1 -1
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/table/tests/test_io_ligolw.py +1 -1
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/testing/errors.py +1 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/testing/fixtures.py +1 -18
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/testing/utils.py +15 -6
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/timeseries/core.py +0 -1
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/timeseries/io/cache.py +47 -29
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/timeseries/io/gwf/lalframe.py +8 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/timeseries/statevector.py +4 -2
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/timeseries/tests/test_core.py +7 -13
- gwpy-3.0.10/gwpy/timeseries/tests/test_io_cache.py +74 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/timeseries/tests/test_io_gwf_framecpp.py +1 -1
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/timeseries/tests/test_statevector.py +29 -17
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/timeseries/tests/test_timeseries.py +37 -34
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/types/array.py +16 -3
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/types/index.py +7 -5
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/types/tests/test_array.py +12 -10
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/types/tests/test_array2d.py +5 -9
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/types/tests/test_series.py +5 -5
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/utils/sphinx/zenodo.py +5 -1
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/utils/tests/test_sphinx_zenodo.py +23 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy.egg-info/PKG-INFO +14 -13
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy.egg-info/SOURCES.txt +15 -8
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy.egg-info/requires.txt +6 -5
- {gwpy-3.0.8 → gwpy-3.0.10}/pyproject.toml +15 -12
- gwpy-3.0.8/.codeclimate.yml +0 -39
- gwpy-3.0.8/.codecov.yml +0 -21
- gwpy-3.0.8/.github/workflows/conda.yml +0 -173
- gwpy-3.0.8/.github/workflows/dependencies.yml +0 -110
- gwpy-3.0.8/.github/workflows/dist.yml +0 -141
- gwpy-3.0.8/.github/workflows/lint.yml +0 -66
- gwpy-3.0.8/.github/workflows/release.yml +0 -54
- gwpy-3.0.8/.pep8speaks.yml +0 -3
- gwpy-3.0.8/CONTRIBUTING.md +0 -129
- {gwpy-3.0.8 → gwpy-3.0.10}/.flake8 +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/.gitattributes +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/.gitignore +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/CODE_OF_CONDUCT.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/LICENSE +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/MANIFEST.in +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/Makefile +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/_static/css/gwpy-sphinx.css +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/_static/favicon.png +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/_static/gwpy_white_24.png +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/_templates/autoclass/class.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/_templates/autosummary/base.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/_templates/autosummary/class.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/_templates/autosummary/module.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/astro/index.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/citing.rst.in +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/cli/examples.ini +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/cli/index.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/detector/channel.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/dev/release.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/env.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/examples/table/H1-LDAS_STRAIN-968654552-10.xml.gz +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/external/framecpp.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/external/framel.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/external/nds2.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/gwpy-docs-logo.png +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/index.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/install.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/overview.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/plot/colorbars.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/plot/colors.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/plot/filter.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/plot/gps.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/plot/index.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/plot/legend.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/plot/log.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/segments/dqsegdb.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/segments/index.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/segments/io.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/segments/thresholding.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/signal/index.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/spectrum/filtering.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/spectrum/io.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/table/H1-LDAS_STRAIN-968654552-10.xml.gz +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/table/filter.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/table/histogram.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/table/index.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/table/io.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/table/plot.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/table/rate.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/time/index.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/timeseries/index.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/timeseries/io.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/timeseries/opendata.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/timeseries/plot.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/docs/timeseries/statevector.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/examples/frequencyseries/coherence.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/examples/frequencyseries/hoff.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/examples/frequencyseries/index.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/examples/frequencyseries/inject.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/examples/frequencyseries/percentiles.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/examples/frequencyseries/rayleigh.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/examples/frequencyseries/transfer_function.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/examples/frequencyseries/variance.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/examples/miscellaneous/index.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/examples/miscellaneous/range-spectrogram.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/examples/miscellaneous/range-timeseries.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/examples/segments/index.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/examples/segments/open-data.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/examples/signal/gw150914.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/examples/signal/index.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/examples/signal/qscan.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/examples/spectrogram/coherence.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/examples/spectrogram/index.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/examples/spectrogram/plot.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/examples/spectrogram/ratio.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/examples/spectrogram/rayleigh.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/examples/spectrogram/spectrogram2.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/examples/table/H1-LDAS_STRAIN-968654552-10.xml.gz +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/examples/table/histogram.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/examples/table/index.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/examples/table/rate.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/examples/table/rate_binned.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/examples/table/scatter.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/examples/table/tiles.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/examples/timeseries/blrms.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/examples/timeseries/correlate.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/examples/timeseries/filter.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/examples/timeseries/index.rst +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/examples/timeseries/inject.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/examples/timeseries/public.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/examples/timeseries/pycbc-snr.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/examples/timeseries/qscan.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/examples/timeseries/statevector.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/examples/timeseries/whiten.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/__init__.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/astro/__init__.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/astro/tests/__init__.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/cli/__init__.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/cli/cliproduct.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/cli/coherence.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/cli/coherencegram.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/cli/spectrogram.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/cli/spectrum.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/cli/tests/__init__.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/cli/tests/test_coherence.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/cli/tests/test_coherencegram.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/cli/tests/test_gwpy_plot.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/cli/tests/test_qtransform.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/cli/tests/test_spectrogram.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/cli/tests/test_spectrum.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/cli/tests/test_timeseries.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/cli/tests/test_transferfunction.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/cli/timeseries.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/cli/transferfunction.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/conftest.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/detector/__init__.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/detector/channel.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/detector/io/__init__.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/detector/io/cis.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/detector/io/clf.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/detector/io/omega.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/detector/tests/__init__.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/detector/tests/test_channel.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/detector/tests/test_units.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/frequencyseries/__init__.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/frequencyseries/_fdcommon.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/frequencyseries/frequencyseries.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/frequencyseries/hist.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/frequencyseries/io/__init__.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/frequencyseries/io/ascii.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/frequencyseries/io/hdf5.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/frequencyseries/io/ligolw.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/frequencyseries/tests/__init__.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/frequencyseries/tests/test_frequencyseries.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/io/__init__.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/io/_framecpp.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/io/cache.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/io/gwf.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/io/hdf5.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/io/kerberos.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/io/ligolw.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/io/mp.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/io/nds2.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/io/registry.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/io/tests/__init__.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/io/tests/test_cache.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/io/tests/test_datafind.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/io/tests/test_gwf.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/io/tests/test_kerberos.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/io/tests/test_ligolw.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/io/tests/test_mp.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/io/tests/test_nds2.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/io/tests/test_utils.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/io/utils.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/plot/__init__.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/plot/axes.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/plot/bode.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/plot/colorbar.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/plot/colors.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/plot/gps.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/plot/legend.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/plot/log.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/plot/rc.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/plot/segments.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/plot/tests/__init__.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/plot/tests/test_axes.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/plot/tests/test_bode.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/plot/tests/test_colors.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/plot/tests/test_gps.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/plot/tests/test_log.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/plot/tests/test_plot.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/plot/tests/test_rc.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/plot/tests/test_tex.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/plot/tests/test_text.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/plot/tests/test_utils.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/plot/tests/utils.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/plot/text.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/plot/units.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/plot/utils.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/segments/__init__.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/segments/io/__init__.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/segments/io/hdf5.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/segments/io/json.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/segments/io/ligolw.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/segments/io/segwizard.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/segments/segments.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/segments/tests/__init__.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/segments/tests/test_flag.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/segments/tests/test_segments.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/signal/__init__.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/signal/fft.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/signal/qtransform.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/signal/spectral/__init__.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/signal/spectral/_lal.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/signal/spectral/_median_mean.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/signal/spectral/_pycbc.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/signal/spectral/_registry.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/signal/spectral/_scipy.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/signal/spectral/_ui.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/signal/spectral/_utils.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/signal/tests/__init__.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/signal/tests/test_qtransform.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/signal/tests/test_spectral_lal.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/signal/tests/test_spectral_median_mean.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/signal/tests/test_spectral_pycbc.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/signal/tests/test_spectral_registry.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/signal/tests/test_spectral_scipy.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/signal/tests/test_spectral_ui.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/signal/tests/test_spectral_utils.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/signal/tests/test_window.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/signal/window.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/spectrogram/__init__.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/spectrogram/coherence.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/spectrogram/io/__init__.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/spectrogram/io/hdf5.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/spectrogram/spectrogram.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/spectrogram/tests/__init__.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/table/__init__.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/table/filter.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/table/filters.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/table/gravityspy.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/table/io/__init__.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/table/io/cwb.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/table/io/fetch.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/table/io/gravityspy.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/table/io/gstlal.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/table/io/gwf.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/table/io/hacr.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/table/io/losc.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/table/io/omega.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/table/io/omicron.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/table/io/pycbc.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/table/io/root.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/table/io/snax.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/table/io/sql.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/table/io/utils.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/table/table.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/table/tests/__init__.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/table/tests/test_gravityspy.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/table/tests/test_io_gstlal.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/table/tests/test_io_pycbc.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/table/tests/test_table.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/testing/__init__.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/testing/data/H1-LDAS_STRAIN-968654552-10.xml.gz +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/testing/data/HLV-HW100916-968654552-1.gwf +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/testing/data/HLV-HW100916-968654552-1.hdf +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/testing/data/X1-GWPY_TEST_SEGMENTS-0-10.txt +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/testing/data/X1-GWPY_TEST_SEGMENTS-0-10.xml.gz +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/testing/marks.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/testing/mocks.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/time/__init__.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/time/__main__.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/time/_tconvert.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/time/tests/__init__.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/time/tests/test_main.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/time/tests/test_time.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/timeseries/__init__.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/timeseries/io/__init__.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/timeseries/io/ascii.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/timeseries/io/core.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/timeseries/io/gwf/__init__.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/timeseries/io/gwf/framecpp.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/timeseries/io/gwf/framel.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/timeseries/io/hdf5.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/timeseries/io/losc.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/timeseries/io/nds2.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/timeseries/io/wav.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/timeseries/tests/__init__.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/timeseries/tests/test_io_gwf_lalframe.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/timeseries/tests/test_io_losc.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/timeseries/timeseries.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/types/__init__.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/types/array2d.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/types/io/__init__.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/types/io/ascii.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/types/io/hdf5.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/types/io/ligolw.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/types/series.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/types/sliceutils.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/types/tests/__init__.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/types/tests/test_index.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/utils/__init__.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/utils/decorators.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/utils/enum.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/utils/env.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/utils/lal.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/utils/misc.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/utils/mp.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/utils/progress.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/utils/shell.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/utils/sphinx/__init__.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/utils/sphinx/ex2rst.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/utils/tests/__init__.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/utils/tests/test_decorators.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/utils/tests/test_enum.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/utils/tests/test_env.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/utils/tests/test_lal.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/utils/tests/test_misc.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/utils/tests/test_mp.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/utils/tests/test_shell.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy/utils/tests/test_sphinx_ex2rst.py +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy.egg-info/dependency_links.txt +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy.egg-info/entry_points.txt +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/gwpy.egg-info/top_level.txt +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/setup.cfg +0 -0
- {gwpy-3.0.8 → gwpy-3.0.10}/setup_utils.py +0 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# -- Check dependency compatibility
|
|
2
|
+
#
|
|
3
|
+
# These jobs check that the minimum versions are well specified,
|
|
4
|
+
# and that this project is compatible with the new pre-relase
|
|
5
|
+
# versions of anything we can find.
|
|
6
|
+
#
|
|
7
|
+
|
|
8
|
+
spec:
|
|
9
|
+
inputs:
|
|
10
|
+
stage:
|
|
11
|
+
default: test
|
|
12
|
+
description: "Pipeline stage in which to add jobs"
|
|
13
|
+
type: string
|
|
14
|
+
pytest_options:
|
|
15
|
+
default: ""
|
|
16
|
+
description: "Extra options to pass to pytest"
|
|
17
|
+
type: string
|
|
18
|
+
minimum_python_version:
|
|
19
|
+
default: "3.8"
|
|
20
|
+
description: "Python version for minimum dependency compatibility check"
|
|
21
|
+
type: string
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
include:
|
|
26
|
+
- local: .gitlab/ci/rules.yml
|
|
27
|
+
|
|
28
|
+
# configure minimum dependency compatibility job
|
|
29
|
+
- local: .gitlab/ci/test-job.yml
|
|
30
|
+
inputs:
|
|
31
|
+
stage: $[[ inputs.stage ]]
|
|
32
|
+
job_name: "compat_minimum"
|
|
33
|
+
install_target: "."
|
|
34
|
+
install_extra: "test"
|
|
35
|
+
pip_options: "--upgrade-strategy=only-if-needed"
|
|
36
|
+
pytest_options: $[[ inputs.pytest_options ]]
|
|
37
|
+
|
|
38
|
+
# configure experimental dependency compatibility job
|
|
39
|
+
- local: .gitlab/ci/test-job.yml
|
|
40
|
+
inputs:
|
|
41
|
+
stage: $[[ inputs.stage ]]
|
|
42
|
+
job_name: "compat_experimental"
|
|
43
|
+
install_target: "."
|
|
44
|
+
install_extra: "test,dev"
|
|
45
|
+
pip_options: "--upgrade --upgrade-strategy=eager --pre"
|
|
46
|
+
pytest_options: $[[ inputs.pytest_options ]]
|
|
47
|
+
|
|
48
|
+
.compat_rules:
|
|
49
|
+
rules:
|
|
50
|
+
- if: '$CI_COMMIT_MESSAGE =~ /\[skip compat\]/'
|
|
51
|
+
when: never
|
|
52
|
+
- !reference [.rules_nightly, rules]
|
|
53
|
+
- !reference [.rules_full_test, rules]
|
|
54
|
+
|
|
55
|
+
# test against the minimum specified requirements
|
|
56
|
+
compat_minimum:
|
|
57
|
+
extends:
|
|
58
|
+
- .compat_minimum
|
|
59
|
+
- .compat_rules
|
|
60
|
+
image: python:$[[ inputs.minimum_python_version ]]
|
|
61
|
+
before_script:
|
|
62
|
+
# replace the requirements as follows:
|
|
63
|
+
# >=X.Y.Z ---> X.Y.Z (exact pin to minimum)
|
|
64
|
+
# ^X.Y ---> ~X.Y (pin to X.Y.*)
|
|
65
|
+
- sed -i -E
|
|
66
|
+
-e 's/>=/==/'
|
|
67
|
+
-e 's/\^/~/'
|
|
68
|
+
pyproject.toml
|
|
69
|
+
# undo the change to python_requires
|
|
70
|
+
- sed -i -E
|
|
71
|
+
-e 's/requires-python = "==/requires-python = ">=/'
|
|
72
|
+
pyproject.toml
|
|
73
|
+
|
|
74
|
+
# test against latest/pre-release versions
|
|
75
|
+
compat_experimental:
|
|
76
|
+
extends:
|
|
77
|
+
- .compat_experimental
|
|
78
|
+
- .compat_rules
|
|
79
|
+
image: python:3
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# -- Python test coverage measurements
|
|
2
|
+
|
|
3
|
+
spec:
|
|
4
|
+
inputs:
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
include:
|
|
9
|
+
- local: .gitlab/ci/rules.yml
|
|
10
|
+
|
|
11
|
+
coverage:
|
|
12
|
+
stage: .post
|
|
13
|
+
image: python
|
|
14
|
+
rules: !reference [.rules_full_test, rules]
|
|
15
|
+
script:
|
|
16
|
+
# install coverage (with toml parsing extra)
|
|
17
|
+
- python -m pip install coverage[toml]
|
|
18
|
+
# combine coverage files from other jobs
|
|
19
|
+
- python -m coverage combine .coverage*
|
|
20
|
+
# write an HTML report
|
|
21
|
+
- python -m coverage html -d htmlcov
|
|
22
|
+
# print a report (for the record)
|
|
23
|
+
- python -m coverage report -m
|
|
24
|
+
allow_failure: true
|
|
25
|
+
artifacts:
|
|
26
|
+
name: htmlcov
|
|
27
|
+
expose_as: Coverage report
|
|
28
|
+
paths:
|
|
29
|
+
- htmlcov/index.html
|
|
30
|
+
- htmlcov
|
|
31
|
+
# report coverage here, now that we have all of the information
|
|
32
|
+
coverage: '/^TOTAL\s+.*\s+(\d+\.?\d*)%/'
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
#
|
|
3
|
+
# Initialise credentials for jobs
|
|
4
|
+
#
|
|
5
|
+
|
|
6
|
+
if [ "${KERBEROS_KEYTAB}" = "" ]; then
|
|
7
|
+
echo -e "\x1B[94mNo KERBEROS_KEYTAB configured, skipping credential init.\x1B[0m"
|
|
8
|
+
exit 0
|
|
9
|
+
fi
|
|
10
|
+
|
|
11
|
+
# install tooling
|
|
12
|
+
conda install -c conda-forge -q -y ciecplib krb5
|
|
13
|
+
|
|
14
|
+
# unpack keytab
|
|
15
|
+
export KRB5_KTNAME="${CI_PROJECT_DIR}/.keytab"
|
|
16
|
+
echo "${KERBEROS_KEYTAB}" | base64 -d > ${KRB5_KTNAME}
|
|
17
|
+
chmod 0600 "${KRB5_KTNAME}"
|
|
18
|
+
|
|
19
|
+
# find principal
|
|
20
|
+
export KRB5_PRINCIPAL="$(klist -k ${KRB5_KTNAME} | tail -n 1 | awk '{print $2}')"
|
|
21
|
+
|
|
22
|
+
# get Kerberos TGT
|
|
23
|
+
kinit "${KRB5_PRINCIPAL}" -k -t "${KRB5_KTNAME}"
|
|
24
|
+
klist
|
|
25
|
+
|
|
26
|
+
# get LIGO.ORG X.509
|
|
27
|
+
ecp-get-cert -i login.ligo.org --kerberos
|
|
28
|
+
ecp-cert-info
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
#
|
|
3
|
+
# Install and configure CVMFS
|
|
4
|
+
#
|
|
5
|
+
|
|
6
|
+
set -e
|
|
7
|
+
|
|
8
|
+
if [ "$GITLAB_CI" = "true" ] && [[ "$CI_RUNNER_TAGS" != *"linux"* ]]; then
|
|
9
|
+
echo -e "\x1B[94mSkipping CVMFS setup on this platform\x1B[0m"
|
|
10
|
+
exit 0
|
|
11
|
+
fi
|
|
12
|
+
|
|
13
|
+
echo -e "\x1B[92mConfiguring /cvmfs/gwosc.osgstorage.org\x1B[0m"
|
|
14
|
+
|
|
15
|
+
# configure CVMFS Apt repo
|
|
16
|
+
export DEBIAN_FRONTEND=noninteractive
|
|
17
|
+
apt-get -yqq update
|
|
18
|
+
apt-get -yqq install curl lsb-release
|
|
19
|
+
curl -sLO https://ecsft.cern.ch/dist/cvmfs/cvmfs-release/cvmfs-release-latest_all.deb
|
|
20
|
+
dpkg -i cvmfs-release-latest_all.deb
|
|
21
|
+
rm -f cvmfs-release-latest_all.deb
|
|
22
|
+
|
|
23
|
+
# configure CVMFS-contrib Apt repo
|
|
24
|
+
curl -sLO https://ecsft.cern.ch/dist/cvmfs/cvmfs-contrib-release/cvmfs-contrib-release-latest_all.deb
|
|
25
|
+
dpkg -i cvmfs-contrib-release-latest_all.deb
|
|
26
|
+
rm -f cvmfs-contrib-release-latest_all.deb
|
|
27
|
+
|
|
28
|
+
# install cvmfs
|
|
29
|
+
apt-get -yqq update
|
|
30
|
+
apt-get -yq install \
|
|
31
|
+
cvmfs \
|
|
32
|
+
cvmfs-config-osg \
|
|
33
|
+
;
|
|
34
|
+
|
|
35
|
+
# configure CVMFS client
|
|
36
|
+
cvmfs_config setup
|
|
37
|
+
cat > /etc/cvmfs/default.local << EOF
|
|
38
|
+
CVMFS_REPOSITORIES=gwosc.osgstorage.org
|
|
39
|
+
CVMFS_HTTP_PROXY=DIRECT
|
|
40
|
+
EOF
|
|
41
|
+
|
|
42
|
+
cvmfs_config probe
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
spec:
|
|
2
|
+
inputs:
|
|
3
|
+
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
.linux:
|
|
7
|
+
rules:
|
|
8
|
+
- if: '$CI_COMMIT_MESSAGE =~ /\[skip linux\]/'
|
|
9
|
+
when: never
|
|
10
|
+
tags:
|
|
11
|
+
- saas-linux-medium-amd64
|
|
12
|
+
|
|
13
|
+
.macos:
|
|
14
|
+
rules:
|
|
15
|
+
- if: '$CI_COMMIT_MESSAGE =~ /\[skip macos\]/'
|
|
16
|
+
when: never
|
|
17
|
+
tags:
|
|
18
|
+
- saas-macos-medium-m1
|
|
19
|
+
image: macos-14-xcode-15
|
|
20
|
+
|
|
21
|
+
.windows:
|
|
22
|
+
rules:
|
|
23
|
+
- if: '$CI_COMMIT_MESSAGE =~ /\[skip windows\]/'
|
|
24
|
+
when: never
|
|
25
|
+
variables:
|
|
26
|
+
# windows gitlab runners don't support symbolic links, so we can't
|
|
27
|
+
# run the tests that rely upon them
|
|
28
|
+
PYTEST_ADDOPTS: "-k 'not table\\\\rate and not table\\\\tiles'"
|
|
29
|
+
tags:
|
|
30
|
+
- saas-windows-medium-amd64
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Common elements for Python components
|
|
2
|
+
|
|
3
|
+
spec:
|
|
4
|
+
inputs:
|
|
5
|
+
cache_dir:
|
|
6
|
+
default: ".cache/pip"
|
|
7
|
+
description: "The path to cache to (relative to CI_PROJECT_DIR)"
|
|
8
|
+
image:
|
|
9
|
+
default: "python"
|
|
10
|
+
description: "The default image to use for jobs"
|
|
11
|
+
job_prefix:
|
|
12
|
+
default: ".python"
|
|
13
|
+
description: "Prefix to apply to all templates"
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
$[[ inputs.job_prefix ]]_image:
|
|
18
|
+
image: $[[ inputs.image ]]
|
|
19
|
+
|
|
20
|
+
$[[ inputs.job_prefix ]]_cache:
|
|
21
|
+
variables:
|
|
22
|
+
PIP_CACHE_DIR: "${CI_PROJECT_DIR}/$[[ inputs.cache_dir ]]"
|
|
23
|
+
cache:
|
|
24
|
+
key: "pip-${CI_JOB_NAME_SLUG}"
|
|
25
|
+
paths:
|
|
26
|
+
- $[[ inputs.cache_dir ]]
|
|
27
|
+
|
|
28
|
+
$[[ inputs.job_prefix ]]_base:
|
|
29
|
+
extends:
|
|
30
|
+
- $[[ inputs.job_prefix ]]_image
|
|
31
|
+
- $[[ inputs.job_prefix ]]_cache
|
|
32
|
+
retry:
|
|
33
|
+
# retry all jobs at most twice when gitlab-ci fails to start the job properly
|
|
34
|
+
# see https://docs.gitlab.com/ee/ci/yaml/#retry
|
|
35
|
+
max: 2
|
|
36
|
+
when:
|
|
37
|
+
- runner_system_failure
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# -- Build Python project distributions
|
|
2
|
+
|
|
3
|
+
spec:
|
|
4
|
+
inputs:
|
|
5
|
+
stage:
|
|
6
|
+
default: build
|
|
7
|
+
description: "Pipeline stage in which to add jobs"
|
|
8
|
+
type: string
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
include:
|
|
13
|
+
- local: .gitlab/ci/rules.yml
|
|
14
|
+
|
|
15
|
+
build:
|
|
16
|
+
rules: !reference [.rules_build, rules]
|
|
17
|
+
needs: []
|
|
18
|
+
stage: $[[ inputs.stage ]]
|
|
19
|
+
image: python
|
|
20
|
+
variables:
|
|
21
|
+
# get the full history for setuptools-scm
|
|
22
|
+
GIT_DEPTH: 0
|
|
23
|
+
before_script:
|
|
24
|
+
- python -m pip install
|
|
25
|
+
build
|
|
26
|
+
setuptools
|
|
27
|
+
script:
|
|
28
|
+
# if running a default branch push pipeline, strip the +g<HASH> suffix
|
|
29
|
+
# from the version to give something that test.pypi.org will accept
|
|
30
|
+
- |
|
|
31
|
+
if [ "${CI_COMMIT_TAG}" = "" ] && [ "${CI_PIPELINE_SOURCE}" = "push" ] && [ "${CI_COMMIT_BRANCH}" = "${CI_DEFAULT_BRANCH}" ]; then
|
|
32
|
+
VERSION=$(python3 -c "from setuptools import setup; setup()" --version)
|
|
33
|
+
export SETUPTOOLS_SCM_PRETEND_VERSION=${VERSION%%+*}
|
|
34
|
+
fi
|
|
35
|
+
# generate the distributions
|
|
36
|
+
- python -m build . -o .
|
|
37
|
+
- python -m tarfile --list *.tar.*
|
|
38
|
+
- python -m zipfile --list *.whl
|
|
39
|
+
artifacts:
|
|
40
|
+
paths:
|
|
41
|
+
- "*.tar.*"
|
|
42
|
+
- "*.whl"
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# -- Quality Assurance jobs
|
|
2
|
+
|
|
3
|
+
spec:
|
|
4
|
+
inputs:
|
|
5
|
+
stage:
|
|
6
|
+
default: test
|
|
7
|
+
description: "Pipeline stage in which to add jobs"
|
|
8
|
+
type: string
|
|
9
|
+
project_dir:
|
|
10
|
+
default: "."
|
|
11
|
+
description: "Project directory to scan"
|
|
12
|
+
type: string
|
|
13
|
+
flake8_requirements:
|
|
14
|
+
default: ""
|
|
15
|
+
description: "Extra packages to install alongside flake8"
|
|
16
|
+
type: string
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
include:
|
|
21
|
+
- component: gitlab.com/components/sast/sast@2
|
|
22
|
+
inputs:
|
|
23
|
+
stage: $[[ inputs.stage ]]
|
|
24
|
+
- local: .gitlab/ci/rules.yml
|
|
25
|
+
|
|
26
|
+
.qa:
|
|
27
|
+
extends: .rules_full_test
|
|
28
|
+
stage: $[[ inputs.stage ]]
|
|
29
|
+
needs: []
|
|
30
|
+
|
|
31
|
+
semgrep-sast:
|
|
32
|
+
# NOTE: can't use 'extends' when overwriting job config
|
|
33
|
+
stage: $[[ inputs.stage ]]
|
|
34
|
+
needs: []
|
|
35
|
+
rules: !reference [.qa, rules]
|
|
36
|
+
|
|
37
|
+
flake8:
|
|
38
|
+
extends: .qa
|
|
39
|
+
image: python
|
|
40
|
+
script:
|
|
41
|
+
- python -m pip install flake8 flake8-gl-codeclimate $[[ inputs.flake8_requirements ]]
|
|
42
|
+
- python -m flake8
|
|
43
|
+
$[[ inputs.project_dir ]]
|
|
44
|
+
--exit-zero
|
|
45
|
+
- python -m flake8
|
|
46
|
+
$[[ inputs.project_dir ]]
|
|
47
|
+
--exit-zero
|
|
48
|
+
--format gl-codeclimate
|
|
49
|
+
--output-file flake8.json
|
|
50
|
+
artifacts:
|
|
51
|
+
reports:
|
|
52
|
+
codequality: flake8.json
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# -- GWpy CI/CD workflow rules
|
|
2
|
+
|
|
3
|
+
spec:
|
|
4
|
+
inputs:
|
|
5
|
+
# project_path:
|
|
6
|
+
# description: "Path of parent project for which to define rules"
|
|
7
|
+
# type: string
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# -- basics
|
|
12
|
+
|
|
13
|
+
# tag pipelines
|
|
14
|
+
.rules_tag:
|
|
15
|
+
rules:
|
|
16
|
+
- if: $CI_COMMIT_TAG
|
|
17
|
+
|
|
18
|
+
# default branch
|
|
19
|
+
.rules_default:
|
|
20
|
+
rules:
|
|
21
|
+
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
|
22
|
+
|
|
23
|
+
# schedules on default branch
|
|
24
|
+
.rules_default_schedule:
|
|
25
|
+
rules:
|
|
26
|
+
- if: '$CI_PIPELINE_SOURCE == "schedule" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
|
|
27
|
+
|
|
28
|
+
# merge requests
|
|
29
|
+
.rules_merge_request:
|
|
30
|
+
rules:
|
|
31
|
+
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
|
32
|
+
|
|
33
|
+
# new branches
|
|
34
|
+
.rules_branch:
|
|
35
|
+
rules:
|
|
36
|
+
# not on branches with an open merge request
|
|
37
|
+
- if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS
|
|
38
|
+
when: never
|
|
39
|
+
- if: $CI_COMMIT_BRANCH
|
|
40
|
+
|
|
41
|
+
# -- job types
|
|
42
|
+
|
|
43
|
+
# deployment jobs
|
|
44
|
+
.rules_deploy:
|
|
45
|
+
rules:
|
|
46
|
+
- !reference [.rules_tag, rules]
|
|
47
|
+
|
|
48
|
+
# nightly builds
|
|
49
|
+
.rules_nightly:
|
|
50
|
+
rules:
|
|
51
|
+
- !reference [.rules_default_schedule, rules]
|
|
52
|
+
|
|
53
|
+
# build jobs
|
|
54
|
+
.rules_build:
|
|
55
|
+
rules:
|
|
56
|
+
- !reference [.rules_tag, rules]
|
|
57
|
+
- !reference [.rules_default, rules]
|
|
58
|
+
- !reference [.rules_merge_request, rules]
|
|
59
|
+
- !reference [.rules_branch, rules]
|
|
60
|
+
|
|
61
|
+
# full test suite
|
|
62
|
+
.rules_full_test:
|
|
63
|
+
rules:
|
|
64
|
+
- !reference [.rules_default, rules]
|
|
65
|
+
- !reference [.rules_merge_request, rules]
|
|
66
|
+
|
|
67
|
+
# basic test suite
|
|
68
|
+
.rules_basic_test:
|
|
69
|
+
rules:
|
|
70
|
+
- !reference [.rules_branch, rules]
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# -- Sphinx documentation
|
|
2
|
+
|
|
3
|
+
spec:
|
|
4
|
+
inputs:
|
|
5
|
+
stage:
|
|
6
|
+
default: test
|
|
7
|
+
description: "Pipeline stage in which to add jobs"
|
|
8
|
+
type: string
|
|
9
|
+
image:
|
|
10
|
+
default: python
|
|
11
|
+
description: "Container image to build in"
|
|
12
|
+
type: string
|
|
13
|
+
requirements:
|
|
14
|
+
default: ""
|
|
15
|
+
description: "Extra packages to install with pip before building"
|
|
16
|
+
type: string
|
|
17
|
+
builder:
|
|
18
|
+
default: "html"
|
|
19
|
+
description: "Sphinx builder to use"
|
|
20
|
+
type: string
|
|
21
|
+
sphinx_sourcedir:
|
|
22
|
+
default: ""
|
|
23
|
+
description: "Path of directory containing the Sphinx conf.py (auto-discovered if not set)"
|
|
24
|
+
type: string
|
|
25
|
+
sphinx_options:
|
|
26
|
+
default: ""
|
|
27
|
+
description: "Extra options to pass to sphinx-build"
|
|
28
|
+
type: string
|
|
29
|
+
sphinx_outputdir:
|
|
30
|
+
default: "sphinx"
|
|
31
|
+
description: "Sphinx build output directory (relative to `$CI_PROJECT_DIR`)"
|
|
32
|
+
type: string
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
include:
|
|
37
|
+
- local: .gitlab/ci/rules.yml
|
|
38
|
+
- local: .gitlab/ci/python-base.yml
|
|
39
|
+
- local: .gitlab/ci/conda-test.yml
|
|
40
|
+
inputs:
|
|
41
|
+
job_name: ".conda_test"
|
|
42
|
+
|
|
43
|
+
sphinx:
|
|
44
|
+
extends: .python_base
|
|
45
|
+
rules: !reference [.rules_full_test, rules]
|
|
46
|
+
stage: $[[ inputs.stage ]]
|
|
47
|
+
image: $[[ inputs.image ]]
|
|
48
|
+
before_script:
|
|
49
|
+
- !reference [.conda_test_linux, before_script]
|
|
50
|
+
script:
|
|
51
|
+
# install sphinx
|
|
52
|
+
- python -m pip install sphinx $[[ inputs.requirements ]]
|
|
53
|
+
- python -m pip list installed
|
|
54
|
+
# run sphinx
|
|
55
|
+
- python -m sphinx
|
|
56
|
+
-b $[[ inputs.builder ]]
|
|
57
|
+
$[[ inputs.sphinx_sourcedir | expand_vars ]]
|
|
58
|
+
$[[ inputs.sphinx_outputdir | expand_vars ]]
|
|
59
|
+
$[[ inputs.sphinx_options ]]
|
|
60
|
+
artifacts:
|
|
61
|
+
name: "sphinx"
|
|
62
|
+
expose_as: "Sphinx docs"
|
|
63
|
+
paths:
|
|
64
|
+
- $[[ inputs.sphinx_outputdir ]]/index.html
|
|
65
|
+
- $[[ inputs.sphinx_outputdir ]]
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# -- Basic Pytest-based test template
|
|
2
|
+
|
|
3
|
+
spec:
|
|
4
|
+
inputs:
|
|
5
|
+
stage:
|
|
6
|
+
default: test
|
|
7
|
+
description: "Pipeline stage in which to add jobs"
|
|
8
|
+
type: string
|
|
9
|
+
job_name:
|
|
10
|
+
default: test
|
|
11
|
+
description: "Name to give this job"
|
|
12
|
+
type: string
|
|
13
|
+
install_target:
|
|
14
|
+
default: "."
|
|
15
|
+
description: "Directory/distribution/package to install"
|
|
16
|
+
type: string
|
|
17
|
+
install_extra:
|
|
18
|
+
default: "test"
|
|
19
|
+
description: "Name of the extra feature group(s) to install when installing <install_target>"
|
|
20
|
+
type: string
|
|
21
|
+
pip_options:
|
|
22
|
+
default: ""
|
|
23
|
+
description: "Extra options to pass to pip install"
|
|
24
|
+
type: string
|
|
25
|
+
pytest_options:
|
|
26
|
+
default: ""
|
|
27
|
+
description: "Extra options to pass to pytest"
|
|
28
|
+
type: string
|
|
29
|
+
extra_test_commands:
|
|
30
|
+
default: []
|
|
31
|
+
description: "Extra test commands to run (after pytest)"
|
|
32
|
+
type: array
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
include:
|
|
37
|
+
- local: .gitlab/ci/python-base.yml
|
|
38
|
+
|
|
39
|
+
.$[[ inputs.job_name ]]:
|
|
40
|
+
extends:
|
|
41
|
+
- .python_base
|
|
42
|
+
variables:
|
|
43
|
+
# store coverage in a file named for this job (to be combined later)
|
|
44
|
+
COVERAGE_FILE: ".coverage-${CI_JOB_NAME_SLUG}"
|
|
45
|
+
# cache downloaded data
|
|
46
|
+
GWPY_CACHE: "1"
|
|
47
|
+
# store caches in .cache
|
|
48
|
+
XDG_CACHE_HOME: "$CI_PROJECT_DIR/.cache"
|
|
49
|
+
script:
|
|
50
|
+
# create the cache directory (so that astropy will actually use it)
|
|
51
|
+
# (this isn't just 'mkdir -p ...' because Windows)
|
|
52
|
+
- python -c "import os;
|
|
53
|
+
from pathlib import Path;
|
|
54
|
+
(Path(os.getenv('XDG_CACHE_HOME')) / 'astropy').mkdir(parents=True, exist_ok=True)
|
|
55
|
+
"
|
|
56
|
+
# install pytest
|
|
57
|
+
- python -m pip install pytest pytest-cov $[[ inputs.pip_options ]]
|
|
58
|
+
- python -m pip install $[[ inputs.install_target ]][$[[ inputs.install_extra ]]] $[[ inputs.pip_options ]]
|
|
59
|
+
# list installed packages
|
|
60
|
+
- python -m pip list installed
|
|
61
|
+
# run the tests
|
|
62
|
+
- python -m pytest --junit-xml=junit.xml $[[ inputs.pytest_options ]]
|
|
63
|
+
# run any extra tests
|
|
64
|
+
- $[[ inputs.extra_test_commands ]]
|
|
65
|
+
# format the coverage report
|
|
66
|
+
- python -m coverage xml -o coverage.xml
|
|
67
|
+
artifacts:
|
|
68
|
+
reports:
|
|
69
|
+
# coverage report
|
|
70
|
+
coverage_report:
|
|
71
|
+
coverage_format: cobertura
|
|
72
|
+
path: coverage.xml
|
|
73
|
+
# test report
|
|
74
|
+
junit: junit.xml
|
|
75
|
+
paths:
|
|
76
|
+
- .coverage*
|
|
77
|
+
coverage: null
|
|
78
|
+
cache:
|
|
79
|
+
# cache pip packages
|
|
80
|
+
- !reference [.python_base, cache]
|
|
81
|
+
# cache GWpy downloaded files
|
|
82
|
+
- key: "gwpy-${CI_JOB_NAME_SLUG}"
|
|
83
|
+
paths:
|
|
84
|
+
- .cache/astropy/download
|