From 73bd42b64961f7cefd969335d5da9ad3b5c2e3e6 Mon Sep 17 00:00:00 2001 From: Henrik Blidh Date: Wed, 19 Jun 2019 08:30:02 +0200 Subject: [PATCH 01/31] Prepared for PyPI release --- .travis.yml | 35 --------- LICENSE | 2 +- Pipfile | 12 +++ azure-pipelines.yml | 74 ++++++++++++++++++ lspopt/__init__.py | 62 +-------------- lspopt/__version__.py | 5 ++ lspopt/data/__init__.py | 9 ++- lspopt/lsp.py | 37 ++++++--- lspopt/utils.py | 16 ++-- requirements.txt | 2 +- setup.cfg | 5 ++ setup.py | 145 ++++++++++++++++++++++++++--------- tests/__init__.py | 2 +- tests/lspopt_ref.py | 2 +- tests/test_implementation.py | 7 +- tests/test_utils.py | 5 +- 16 files changed, 258 insertions(+), 162 deletions(-) delete mode 100644 .travis.yml create mode 100644 Pipfile create mode 100644 azure-pipelines.yml create mode 100644 lspopt/__version__.py create mode 100644 setup.cfg diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 1ab86a6..0000000 --- a/.travis.yml +++ /dev/null @@ -1,35 +0,0 @@ -language: python -sudo: false -python: - - 2.6 - - 2.7 - - 3.3 - - 3.4 - - 3.5 - - "3.5-dev" - - "nightly" - - pypy -matrix: - allow_failures: - - python: 2.6 - - python: "3.5-dev" - - python: "nightly" - - python: pypy -branches: - only: - - master - - develop -addons: - apt: - packages: - - libblas-dev - - liblapack-dev - - libatlas-dev - - gfortran - - build-essential -install: - - "pip install pytest pytest-cov python-coveralls" - - "travis_wait pip install -r requirements.txt" -script: py.test tests/ --cov lspopt --cov-report term-missing -after_success: - - coveralls diff --git a/LICENSE b/LICENSE index 8295bc7..35576f1 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2015 Henrik Blidh +Copyright (c) 2019 Henrik Blidh Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/Pipfile b/Pipfile new file mode 100644 index 0000000..98b0275 --- /dev/null +++ b/Pipfile @@ -0,0 +1,12 @@ +[[source]] +url = "https://pypi.org/simple" +verify_ssl = true +name = "pypi" + +[packages] +numpy = ">=1.7.0" +scipy = ">=0.16.1" +six = "*" + +[dev-packages] +pytest = "*" diff --git a/azure-pipelines.yml b/azure-pipelines.yml new file mode 100644 index 0000000..bcbc555 --- /dev/null +++ b/azure-pipelines.yml @@ -0,0 +1,74 @@ +# Azure Devops Pipelines + +trigger: +- master +- releases/* +- develop +- feature/* + +jobs: + +- job: 'TestLinux' + pool: + vmImage: 'Ubuntu 16.04' + strategy: + matrix: + Python27-x64: + python.version: '2.7' + python.architecture: 'x64' + Python35-x64: + python.version: '3.5' + python.architecture: 'x64' + Python36-x64: + python.version: '3.6' + python.architecture: 'x64' + Python37-x64: + python.version: '3.7' + python.architecture: 'x64' + maxParallel: 4 + + steps: + - task: UsePythonVersion@0 + inputs: + versionSpec: '$(python.version)' + architecture: '$(python.architecture)' + + - script: python -m pip install --upgrade pip && pip install -r requirements.txt + displayName: 'Install Python dependencies' + + - script: | + pip install pytest pytest-cov mock + pytest tests --doctest-modules --junitxml=junit/test-results.xml --cov lspopt --cov-report term-missing + displayName: 'pytest' + + - task: PublishTestResults@2 + inputs: + testResultsFiles: '**/test-results.xml' + testRunTitle: 'Python $(python.version)' + condition: succeededOrFailed() + +- job: 'PublishArtifact' + dependsOn: 'TestLinux' + variables: + python.version: '3.6' + python.architecture: 'x64' + pool: + vmImage: 'Ubuntu 16.04'z + + steps: + - task: UsePythonVersion@0 + inputs: + versionSpec: '$(python.version)' + architecture: '$(python.architecture)' + + - script: python -m pip install --upgrade pip && pip install -U setuptools wheel + displayName: 'Install Python dependencies' + + - script: python setup.py sdist bdist_wheel --universal + displayName: 'Build sdist and bdist_wheel' + + - task: PublishBuildArtifacts@1 + displayName: 'Publish Artifact: dist' + inputs: + PathtoPublish: dist + ArtifactName: 'dist' diff --git a/lspopt/__init__.py b/lspopt/__init__.py index 7b4a19d..5c86f4f 100644 --- a/lspopt/__init__.py +++ b/lspopt/__init__.py @@ -6,64 +6,8 @@ from __future__ import unicode_literals from __future__ import absolute_import -try: - from lspopt.lsp import lspopt, spectrogram_lspopt - from tests.lspopt_ref import lspopt_ref - from lspopt import utils - __all__ = ['lspopt', 'spectrogram_lspopt', 'utils'] -except ImportError: - # We will end up here in installation case. - pass +from lspopt.lsp import lspopt, spectrogram_lspopt +from lspopt.__version__ import __version__, version -# Version information. An empty _version_extra corresponds to a full -# release. 'dev' as a _version_extra string means this is a development -# version. -_version_major = 1 -_version_minor = 0 -_version_patch = 0 -# _version_extra = 'dev1' -# _version_extra = 'a6' -_version_extra = '' # Uncomment this for full releases - -# Construct full version string from these. -_ver = [_version_major, _version_minor, _version_patch] - -__version__ = '.'.join(map(str, _ver)) -if _version_extra: - __version__ += _version_extra - -version = __version__ # backwards compatibility name -version_info = (_version_major, _version_minor, _version_patch, _version_extra) - -__name__ = 'lspopt' -__author__ = 'Henrik Blidh' -__author_email__ = 'henrik.blidh@nedomkull.com' -__maintainer__ = 'Henrik Blidh' -__maintainer_email__ = 'henrik.blidh@nedomkull.com' -__license__ = 'MIT' -__description__ = "A Python implementation of a multitaper window method for " \ - "estimating Wigner spectra for certain locally stationary processes" -__url__ = 'https://github.com/hbldh/lspopt' -__download_url__ = 'https://github.com/hbldh/lspopt/tarball/' + '.'.join(map(str, _ver)) -__platforms__ = ['Linux', 'Mac OSX', 'Windows XP/Vista/7/8'] -__keywords__ = ['Mathmatical Statistics', 'Multitaper', 'Spectrogram'] -__classifiers__ = [ - 'Development Status :: 5 - Production/Stable', - 'Intended Audience :: Science/Research', - 'Intended Audience :: Developers', - 'License :: MIT', - 'Topic :: Scientific/Engineering', - 'Operating System :: Microsoft :: Windows', - 'Operating System :: POSIX', - 'Operating System :: Unix', - 'Operating System :: MacOS', - 'Programming Language :: Python', - 'Programming Language :: Python :: 2', - 'Programming Language :: Python :: 2.6', - 'Programming Language :: Python :: 2.7', - 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.3', - 'Programming Language :: Python :: 3.4', - 'Programming Language :: Python :: 3.5', - ], +__all__ = ["lspopt", "spectrogram_lspopt"] diff --git a/lspopt/__version__.py b/lspopt/__version__.py new file mode 100644 index 0000000..b07b919 --- /dev/null +++ b/lspopt/__version__.py @@ -0,0 +1,5 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +version = "1.1.0" +__version__ = version diff --git a/lspopt/data/__init__.py b/lspopt/data/__init__.py index 9d47c10..e9f09f5 100644 --- a/lspopt/data/__init__.py +++ b/lspopt/data/__init__.py @@ -17,13 +17,13 @@ import numpy as np -__all__ = ['C', 'WEIGHTS', 'f_h'] +__all__ = ["C", "WEIGHTS", "f_h"] # An array of C parameter values for which weights have been pre-calculated. -C = np.load(resource_filename('lspopt.data', 'c.npy')).flatten() +C = np.load(resource_filename("lspopt.data", "c.npy")).flatten() # The pre-calculated Hermite polynomial coefficients # for the C parameter values above. -WEIGHTS = np.load(resource_filename('lspopt.data', 'weights.npy')) +WEIGHTS = np.load(resource_filename("lspopt.data", "weights.npy")) def f_h(n, k): @@ -39,6 +39,7 @@ def f_h(n, k): """ return n / _K_TO_VALUE_.get(k) + # Given length of Hermite polynomial coefficient array, return # a value to divide N with. _K_TO_VALUE_ = { @@ -51,5 +52,5 @@ def f_h(n, k): 7: 9.8, 8: 10.3, 9: 10.9, - 10: 11.2 + 10: 11.2, } diff --git a/lspopt/lsp.py b/lspopt/lsp.py index 49f6f44..e284d3f 100644 --- a/lspopt/lsp.py +++ b/lspopt/lsp.py @@ -63,16 +63,24 @@ def lspopt(n, c_parameter=20.0): for i in six.moves.range(1, K - 1): h = np.vstack((h, (2 * t1 * h.T[:, i]) - 2 * i * h.T[:, i - 1])) - H = h.T * np.outer(np.exp(-(t1**2)/2), np.ones((K,), 'float')) + H = h.T * np.outer(np.exp(-(t1 ** 2) / 2), np.ones((K,), "float")) H /= np.array([np.linalg.norm(x) for x in H.T]) return H.T.copy(), weights -def spectrogram_lspopt(x, fs=1.0, c_parameter=20.0, - nperseg=256, noverlap=None, nfft=None, - detrend='constant', return_onesided=True, - scaling='density', axis=-1): +def spectrogram_lspopt( + x, + fs=1.0, + c_parameter=20.0, + nperseg=256, + noverlap=None, + nfft=None, + detrend="constant", + return_onesided=True, + scaling="density", + axis=-1, +): """Convenience method for calling :py:meth:`scipy.signal.spectrogram` with :py:mod:`lspopt` multitaper windows. @@ -144,15 +152,20 @@ def spectrogram_lspopt(x, fs=1.0, c_parameter=20.0, S_out = None # Call spectrogram method for each taper window. for taper_window, taper_weight in zip(H, taper_weights): - f, t, Pxx = spectrogram(x, fs=fs, window=taper_window, - nperseg=nperseg, noverlap=noverlap, - nfft=nfft, detrend=detrend, - return_onesided=return_onesided, - scaling=scaling, axis=axis) + f, t, Pxx = spectrogram( + x, + fs=fs, + window=taper_window, + nperseg=nperseg, + noverlap=noverlap, + nfft=nfft, + detrend=detrend, + return_onesided=return_onesided, + scaling=scaling, + axis=axis, + ) if S_out is None: S_out = taper_weight * Pxx else: S_out += taper_weight * Pxx return f, t, S_out - - diff --git a/lspopt/utils.py b/lspopt/utils.py index 21a52d8..ea18558 100644 --- a/lspopt/utils.py +++ b/lspopt/utils.py @@ -93,7 +93,11 @@ def create_lscp_realisation(N, c, Fs, m, d, random_seed=None): EURASIP Journal on Advances in Signal Processing, 2011, 10. """ - r_x = lambda a, b: _q((a + b) / 2) * _r(a - b, c) * np.exp(1j * m * (a - b) * ((a + b) / 2 - d)) + r_x = ( + lambda a, b: _q((a + b) / 2) + * _r(a - b, c) + * np.exp(1j * m * (a - b) * ((a + b) / 2 - d)) + ) return _create_realisation(r_x, N, Fs, random_seed) @@ -135,13 +139,13 @@ def create_mlsp_realisation(N, c_vector, Fs, random_seed=None): def _create_realisation(r_x, N, Fs, random_seed): # Sampling vector. - t_vector = np.arange(-(N/2), N/2, 1) / Fs + t_vector = np.arange(-(N / 2), N / 2, 1) / Fs # Create real or complex matrix depending on covariance function output. if np.iscomplex(r_x(t_vector[0], t_vector[-1])): - Rx = np.zeros((N, N), 'complex') + Rx = np.zeros((N, N), "complex") else: - Rx = np.zeros((N, N), 'float') + Rx = np.zeros((N, N), "float") # Calculate covariance matrix. for i, t in enumerate(t_vector): @@ -170,8 +174,8 @@ def _create_realisation(r_x, N, Fs, random_seed): def _q(tau): - return np.exp(-(tau ** 2)/2) + return np.exp(-(tau ** 2) / 2) def _r(tau, c): - return np.exp(-((c/4) * (tau ** 2)) / 2) + return np.exp(-((c / 4) * (tau ** 2)) / 2) diff --git a/requirements.txt b/requirements.txt index fbbeba1..aec4439 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ -numpy>=1.6.2 +numpy>=1.7.0 scipy>=0.16.1 six>=1.10.0 diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..d662cb9 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,5 @@ +[bdist_wheel] +universal=1 + +[aliases] +test=pytest diff --git a/setup.py b/setup.py index d078c18..21b5e15 100644 --- a/setup.py +++ b/setup.py @@ -1,52 +1,127 @@ +#!/usr/bin/env python # -*- coding: utf-8 -*- -""" -Release data for the lspopt project. - -Copyright (c) 2015, Nedomkull Mathematical Modeling AB. -Created on 2015-11-15 by hbldh - -""" +# Note: To use the 'upload' functionality of this file, you must: +# $ pip install twine from __future__ import division from __future__ import print_function from __future__ import absolute_import +import io import os -from setuptools import setup, find_packages +import sys +from shutil import rmtree + +from setuptools import find_packages, setup, Command + +# Package meta-data. +NAME = 'lspopt' +DESCRIPTION = "A Python implementation of a multitaper window method for " \ + "estimating Wigner spectra for certain locally stationary processes" +URL = 'https://github.com/hbldh/lspopt' +EMAIL = 'henrik.blidh@gmail.com' +AUTHOR = 'Henrik Blidh' +REQUIRES_PYTHON = '>=2.7.10' +VERSION = None + +REQUIRED = [ + 'numpy', + 'scipy', + 'six' +] + +here = os.path.abspath(os.path.dirname(__file__)) + +with io.open(os.path.join(here, 'README.md'), encoding='utf-8') as f: + long_description = '\n' + f.read() + +# Load the package's __version__.py module as a dictionary. +about = {} +if not VERSION: + with open(os.path.join(here, NAME, '__version__.py')) as f: + exec(f.read(), about) +else: + about['__version__'] = VERSION + + +class UploadCommand(Command): + """Support setup.py upload.""" -import lspopt + description = 'Build and publish the package.' + user_options = [] + + @staticmethod + def status(s): + """Prints things in bold.""" + print('\033[1m{0}\033[0m'.format(s)) + + def initialize_options(self): + pass + + def finalize_options(self): + pass + + def run(self): + try: + self.status('Removing previous builds…') + rmtree(os.path.join(here, 'dist')) + except OSError: + pass + + self.status('Building Source and Wheel (universal) distribution…') + os.system('{0} setup.py sdist bdist_wheel --universal'.format(sys.executable)) + + self.status('Uploading the package to PyPi via Twine…') + os.system('twine upload dist/*') + + self.status('Pushing git tags…') + os.system('git tag v{0}'.format(about['__version__'])) + os.system('git push --tags') + + sys.exit() -basedir = os.path.dirname(os.path.abspath(__file__)) -with open(os.path.join(basedir, 'README.md')) as f: - LONG_DESCRIPTION = f.read() setup( - name='lspopt', - version=lspopt.__version__, - author=lspopt.__author__, - author_email=lspopt.__author_email__, - maintainer=lspopt.__maintainer__, - maintainer_email=lspopt.__maintainer_email__, - url=lspopt.__url__, - download_url=lspopt.__download_url__, - description=lspopt.__description__, - long_description=LONG_DESCRIPTION, - license=lspopt.__license__, - platforms=lspopt.__platforms__, - keywords=lspopt.__keywords__, - classifiers=lspopt.__classifiers__, - packages=find_packages(exclude=('tests', )), + name=NAME, + version=about['__version__'], + description=DESCRIPTION, + long_description=long_description, + long_description_content_type='text/markdown', + author=AUTHOR, + author_email=EMAIL, + python_requires=REQUIRES_PYTHON, + tests_require=['pytest', ], + url=URL, + keywords=['Mathematical Statistics', 'Multitaper', 'Spectrogram'], + packages=find_packages(exclude=('tests',)), package_data={ 'lspopt.data': ['*.npy'] }, - install_requires=[ - 'numpy>=1.6.2', - 'scipy>=0.16.1', - 'six>=1.10.0' + install_requires=REQUIRED, + include_package_data=True, + license='MIT', + classifiers=[ + 'Development Status :: 5 - Production/Stable', + 'Intended Audience :: Science/Research', + 'Intended Audience :: Developers', + 'License :: MIT', + 'Topic :: Scientific/Engineering', + 'Operating System :: Microsoft :: Windows', + 'Operating System :: POSIX', + 'Operating System :: Unix', + 'Operating System :: MacOS', + 'Programming Language :: Python :: 2', + 'Programming Language :: Python :: 2.7', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.5', + 'Programming Language :: Python :: 3.6', + 'Programming Language :: Python :: 3.7', + 'Programming Language :: Python :: Implementation :: CPython', + 'Programming Language :: Python :: Implementation :: PyPy' ], - dependency_links=[], - ext_modules=[], - entry_points={} + # $ setup.py publish support. + cmdclass={ + 'upload': UploadCommand, + }, ) - diff --git a/tests/__init__.py b/tests/__init__.py index 3b236f4..89072e0 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -1 +1 @@ -__author__ = 'hbldh' +__author__ = "hbldh" diff --git a/tests/lspopt_ref.py b/tests/lspopt_ref.py index c59e8c9..70b2ddc 100644 --- a/tests/lspopt_ref.py +++ b/tests/lspopt_ref.py @@ -71,7 +71,7 @@ def lspopt_ref(n, c_parameter=20.0): if K > 2: for i in range(1, K - 1): h = np.vstack((h, (2 * t1 * h.T[:, i]) - 2 * i * h.T[:, i - 1])) - H = h.T * np.outer(np.exp(-(t1**2)/2), np.ones((K,), 'float')) + H = h.T * np.outer(np.exp(-(t1 ** 2) / 2), np.ones((K,), "float")) for i in six.moves.range(K): H[:, i] = H[:, i] / np.sqrt(H[:, i].T.dot(H[:, i])) # Norm diff --git a/tests/test_implementation.py b/tests/test_implementation.py index 93348bc..84be3e0 100644 --- a/tests/test_implementation.py +++ b/tests/test_implementation.py @@ -52,13 +52,14 @@ def test_different_c(c): def test_spectrogram_method(): """Test the spectrogram method's functionality.""" fs = 10e3 - N = 1e5 + N = int(1e5) amp = 2 * np.sqrt(2) noise_power = 0.001 * fs / 2 time = np.arange(N) / fs freq = np.linspace(1e3, 2e3, N) - x = amp * chirp(time, 1e3, 2.0, 6e3, method='quadratic') + \ - np.random.normal(scale=np.sqrt(noise_power), size=time.shape) + x = amp * chirp(time, 1e3, 2.0, 6e3, method="quadratic") + np.random.normal( + scale=np.sqrt(noise_power), size=time.shape + ) f, t, Sxx = spectrogram_lspopt(x, fs, c_parameter=20.0) f_sp, t_sp, Sxx_sp = spectrogram(x, fs) diff --git a/tests/test_utils.py b/tests/test_utils.py index 3831ac1..d58b5fd 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -19,8 +19,6 @@ from __future__ import unicode_literals from __future__ import absolute_import -import unittest - import pytest import six import numpy as np @@ -29,7 +27,6 @@ from lspopt import utils - def test_create_lsp_realisation(): """Test that create method is working at least.""" N = 256 @@ -56,7 +53,7 @@ def test_create_lscp_realisation(): def test_create_mlsp_realisation(): """Test that create method is working at least.""" - N = 256 + N = 256 c = [1.4, 20.0] Fs = 8.0 x, H, Rx = utils.create_mlsp_realisation(N, c, Fs) From 5362fdc20cd544702f9a4a2990d317fe1a947389 Mon Sep 17 00:00:00 2001 From: Henrik Blidh Date: Wed, 19 Jun 2019 08:35:09 +0200 Subject: [PATCH 02/31] Fix for axure-pipelines.yml --- README.md | 2 +- azure-pipelines.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 562b0e6..210ce7f 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # LSPOpt -[![Build Status](https://travis-ci.org/hbldh/lspopt.svg)](https://travis-ci.org/hbldh/lspopt) +[![Build Status](https://dev.azure.com/hbldh/github/_apis/build/status/hbldh.lspopt?branchName=master)](https://dev.azure.com/hbldh/github/_build/latest?definitionId=7&branchName=master) [![Coverage Status](https://coveralls.io/repos/github/hbldh/lspopt/badge.svg?branch=master)](https://coveralls.io/github/hbldh/lspopt?branch=master) This module is a Python implementation of the multitaper window method diff --git a/azure-pipelines.yml b/azure-pipelines.yml index bcbc555..13f21a3 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -53,7 +53,7 @@ jobs: python.version: '3.6' python.architecture: 'x64' pool: - vmImage: 'Ubuntu 16.04'z + vmImage: 'Ubuntu 16.04' steps: - task: UsePythonVersion@0 From 5407ff39f225d7531b364cfc3c734b9c361dfbc6 Mon Sep 17 00:00:00 2001 From: Henrik Blidh Date: Wed, 19 Jun 2019 08:45:08 +0200 Subject: [PATCH 03/31] Version 1.1.0 - Fixes #1 --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 210ce7f..6ce4b7c 100644 --- a/README.md +++ b/README.md @@ -22,16 +22,16 @@ Abstract from [\[1\]](#references): Install via pip: - pip install git+https://github.com/hbldh/lspopt.git#egg=lspopt + pip install lspopt ## Testing -Test with `nosetests`: +Test with `pytest`: - nosetests tests/ + pytest tests/ Tests are run at every commit to GitHub and the results of this, as well as test -coverage, can be studied at [Travis CI](https://travis-ci.org/hbldh/lspopt). +coverage, can be studied at [Azure Pipelines](https://dev.azure.com/hbldh/github/_build/latest?definitionId=7&branchName=master). ## Usage From 27b3300a0e2724a09f12446d20341597215eefd5 Mon Sep 17 00:00:00 2001 From: Henrik Blidh Date: Wed, 19 Jun 2019 08:54:07 +0200 Subject: [PATCH 04/31] Fix for incorrect trove classifier. Added PyPI and Black badges to README. Added Manifest file --- MANIFEST.in | 1 + README.md | 2 ++ setup.py | 2 +- 3 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 MANIFEST.in diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..3b9f2de --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1 @@ +include LICENSE README.md HISTORY.md requirements.txt Pipfile diff --git a/README.md b/README.md index 6ce4b7c..86d47f3 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ [![Build Status](https://dev.azure.com/hbldh/github/_apis/build/status/hbldh.lspopt?branchName=master)](https://dev.azure.com/hbldh/github/_build/latest?definitionId=7&branchName=master) [![Coverage Status](https://coveralls.io/repos/github/hbldh/lspopt/badge.svg?branch=master)](https://coveralls.io/github/hbldh/lspopt?branch=master) +[![PyPI version](https://img.shields.io/pypi/v/lspopt.svg)](https://pypi.org/project/lspopt/) +[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/ambv/black) This module is a Python implementation of the multitaper window method described in [\[1\]](#references) for estimating Wigner spectra for certain locally diff --git a/setup.py b/setup.py index 21b5e15..5e46db8 100644 --- a/setup.py +++ b/setup.py @@ -105,7 +105,7 @@ def run(self): 'Development Status :: 5 - Production/Stable', 'Intended Audience :: Science/Research', 'Intended Audience :: Developers', - 'License :: MIT', + 'License :: OSI Approved :: MIT License', 'Topic :: Scientific/Engineering', 'Operating System :: Microsoft :: Windows', 'Operating System :: POSIX', From 6ba11aa86e99c7a67a621543bd1b3960734a174c Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Fri, 25 Sep 2020 05:14:04 +0000 Subject: [PATCH 05/31] Create Dependabot config file --- .github/dependabot.yml | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..eff7b5f --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,8 @@ +version: 2 +updates: +- package-ecosystem: pip + directory: "/" + schedule: + interval: daily + time: "04:00" + open-pull-requests-limit: 10 From 0bc758dcdab1fec1cc9a3ac6662d67ebddbbc17d Mon Sep 17 00:00:00 2001 From: Henrik Blidh Date: Mon, 28 Sep 2020 10:30:32 +0200 Subject: [PATCH 06/31] Github Actions for lspopt --- .github/ISSUE_TEMPLATE.md | 11 +++++ .github/workflows/build_and_test.yml | 45 +++++++++++++++++ .github/workflows/pypi-publish.yml | 31 ++++++++++++ Pipfile | 2 +- azure-pipelines.yml | 74 ---------------------------- 5 files changed, 88 insertions(+), 75 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE.md create mode 100644 .github/workflows/build_and_test.yml create mode 100644 .github/workflows/pypi-publish.yml delete mode 100644 azure-pipelines.yml diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 0000000..d9127d6 --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,11 @@ +### Description + +Describe what you were trying to get done. +Tell us what happened, what went wrong, and what you expected to happen. + +### What I Did + +``` +Paste the command(s) you ran and the output. +If there was a crash, please include the traceback here. +``` diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml new file mode 100644 index 0000000..e611e41 --- /dev/null +++ b/.github/workflows/build_and_test.yml @@ -0,0 +1,45 @@ +name: Build and Test + +on: + push: + branches: [ master, develop ] + pull_request: + branches: [ master, develop ] + +jobs: + build_linux: + name: "Build and test" + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest] + python-version: [2.7, 3.5, 3.6, 3.7, 3.8] + steps: + - uses: actions/checkout@v2 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + - name: Upgrade pip. setuptools and wheel + run: python -m pip install --upgrade pip setuptools wheel + + - name: Install development dependencies + run: pip install flake8 pytest pytest-cov + - name: Lint with flake8 + run: | + # stop the build if there are Python syntax errors or undefined names + flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics + # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide + flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics + - name: Install package as editable + run: pip install -e . + - name: Test with pytest + run: | + pytest tests --junitxml=junit/test-results-${{ matrix.os }}-${{ matrix.python-version }}.xml --cov=com --cov-report=xml --cov-report=html + - name: Upload pytest test results + uses: actions/upload-artifact@v1 + with: + name: pytest-results-${{ matrix.os }}-${{ matrix.python-version }} + path: junit/test-results-${{ matrix.os }}-${{ matrix.python-version }}.xml + # Use always() to always run this step to publish test results when there are test failures + if: ${{ always() }} diff --git a/.github/workflows/pypi-publish.yml b/.github/workflows/pypi-publish.yml new file mode 100644 index 0000000..4e1ef42 --- /dev/null +++ b/.github/workflows/pypi-publish.yml @@ -0,0 +1,31 @@ +# This workflows will upload a Python Package using Twine when a release is created +# For more information see: https://help.github.com/en/actions/language-and-framework-guides/using-python-with-github-actions#publishing-to-package-registries + +name: Upload Python Package + +on: + release: + types: [created] + +jobs: + deploy: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: '3.x' + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install setuptools wheel twine + - name: Build and publish + env: + TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }} + TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} + run: | + python setup.py sdist bdist_wheel + twine upload dist/* diff --git a/Pipfile b/Pipfile index 98b0275..383414e 100644 --- a/Pipfile +++ b/Pipfile @@ -6,7 +6,7 @@ name = "pypi" [packages] numpy = ">=1.7.0" scipy = ">=0.16.1" -six = "*" +six = ">=1.10.0" [dev-packages] pytest = "*" diff --git a/azure-pipelines.yml b/azure-pipelines.yml deleted file mode 100644 index 13f21a3..0000000 --- a/azure-pipelines.yml +++ /dev/null @@ -1,74 +0,0 @@ -# Azure Devops Pipelines - -trigger: -- master -- releases/* -- develop -- feature/* - -jobs: - -- job: 'TestLinux' - pool: - vmImage: 'Ubuntu 16.04' - strategy: - matrix: - Python27-x64: - python.version: '2.7' - python.architecture: 'x64' - Python35-x64: - python.version: '3.5' - python.architecture: 'x64' - Python36-x64: - python.version: '3.6' - python.architecture: 'x64' - Python37-x64: - python.version: '3.7' - python.architecture: 'x64' - maxParallel: 4 - - steps: - - task: UsePythonVersion@0 - inputs: - versionSpec: '$(python.version)' - architecture: '$(python.architecture)' - - - script: python -m pip install --upgrade pip && pip install -r requirements.txt - displayName: 'Install Python dependencies' - - - script: | - pip install pytest pytest-cov mock - pytest tests --doctest-modules --junitxml=junit/test-results.xml --cov lspopt --cov-report term-missing - displayName: 'pytest' - - - task: PublishTestResults@2 - inputs: - testResultsFiles: '**/test-results.xml' - testRunTitle: 'Python $(python.version)' - condition: succeededOrFailed() - -- job: 'PublishArtifact' - dependsOn: 'TestLinux' - variables: - python.version: '3.6' - python.architecture: 'x64' - pool: - vmImage: 'Ubuntu 16.04' - - steps: - - task: UsePythonVersion@0 - inputs: - versionSpec: '$(python.version)' - architecture: '$(python.architecture)' - - - script: python -m pip install --upgrade pip && pip install -U setuptools wheel - displayName: 'Install Python dependencies' - - - script: python setup.py sdist bdist_wheel --universal - displayName: 'Build sdist and bdist_wheel' - - - task: PublishBuildArtifacts@1 - displayName: 'Publish Artifact: dist' - inputs: - PathtoPublish: dist - ArtifactName: 'dist' From 0795d2a85b4ac491dc158ad37b671c30712a00e0 Mon Sep 17 00:00:00 2001 From: Henrik Blidh Date: Mon, 28 Sep 2020 10:43:23 +0200 Subject: [PATCH 07/31] CHANGELOG and version bump --- CHANGELOG.md | 35 +++++++++++++++++++++++++++++++++++ README.md | 2 +- lspopt/__version__.py | 2 +- setup.py | 3 +++ 4 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..18de9e3 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,35 @@ + +# Changelog +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [1.1.1] - 2020-09-28 + +### Added + +- Added `CHANGELOG.md` + +### Changed + +- Change CI from Azure Devops to Github Actions + + +## [1.1.0] - 2019-06-19 + +### Added + +- First PyPI-released version + + +## [1.0.0] - 2016-08-22 + +### Added + +- Regarded as a feature-complete, stable library. + + +[Unreleased]: https://github.com/hbldh/lspopt/compare/v1.1.1...HEAD +[1.1.1]: https://github.com/hbldh/lspopt/compare/v1.1.1...v1.1.0 +[1.1.0]: https://github.com/hbldh/lspopt/compare/v1.1.0...v1.0.0 diff --git a/README.md b/README.md index 86d47f3..a7e1e76 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # LSPOpt -[![Build Status](https://dev.azure.com/hbldh/github/_apis/build/status/hbldh.lspopt?branchName=master)](https://dev.azure.com/hbldh/github/_build/latest?definitionId=7&branchName=master) +![Build and Test](https://github.com/hbldh/lspopt/workflows/Build%20and%20Test/badge.svg) [![Coverage Status](https://coveralls.io/repos/github/hbldh/lspopt/badge.svg?branch=master)](https://coveralls.io/github/hbldh/lspopt?branch=master) [![PyPI version](https://img.shields.io/pypi/v/lspopt.svg)](https://pypi.org/project/lspopt/) [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/ambv/black) diff --git a/lspopt/__version__.py b/lspopt/__version__.py index b07b919..4cad309 100644 --- a/lspopt/__version__.py +++ b/lspopt/__version__.py @@ -1,5 +1,5 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -version = "1.1.0" +version = "1.1.1" __version__ = version diff --git a/setup.py b/setup.py index 5e46db8..9f3b86a 100644 --- a/setup.py +++ b/setup.py @@ -36,6 +36,9 @@ with io.open(os.path.join(here, 'README.md'), encoding='utf-8') as f: long_description = '\n' + f.read() +with io.open(os.path.join(here, 'CHANGELOG.md'), encoding='utf-8') as f: + long_description = long_description + '\n' + f.read() + # Load the package's __version__.py module as a dictionary. about = {} if not VERSION: From 473d28fa3020dc9534d467a2102c05eb5e7a8e22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Richard=20H=C3=B6chenberger?= Date: Tue, 7 Jun 2022 16:29:41 +0200 Subject: [PATCH 08/31] Add changelog to sdist The changelog was missing, causing building from source to fail as `setup.py` tried to read this file. --- MANIFEST.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MANIFEST.in b/MANIFEST.in index 3b9f2de..076d1eb 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1 +1 @@ -include LICENSE README.md HISTORY.md requirements.txt Pipfile +include LICENSE README.md HISTORY.md requirements.txt Pipfile CHANGELOG.md From 46401bfac912c453cb7367f843231d4fbc8d08ca Mon Sep 17 00:00:00 2001 From: Henrik Blidh Date: Wed, 8 Jun 2022 10:14:53 +0200 Subject: [PATCH 09/31] Version 1.2.0 - Source Dist fix Modified MANIFEST.in. Fixes #6 Removed Pipfile Added new plot file Fixed some incorrect int declarations Updated plot functions --- CHANGELOG.md | 24 ++++++++++++++++++++---- LICENSE | 2 +- MANIFEST.in | 9 ++++++++- Pipfile | 12 ------------ README.md | 11 ++++++----- generate_plot.py | 14 ++++++++------ lspopt/__version__.py | 2 +- plot.png | Bin 0 -> 175207 bytes tests/test_implementation.py | 8 ++++---- 9 files changed, 48 insertions(+), 34 deletions(-) delete mode 100644 Pipfile create mode 100644 plot.png diff --git a/CHANGELOG.md b/CHANGELOG.md index 18de9e3..e96b7ed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,25 @@ - # Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.2.0] - 2022-06-08 + +### Added + +- New plot file + +### Fixed + +- Source distribution was broken on PyPI. Modified `MANIFEST.in` to correct that (#5 and #6) +- Url to missing plot file +- Fixed some incorrect int declarations using `1e3` notation + +### Removed + +- Removed Pipfile + ## [1.1.1] - 2020-09-28 ### Added @@ -30,6 +45,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Regarded as a feature-complete, stable library. -[Unreleased]: https://github.com/hbldh/lspopt/compare/v1.1.1...HEAD -[1.1.1]: https://github.com/hbldh/lspopt/compare/v1.1.1...v1.1.0 -[1.1.0]: https://github.com/hbldh/lspopt/compare/v1.1.0...v1.0.0 +[Unreleased]: https://github.com/hbldh/lspopt/compare/v1.2.0...HEAD +[1.2.0]: https://github.com/hbldh/lspopt/compare/v1.1.1...v1.2.0 +[1.1.1]: https://github.com/hbldh/lspopt/compare/v1.1.0...v1.1.1 +[1.1.0]: https://github.com/hbldh/lspopt/compare/v1.0.0...v1.1.0 diff --git a/LICENSE b/LICENSE index 35576f1..03e60a3 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2019 Henrik Blidh +Copyright (c) 2022 Henrik Blidh Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/MANIFEST.in b/MANIFEST.in index 076d1eb..63be52a 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1 +1,8 @@ -include LICENSE README.md HISTORY.md requirements.txt Pipfile CHANGELOG.md +include LICENSE +include README.md +include HISTORY.md +include requirements.txt +include Pipfile +include CHANGELOG.md +include lspopt/data/c.npy +include lspopt/data/weights.npy diff --git a/Pipfile b/Pipfile deleted file mode 100644 index 383414e..0000000 --- a/Pipfile +++ /dev/null @@ -1,12 +0,0 @@ -[[source]] -url = "https://pypi.org/simple" -verify_ssl = true -name = "pypi" - -[packages] -numpy = ">=1.7.0" -scipy = ">=0.16.1" -six = ">=1.10.0" - -[dev-packages] -pytest = "*" diff --git a/README.md b/README.md index a7e1e76..402ec7a 100644 --- a/README.md +++ b/README.md @@ -66,13 +66,13 @@ import matplotlib.pyplot as plt from lspopt.lsp import spectrogram_lspopt -fs = 10e3 -N = 1e5 +fs = 10000 +N = 100000 amp = 2 * np.sqrt(2) noise_power = 0.001 * fs / 2 time = np.arange(N) / fs -freq = np.linspace(1e3, 2e3, N) -x = amp * chirp(time, 1e3, 2.0, 6e3, method='quadratic') + \ +freq = np.linspace(1000, 2000, N) +x = amp * chirp(time, 1000, 2.0, 6000, method='quadratic') + \ np.random.normal(scale=np.sqrt(noise_power), size=time.shape) f, t, Sxx = spectrogram(x, fs) @@ -89,10 +89,11 @@ ax.pcolormesh(t, f, Sxx) ax.set_ylabel('Frequency [Hz]') ax.set_xlabel('Time [sec]') +plt.tight_layout() plt.show() ``` -![Spectrogram plot](https://hbldh.github.com/lspopt/images/plot.png) +![Spectrogram plot](https://github.com/hbldh/lspopt/blob/master/plot.png) *Top: Using SciPy's spectrogram method. Bottom: Using LSPOpt's spectrogram solution.* ## References diff --git a/generate_plot.py b/generate_plot.py index d7ea04e..679d06d 100644 --- a/generate_plot.py +++ b/generate_plot.py @@ -26,13 +26,13 @@ def generate_chirp_spectrogram_plot(): - fs = 10e3 - N = 1e5 + fs = 10000 + N = 100000 amp = 2 * np.sqrt(2) noise_power = 0.001 * fs / 2 time = np.arange(N) / fs - freq = np.linspace(1e3, 2e3, N) - x = amp * chirp(time, 1e3, 2.0, 6e3, method='quadratic') + \ + freq = np.linspace(1000, 2000, N) + x = amp * chirp(time, 1000, 2.0, 6000, method='quadratic') + \ np.random.normal(scale=np.sqrt(noise_power), size=time.shape) f, t, Sxx = spectrogram(x, fs) @@ -40,7 +40,7 @@ def generate_chirp_spectrogram_plot(): ax = plt.subplot(211) ax.pcolormesh(t, f, Sxx) ax.set_ylabel('Frequency [Hz]') - ax.set_xlabel('Time [sec]') + ax.set_xlabel('Time [sec]', labelpad=10) f, t, Sxx = spectrogram_lspopt(x, fs, c_parameter=20.0) @@ -49,6 +49,7 @@ def generate_chirp_spectrogram_plot(): ax.set_ylabel('Frequency [Hz]') ax.set_xlabel('Time [sec]') + plt.tight_layout() plt.show() @@ -100,11 +101,12 @@ def generate_lsp_processes_figures(): ax.set_ylim([-1.5, 1.5]) ax.set_xlabel('t') + plt.tight_layout() plt.show() def main(): - #generate_chirp_spectrogram_plot() + generate_chirp_spectrogram_plot() generate_lsp_processes_figures() if __name__ == "__main__": diff --git a/lspopt/__version__.py b/lspopt/__version__.py index 4cad309..4a0f937 100644 --- a/lspopt/__version__.py +++ b/lspopt/__version__.py @@ -1,5 +1,5 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -version = "1.1.1" +version = "1.2.0" __version__ = version diff --git a/plot.png b/plot.png new file mode 100644 index 0000000000000000000000000000000000000000..b99690177c731dabd4e5ad502ab72f4ed2a45fda GIT binary patch literal 175207 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

