Skip to content

Commit 517399b

Browse files
committed
feat: add map and toArray
1 parent bf6f528 commit 517399b

File tree

1 file changed

+18
-0
lines changed

1 file changed

+18
-0
lines changed

Batteries/Data/DArray/Basic.lean

+18
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,14 @@ private unsafe def popImpl (a : DArray (n+1) α) : DArray n fun i => α i.castSu
7878
private unsafe def copyImpl (a : DArray n α) : DArray n α :=
7979
unsafeCast <| a.data.extract 0 n
8080

81+
private unsafe def toArrayImpl (a : DArray n fun _ => α) : Array α :=
82+
unsafeCast a
83+
84+
@[specialize]
85+
private unsafe def mapImpl (f : {i : Fin n} → α i → β i) (a : DArray n α) : DArray n β :=
86+
let f := fun i x => (unsafeCast (f (i:=i.cast lcProof) (unsafeCast x)) : NonScalar)
87+
unsafeCast <| a.data.mapIdx f
88+
8189
private unsafe def foldlMImpl [Monad m] (a : DArray n α) (f : β → {i : Fin n} → α i → m β)
8290
(init : β) : m β :=
8391
if n < USize.size then
@@ -185,6 +193,16 @@ protected def push (a : DArray n α) (v : β) :
185193
protected def pop (a : DArray (n+1) α) : DArray n fun i => α i.castSucc :=
186194
mk fun i => a.get i.castSucc
187195

196+
/-- Cast a dependent array with constant types to an array. `O(1)` if exclusive else `O(n)`. -/
197+
@[implemented_by toArrayImpl]
198+
protected def toArray (a : DArray n fun _ => α) : Array α :=
199+
.ofFn fun i => a.get i
200+
201+
/-- Applies `f` to each element of a dependent array, returns the array of results. -/
202+
@[implemented_by mapImpl]
203+
protected def map (f : {i : Fin n} → α i → β i) (a : DArray n α) : DArray n β :=
204+
mk fun i => f (a.get i)
205+
188206
/--
189207
Folds a monadic function over a `DArray` from left to right:
190208
```

0 commit comments

Comments
 (0)