docs: public static void inverse1(WaveletDescription<WlCoef_I32> desc ,
  								GrayS32 input , GrayS32 output ,
  								GrayS32 storage , int minValue , int maxValue )
  	{
  		UtilWavelet.checkShape(output,input);
  		WlCoef_I32 coef = desc.getForward();
  		if( output.width < coef.scaling.length || output.width < coef.wavelet.length )
  			throw new IllegalArgumentException("Wavelet is too large for provided image.");
  		if( output.height < coef.scaling.length || output.height < coef.wavelet.length )
  			throw new IllegalArgumentException("Wavelet is too large for provided image.");
  		storage = InputSanityCheck.checkDeclare(input, storage);
  
  		// the faster routines can only be run on images which are not too small
  		int minSize = Math.max(coef.getScalingLength(),coef.getWaveletLength())*3;
  
  		if( output.getWidth() <= minSize || output.getHeight() <= minSize ) {
  			ImplWaveletTransformNaive.verticalInverse(desc.getBorder(),desc.getInverse(),input,storage);
  			ImplWaveletTransformNaive.horizontalInverse(desc.getBorder(),desc.getInverse(),storage,output);
  		} else {
  			ImplWaveletTransformInner.verticalInverse(desc.getInverse().getInnerCoefficients(),input,storage);
  			ImplWaveletTransformBorder.verticalInverse(desc.getBorder(),desc.getInverse(),input,storage);
  			ImplWaveletTransformInner.horizontalInverse(desc.getInverse().getInnerCoefficients(),storage,output);
  			ImplWaveletTransformBorder.horizontalInverse(desc.getBorder(),desc.getInverse(),storage,output);
  		}
  
  		if( minValue != Integer.MIN_VALUE && maxValue != Integer.MAX_VALUE )
  			PixelMath.boundImage(output,minValue,maxValue);
  	}