From b74734fbc1af42df7f0f28f59876c6ebfdc54110 Mon Sep 17 00:00:00 2001 From: Kiana Sheibani Date: Thu, 1 Sep 2022 18:25:07 -0400 Subject: [PATCH] Define functions for permuting arrays --- src/Data/NumIdr/Array/Array.idr | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/Data/NumIdr/Array/Array.idr b/src/Data/NumIdr/Array/Array.idr index 4510476..696ad3c 100644 --- a/src/Data/NumIdr/Array/Array.idr +++ b/src/Data/NumIdr/Array/Array.idr @@ -5,6 +5,7 @@ import Data.List1 import Data.Vect import Data.Zippable import Data.NP +import Data.Permutation import Data.NumIdr.Multiply import Data.NumIdr.PrimArray import Data.NumIdr.Array.Order @@ -494,6 +495,27 @@ export (.T) = transpose +export +swapAxes : (i,j : Fin rk) -> Array s a -> Array (swapElems i j s) a +swapAxes i j arr with (viewShape arr) + _ | Shape s = fromFunctionNB _ (\is => arr !# swapElems i j is) + +export +permuteAxes : (p : Permutation rk) -> Array s a -> Array (permuteVect p s) a +permuteAxes p arr with (viewShape arr) + _ | Shape s = fromFunctionNB _ (\is => arr !# permuteVect p s) + +export +swapInAxis : (ax : Fin rk) -> (i,j : Fin (index ax s)) -> Array s a -> Array s a +swapInAxis ax i j arr with (viewShape arr) + _ | Shape s = fromFunctionNB _ (\is => arr !# updateAt ax (swapValues i j) is) + +export +permuteInAxis : (ax : Fin rk) -> Permutation (index ax s) -> Array s a -> Array s a +permuteInAxis ax p arr with (viewShape arr) + _ | Shape s = fromFunctionNB _ (\is => arr !# updateAt ax (permuteValues p) is) + + -------------------------------------------------------------------------------- -- Implementations --------------------------------------------------------------------------------