@Override
	public SquareMatrixElem<U, R, S> handleOptionalOp( Object id , ArrayList<SquareMatrixElem<U, R, S>> args )  throws NotInvertibleException
	{
		if( id instanceof SquareMatrixElem.SquareMatrixCmd )
		{
			switch( (SquareMatrixElem.SquareMatrixCmd) id )
			{
			
				case INVERT_LEFT_REV_COEFF:
				{
					SquareMatrixElem<U,R,S> ret = invertLeftRevCoeff( );
					return( ret );
				}
				// break;
				
				case INVERT_RIGHT_REV_COEFF:
				{
					SquareMatrixElem<U,R,S> ret = invertRightRevCoeff( );
					return( ret );
				}
				// break;
			
				case MULT_REV_COEFF:
				{
					SquareMatrixElem<U,R,S> ret = multRevCoeff( args.get(0) );
					return( ret );
				}
				// break;
			
				case TRANSPOSE:
				{
					SquareMatrixElem<U,R,S> ret = new SquareMatrixElem<U,R,S>(fac,dim);
					Iterator<BigInteger> rowi = rowMap.keySet().iterator();
					while( rowi.hasNext() )
					{
						BigInteger row = rowi.next();
						HashMap<BigInteger,R> subMap = rowMap.get( row );
						Iterator<BigInteger> coli = subMap.keySet().iterator();
						while( coli.hasNext() )
						{
							BigInteger col = coli.next();
							R val = subMap.get( col );
							ret.setVal(col, row, val );
						}
					}
					return( ret );
				}
				// break;
			}
		}
		
		return( super.handleOptionalOp(id, args) );
	}