All notable changes to light-curve-python
will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
--
--
--
--
--
--
- Breaking macOS x86_64 binary wheel now requires macOS 13 instead of 12 #437 #446
- Breaking Minimum supported Python version is 3.9 due to
rust-numpy
0.23 requirement - Default ABI3 version is also bumped to 3.9
- Bump
pyO3
to 0.23, which should potentially support free-threading, butrust-numpy
still doesn't #457 - Bump
rust-numpy
to 0.23, should potentially bring a betternumpy
v2 support #457 - Bump
ndarray
to 0.16 #458 - Bump
light-curve-feature
to 0.8.0 #458 - Bump
light-curve-dmdt
to 0.8.0 #458
pyproject.toml
: movetool.setuptools.dynamic
toproject.dynamic
which fixes build withmaturin
v1.8.x #467
LinexpBolometricTerm
forRainbow
changed to clip negative values to zero #430
- More variants of temperature and bollometric functions for
RainbowFit
#411
- Change boundary conditions for
RainbowFit
#414
- Package import doesn't fail if
scipy
is missed #422
- Experimental Rainbow fit features use maximum likelihood cost function instead of least squares #407
- Small bug fix in MagnitudeNNotDetBeforeFd for numpy v2.0 compatibility #383
- PyPI wheels used to have wrong platform tags, actual minimum macOS versions are those used at CI: 12.0+ for x86_64 and 14.0+ for arm64. #376 #378
PeakToPeakVar
experimental feature #332
- Bump
pyO3
to 0.21 - Bump
rust-numpy
to 0.21 - "abi3" is a default Cargo feature now
- Stop publishing PyPy wheels to PyPI. We still publish all CPython wheels we published previously #345 #347
- Bug which prevents initialization of Rust's
*Fit
features if compiled without Ceres or GSL (our PyPi Windows wheels) #343 #344
Roms
(robust median statistics) experimental feature, a variability index based on the deviation of observations from the median. #315 Thanks @GaluTi for their first contribution
- Breaking
RainbowFit
is significantly refactored to make it more flexible for usage of different bolometric and temperature functions. It deletesRainbowRisingFit
andRainbowSymmetricFit
in favor of a singleRainbowFit
feature. #324 - Breaking: stop supporting Python 3.7 #282
- We stop distributing CPython wheels for specific Python versions, now we distribute ABI3 wheels which are compatible with all future Python versions
--
- Build breaking:
abi311
Cargo feature is removed, now we plan to haveabi3
feature only, which would correspond to the minimum supported Python version. Feel free to usepyo3/abi3..
features directly for newer ABI versions.
--
--
- New flavour of
RainbowFit
:RainbowSymmetricFit
which will replace bothRainbowFit
andRainbowRisingFit
in the future. #314 Thanks @karpov-sv for their first contribution - New cargo build-time feature,
mimalloc
, it is default feature now. When activated, it gives up to 2.9x of performance boost for some "fast" features. #302
- Refactoring of rainbow features, it reduces code duplication and makes it easier to add new variants like
RainbowFit
andRainbowRisingFit
in the future #293 - Another change for
Rainbow
features is changingminuit
optimization parameters #314 - Build breaking: bump
light-curve-feature
to v0.7.0, which requires ceres-solver v2.2 forceres-system
Cargo feature.
RainbowFit
andRainbowRisingFit
initial guesses for baseline fluxes are now consistent with limits. We also use band information to make initial guesses and limits more accurate. Note, that this change leads to different results comparing to previous versions. #293
- Breaking change in experimental features: Multiband support is introduced for features implemented in Python. It changes class inheritance interface in a backward-incompatible way
light-curve[full]
extras which installs all optional Python dependencies required by experimental features- New
LinexpFit
feature for parametric model fit comes withlight-curve-feature
v0.6.0 - Experimental
RainbowFit
feature for fitting multiband light curves with a single model, Russeil+23 in prep. It requires Python 3.8 or later because ofiminuit
dependency - Optional
iminuit>=2,<3
Python dependency (included into[full]
) forRainbowFit
feature - Add
once_cell
v1 dependency
- Breaking change in experimental features
scipy
dependency is now optional for experimental features implemented in Python - Breaking change in experimental features: All experimental features implemented in Python require keyword-only arguments in their constructors. Also, all names of the arguments are changed to be the same as for Rust features
- Build breaking: "abi3-py310" Cargo feature is replaced with "abi3-py311". "abi3" feature is now linked to " abi3-py311" feature. This is because our aim with ABI is to support future versions of Python
- Build breaking: minimum supported Rust version (MSRV) is changed from 1.62 to 1.67 (released 2023-01-26)
- Update
*Fit
fatures doc-strings to list names of the features they output - Bump
light-curve-feature
0.5.5 -> 0.6.0 - Bump
pyO3
0.18.3 -> 0.19.1, it simplified signature generations for classes #230 - Bump
rust-numpy
0.18.0 -> 0.19.0 #230 - Bump
enum-iterator
1.2.0 -> 1.4.1 #233 - Bump
thiserror
1.0.41 -> 1.0.48 #242
- All Rust features got
.to_json()
method to serialize their state to JSON string. #226 - New special Rust feature
JSONDeserializedFeature
and a helper functionfeature_from_json()
to deserialize features from JSON string. #226 - Build: "abi3" and "abi3-py310" Cargo features (the least one is enabled by the first one) to build a wheel for CPython 3.10+. This stable ABI wheel is less performant than the regular one, but it is compatible with all future Python versions. See PEP 384 for details. #79
- Build breaking: the only Python build requirement
maturin
updated from v0.14.x to v1.0 #216 #215 - CI: bump cibuildwheel to 2.13.1 #225
- Bump
itertools
0.10.5 -> 0.11.0 #224 - Bump
pyO3
0.18.2 -> 0.18.3 #207
- Building from sdist on x86-64 macOS required manual setting of
$MACOSX_DEPLOYMENT_TARGET
to 10.9 or higher. Recentmaturin
update allowed us to specify it viapyproject.toml
- Feature transformations via
transform
constructor keyword. For most of the features it could accept string with a transformation name such as 'arcsinh' or 'clipped_lg',True
or 'default' for the default transformation,None
orFalse
for no transformation #184 #188 - Binary wheels for x86_64 Windows built with no Ceres nor GSL features #12 #185
enum-iterator
crate dependency #188- CI: code coverage with
codecov
#197 - Development: now project has extras for testing (
test
) and development (dev
) #197
- Build breaking: minimum supported Rust version (MSRV) is bump from 1.60 to 1.62
- Bump
light-curve-feature
0.5.4 -> 0.5.5 - Bump
pyO3
0.18.1 -> 0.18.2 - Most of the parametric features have default values for their parameters now, which, due to
pyO3
limitations, are not presented in the signatures, but documented in the docstrings. It also makes Python and Rust implementations more consistent #194 #195 - Development: switch from
pytest-markdown
tomarkdown-pytest
which allowed us to use up-to-date pytest #198
BazinFit
andVillarFit
constructors will not acceptNone
formcmc_niter
,ceres_niter
, andlmsder_niter
arguments in the future, just do not specify them to use defaults instead. #195Periodogram
constructor will not acceptNone
forpeaks
,resolution
,max_freq_factor
,nyquist
andfast
in the future, just do not specify them to use defaults instead. #195
Bins
feature had non-optimal lower boundary check for time series length: it checked if it is at least unity for any underlying features. Now it takes underlying feature requirements into account. It was fixed by updatinglight-curve-feature
to v0.5.5.
- Bug introduced in v0.6.5:
*Fit.model(t, params)
wrongly checkedt
andparams
arrays to have the same length
BazinFit
andVillarFit
have gotceres
andmcmc-ceres
algorithms using Ceres Solver as a non-linear least squares optimizer.ceres
is found to be more robust thanlmsder
algorithm (available viagsl
Cargo feature) but working roughly twice slower. Ceres can be built from source (ceres-source
Cargo feature, enabled by default inCargo.toml
) or linked to system library (ceres-system
Cargo feature, enabled for cibuildwheel inpyproject.toml
)
- API breaking: Features'
__call__()
signature changed to makesorted=None
,check=True
andfill_value=None
arguments to be keyword-only - API breaking: Features'
many()
signature changed to make all arguments but the firstlcs
to be keyword-only - API breaking:
Bins
constructor signature changed to makeoffset
andwindow
arguments to be keyword-only. For Rust implementation__getnewargs__
is replaced with__getnewargs_ex__
. Please note that for the specific case of Python implementation and Python version < 3.10,Bins
still accepts positional arguments - API breaking:
BazinFit
andVillarFit
constructor signatures changed to make everything but the firstlcs
argument to be keyword-only - API breaking:
Periodogram
constructor signature changed to make all arguments to be keyword-only - API breaking:
DmDt
constructor signature changed to make all arguments butdt
anddm
to be keyword-only,__getnewargs__
is replaced with__getnewargs_ex__
.DmDt.from_borders
class-method constructor has all arguments to be keyword-only - API breaking:
DmDt
methods' signatures changed to make all arguments but data (liket
,t, m
orlcs
) to be keyword-only - Build breaking: building with Ceres Solver (
ceres-source
Cargo feature) is now a default, and potentially could break a building pipeline in some cases. If you want to build without Ceres Solver, you need to explicitly disable default features with--no-default-features
maturin flag - CI: switch from
macos-11
tomacos-latest
for testing - Bump
pyo3
0.17.3 -> 0.18.1 - Bump
rust-numpy
0.17.2 -> 0.18.0
- Build breaking:
fftw-static
,fftw-dynamic
,mkl
Cargo features are removed after deprecation in v0.6.2 and replaced withfftw-source
,fftw-system
andfftw-mkl
.
- Bug introduced in v0.6.5:
*Fit.model(t, params)
wrongly checkedt
andparams
arrays to have the same length
- Reduce Rust-Python inter-op cost for numpy arrays significantly. It dropped from ~4 μs per array to ~ 100ns. #174
- Initial
copy
andpickle
(minimum protocol version is 2) support for feature extractors andDmDt
#103 #145 #150 serde
v1 andserde-pickle
v1 Rust dependencies.serde-pickle
is an arbitrary choice of a (de)serialization binary format, but it could be useful in the future having a way to inspect Rust structures from Python #145
- Build environment: minimum support Rust version (MSRV) is bumped 1.57 -> 1.60
- Bump
light-curve-dmdt
0.6.0 -> 0.7.1
No changes, it was accidentally released instead of 0.6.2
light-curve-feature
0.5.0 -> 0.5.2 #123light-curve-dmdt
0.5.0 -> 0.6.0pyO3
0.16.6 -> 0.17.3rust-numpy
0.16.2 -> 0.17.2- CI: binary wheels are now built using our
custom manylinux/musllinux images, which include FFTW library
optimised to use platform-specific SIMD instructions. It should give up to 50% performance gain for
Periodogram
at all Linux platforms butx86_64
where we use MKL #134 - We don't provide binary wheels for Linux i686 anymore, please contact us if you need them #134
- wheel build dependency:
maturin
0.13.x -> 0.14.x #130 #135
- cargo features "fftw-dynamic", "fftw-static" and "mkl" are renamed to "fftw-system", "fftw-source" and "fftw-mkl" correspondingly #137
— fix threshold
method in Python according to Rust
implementation #123
- CI: Python 3.11 binary wheels
const_format
0.2.25 -> 0.2.30itertools
0.10.3 -> 0.10.5pyo3
0.16.5 -> 0.16.6thiserror
1.0.31 -> 1.0.37- wheel build dependency:
maturin
0.12.x -> 0.13.x - CI:
macos-10.15
GitHub actions runners are EOL, we switched tomacos-11
- CI:
cibuildwheel
2.10.2 -> 2.11.2
—
—
—
- Breaking: drop Python 3.6 support
- Breaking: minimum supported Rust version (MSRV) 1.56 -> 1.57
light-curve-feature
0.4.6 -> 0.5.0, causes MSRV changerust-numpy
0.15.1 -> 0.16.2py03
0.15.1 -> 0.16.3
macro_const
0.1.0 dependency
- docstring for
many
method is added to each Rust feature class
light-curve-feature
0.4.5 -> 0.4.6
- Minimum supported Rust version 1.56 wasn't actually supported,
light-curve-feature
upgrade fixed it
- CI: build Windows w/o GSL
light-curve-feature
0.4.4 -> 0.4.5
light-curve-feature
update fixesNaN value of lnprob
problem with MCMC fit in{Bazin,Villar}Fit
- Infrastructure: cibuildweel for package publishing
light-curve-feature
0.4.1 -> 0.4.4thiserror
1.0.24 -> 1.0.31enumflags2
0.7.4 -> 0.7.5rayon
1.5.1 -> 1.5.3pyo3
0.15.1 -> 0.15.2const_format
0.2.22 -> 0.2.24
light-curve-feature
update fixes{Bazin,Villar}Fit
overflow panic- Benchmark and test for
MagnitudePercentageRatio
- Pure-Python implemented features
FluxNNotDetBeforeFd
andMagnitudeNNotDetBeforeFd
- Pure-Python implemented
OtsuSplit.threshold
method
rust-numpy
0.15.0 -> 0.15.1rand
0.8.4 -> 0.8.5enumflag2
0.7.3 -> 0.7.4
ln_prior
submodule withLnPrior1D
class and stand-alone functions to construct its instancesln_prior
argument forBazinFit
andVillarFit
constructors which can be one of:None
,str
literals (currently the only useful value is 'hosseinzadeh2020' forVillarFit
) orlist[LnPrior1D]
Cargo.lock
is used to build the release packages and it is added to sdist, all these should make builds more reproducible
- The project repository was split from Rust crates and moved into https://gituhb.com/light-curve/light-curve-python
- Maturin '>=0.12.15,<0.13' is required
light-curve-dmdt
version 0.5.0
- Python 3.10 support and binary wheels for supported platforms
- Update
pyo3
to 0.15.1 andrust-numpy
to 0.15.0
- Fix implementation of
OtsuSplit
, see issue #150
init
andbounds
arguments ofBazinFit
andVillarFit
constructors
check: bool = True
keyword argument for__call__
andmany
methods of feature classes. It coulb be used to check if input arrays are valid
gsl
is a default Cargo feature now, which means that GSL must be installed to build this package by standard Python tools likepip install
light-curve-feature
0.3 -> 0.4.1 transition brings MCMC improvements, changing feature names ofBazinFit
and significant changes ofVillarFit
feature set
antifeatures
submodule of the Rust implementation
- Fix implementation of
OtsuSplit
, see issue #150
- Pure-Python implemented
OtsuSplit
feature extractor (experimental) - Python snippets in
README.md
are tested, this requirespytest-markdown
- A lot of new unit-tests for the pure-Python implementation
- New benchmarks to compare pure-Python and Rust implementations performance
- Publish Linux packages for
aarch64
andppc64le
- The Python package is renamed to
light-curve
,light-curve-python
still exists as an alias - Pure Python implementation of the most of the features are added, now Rust-implemented features live
in
light_curve_ext
sub-package, while the Python implementation is inlight_curve_py
. Python-implemented feature extractors have an experimental status - Now
dataclasses
(for Python 3.6 only) andscipy
are required, they are used by the pure-Python implementation maturin
version 0.12
- The Rust implemented classes
.__module__
wasbuitins
, now it islight_curve.light_curve_ext
- Rust edition 2021
- Minimum supported Rust version is 1.56
- Maturin version 0.11
- An exception shouldn't be raised for the case of small time-series length and non-
None
fill_value
- Support
dtype=np.float32
for feature extractors _FeatureEvaluator.many(lcs)
method for parallel execution
- Update
light-curve-feature
to0.3.3
__call__
docs for features
light-curve-feature
0.3.3 fixes wrongVillarFit
equation
mcmc_niter
andlmsder_niter
parameters of*Fit
features
- Amd64 PyPI packages are manylinux2014
- PyPI releases compiled with
gsl
feature enabled
gsl
will become a default feature in future releases
*Fit
algorithm
parameter was marked as optional in the docstrings
- This
CHANGELOG.md
file BazinFit
is enabledVillarFit
feature
- Remove
DmDt.point_from_columnar
andDmDt.gausses_from_columnar
- Update
ndarray
to 0.15.3 andlight-curve-dmdt
to 0.4.0 - Update
rust-numpy
andpyo3
to 0.14 - Update
light-curve-feature
to 0.3.1 - Rename
nonlinear-fit
Cargo feature togsl
- Docstrings improvements
—
—