MODWTOptimizer.java
package com.morphiqlabs.wavelet.api.spi;
import com.morphiqlabs.wavelet.api.Wavelet;
import com.morphiqlabs.wavelet.api.BoundaryMode;
/**
* Service Provider Interface for MODWT transform optimizations.
* Implementations can provide optimized versions using Vector API, GPU, or other techniques.
*
* @since 1.0.0
*/
public interface MODWTOptimizer {
/**
* Check if this optimizer is supported on the current platform.
* @return true if the optimizer can be used
*/
boolean isSupported();
/**
* Get the priority of this optimizer. Higher values have higher priority.
* @return priority value (0-100)
*/
int getPriority();
/**
* Get a descriptive name for this optimizer.
* @return optimizer name
*/
String getName();
/**
* Perform optimized forward MODWT transform.
* @param signal input signal
* @param wavelet wavelet to use
* @param boundaryMode boundary handling mode
* @return transform result with wavelet and scaling coefficients
*/
MODWTOptimizedResult forward(double[] signal, Wavelet wavelet, BoundaryMode boundaryMode);
/**
* Perform optimized inverse MODWT transform.
* @param waveletCoeffs wavelet coefficients
* @param scalingCoeffs scaling coefficients
* @param wavelet wavelet to use
* @param boundaryMode boundary handling mode
* @return reconstructed signal
*/
double[] inverse(double[] waveletCoeffs, double[] scalingCoeffs,
Wavelet wavelet, BoundaryMode boundaryMode);
/**
* Perform batch forward transforms.
* @param signals array of signals
* @param wavelet wavelet to use
* @param boundaryMode boundary handling mode
* @return array of transform results
*/
default MODWTOptimizedResult[] forwardBatch(double[][] signals, Wavelet wavelet,
BoundaryMode boundaryMode) {
MODWTOptimizedResult[] results = new MODWTOptimizedResult[signals.length];
for (int i = 0; i < signals.length; i++) {
results[i] = forward(signals[i], wavelet, boundaryMode);
}
return results;
}
/**
* Result interface for optimized MODWT transforms.
*/
interface MODWTOptimizedResult {
/**
* Gets the wavelet coefficients.
* @return the wavelet coefficients
*/
double[] getWaveletCoefficients();
/**
* Gets the scaling coefficients.
* @return the scaling coefficients
*/
double[] getScalingCoefficients();
}
}