DHdzsSRxocu)pdtSB} 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

1yaqu(V%9(D+BSqJP}M}7 zzQH{0cQAE$^g&{}8GuF^z#bq`+E!9FyZDoJt>f2R^5;P{gF`6x0D^SlO^nJMK-#l# zVEP7;M?D6ZXi^Zdl(6j*43P=^Jd$vP0!Z+lwcdNSGzDkPgV+P$Q(js51|s43%*RJk z@Qr^nu;!K!Du(Mh^LuEsv!?JkoMePOAW{}mTkaEp5~v+8L|4xf^01AK4T60p$s~Y| z1y~1g&s(FTqg$Kx*m(dVYsRBoB!jlqv3jXL6BU13f4fxzlhxJj!Ne39xUu0t6a?~k zq_hc}Z7Id+yE~}liQlL}Vl6DC%Z zSHSe!c~CMu%?0`uION7$b_OWZ39I_Z9<~nln?(I&o)MO2JcLF3selUewx2(*_#^^r zcfoXiz?NzHxKq96AcLBha~p* zQs%#tWHf2?z6xAnoAwBHI2&wFe+F{F%_|U}s&VYIaa3Qm2yJcSgzY$EdBuh&|#4H2y@IpdjVmUzd2rLGLY(oNm z0s;w`)NZwZz^Ek(m;-SyQNYx@2wm@cv<5|G%T zG4dcsEzxR@;&8hZfu`jH8X{Gwkflbb?ZrIg{n1MzhNW-D`g2=^u6P={M>mt0nU^4L2$ zVUG9KJeSfvh)&Z97c{92yaXfA0`@2mL|On6iEV|A-Ea3Y(GE$Bo;S&W-4s zT>v!zI5mL$dbnnYv2Jk7)Yv%HyK&3!Cg3pIQoMg;%nAgOz&~QchR#Nt8W~w+>g(yv z3!nJIwAs(Gi4|Z0OY8ieDuG)}bvg$E%H~D(yn#-icR&$ChSA^ED+#@0ckctj2JRG( z4fx{I0O*AnXt!F(*=K>ETkCuD60=8q*AxjmJv5&BqhP#Zt~N1@OOYNP^#?=%@mj&Q zV}F02%N5}?S$jG5Bq-5qd~ezl1NJ>$$-|9LOibK65&$ftKu-Km4MheC;JtG_@wbV< zXwIhuFT%Pt%;&c&@RniPcSjv6D2M?990~}<0qc7uX2=Mj;=e*&g;;!%LG~Lg^QQ{K zwhQ7*oJ9ElVn4)ba&eK${xh5ia~TjviM-E5qlKdDU#(o3_Q6UQm6XUNtP!bDq$n&S w{@afcF?juL|9O)?gM$7M+&`WF@47%|Fd9#m$_H{Jlpvs~C}_x+Ja`uLAECeJbN~PV literal 0 HcmV?d00001 diff --git a/tests/test_implementation.py b/tests/test_implementation.py index 84be3e0..cf948de 100644 --- a/tests/test_implementation.py +++ b/tests/test_implementation.py @@ -51,13 +51,13 @@ def test_different_c(c): def test_spectrogram_method(): """Test the spectrogram method's functionality.""" - fs = 10e3 - N = int(1e5) + fs = 10000 + N = 100000 amp = 2 * np.sqrt(2) noise_power = 0.001 * fs / 2 time = np.arange(N) / fs - freq = np.linspace(1e3, 2e3, N) - x = amp * chirp(time, 1e3, 2.0, 6e3, method="quadratic") + np.random.normal( + freq = np.linspace(1000, 2000, N) + x = amp * chirp(time, 1000, 2.0, 6000, method="quadratic") + np.random.normal( scale=np.sqrt(noise_power), size=time.shape ) From 8040b4e4f7961085e0c72b833a24805e9125fd1b Mon Sep 17 00:00:00 2001 From: Henrik Blidh Date: Wed, 8 Jun 2022 10:19:29 +0200 Subject: [PATCH 10/31] CI Test modification Added Python 3.9 and 3.10 to test matrix. Removed 3.5. --- .github/workflows/build_and_test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index e611e41..ec8d01c 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -13,7 +13,7 @@ jobs: strategy: matrix: os: [ubuntu-latest] - python-version: [2.7, 3.5, 3.6, 3.7, 3.8] + python-version: [2.7, 3.6, 3.7, 3.8, 3.9, 3.10] steps: - uses: actions/checkout@v2 - name: Set up Python ${{ matrix.python-version }} From 3de36bef48cf7020d26d4646fe17bf9ffce5c20a Mon Sep 17 00:00:00 2001 From: Henrik Blidh Date: Wed, 8 Jun 2022 10:20:52 +0200 Subject: [PATCH 11/31] CI Test modification Forgot to put 3.10 inside quotation marks.. --- .github/workflows/build_and_test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index ec8d01c..2b635c1 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -13,7 +13,7 @@ jobs: strategy: matrix: os: [ubuntu-latest] - python-version: [2.7, 3.6, 3.7, 3.8, 3.9, 3.10] + python-version: [2.7, 3.6, 3.7, 3.8, 3.9, "3.10"] steps: - uses: actions/checkout@v2 - name: Set up Python ${{ matrix.python-version }} From e27d570ed4b781754ef997afd93bc03f55bbd8a6 Mon Sep 17 00:00:00 2001 From: Henrik Blidh Date: Wed, 8 Jun 2022 13:09:32 +0200 Subject: [PATCH 12/31] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 402ec7a..5e58272 100644 --- a/README.md +++ b/README.md @@ -93,7 +93,8 @@ plt.tight_layout() plt.show() ``` -![Spectrogram plot](https://github.com/hbldh/lspopt/blob/master/plot.png) +![Spectrogram plot](https://github.com/hbldh/lspopt/blob/master/plot.png "Top: Using SciPy's spectrogram method. Bottom: Using LSPOpt's spectrogram solution.") + *Top: Using SciPy's spectrogram method. Bottom: Using LSPOpt's spectrogram solution.* ## References From c03e5bec87bf1f9f61803da015aab4d2ddc9504d Mon Sep 17 00:00:00 2001 From: Henrik Blidh Date: Wed, 8 Jun 2022 13:43:43 +0200 Subject: [PATCH 13/31] Update README.md Added link to feedstock repo for conda installation instructions. Fixes #7. --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 5e58272..1679a91 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,8 @@ Install via pip: pip install lspopt +If you prefer to use `conda`, see [instructions in this repo](https://github.com/conda-forge/lspopt-feedstock). + ## Testing Test with `pytest`: From 73be156652287f7127bee3955b4101a220243207 Mon Sep 17 00:00:00 2001 From: Henrik Blidh Date: Wed, 8 Jun 2022 13:51:48 +0200 Subject: [PATCH 14/31] Updated link to paper --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1679a91..c4096f5 100644 --- a/README.md +++ b/README.md @@ -103,4 +103,4 @@ plt.show() \[1\] [Hansson-Sandsten, M. (2011). Optimal multitaper Wigner spectrum estimation of a class of locally stationary processes using Hermite functions. -EURASIP Journal on Advances in Signal Processing, 2011, 10.](http://asp.eurasipjournals.com/content/pdf/1687-6180-2011-980805.pdf) +EURASIP Journal on Advances in Signal Processing, 2011, 10.](https://dx.doi.org/10.1155/2011/980805) From 0b1f4fe148aa171d1e3824442d6a395bde2dc76c Mon Sep 17 00:00:00 2001 From: Henrik Blidh Date: Tue, 24 Jan 2023 12:15:37 +0100 Subject: [PATCH 15/31] Delete dependabot.yml --- .github/dependabot.yml | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index eff7b5f..0000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,8 +0,0 @@ -version: 2 -updates: -- package-ecosystem: pip - directory: "/" - schedule: - interval: daily - time: "04:00" - open-pull-requests-limit: 10 From 57662af066039d31f0ac7aa938d42a5f5653157b Mon Sep 17 00:00:00 2001 From: Henrik Blidh Date: Tue, 24 Jan 2023 12:19:37 +0100 Subject: [PATCH 16/31] Update build_and_test.yml --- .github/workflows/build_and_test.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index 2b635c1..f17f0e0 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -13,11 +13,11 @@ jobs: strategy: matrix: os: [ubuntu-latest] - python-version: [2.7, 3.6, 3.7, 3.8, 3.9, "3.10"] + python-version: [2.7, 3.7, 3.8, 3.9, "3.10", "3.11"] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} - name: Upgrade pip. setuptools and wheel @@ -37,7 +37,7 @@ jobs: run: | pytest tests --junitxml=junit/test-results-${{ matrix.os }}-${{ matrix.python-version }}.xml --cov=com --cov-report=xml --cov-report=html - name: Upload pytest test results - uses: actions/upload-artifact@v1 + uses: actions/upload-artifact@v3 with: name: pytest-results-${{ matrix.os }}-${{ matrix.python-version }} path: junit/test-results-${{ matrix.os }}-${{ matrix.python-version }}.xml From 4303dac2f3cd32c2216e83f8549513cbb0336a85 Mon Sep 17 00:00:00 2001 From: Henrik Blidh Date: Tue, 24 Jan 2023 12:41:12 +0100 Subject: [PATCH 17/31] Version 1.3.0 Dropped Pyton 2.7 and 3.6 Increased reqs for numpy and scipy due to vulns Removed dependency on six --- .github/workflows/build_and_test.yml | 2 +- .github/workflows/pypi-publish.yml | 4 ++-- CHANGELOG.md | 12 ++++++++++++ README.md | 6 ++---- lspopt/__init__.py | 6 ------ lspopt/__version__.py | 2 +- lspopt/data/__init__.py | 5 ----- lspopt/lsp.py | 8 +------- lspopt/utils.py | 5 ----- requirements.txt | 5 ++--- setup.py | 15 +++++++-------- tests/lspopt_ref.py | 8 +------- tests/test_implementation.py | 3 +-- tests/test_utils.py | 1 - 14 files changed, 30 insertions(+), 52 deletions(-) diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index f17f0e0..692b94a 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -13,7 +13,7 @@ jobs: strategy: matrix: os: [ubuntu-latest] - python-version: [2.7, 3.7, 3.8, 3.9, "3.10", "3.11"] + python-version: [3.7, 3.8, 3.9, "3.10", "3.11"] steps: - uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} diff --git a/.github/workflows/pypi-publish.yml b/.github/workflows/pypi-publish.yml index 4e1ef42..0c36fed 100644 --- a/.github/workflows/pypi-publish.yml +++ b/.github/workflows/pypi-publish.yml @@ -13,9 +13,9 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Set up Python - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: python-version: '3.x' - name: Install dependencies diff --git a/CHANGELOG.md b/CHANGELOG.md index e96b7ed..bbf2e73 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,18 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.3.0] - 2023-01-24 + +### Changed + +- Modified test matrix in CI + +### Removed + +- Support for Python 2.7 and 3.6. +- Dependency on `six`. + + ## [1.2.0] - 2022-06-08 ### Added diff --git a/README.md b/README.md index c4096f5..1f30125 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,6 @@ # LSPOpt ![Build and Test](https://github.com/hbldh/lspopt/workflows/Build%20and%20Test/badge.svg) -[![Coverage Status](https://coveralls.io/repos/github/hbldh/lspopt/badge.svg?branch=master)](https://coveralls.io/github/hbldh/lspopt?branch=master) [![PyPI version](https://img.shields.io/pypi/v/lspopt.svg)](https://pypi.org/project/lspopt/) [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/ambv/black) @@ -32,10 +31,9 @@ If you prefer to use `conda`, see [instructions in this repo](https://github.com Test with `pytest`: - pytest tests/ + pytest tests/ -Tests are run at every commit to GitHub and the results of this, as well as test -coverage, can be studied at [Azure Pipelines](https://dev.azure.com/hbldh/github/_build/latest?definitionId=7&branchName=master). +See test badge at the top of this README for link to test coverage and reports. ## Usage diff --git a/lspopt/__init__.py b/lspopt/__init__.py index 5c86f4f..e507e97 100644 --- a/lspopt/__init__.py +++ b/lspopt/__init__.py @@ -1,12 +1,6 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -from __future__ import division -from __future__ import print_function -from __future__ import unicode_literals -from __future__ import absolute_import - - from lspopt.lsp import lspopt, spectrogram_lspopt from lspopt.__version__ import __version__, version diff --git a/lspopt/__version__.py b/lspopt/__version__.py index 4a0f937..7501cf0 100644 --- a/lspopt/__version__.py +++ b/lspopt/__version__.py @@ -1,5 +1,5 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -version = "1.2.0" +version = "1.3.0" __version__ = version diff --git a/lspopt/data/__init__.py b/lspopt/data/__init__.py index e9f09f5..cfc2559 100644 --- a/lspopt/data/__init__.py +++ b/lspopt/data/__init__.py @@ -8,11 +8,6 @@ """ -from __future__ import division -from __future__ import print_function -from __future__ import unicode_literals -from __future__ import absolute_import - from pkg_resources import resource_filename import numpy as np diff --git a/lspopt/lsp.py b/lspopt/lsp.py index e284d3f..8a24abc 100644 --- a/lspopt/lsp.py +++ b/lspopt/lsp.py @@ -14,12 +14,6 @@ """ -from __future__ import division -from __future__ import print_function -from __future__ import unicode_literals -from __future__ import absolute_import - -import six import numpy as np from scipy.signal import spectrogram @@ -60,7 +54,7 @@ def lspopt(n, c_parameter=20.0): t1 = np.arange(-(n / 2) + 1, (n / 2) + 0.1, step=1.0) / f_h(n, K) h = np.vstack((np.ones((n,)), 2 * t1)) - for i in six.moves.range(1, K - 1): + for i in range(1, K - 1): h = np.vstack((h, (2 * t1 * h.T[:, i]) - 2 * i * h.T[:, i - 1])) H = h.T * np.outer(np.exp(-(t1 ** 2) / 2), np.ones((K,), "float")) diff --git a/lspopt/utils.py b/lspopt/utils.py index ea18558..03cd37e 100644 --- a/lspopt/utils.py +++ b/lspopt/utils.py @@ -14,11 +14,6 @@ """ -from __future__ import division -from __future__ import print_function -from __future__ import unicode_literals -from __future__ import absolute_import - import numpy as np from scipy.linalg import sqrtm diff --git a/requirements.txt b/requirements.txt index aec4439..aae5d11 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,2 @@ -numpy>=1.7.0 -scipy>=0.16.1 -six>=1.10.0 +numpy>=1.21.6 +scipy>=1.7.3 diff --git a/setup.py b/setup.py index 9f3b86a..9e5b49e 100644 --- a/setup.py +++ b/setup.py @@ -22,13 +22,12 @@ URL = 'https://github.com/hbldh/lspopt' EMAIL = 'henrik.blidh@gmail.com' AUTHOR = 'Henrik Blidh' -REQUIRES_PYTHON = '>=2.7.10' +REQUIRES_PYTHON = '>=3.7' VERSION = None REQUIRED = [ - 'numpy', - 'scipy', - 'six' + 'numpy>=1.21.6', + 'scipy>=1.7.3', ] here = os.path.abspath(os.path.dirname(__file__)) @@ -114,12 +113,12 @@ def run(self): 'Operating System :: POSIX', 'Operating System :: Unix', 'Operating System :: MacOS', - 'Programming Language :: Python :: 2', - 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.5', - 'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.7', + 'Programming Language :: Python :: 3.8', + 'Programming Language :: Python :: 3.9', + 'Programming Language :: Python :: 3.10', + 'Programming Language :: Python :: 3.11', 'Programming Language :: Python :: Implementation :: CPython', 'Programming Language :: Python :: Implementation :: PyPy' ], diff --git a/tests/lspopt_ref.py b/tests/lspopt_ref.py index 70b2ddc..5c2ab02 100644 --- a/tests/lspopt_ref.py +++ b/tests/lspopt_ref.py @@ -14,12 +14,6 @@ """ -from __future__ import division -from __future__ import print_function -from __future__ import unicode_literals -from __future__ import absolute_import - -import six import numpy as np from lspopt.data import C, WEIGHTS @@ -73,7 +67,7 @@ def lspopt_ref(n, c_parameter=20.0): h = np.vstack((h, (2 * t1 * h.T[:, i]) - 2 * i * h.T[:, i - 1])) H = h.T * np.outer(np.exp(-(t1 ** 2) / 2), np.ones((K,), "float")) - for i in six.moves.range(K): + for i in range(K): H[:, i] = H[:, i] / np.sqrt(H[:, i].T.dot(H[:, i])) # Norm return H.T, wei diff --git a/tests/test_implementation.py b/tests/test_implementation.py index cf948de..140a28a 100644 --- a/tests/test_implementation.py +++ b/tests/test_implementation.py @@ -22,7 +22,6 @@ import unittest import pytest -import six import numpy as np from numpy.testing import assert_allclose from scipy.signal import chirp, spectrogram @@ -31,7 +30,7 @@ from .lspopt_ref import lspopt_ref -@pytest.mark.parametrize("n", six.moves.range(64, 1024)) +@pytest.mark.parametrize("n", range(64, 1024)) def test_different_n(n): """Test against reference implementation for different N.""" h1, w1 = lspopt(n) diff --git a/tests/test_utils.py b/tests/test_utils.py index d58b5fd..b1540d3 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -20,7 +20,6 @@ from __future__ import absolute_import import pytest -import six import numpy as np from numpy.testing import assert_allclose From 6867aa95e9ced721defc07027e8231973ecb4f26 Mon Sep 17 00:00:00 2001 From: Henrik Blidh Date: Tue, 24 Jan 2023 12:46:34 +0100 Subject: [PATCH 18/31] Update CHANGELOG.md --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bbf2e73..17a1a1d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -57,7 +57,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Regarded as a feature-complete, stable library. -[Unreleased]: https://github.com/hbldh/lspopt/compare/v1.2.0...HEAD +[Unreleased]: https://github.com/hbldh/lspopt/compare/v1.3.0...HEAD +[1.3.0]: https://github.com/hbldh/lspopt/compare/v1.2.0...v1.3.0 [1.2.0]: https://github.com/hbldh/lspopt/compare/v1.1.1...v1.2.0 [1.1.1]: https://github.com/hbldh/lspopt/compare/v1.1.0...v1.1.1 [1.1.0]: https://github.com/hbldh/lspopt/compare/v1.0.0...v1.1.0 From c13df6ebc2e2ba49cd9b5db6a79fdd8fee1e3b2a Mon Sep 17 00:00:00 2001 From: Remington Mallett Date: Sun, 29 Dec 2024 11:17:07 -0500 Subject: [PATCH 19/31] replace pkg_resources with importlib.resources --- lspopt/data/__init__.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lspopt/data/__init__.py b/lspopt/data/__init__.py index cfc2559..5726c28 100644 --- a/lspopt/data/__init__.py +++ b/lspopt/data/__init__.py @@ -8,17 +8,17 @@ """ -from pkg_resources import resource_filename +from importlib import resources import numpy as np __all__ = ["C", "WEIGHTS", "f_h"] # An array of C parameter values for which weights have been pre-calculated. -C = np.load(resource_filename("lspopt.data", "c.npy")).flatten() +C = np.load(resources.files("lspopt.data").joinpath("c.npy")).flatten() # The pre-calculated Hermite polynomial coefficients # for the C parameter values above. -WEIGHTS = np.load(resource_filename("lspopt.data", "weights.npy")) +WEIGHTS = np.load(resources.files("lspopt.data").joinpath("weights.npy")) def f_h(n, k): From 9218aa163a49a5833927d692a422febe0bbc12bc Mon Sep 17 00:00:00 2001 From: Remington Mallett Date: Tue, 7 Jan 2025 07:14:59 -0500 Subject: [PATCH 20/31] fix README typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1f30125..7ca5995 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ To generate the taper windows only, use the `lspopt` method: ```python from lspopt import lspopt -H, w = lspopt(N=256, c_parameter=20.0) +H, w = lspopt(n=256, c_parameter=20.0) ``` There is also a convenience method for using the [SciPy spectrogram method](https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.spectrogram.html#scipy.signal.spectrogram) From 667c6dda7b9b4d373e2c1ac2671e48bed127cee2 Mon Sep 17 00:00:00 2001 From: Remington Mallett Date: Tue, 7 Jan 2025 07:23:33 -0500 Subject: [PATCH 21/31] ignore local python environments --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 6c92abd..49b36ee 100644 --- a/.gitignore +++ b/.gitignore @@ -117,3 +117,6 @@ docs/_build/ # PyBuilder target/ +# Environments +.conda/ +.vscode/ From 4495181998b05a460128b1a71d2684a1b710ad5f Mon Sep 17 00:00:00 2001 From: Remington Mallett Date: Tue, 7 Jan 2025 07:23:58 -0500 Subject: [PATCH 22/31] workflow tests python 3.8-3.12 --- .github/workflows/build_and_test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index 692b94a..24494ba 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -13,7 +13,7 @@ jobs: strategy: matrix: os: [ubuntu-latest] - python-version: [3.7, 3.8, 3.9, "3.10", "3.11"] + python-version: [3.9, 3.10, 3.11, 3.12] steps: - uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} From a34d8ba9a664a3e45c64eac69f1e5be65de69893 Mon Sep 17 00:00:00 2001 From: Remington Mallett Date: Tue, 7 Jan 2025 07:26:35 -0500 Subject: [PATCH 23/31] add .toml file --- pyproject.toml | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 pyproject.toml diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..b3d5b86 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["setuptools >= 64", "wheel"] +build-backend = "setuptools.build_meta" From 23a7c9894dc7e20696d577c735c78829a08ac009 Mon Sep 17 00:00:00 2001 From: Remington Mallett Date: Tue, 7 Jan 2025 07:33:29 -0500 Subject: [PATCH 24/31] update python versions in setup.py --- setup.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/setup.py b/setup.py index 9e5b49e..30252c2 100644 --- a/setup.py +++ b/setup.py @@ -22,7 +22,7 @@ URL = 'https://github.com/hbldh/lspopt' EMAIL = 'henrik.blidh@gmail.com' AUTHOR = 'Henrik Blidh' -REQUIRES_PYTHON = '>=3.7' +REQUIRES_PYTHON = '>=3.9' VERSION = None REQUIRED = [ @@ -114,11 +114,10 @@ def run(self): 'Operating System :: Unix', 'Operating System :: MacOS', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.7', - 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', + 'Programming Language :: Python :: 3.12', 'Programming Language :: Python :: Implementation :: CPython', 'Programming Language :: Python :: Implementation :: PyPy' ], From e6fde7581a27af2c252893b3353fca0f8f98e7d3 Mon Sep 17 00:00:00 2001 From: Remington Mallett Date: Tue, 7 Jan 2025 07:44:01 -0500 Subject: [PATCH 25/31] remove __future__ and unused imports --- generate_plot.py | 5 ----- setup.py | 4 ---- tests/test_implementation.py | 7 ------- tests/test_utils.py | 7 ------- 4 files changed, 23 deletions(-) diff --git a/generate_plot.py b/generate_plot.py index 679d06d..37197f0 100644 --- a/generate_plot.py +++ b/generate_plot.py @@ -9,11 +9,6 @@ """ -from __future__ import division -from __future__ import print_function -from __future__ import unicode_literals -from __future__ import absolute_import - import six import numpy as np from scipy.signal import chirp, spectrogram diff --git a/setup.py b/setup.py index 30252c2..9a08fda 100644 --- a/setup.py +++ b/setup.py @@ -4,10 +4,6 @@ # Note: To use the 'upload' functionality of this file, you must: # $ pip install twine -from __future__ import division -from __future__ import print_function -from __future__ import absolute_import - import io import os import sys diff --git a/tests/test_implementation.py b/tests/test_implementation.py index 140a28a..81550b9 100644 --- a/tests/test_implementation.py +++ b/tests/test_implementation.py @@ -14,13 +14,6 @@ """ -from __future__ import division -from __future__ import print_function -from __future__ import unicode_literals -from __future__ import absolute_import - -import unittest - import pytest import numpy as np from numpy.testing import assert_allclose diff --git a/tests/test_utils.py b/tests/test_utils.py index b1540d3..c5e9817 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -14,13 +14,6 @@ """ -from __future__ import division -from __future__ import print_function -from __future__ import unicode_literals -from __future__ import absolute_import - -import pytest -import numpy as np from numpy.testing import assert_allclose from lspopt import utils From b20e86b2e93dad74b24475f37523125a8fe64b68 Mon Sep 17 00:00:00 2001 From: Remington Mallett Date: Tue, 7 Jan 2025 07:44:45 -0500 Subject: [PATCH 26/31] bump version and update changelog --- CHANGELOG.md | 14 ++++++++++++++ lspopt/__version__.py | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 17a1a1d..2d9e794 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,20 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.4.0] - 2025-01-07 + +### Added + +- Support for Python 3.12 +- Support for `pip>=25` +- Support for `numpy>=2` + +### Removed + +- Support for Python 3.7 and 3.8 +- Unused imports + + ## [1.3.0] - 2023-01-24 ### Changed diff --git a/lspopt/__version__.py b/lspopt/__version__.py index 7501cf0..5add2d0 100644 --- a/lspopt/__version__.py +++ b/lspopt/__version__.py @@ -1,5 +1,5 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -version = "1.3.0" +version = "1.4.0" __version__ = version From 5109ada0816fb511b5d25fb2e920dfa792d9227a Mon Sep 17 00:00:00 2001 From: Remington Mallett Date: Tue, 7 Jan 2025 07:50:25 -0500 Subject: [PATCH 27/31] float --> str python versions --- .github/workflows/build_and_test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index 24494ba..f7284ee 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -13,7 +13,7 @@ jobs: strategy: matrix: os: [ubuntu-latest] - python-version: [3.9, 3.10, 3.11, 3.12] + python-version: ["3.9", "3.10", "3.11", "3.12"] steps: - uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} From 158ce0d739f62554ba67bafc75f854e2e41cc785 Mon Sep 17 00:00:00 2001 From: Remington Mallett Date: Tue, 7 Jan 2025 07:54:51 -0500 Subject: [PATCH 28/31] bump all gh-action versions --- .github/workflows/build_and_test.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index f7284ee..35ffca8 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -15,9 +15,9 @@ jobs: os: [ubuntu-latest] python-version: ["3.9", "3.10", "3.11", "3.12"] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: Upgrade pip. setuptools and wheel @@ -37,7 +37,7 @@ jobs: run: | pytest tests --junitxml=junit/test-results-${{ matrix.os }}-${{ matrix.python-version }}.xml --cov=com --cov-report=xml --cov-report=html - name: Upload pytest test results - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: pytest-results-${{ matrix.os }}-${{ matrix.python-version }} path: junit/test-results-${{ matrix.os }}-${{ matrix.python-version }}.xml From 22c847e20deb294a5c3770a9dd60e47607de533c Mon Sep 17 00:00:00 2001 From: Remington Mallett Date: Tue, 7 Jan 2025 07:56:10 -0500 Subject: [PATCH 29/31] add windows and macos tests --- .github/workflows/build_and_test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index 35ffca8..2642956 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -12,7 +12,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-latest] + os: [ubuntu-latest, windows-latest, macos-latest] python-version: ["3.9", "3.10", "3.11", "3.12"] steps: - uses: actions/checkout@v4 From abb4464e26e53760d0c07dc77a30fcd130cdbcd0 Mon Sep 17 00:00:00 2001 From: Remington Mallett Date: Tue, 7 Jan 2025 08:00:29 -0500 Subject: [PATCH 30/31] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2d9e794..6fb5bb1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Support for Python 3.12 - Support for `pip>=25` - Support for `numpy>=2` +- Support for Windows and macOS ### Removed From 04cf84c3049812ff3c4f28e7b51db88e82f11d7b Mon Sep 17 00:00:00 2001 From: Remington Mallett Date: Tue, 7 Jan 2025 08:02:34 -0500 Subject: [PATCH 31/31] bump gh-action versions in pypi workflow --- .github/workflows/pypi-publish.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pypi-publish.yml b/.github/workflows/pypi-publish.yml index 0c36fed..ce25ff7 100644 --- a/.github/workflows/pypi-publish.yml +++ b/.github/workflows/pypi-publish.yml @@ -13,9 +13,9 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: '3.x' - name: Install dependencies