### Question:
Arrays { public static <T> Array<T> permute(Array<T> org, int[] dims) { return org.createView(org.indexFn().permute(dims)); }  static Array<T> factory(DataType dataType, int[] shape, Storage<T> storage); static Array<T> factory(DataType dataType, int[] shape, Object dataArray); static Array<T> factory(DataType dataType, int[] shape); static Array<T> factoryCopy(DataType dataType, int[] shape, List<Array<T>> dataArrays); static Array<T> factoryArrays(DataType dataType, int[] shape, List<Array<?>> dataArrays); static Array<T> flip(Array<T> org, int dim); static Array<T> permute(Array<T> org, int[] dims); static Array<T> reshape(Array<T> org, int[] shape); static Array<T> reduce(Array<T> org); static Array<T> reduce(Array<T> org, int dim); static Array<T> section(Array<T> org, List<Range> ranges); static Array<T> slice(Array<T> org, int dim, int value); static Array<T> transpose(Array<T> org, int dim1, int dim2); static long computeSize(int[] shape); static boolean isVariableLength(int[] shape); static int[] removeVlen(int[] shape);  }### Answer:
@Test public void testPermute() { int[] permute = new int[] {0, 2, 1}; Array<Double> pArray = Arrays.permute(array, permute); assertThat(pArray.get(0, 0, 0)).isEqualTo(1); assertThat(pArray.get(0, 1, 0)).isEqualTo(2); assertThat(pArray.get(0, 2, 0)).isEqualTo(3); assertThat(pArray.get(0, 0, 1)).isEqualTo(4); assertThat(pArray.get(0, 1, 1)).isEqualTo(5); assertThat(pArray.get(0, 2, 1)).isEqualTo(6); permute = new int[] {2, 1, 0}; pArray = pArray = Arrays.permute(array, permute); assertThat(pArray.get(0, 0, 0)).isEqualTo(1); assertThat(pArray.get(1, 0, 0)).isEqualTo(2); assertThat(pArray.get(2, 0, 0)).isEqualTo(3); assertThat(pArray.get(0, 1, 0)).isEqualTo(4); assertThat(pArray.get(1, 1, 0)).isEqualTo(5); assertThat(pArray.get(2, 1, 0)).isEqualTo(6); permute = new int[] {2, 0, 1}; pArray = pArray = Arrays.permute(array, permute); assertThat(pArray.get(0, 0, 0)).isEqualTo(1); assertThat(pArray.get(1, 0, 0)).isEqualTo(2); assertThat(pArray.get(2, 0, 0)).isEqualTo(3); assertThat(pArray.get(0, 0, 1)).isEqualTo(4); assertThat(pArray.get(1, 0, 1)).isEqualTo(5); assertThat(pArray.get(2, 0, 1)).isEqualTo(6); try { permute = new int[] {0, 2, 3}; array = Arrays.permute(array, permute); fail(); } catch (Exception e) { assertThat(e).isInstanceOf(IllegalArgumentException.class); } try { permute = new int[] {0, 2, 2}; array = Arrays.permute(array, permute); fail(); } catch (Exception e) { assertThat(e).isInstanceOf(IllegalArgumentException.class); } }