What’s new in the package¶
A catalog of new features, improvements, and bug-fixes in each release.
v0.13.dev¶
Update pyRiemann from Python 3.10 - 3.12 to 3.11 - 3.13. #462 by @qbarthelemy
Add
"transductive"option for parametertarget_domaininpyriemann.transfer.TLCenter, so thattransform()can recenter a set of inputs to its own recomputed mean instead of a stored per-domain center. This supports leave-one-subject-out (or leave-one-session-out) evaluation, where the test domain is never seen duringfit(). Also add"last"as a clearer spelling for the existing “recenter to the last fitted domain” behavior, deprecating the empty string""(which had the same meaning). #464 by @gcattan and @aquemyAdd Wasserstein inner product for Hermitian matrices
pyriemann.geometry.tangentspace.innerproduct_wasserstein(). #455 by @qbarthelemyAdd
pyriemann.geometry.tangentspace.transport_wasserstein()for parallel transport with the Bures-Wasserstein metric. #476 by @AmitSubhashDeprecate
pyriemann.geometry.ajd.rjd()renamed intopyriemann.geometry.ajd.jade(), and transpose outputed diagonalizer. #474 by @gaoflowUpdate
array-api-compatfrom >=1.11 to >=1.14, and replace the deprecatedarray_api_extra.expand_dimsby the namespace-nativeexpand_dims. #478 by @AmitSubhashDeprecate parameter
probabilityofpyriemann.classification.SVC. Addpredict_proba()which now works without this parameter. #472 by @qbarthelemyEnhance
pyriemann.clustering.MeanShiftaddingtransform(). #485 by @qbarthelemyEnhance
pyriemann.transfer.MDWMto support HPD matrices. #488 by @qbarthelemyEnhance
pyriemann.channelselection.ElectrodeSelectionto support HPD matrices. #489 by @qbarthelemyFix
fit_transform()ofpyriemann.transfer.TLScale, which modified the input matrices in-place, so that two identical calls on the same array returned different outputs. #482 by @adityasingh2400Correct
pyriemann.geometry.mean.mean_alm()andpyriemann.geometry.mean.mean_bmp()for two matrices, which were using a wrong position on the geodesic whensample_weightis not uniform. #480 by @adityasingh2400Fix parameter
bandwidthofpyriemann.clustering.MeanShift, which raised anAttributeErrorwhen set to a value, and remove a leftoverprint()in its bandwidth estimation. #483 by @adityasingh2400Correct the loss and the gradient minimized by
pyriemann.transfer.TLRotatein manifold: the loss now returns the sum of squared distances it is documented to minimize and that the gradient is derived from, and the gradient formetric="riemann"no longer diagonalizes a non-symmetric matrix withnumpy.linalg.eigh. #492 by @adityasingh2400
v0.12 (July 2026)¶
Deprecate
pyriemann.utils.covariance.covariances_X()andpyriemann.utils.covariance.cospectrum(). #442 by @qbarthelemyAdd Python Array API support for NumPy/PyTorch backend transparency in core utility modules (
base,covariance,distance,mean,geodesic,tangentspace,ajd,kernel,median), enabling execution on both NumPy arrays and PyTorch tensors with optional GPU acceleration and autograd support. #433 by @bruAristimunhaMove geometry modules (
ajd,base,covariance,distance,geodesic,kernel,mean,median,tangentspace,test) frompyriemann.utilsto a new standalonepyriemann.geometrysubpackage. The old import paths (e.g.pyriemann.utils.mean,pyriemann.utils.kernel,pyriemann.utils.test) still work as backward-compatibility shims but emit aDeprecationWarning; rename topyriemann.geometry.<module>. The privatepyriemann.utils._backendandpyriemann._helpersmodules also moved intopyriemann.geometryso that the subpackage is fully standalone (no internal pyriemann imports outside of itself). Modulepyriemann.utils.utilsis renamed topyriemann.utils._checkwith the same shim+warning. Tests for moved modules are renamedtest_utils_*→test_geometry_*. #445 by @bruAristimunhaEnhance
pyriemann.geometry.geodesic.geodesic()to accept parameteralphaas an ndarray of shape(...,), allowing a different geodesic position per stacked matrix pair. #396 by @Fashad-AhmedAdd example on Riemannian curvature analysis of sentence trajectories in language model embeddings, demonstrating how local metric tensors (SPD matrices) capture geometric structure in LLM latent spaces and enable classification of semantically distinct sentences using MDM. #448 by @SzczepanK112 and @gcattan
Add example on simulated SPD matrices to compare metrics. #451 by @qbarthelemy
Add Bini-Meini-Poloni (BMP) mean
pyriemann.geometry.mean.mean_bmp(), and Cheap meanpyriemann.geometry.mean.mean_cheap(). #449 by @qbarthelemyMove
pyriemann.artifact_detection.Potatoandpyriemann.artifact_detection.PotatoFieldfromclusteringtoartifact_detection. #453 by @qbarthelemyDeprecate
pyriemann.datasets.sample_gaussian_spd()renamed intopyriemann.datasets.sample_gaussian(), and enhance it to generate HPD matrices from complex-typed mean for floatsigma. #413 by @robruiAdd log-Cholesky inner product for Hermitian matrices
pyriemann.geometry.tangentspace.innerproduct_logchol(), and improve other inner products. #450 by @qbarthelemyAdd
__sklearn_is_fitted__to stateless transformers, so they pass scikit-learn’scheck_is_fittedafterfit()and can be used insidePipeline(transform_input=...)(introduced in scikit-learn 1.6). #457 by @bruAristimunha
v0.11 (April 2026)¶
Enhance
pyriemann.datasets.sample_gaussian_spd()adding support for dispersion defined as a covariance matrix. #412 by @thibaultdesurrelAdd
pyriemann.clustering.GaussianMixture. #411 by @qbarthelemyEnhance
pyriemann.classification.NearestConvexHulladding"euclid"option for parametermetric. #415 by @qbarthelemyDeprecate
pyriemann.utils.mean.mean_covariance()renamed intopyriemann.geometry.mean.gmean(). #419 by @qbarthelemyCorrect log-Euclidean parallel transport
pyriemann.geometry.tangentspace.transport_logeuclid(). #420 by @qbarthelemyAdd CI caching for Zenodo datasets to speed up documentation builds and avoid rate limiting. #417 by @bruAristimunha
Enhance
pyriemann.classification.TSClassifierandpyriemann.transfer.TLClassifierto support classifiers without parametersample_weight. #422 by @qbarthelemyEnhance
pyriemann.artifact_detection.PotatoField, allowing a differentmetricper potato and adding a parametermethod_combination. #423 by @qbarthelemyModernize documentation: migrate from Bootstrap to Furo theme, add card-based API navigation with sphinx-design, and fix Sphinx build warnings. #424 by @bruAristimunha
Add ORCID identifiers and new contributors to CITATION.cff. #424 by @bruAristimunha
Add functions to compute inner products. #428 by @qbarthelemy
Add broadcast compatibility for utility functions, enabling batched SPD/HPD matrix operations. Includes broadcast-compatible Mahalanobis distance. #426 by @bruAristimunha
Complete example on artifact detection by Riemannian potato field, adding a metric by potato. #431 by @DavoudYneuro
Enhance
pyriemann.geometry.covariance.covariance_scm()adding parameterweigthsto estimate weighted sample covariance matrices. #434 by @qbarthelemy
v0.10 (January 2026)¶
Add example in gallery to compare clustering algorithms on synthetic datasets. #374 by @qbarthelemy
Enhance
pyriemann.classification.MeanFieldto be used as a feature extractor. #377 by @qbarthelemyUpdate pyRiemann from Python 3.9 - 3.11 to 3.10 - 3.12. #378 by @qbarthelemy
Deprecate
fit_transform()ofpyriemann.spatialfilters.AJDCdue to incompatible dimensions. #382 by @qbarthelemyAdd
pyriemann.datasets.RandomOverSamplerfor data augmentation of positive-definite matrices. #387 by @qbarthelemyAdd
pyriemann.geometry.tangentspace.transport()for parallel transport of positive-definite matrices. #388 by @qbarthelemyEnhance
pyriemann.datasets.make_matrices()to generate invertible, orthogonal, unitary or non-square matrices. #389 by @qbarthelemyDeprecate
pyriemann.utils.mean.mean_identity(). #392 by @qbarthelemyEnhance
pyriemann.tangentspace.TangentSpaceto support HPD matrices. #394 by @qbarthelemySpeedup ALM mean
pyriemann.geometry.mean.mean_alm(). #398 by @qbarthelemyAdd
pyriemann.geometry.geodesic.geodesic_chol()andpyriemann.geometry.mean.mean_chol(). #399 by @qbarthelemyAdd
pyriemann.geometry.tangentspace.transport_logchol()for parallel transport with log-Cholesky metric. #400 by @qbarthelemyAdd Thompson metric:
pyriemann.geometry.distance.distance_thompson(),pyriemann.geometry.geodesic.geodesic_thompson(), andpyriemann.geometry.mean.mean_thompson(). #401 by @qbarthelemyFix sklearn error
This Pipeline instance is not fitted yet. #406 by @qbarthelemyAdd
pyriemann.classification.NearestConvexHull. #405 by @qbarthelemy
v0.9 (July 2025)¶
Add conjugate transpose operator
pyriemann.geometry.base.ctranspose()for real- and complex-valued ndarrays. #348 by @qbarthelemyAdd
pyriemann.embedding.TSNE, a Riemannian t-SNE implementation, and update example comparing embeddings. #347 by @thibaultdesurrelFix matplotlib warning. #351 by @qbarthelemy
Enhance
pyriemann.geometry.mean.mean_power()usinginit,tolandmaxiterparameters whenp=0. #353 by @toncho11Enhance
pyriemann.geometry.distance.pairwise_distance()to support HPD matrices for"euclid","harmonic","logchol"and"logeuclid"metrics. #350 by @qbarthelemyAvoid duplicating code when using joblib. #359 by @qbarthelemy
Fix sklearn warning
This Pipeline instance is not fitted yet. #358 by @qbarthelemyAdd
pyriemann.geometry.tangentspace.log_map()andpyriemann.geometry.tangentspace.exp_map(). #363 by @qbarthelemyAdd
pyriemann.clustering.MeanShift, a Riemannian mean shift clustering algorithm. #364 by @qbarthelemyFix
pyriemann.spatialfilters.Xdawnremoving parametersample_weightthat is not used on the fit_transformation. #371 by @bruAristimunha
v0.8 (February 2025)¶
Enhance
pyriemann.geometry.mean.mean_ale()adding parameterinit, and add functioncheck_init()useful to all ajd and mean functions allowing initialization. #328 by @qbarthelemyEnhance
pyriemann.utils.mean.mean_covariance()to support"power"and"poweuclid"metrics. #329 by @qbarthelemyAdd tangent space alignment (TSA) in transfer learning module. Deprecate
pyriemann.transfer.TLStretchrenamed intopyriemann.transfer.TLScale, andpyriemann.classification.TSclassifierintopyriemann.classification.TSClassifier. #320 by @qbarthelemyAdd an example using fNIRS data with a new estimator called
HybridBlocksfor classifying HbO and HbR signals. #323 by @timnaherAdd directional derivatives
pyriemann.geometry.base.ddexpm()andpyriemann.geometry.base.ddlogm(), and correctpyriemann.geometry.tangentspace.log_map_logeuclid()andpyriemann.geometry.tangentspace.exp_map_logeuclid(). #332 by @gabelsteinAdd
pyriemann.geometry.tangentspace.exp_map_wasserstein(),pyriemann.geometry.tangentspace.log_map_wasserstein()andpyriemann.geometry.geodesic.geodesic_wasserstein(). #331 by @gabelsteinEnhance
pyriemann.classification.KNearestNeighbor,pyriemann.classification.MeanField,pyriemann.classification.class_distinctiveness(),pyriemann.artifact_detection.Potato,pyriemann.artifact_detection.PotatoFieldpyriemann.clustering.Kmeans,pyriemann.clustering.KmeansPerClassTransform,pyriemann.embedding.SpectralEmbedding, andpyriemann.regression.KNearestNeighborRegressorto process HPD matrices. #336 by @qbarthelemyEnhance
pyriemann.datasets.make_matrices(), to generate symmetric and Hermitian matrices, and add parameters defining the normal distribution to draw eigen vectors. Deprecatepyriemann.datasets.generate_random_spd_matrix(). #339 by @qbarthelemyEnhance TSA, adding parameter
sample_weightto tangent space transformers, and generalizingpyriemann.transfer.TLRotatefrom one-to-one to many-to-one domain adaptation in tangent space. #337 by @qbarthelemyEnhance
pyriemann.geometry.kernel.kernel_euclid()andpyriemann.geometry.kernel.kernel_logeuclid()adding parameterCref, and correctpyriemann.geometry.kernel.kernel_riemann()whenYis different fromXandCrefis None. #340 by @qbarthelemySpeedup Wasserstein mean
pyriemann.geometry.mean.mean_wasserstein()and extend parallel transport functionpyriemann.geometry.tangentspace.transport(). #341 by @gabelstein
v0.7 (October 2024)¶
Enhance
pyriemann.embedding.LocallyLinearEmbeddingadding parameterkernel. #293 by @gabelsteinEnhance
pyriemann.transfer.TLCenter, adding possibility for parametertarget_domainto be empty, forcingtransform()to recenter matrices to the last fitted domain. #292 by @brunaaflEnhance
pyriemann.classification.MDMto process HPD matrices. #297 by @qbarthelemyEnhance
pyriemann.geometry.ajd.ajd_pham()andpyriemann.geometry.mean.mean_ale()functions to process HPD matrices. #299 by @qbarthelemyEnhance
pyriemann.preprocessing.Whiteningaddingpartial_fit()for online applications. #277 by @qbarthelemy and @brentgaisfordAdd fixture
get_weights()toconftest.pyand complete tests. #305 by @qbarthelemyEnhance
pyriemann.estimation.Shrinkageto process HPD matrices. #307 by @qbarthelemyAdd remote sensing examples on radar image clustering. #306 by @AmmarMian
Add parameter
sample_weighttoMDM.fit_predict(),Potato.fit(),Potato.partial_fit(),PotatoField.fit(),PotatoField.partial_fit()andWhitening.partial_fit(). #309 by @qbarthelemyUpdate pyRiemann from Python 3.8 - 3.10 to 3.9 - 3.11. #310 by @qbarthelemy
Add
pyriemann.geometry.distance.distance_logchol()to compute log-Cholesky distance. #311 by @qbarthelemyEnhance
pyriemann.spatialfilters.CSPadding parameterajd_method. #313 by @qbarthelemyAdd
pyriemann.geometry.distance.distance_poweuclid()andpyriemann.geometry.mean.mean_poweuclid()to use power Euclidean metric. #312 by @qbarthelemyEnhance
pyriemann.geometry.mean.mean_power(), adding parameterinitand fixing default initialization provided in the associated paper. #324 by @toncho11Add
pyriemann.geometry.distance.distance_chol(),pyriemann.geometry.geodesic.geodesic_logchol(),pyriemann.geometry.mean.mean_logchol(), and correctpyriemann.geometry.distance.distance_logchol(). #322 by @gabelstein
v0.6 (April 2024)¶
Update pyRiemann from Python 3.7 - 3.9 to 3.8 - 3.10. #254 by @qbarthelemy
Speedup pairwise distance function
pyriemann.geometry.distance.pairwise_distance()by adding individual functions for"euclid","harmonic","logeuclid"and"riemann"metrics. #256 by @gabelsteinAdd
pyriemann.geometry.test.is_real_type()to check the type of input arrays and addpyriemann.geometry.covariance.covariance_scm()allowing to process complex-valued inputs for"scm"covariance estimator. #251 by @qbarthelemyUpdate to Read the Docs v2. #260 by @qbarthelemy
Correct
pyriemann.geometry.distance.distance_wasserstein()andpyriemann.geometry.distance.distance_kullback(), keeping only real part. #267 by @qbarthelemyDeprecate input
covmatsformeanfunctions, renamed intoX. #252 by @qbarthelemyAdd support for complex covariance estimation for
"lwf","mcd","oas"and"sch"estimators. #274 by @gabelsteinDeprecate input
covtestforpredict()ofpyriemann.classification.KNearestNeighbor, renamed intoX. #259 by @qbarthelemyCorrect check for parameter
kernel_fctofpyriemann.classification.SVC. #272 by @qbarthelemyEnhance
pyriemann.transfer.TLCenter,pyriemann.transfer.TLStretchandpyriemann.transfer.TLRotateestimators adding parametersample_weight. #273 by @apmellotDeprecate
pyriemann.estimation.HankelCovariancesrenamed intopyriemann.estimation.TimeDelayCovariances. #275 by @qbarthelemyAdd an example on augmented covariance matrix. #276 by @carraraig
Remove function
pyriemann.datasets.make_covariances(). #280 by @qbarthelemySpeedup
pyriemann.estimation.TimeDelayCovariances. #281 by @qbarthelemyEnhance
ajdmodule and add a generic functionpyriemann.geometry.ajd.ajd(). #238 by @qbarthelemyAdd
pyriemann.utils.viz.plot_bihist(),pyriemann.utils.viz.plot_biscatter()andpyriemann.utils.viz.plot_cov_ellipse()for display. #287 by @qbarthelemy and @gcattanAdd
pyriemann.estimation.CrossSpectra, and deprecatepyriemann.estimation.CospCovariancesrenamed intopyriemann.estimation.CoSpectra. #288 by @qbarthelemy
v0.5 (Jun 2023)¶
Fix
pyriemann.geometry.distance.pairwise_distance()for non-symmetric metrics. #229 by @qbarthelemyFix
pyriemann.utils.mean.mean_covariance()used with keyword arguments. #230 by @qbarthelemyAdd functions to test HPD and HPSD matrices,
pyriemann.geometry.test.is_herm_pos_def()andpyriemann.geometry.test.is_herm_pos_semi_def(). #231 by @qbarthelemyDeprecate function
pyriemann.datasets.make_covariances(), replaced by new functionpyriemann.datasets.make_matrices()to generate SPD, SPSD, HPD and HPSD matrices. #232 by @qbarthelemyAdd tests for matrix operators and distances for HPD matrices, complete doc and add references. #234 by @qbarthelemy
Enhance module
tangentspaceto process HPD matrices. #236 by @qbarthelemyFix regression introduced in
pyriemann.spatialfilters.Xdawnby #214. #242 by @qbarthelemyFix
pyriemann.geometry.kernel.kernel_euclid()applied on non-symmetric matrices. #245 by @qbarthelemyEnhance all distances adding parameter
squared. #246 by @qbarthelemyCorrect
transform()andpredict_proba()ofpyriemann.classification.MeanField. #247 by @qbarthelemyEnhance module
meanto process HPD matrices. #243 by @qbarthelemyCorrect
pyriemann.geometry.distance.distance_mahalanobis()keeping only real part. #249 by @qbarthelemyFix
pyriemann.datasets.sample_gaussian_spd()used withsampling_method="rejection"on 2x2 matrices. #250 by @mhurte
v0.4 (Feb 2023)¶
Add exponential and logarithmic maps for three main metrics:
"euclid","logeuclid"and"riemann".pyriemann.geometry.tangentspace.tangent_space()is splitted in two steps: (i)log_map_*()projecting SPD matrices into tangent space depending on the metric; and (ii)pyriemann.geometry.tangentspace.upper()taking the upper triangular part of matrices. Similarly,pyriemann.geometry.tangentspace.untangent_space()is splitted into (i)pyriemann.geometry.tangentspace.unupper()and (ii)exp_map_*(). The different metrics for tangent space mapping can now be defined intopyriemann.tangentspace.TangentSpace, then used fortransform()as well as forinverse_transform(). #195 by @qbarthelemyEnhance AJD, adding parameter
inittopyriemann.geometry.ajd.ajd_pham()andpyriemann.geometry.ajd.jade(), and addingwarm_restartoption to parameterdim_redinpyriemann.spatialfilters.AJDC. #196 by @qbarthelemyEnhance
pyriemann.datasets.sample_gaussian_spd()adding parametersampling_method, with"rejection"accelerating 2x2 matrices generation. #198 by @Artim436Add geometric medians for Euclidean and Riemannian metrics:
pyriemann.geometry.median.median_euclid(), andpyriemann.geometry.median.median_riemann(), and add an example in gallery to compare means and medians on synthetic datasets. #200 by @qbarthelemyEnhance
pyriemann.regression.KNearestNeighborRegressoraddingscore(). #205 by @qbarthelemyAdd a new transfer learning module
transferand examples, including Riemannian Procrustes Analysis (RPA) andpyriemann.transfer.MDWM. #189 by @plcrodrigues, @qbarthelemy and @sylvchevAdd class distinctiveness function to measure the distinctiveness between classes on the manifold,
pyriemann.classification.class_distinctiveness(), and complete an example in gallery to show how it works on synthetic datasets. #215 by @MSYamamotoAdd example on ensemble learning applied to functional connectivity, and add
pyriemann.geometry.base.nearest_sym_pos_def(). #202 by @mccorsi and @sylvchevAdd kernel matrices representation
pyriemann.estimation.Kernelsand complete example comparing estimators. #217 by @qbarthelemyAdd a new covariance estimator, robust fixed point covariance, and add kwds arguments for all covariance based functions and classes. #220 by @qbarthelemy
Add example in gallery on frequency band selection using class distinctiveness measure. #219 by @MSYamamoto
Add
pyriemann.geometry.covariance.covariance_mest()supporting three robust M-estimators (Huber, Student-t and Tyler) and available for all covariance based functions and classes; and add an example on robust covariance estimation for corrupted data. Add alsopyriemann.geometry.distance.distance_mahalanobis()between between vectors and a Gaussian distribution. #223 by @qbarthelemy
v0.3 (July 2022)¶
Correct spectral estimation in
pyriemann.geometry.covariance.cross_spectrum()to obtain equivalence with SciPy. #131 by @qbarthelemyEnhance
pyriemann.geometry.covariance.coherence()andpyriemann.estimation.Coherences, adding parametercohfor instantaneous, lagged and imaginary coherences. #132 by @qbarthelemyEnhance
pyriemann.artifact_detection.Potatoaddingpartial_fit()for online update; and update example on artifact detection. #133 by @qbarthelemyDeprecate
pyriemann.utils.viz.plot_confusion_matrix()as sklearn integrate its own version. #135 by @sylvchevAdd Ando-Li-Mathias (ALM) mean
pyriemann.geometry.mean.mean_alm(). #56 by @sylvchevAdd Schaefer-Strimmer covariance estimator
pyriemann.geometry.covariance.covariances(), and an example to compare estimators. #59 by @sylvchevRefactor tests + fix refit of
pyriemann.tangentspace.TangentSpace. #136 by @sylvchevAdd
pyriemann.artifact_detection.PotatoField, and an example on artifact detection. #142 by @qbarthelemyAdd sampling SPD matrices from a Riemannian Gaussian distribution in
pyriemann.datasets.sample_gaussian_spd(). #140 by @plcrodriguesAdd new function
pyriemann.datasets.make_gaussian_blobs()for generating random datasets with SPD matrices. #140 by @plcrodriguesAdd module
pyriemann.utils.vizin API, addpyriemann.utils.viz.plot_waveforms(), and add an example on ERP visualization. #144 by @qbarthelemyAdd a special form covariance matrix
pyriemann.utils.covariance.covariances_X(). #147 by @qbarthelemyAdd masked and NaN means with Riemannian metric:
pyriemann.geometry.mean.maskedmean_riemann()andpyriemann.geometry.mean.nanmean_riemann(). #149 by @qbarthelemy and @sylvchevEnhance
pyriemann.geometry.covariance.normalize()addingcorroption for parameternorm, to normalize covariance into correlation matrices. #153 by @qbarthelemyAdd block covariance matrix:
pyriemann.estimation.BlockCovariancesandpyriemann.geometry.covariance.block_covariances(). #154 by @gabelsteinAdd Riemannian Locally Linear Embedding (LLE):
pyriemann.embedding.LocallyLinearEmbeddingandpyriemann.embedding.locally_linear_embedding(). #159 by @gabelsteinAdd Riemannian kernel function:
pyriemann.geometry.kernel.kernel_riemann(). #159 by @gabelsteinFix
fit()inpyriemann.channelselection.ElectrodeSelection. #166 by @qbarthelemyAdd power mean estimation in
pyriemann.geometry.mean.mean_power(). #170 by @qbarthelemy and @plcrodriguesAdd example in gallery to compare classifiers on synthetic datasets. #175 by @qbarthelemy
Enhance
pyriemann.classification.KNearestNeighbor, addingpredict_proba()and correcting attributeclasses_. #171 by @qbarthelemyAdd Riemannian support-vector machine (SVM) classifier:
pyriemann.classification.SVC. #164 by @gabelstein and @qbarthelemyAdd Riemannian support-vector machine (SVM) regressor:
pyriemann.regression.SVR. #164 by @gabelstein and @qbarthelemyAdd k-nearest-neighbors (k-NN) regressor:
pyriemann.regression.KNearestNeighborRegressor. #164 by @gabelstein, @qbarthelemy and @agramfortAdd Minimum Distance to Mean Field classifier:
pyriemann.classification.MeanField. #172 by @qbarthelemy and @plcrodriguesAdd example on principal geodesic analysis (PGA) for SSVEP classification. #169 by @qbarthelemy
Add
pyriemann.geometry.distance.distance_harmonic(), and sort functions by their names in code, doc and tests. #183 by @qbarthelemyEnhance
pyriemann.datasets.make_gaussian_blobs()adding parametern_jobsfor multiprocessing with joblib. #179 by @sylvchevFix dispersion when generating datasets with
pyriemann.datasets.sample_gaussian_spd(). #179 by @sylvchevEnhance modules
baseanddistanceto process ndarrays of SPD matrices. #186 and #187 by @qbarthelemyEnhance functions of module
utilsto process ndarrays of SPD matrices. #190 by @qbarthelemyEnhance means functions, with faster implementations and warning when convergence is not reached. #188 by @qbarthelemy
v0.2.7 (June 2021)¶
Fix compatibility with scikit-learn v0.24
Correct probabilities returned by
predict_proba()ofpyriemann.classification.MDM. #100 by @qbarthelemyEnhance
pyriemann.artifact_detection.Potatoaddingpredict_proba(), and add an example on artifact detection. #105 by @qbarthelemyAdd
pyriemann.geometry.covariance.normalize()for the normalization of covariance matrices. #111 by @qbarthelemyEnhance Pham’s AJD algorithm
pyriemann.geometry.ajd.ajd_pham()adding parametersample_weight. #112 by @qbarthelemyAdd
pyriemann.geometry.covariance.cross_spectrum()and fixpyriemann.utils.covariance.cospectrum();pyriemann.geometry.covariance.coherence()output is kept unchanged. #118 by @qbarthelemyAdd
pyriemann.geometry.covariance.get_nondiag_weight()to compute non-diagonality weights of matrices. #119 by @qbarthelemyAdd
pyriemann.spatialfilters.AJDCfor blind source separation (BSS) and group BSS (gBSS), with an example on artifact correction. #120 by @qbarthelemyAdd
pyriemann.preprocessing.Whitening, with optional dimension reduction. #122 by @qbarthelemy
v0.2.6 (March 2020)¶
Enhance
FgMDMaddingpredict_proba().Add parallel transport for Riemannian metric.
Remove support for Python 2, and update code for better scikit-learn v0.22 support. #79 by @alexandrebarachant
v0.2.5 (January 2018)¶
Enhance
XdawnandXdawnCovariancesadding parameterbaseline_cov.Add
Coherencestransformer.Enhance
Potatoadding parameterspos_labelandneg_label.Add
BilinearFiltertransformer.Add
Embeddingfor spectral embedding with Laplacian eigenmaps andpairwise_distance. #54 by @plcrodriguesAdd a permutation test for generic scikit-learn estimator.
Enhance stats module, with distance based t-test and f-test.
Remove two-way permutation test.
Add support for Python 3.5 in travis.
Add
Shrinkagetransformer. #38 by @alexandrebarachant
v0.2.4 (June 2016)¶
Improve documentation.
Add
TSclassifierfor out-of the box tangent space classification.Add Wasserstein distance
distance_wasserstein()and meanmean_wasserstein().Add
KNearestNeighborfor k-NN classifier.Enhance
MDMaddingpredict_proba()which provides softmax probabilities.Enhance
XdawnCovariancesadding parameterxdawn_estimator.Add
CSPfor covariance matrices.Add approximate joint diagonalization (AJD) algorithms:
rjd(),ajd_pham(),uwedge().Add ALE mean
mean_ale().Enhance
CSPto support multiclass classification.Correct param name in
CospCovariancesto comply to scikit-learn.Correct attributes name in most modules to comply to the scikit-learn naming convention.
Add
HankelCovariancesestimation.Enhance
CSPadding parameterlog, and addSPoCspatial filtering.Add harmonic mean
mean_harmonic()and Kullback-Leibler meanmean_kullback_sym().
v0.2.3 (November 2015)¶
Enhance
MDMadding parametern_jobsfor multiprocessing with joblib.Add Kullback-Leibler divergences
distance_kullback(),distance_kullback_right(),distance_kullback_sym().Add Riemannian
Potatofor artifact detection.Enhance
meanfunctions andMDM.fit(), adding parametersample_weight.Enhance
TangentSpaceadding parametersample_weighttofit()andfit_transform().Enhance
FGDAadding parametersample_weighttofit()andfit_transform().Enhance
ElectrodeSelectionadding parametersample_weighttofit().
v0.2.2 (June 2015)¶
Deprecate parameter
estofcovariances()andcovariances_EP(), renamed intoestimator.Enhance
MDMadding the possibility to use a dictionary to define parametermetric.Enhance
ERPCovariancesadding parametersvd.
v0.2 (May 2015)¶
Add generic function
distancewith parametermetricsupporting"riemann","logeuclid","euclid"and"logdet"options.Add generic function
geodesicwith parametermetricsupporting"riemann","logeuclid"and"euclid"options.Add
KmeansandKmeansPerClassTransformfor clustering.Split module
utilsinto submodules.
v0.1 (April 2015)¶
Add Minimum Distance to Mean classifier
MDM,TangentSpace, and firstutils(distance, mean, geodesic, covariance).Add
FgMDMandFGDAfor classification.Add
ElectrodeSelection,Covariances,ERPCovariances,XdawnCovariances,CospCovariancesandXdawn.Add examples for motor imagery and ERP classification.