docs: public static void verticalInverse(BorderIndex1D border , WlBorderCoef<WlCoef_I32> inverseCoef , GrayI input , GrayI output ) {
  
  		UtilWavelet.checkShape(output,input);
  
  		int []trends = new int[ output.height ];
  		int []details = new int[ output.height ];
  
  		boolean isLarger = input.height > output.height;
  		int paddedHeight = output.height + output.height%2;
  
  		final int lowerBorder = inverseCoef.getLowerLength()*2;
  		final int upperBorder = output.height - inverseCoef.getUpperLength()*2;
  
  		border.setLength(output.height+output.height%2);
  
  		WlCoef_I32 coefficients = inverseCoef.getInnerCoefficients();
  		final int e = coefficients.denominatorScaling*2;
  		final int f = coefficients.denominatorWavelet*2;
  		final int ef = e*f;
  		final int ef2 = ef/2;
  
  		for( int x = 0; x < output.width; x++) {
  
  			for( int i = 0; i < details.length; i++ ) {
  				details[i] = 0;
  				trends[i] = 0;
  			}
  
  			for( int y = 0; y < output.height; y += 2 ) {
  				int a = input.get(x,y/2);
  				int d = input.get(x,y/2+input.height/2);
  
  				if( y < lowerBorder ) {
  					coefficients = inverseCoef.getBorderCoefficients(y);
  				} else if( y >= upperBorder ) {
  					coefficients = inverseCoef.getBorderCoefficients(y-paddedHeight);
  				} else {
  					coefficients = inverseCoef.getInnerCoefficients();
  				}
  
  				final int offsetA = coefficients.offsetScaling;
  				final int offsetB = coefficients.offsetWavelet;
  				final int[] alpha = coefficients.scaling;
  				final int[] beta = coefficients.wavelet;
  
  				// add the 'average' signal
  				for( int i = 0; i < alpha.length; i++ ) {
  					// if an odd image don't update the outer edge
  					int yy = border.getIndex(y+offsetA+i);
  					if( isLarger && yy >= output.height )
  						continue;
  					trends[yy] += a*alpha[i];
  				}
  
  				// add the detail signal
  				for( int i = 0; i < beta.length; i++ ) {
  					int yy = border.getIndex(y+offsetB+i);
  					if( isLarger && yy >= output.height )
  						continue;
  					details[yy] += d*beta[i];
  				}
  			}
  
  			for( int y = 0; y < output.height; y++ ) {
  				output.set(x,y, UtilWavelet.round(trends[y]*f + details[y]*e,ef2,ef));
  			}
  		}
  	}