11namespace GraphBLAS.FSharp
22
33[<AbstractClass>]
4- type Matrix < 'a when 'a : struct >() =
4+ type Matrix < 'a when 'a : struct and 'a : equality >() =
55 abstract RowCount: int
66 abstract ColumnCount: int
7- abstract Mask: Mask2D
87
9- abstract Item: Mask2D option -> Matrix < 'a > with get, set
10- abstract Item: Mask1D option * int -> Vector < 'a > with get, set
11- abstract Item: int * Mask1D option -> Vector < 'a > with get, set
8+ abstract Item: Mask2D < 'a > -> Matrix < 'a > with get, set
9+ abstract Item: Mask1D < 'a > * int -> Vector < 'a > with get, set
10+ abstract Item: int * Mask1D < 'a > -> Vector < 'a > with get, set
1211 abstract Item: int * int -> Scalar < 'a > with get, set
13- abstract Item: Mask2D option -> Scalar < 'a > with set
14- abstract Item: Mask1D option * int -> Scalar < 'a > with set
15- abstract Item: int * Mask1D option -> Scalar < 'a > with set
16-
17- abstract Mxm: Matrix < 'a > -> Mask2D option -> Semiring < 'a > -> Matrix < 'a >
18- abstract Mxv: Vector < 'a > -> Mask1D option -> Semiring < 'a > -> Vector < 'a >
19- abstract EWiseAdd: Matrix < 'a > -> Mask2D option -> Semiring < 'a > -> Matrix < 'a >
20- abstract EWiseMult: Matrix < 'a > -> Mask2D option -> Semiring < 'a > -> Matrix < 'a >
21- abstract Apply: Mask1D option -> UnaryOp < 'a , 'b > -> Matrix < 'b >
22- abstract ReduceIn: Mask1D option -> Monoid < 'a > -> Vector < 'a >
23- abstract ReduceOut: Mask1D option -> Monoid < 'a > -> Vector < 'a >
12+ abstract Item: Mask2D < 'a > -> Scalar < 'a > with set
13+ abstract Item: Mask1D < 'a > * int -> Scalar < 'a > with set
14+ abstract Item: int * Mask1D < 'a > -> Scalar < 'a > with set
15+
16+ abstract Mxm: Matrix < 'a > -> Mask2D < 'a > -> Semiring < 'a > -> Matrix < 'a >
17+ abstract Mxv: Vector < 'a > -> Mask1D < 'a > -> Semiring < 'a > -> Vector < 'a >
18+ abstract EWiseAdd: Matrix < 'a > -> Mask2D < 'a > -> Semiring < 'a > -> Matrix < 'a >
19+ abstract EWiseMult: Matrix < 'a > -> Mask2D < 'a > -> Semiring < 'a > -> Matrix < 'a >
20+ abstract Apply: Mask1D < 'a > -> UnaryOp < 'a , 'b > -> Matrix < 'b >
21+ abstract ReduceIn: Mask1D < 'a > -> Monoid < 'a > -> Vector < 'a >
22+ abstract ReduceOut: Mask1D < 'a > -> Monoid < 'a > -> Vector < 'a >
2423 abstract T: Matrix < 'a >
2524
26- abstract EWiseAddInplace: Matrix < 'a > -> Mask2D option -> Semiring < 'a > -> unit
27- abstract EWiseMultInplace: Matrix < 'a > -> Mask2D option -> Semiring < 'a > -> unit
28- abstract ApplyInplace: Mask2D option -> UnaryOp < 'a , 'b > -> unit
25+ abstract EWiseAddInplace: Matrix < 'a > -> Mask2D < 'a > -> Semiring < 'a > -> unit
26+ abstract EWiseMultInplace: Matrix < 'a > -> Mask2D < 'a > -> Semiring < 'a > -> unit
27+ abstract ApplyInplace: Mask2D < 'a > -> UnaryOp < 'a , 'b > -> unit
2928
3029 static member inline (+) ( x : Matrix < 'a >, y : Matrix < 'a >) = x.EWiseAdd y
3130 static member inline (*) ( x : Matrix < 'a >, y : Matrix < 'a >) = x.EWiseMult y
@@ -34,58 +33,36 @@ type Matrix<'a when 'a : struct>() =
3433 static member inline (.+) ( x : Matrix < 'a >, y : Matrix < 'a >) = x.EWiseAddInplace y
3534 static member inline (. *) ( x : Matrix < 'a >, y : Matrix < 'a >) = x.EWiseMultInplace y
3635
37- and [<AbstractClass>] Vector < 'a when 'a : struct >() =
36+ and [<AbstractClass>] Vector < 'a when 'a : struct and 'a : equality >() =
3837 abstract Length: int
39- abstract Mask: Mask1D
4038 abstract AsArray: 'a []
4139
42- abstract Item: Mask1D option -> Vector < 'a > with get, set
40+ abstract Item: Mask1D < 'a > -> Vector < 'a > with get, set
4341 abstract Item: int * int -> Scalar < 'a > with get, set
44- abstract Item: Mask1D option -> Scalar < 'a > with set
42+ abstract Item: Mask1D < 'a > -> Scalar < 'a > with set
4543
46- abstract Vxm: Matrix < 'a > -> Mask1D option -> Semiring < 'a > -> Vector < 'a >
47- abstract EWiseAdd: Vector < 'a > -> Mask1D option -> Semiring < 'a > -> Vector < 'a >
48- abstract EWiseMult: Vector < 'a > -> Mask1D option -> Semiring < 'a > -> Vector < 'a >
49- abstract Apply: Mask1D option -> UnaryOp < 'a , 'b > -> Vector < 'b >
44+ abstract Vxm: Matrix < 'a > -> Mask1D < 'a > -> Semiring < 'a > -> Vector < 'a >
45+ abstract EWiseAdd: Vector < 'a > -> Mask1D < 'a > -> Semiring < 'a > -> Vector < 'a >
46+ abstract EWiseMult: Vector < 'a > -> Mask1D < 'a > -> Semiring < 'a > -> Vector < 'a >
47+ abstract Apply: Mask1D < 'a > -> UnaryOp < 'a , 'b > -> Vector < 'b >
5048 abstract Reduce: Monoid < 'a > -> Scalar < 'a >
5149
52- abstract EWiseAddInplace: Vector < 'a > -> Mask1D option -> Semiring < 'a > -> unit
53- abstract EWiseMultInplace: Vector < 'a > -> Mask1D option -> Semiring < 'a > -> unit
54- abstract ApplyInplace: Mask1D option -> UnaryOp < 'a , 'b > -> unit
50+ abstract EWiseAddInplace: Vector < 'a > -> Mask1D < 'a > -> Semiring < 'a > -> unit
51+ abstract EWiseMultInplace: Vector < 'a > -> Mask1D < 'a > -> Semiring < 'a > -> unit
52+ abstract ApplyInplace: Mask1D < 'a > -> UnaryOp < 'a , 'b > -> unit
5553
5654 static member inline (+) ( x : Vector < 'a >, y : Vector < 'a >) = x.EWiseAdd y
5755 static member inline (*) ( x : Vector < 'a >, y : Vector < 'a >) = x.EWiseMult y
5856 static member inline (+. *) ( x : Vector < 'a >, y : Matrix < 'a >) = x.Vxm y
5957 static member inline (.+) ( x : Vector < 'a >, y : Vector < 'a >) = x.EWiseAddInplace y
6058 static member inline (. *) ( x : Vector < 'a >, y : Vector < 'a >) = x.EWiseMultInplace y
6159
62- and Mask1D ( size : int , indexList : int list ) =
63-
64- member this.Item
65- with get ( idx : int ) = indexList.[ idx]
66-
67- member this.GetComplement () =
68- let indices = Set.ofList indexList
69- let allIndices = List.init size id |> Set.ofList
70- let complementIndices = Set.difference allIndices indices |> Set.toList
71- Mask1D( size, complementIndices)
72-
73- member this.GetEnumerator () = ( indexList |> List.toSeq) .GetEnumerator()
74-
75- static member ( ~~) ( mask : Mask1D ) = mask.GetComplement()
76-
77- and Mask2D ( size : int , indexList : ( int * int ) list ) =
78-
79- member this.Item
80- with get ( idx : int ) = indexList.[ idx]
81-
82- member this.GetComplement () =
83- let indices = Set.ofList indexList
84- let allIndices = List.init size ( fun i -> ( i, i)) |> Set.ofList
85- let complementIndices = Set.difference allIndices indices |> Set.toList
86- Mask2D( size, complementIndices)
87-
88- member this.GetEnumerator () = ( indexList |> List.toSeq) .GetEnumerator()
89-
90- static member ( ~~) ( mask : Mask2D ) = mask.GetComplement()
60+ and Mask1D < 'a when 'a : struct and 'a : equality > =
61+ | Mask1D of Vector < 'a >
62+ | Complemented1D of Vector < 'a >
63+ | None
9164
65+ and Mask2D < 'a when 'a : struct and 'a : equality > =
66+ | Mask2D of Matrix < 'a >
67+ | Complemented2D of Matrix < 'a >
68+ | None
0 commit comments