SassyMatrix 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CHANGELOG.md +16 -16
- data/README.md +61 -61
- data/lib/SassyMatrix.rb +14 -14
- data/stylesheets/functions/checkers/_is-diagonal.scss +22 -22
- data/stylesheets/functions/checkers/_is-lower-triangular.scss +12 -12
- data/stylesheets/functions/checkers/_is-numeric.scss +18 -18
- data/stylesheets/functions/checkers/_is-square.scss +11 -11
- data/stylesheets/functions/checkers/_is-symmetric.scss +14 -14
- data/stylesheets/functions/checkers/_is-upper-triangular.scss +12 -12
- data/stylesheets/functions/getters/_get-column.scss +29 -29
- data/stylesheets/functions/getters/_get-entry.scss +20 -20
- data/stylesheets/functions/getters/_get-row.scss +21 -21
- data/stylesheets/functions/helpers/_is-triangular.scss +30 -30
- data/stylesheets/functions/helpers/_valid-coords.scss +37 -37
- data/stylesheets/functions/init/_matrix.scss +23 -23
- data/stylesheets/functions/init/_unit-matrix.scss +25 -25
- data/stylesheets/functions/misc/_add-matrices.scss +33 -33
- data/stylesheets/functions/misc/_columns.scss +9 -9
- data/stylesheets/functions/misc/_display.scss +42 -42
- data/stylesheets/functions/misc/_rows.scss +8 -8
- data/stylesheets/functions/misc/_transpose.scss +22 -22
- data/stylesheets/functions/setters/_add-column.scss +34 -34
- data/stylesheets/functions/setters/_add-row.scss +32 -32
- data/stylesheets/functions/setters/_set-column.scss +42 -42
- data/stylesheets/functions/setters/_set-entry.scss +19 -19
- data/stylesheets/functions/setters/_set-row.scss +36 -36
- data/stylesheets/functions/swap/_swap-columns.scss +32 -32
- data/stylesheets/functions/swap/_swap-entries.scss +20 -20
- data/stylesheets/functions/swap/_swap-rows.scss +24 -24
- data/stylesheets/matrix.scss +102 -102
- metadata +7 -9
@@ -1,9 +1,9 @@
|
|
1
|
-
// Returns number of rows in `$matrix`
|
2
|
-
// --------------------------------------------------------------------------------
|
3
|
-
// @param $matrix: matrix
|
4
|
-
// --------------------------------------------------------------------------------
|
5
|
-
// @return number
|
6
|
-
|
7
|
-
@function rows($matrix) {
|
8
|
-
@return length($matrix);
|
1
|
+
// Returns number of rows in `$matrix`
|
2
|
+
// --------------------------------------------------------------------------------
|
3
|
+
// @param $matrix: matrix
|
4
|
+
// --------------------------------------------------------------------------------
|
5
|
+
// @return number
|
6
|
+
|
7
|
+
@function rows($matrix) {
|
8
|
+
@return length($matrix);
|
9
9
|
}
|
@@ -1,22 +1,22 @@
|
|
1
|
-
// Translate `$matrix` on its diagonal axe
|
2
|
-
// --------------------------------------------------------------------------------
|
3
|
-
// @require `matrix`
|
4
|
-
// @require `columns`
|
5
|
-
// @require `rows`
|
6
|
-
// @require `get-entry`
|
7
|
-
// @require `set-entry`
|
8
|
-
// --------------------------------------------------------------------------------
|
9
|
-
// @param $matrix: matrix
|
10
|
-
// --------------------------------------------------------------------------------
|
11
|
-
// @return matrix
|
12
|
-
|
13
|
-
@function transpose($matrix) {
|
14
|
-
$new-matrix: matrix(columns($matrix), rows($matrix));
|
15
|
-
@for $i from 1 through rows($matrix) {
|
16
|
-
@for $j from 1 through columns($matrix) {
|
17
|
-
$entry: get-entry($matrix, ($i $j));
|
18
|
-
$new-matrix: set-entry($new-matrix, ($j $i), $entry);
|
19
|
-
}
|
20
|
-
}
|
21
|
-
@return $new-matrix;
|
22
|
-
}
|
1
|
+
// Translate `$matrix` on its diagonal axe
|
2
|
+
// --------------------------------------------------------------------------------
|
3
|
+
// @require `matrix`
|
4
|
+
// @require `columns`
|
5
|
+
// @require `rows`
|
6
|
+
// @require `get-entry`
|
7
|
+
// @require `set-entry`
|
8
|
+
// --------------------------------------------------------------------------------
|
9
|
+
// @param $matrix: matrix
|
10
|
+
// --------------------------------------------------------------------------------
|
11
|
+
// @return matrix
|
12
|
+
|
13
|
+
@function transpose($matrix) {
|
14
|
+
$new-matrix: matrix(columns($matrix), rows($matrix));
|
15
|
+
@for $i from 1 through rows($matrix) {
|
16
|
+
@for $j from 1 through columns($matrix) {
|
17
|
+
$entry: get-entry($matrix, ($i $j));
|
18
|
+
$new-matrix: set-entry($new-matrix, ($j $i), $entry);
|
19
|
+
}
|
20
|
+
}
|
21
|
+
@return $new-matrix;
|
22
|
+
}
|
@@ -1,35 +1,35 @@
|
|
1
|
-
// Add a new `$column` to `$matrix` at `$index`
|
2
|
-
// --------------------------------------------------------------------------------
|
3
|
-
// @require `rows`
|
4
|
-
// @require `swap-columns`
|
5
|
-
// --------------------------------------------------------------------------------
|
6
|
-
// @param $matrix: matrix
|
7
|
-
// @param $column: column to add
|
8
|
-
// @param $index: index to add column at
|
9
|
-
// --------------------------------------------------------------------------------
|
10
|
-
// @return matrix
|
11
|
-
|
12
|
-
@function add-column($matrix, $column: (), $index: null) {
|
13
|
-
$desired-length: rows($matrix);
|
14
|
-
|
15
|
-
@if $column == () {
|
16
|
-
@for $i from 1 through $desired-length {
|
17
|
-
$column: append($column, 0);
|
18
|
-
}
|
19
|
-
}
|
20
|
-
|
21
|
-
@if length($column) != $desired-length {
|
22
|
-
@warn "Wrong length for new column; should be #{$desired-length}.";
|
23
|
-
@return false;
|
24
|
-
}
|
25
|
-
|
26
|
-
@for $i from 1 through $desired-length {
|
27
|
-
$matrix: set-nth($matrix, $i, append(nth($matrix, $i), nth($column, $i)));
|
28
|
-
}
|
29
|
-
|
30
|
-
@if $index != null {
|
31
|
-
$matrix: swap-columns($matrix, -1, $index);
|
32
|
-
}
|
33
|
-
|
34
|
-
@return $matrix;
|
1
|
+
// Add a new `$column` to `$matrix` at `$index`
|
2
|
+
// --------------------------------------------------------------------------------
|
3
|
+
// @require `rows`
|
4
|
+
// @require `swap-columns`
|
5
|
+
// --------------------------------------------------------------------------------
|
6
|
+
// @param $matrix: matrix
|
7
|
+
// @param $column: column to add
|
8
|
+
// @param $index: index to add column at
|
9
|
+
// --------------------------------------------------------------------------------
|
10
|
+
// @return matrix
|
11
|
+
|
12
|
+
@function add-column($matrix, $column: (), $index: null) {
|
13
|
+
$desired-length: rows($matrix);
|
14
|
+
|
15
|
+
@if $column == () {
|
16
|
+
@for $i from 1 through $desired-length {
|
17
|
+
$column: append($column, 0);
|
18
|
+
}
|
19
|
+
}
|
20
|
+
|
21
|
+
@if length($column) != $desired-length {
|
22
|
+
@warn "Wrong length for new column; should be #{$desired-length}.";
|
23
|
+
@return false;
|
24
|
+
}
|
25
|
+
|
26
|
+
@for $i from 1 through $desired-length {
|
27
|
+
$matrix: set-nth($matrix, $i, append(nth($matrix, $i), nth($column, $i)));
|
28
|
+
}
|
29
|
+
|
30
|
+
@if $index != null {
|
31
|
+
$matrix: swap-columns($matrix, -1, $index);
|
32
|
+
}
|
33
|
+
|
34
|
+
@return $matrix;
|
35
35
|
}
|
@@ -1,33 +1,33 @@
|
|
1
|
-
// Add a new `$row` to `$matrix`
|
2
|
-
// --------------------------------------------------------------------------------
|
3
|
-
// @require `swap-rows`
|
4
|
-
// @require `columns`
|
5
|
-
// --------------------------------------------------------------------------------
|
6
|
-
// @param $matrix: matrix
|
7
|
-
// @param $row: row to add
|
8
|
-
// @param $index: index to add row at
|
9
|
-
// --------------------------------------------------------------------------------
|
10
|
-
// @return matrix
|
11
|
-
|
12
|
-
@function add-row($matrix, $row: (), $index: null) {
|
13
|
-
$desired-length: columns($matrix);
|
14
|
-
|
15
|
-
@if $row == () {
|
16
|
-
@for $i from 1 through $desired-length {
|
17
|
-
$row: append($row, 0);
|
18
|
-
}
|
19
|
-
}
|
20
|
-
|
21
|
-
@if length($row) != $desired-length {
|
22
|
-
@warn "Wrong length for new row; should be #{$desired-length}.";
|
23
|
-
@return false;
|
24
|
-
}
|
25
|
-
|
26
|
-
$matrix: append($matrix, $row);
|
27
|
-
|
28
|
-
@if $index != null {
|
29
|
-
$matrix: swap-rows($matrix, -1, $index);
|
30
|
-
}
|
31
|
-
|
32
|
-
@return $matrix;
|
1
|
+
// Add a new `$row` to `$matrix`
|
2
|
+
// --------------------------------------------------------------------------------
|
3
|
+
// @require `swap-rows`
|
4
|
+
// @require `columns`
|
5
|
+
// --------------------------------------------------------------------------------
|
6
|
+
// @param $matrix: matrix
|
7
|
+
// @param $row: row to add
|
8
|
+
// @param $index: index to add row at
|
9
|
+
// --------------------------------------------------------------------------------
|
10
|
+
// @return matrix
|
11
|
+
|
12
|
+
@function add-row($matrix, $row: (), $index: null) {
|
13
|
+
$desired-length: columns($matrix);
|
14
|
+
|
15
|
+
@if $row == () {
|
16
|
+
@for $i from 1 through $desired-length {
|
17
|
+
$row: append($row, 0);
|
18
|
+
}
|
19
|
+
}
|
20
|
+
|
21
|
+
@if length($row) != $desired-length {
|
22
|
+
@warn "Wrong length for new row; should be #{$desired-length}.";
|
23
|
+
@return false;
|
24
|
+
}
|
25
|
+
|
26
|
+
$matrix: append($matrix, $row);
|
27
|
+
|
28
|
+
@if $index != null {
|
29
|
+
$matrix: swap-rows($matrix, -1, $index);
|
30
|
+
}
|
31
|
+
|
32
|
+
@return $matrix;
|
33
33
|
}
|
@@ -1,42 +1,42 @@
|
|
1
|
-
// Set `$column` at `$index` in `$matrix`
|
2
|
-
// --------------------------------------------------------------------------------
|
3
|
-
// @require `set-entry`
|
4
|
-
// @require `rows`
|
5
|
-
// @require `columns`
|
6
|
-
// --------------------------------------------------------------------------------
|
7
|
-
// @param $matrix: matrix
|
8
|
-
// @param $column: column
|
9
|
-
// @param $index: index
|
10
|
-
// --------------------------------------------------------------------------------
|
11
|
-
// @return matrix
|
12
|
-
|
13
|
-
@function set-column($matrix, $index, $column: ()) {
|
14
|
-
$desired-length: rows($matrix);
|
15
|
-
|
16
|
-
@if type-of($index) != number {
|
17
|
-
@warn "Invalid column index.";
|
18
|
-
@return false;
|
19
|
-
}
|
20
|
-
|
21
|
-
@if abs($index) > columns($matrix) {
|
22
|
-
@warn "Out of bound column index.";
|
23
|
-
@return false;
|
24
|
-
}
|
25
|
-
|
26
|
-
@if $column == () {
|
27
|
-
@for $i from 1 through $desired-length {
|
28
|
-
$column: append($column, 0);
|
29
|
-
}
|
30
|
-
}
|
31
|
-
|
32
|
-
@if length($column) != $desired-length {
|
33
|
-
@warn "Wrong length for new column; should be #{$desired-length}.";
|
34
|
-
@return false;
|
35
|
-
}
|
36
|
-
|
37
|
-
@for $i from 1 through $desired-length {
|
38
|
-
$matrix: set-entry($matrix, $i $index, nth($column, $i));
|
39
|
-
}
|
40
|
-
|
41
|
-
@return $matrix;
|
42
|
-
}
|
1
|
+
// Set `$column` at `$index` in `$matrix`
|
2
|
+
// --------------------------------------------------------------------------------
|
3
|
+
// @require `set-entry`
|
4
|
+
// @require `rows`
|
5
|
+
// @require `columns`
|
6
|
+
// --------------------------------------------------------------------------------
|
7
|
+
// @param $matrix: matrix
|
8
|
+
// @param $column: column
|
9
|
+
// @param $index: index
|
10
|
+
// --------------------------------------------------------------------------------
|
11
|
+
// @return matrix
|
12
|
+
|
13
|
+
@function set-column($matrix, $index, $column: ()) {
|
14
|
+
$desired-length: rows($matrix);
|
15
|
+
|
16
|
+
@if type-of($index) != number {
|
17
|
+
@warn "Invalid column index.";
|
18
|
+
@return false;
|
19
|
+
}
|
20
|
+
|
21
|
+
@if abs($index) > columns($matrix) {
|
22
|
+
@warn "Out of bound column index.";
|
23
|
+
@return false;
|
24
|
+
}
|
25
|
+
|
26
|
+
@if $column == () {
|
27
|
+
@for $i from 1 through $desired-length {
|
28
|
+
$column: append($column, 0);
|
29
|
+
}
|
30
|
+
}
|
31
|
+
|
32
|
+
@if length($column) != $desired-length {
|
33
|
+
@warn "Wrong length for new column; should be #{$desired-length}.";
|
34
|
+
@return false;
|
35
|
+
}
|
36
|
+
|
37
|
+
@for $i from 1 through $desired-length {
|
38
|
+
$matrix: set-entry($matrix, $i $index, nth($column, $i));
|
39
|
+
}
|
40
|
+
|
41
|
+
@return $matrix;
|
42
|
+
}
|
@@ -1,19 +1,19 @@
|
|
1
|
-
// Assign `$value` at `$matrix[$coords[1], $coords[2]]`
|
2
|
-
// --------------------------------------------------------------------------------
|
3
|
-
// @require `_valid-coords`
|
4
|
-
// --------------------------------------------------------------------------------
|
5
|
-
// @param $matrix: matrix to update
|
6
|
-
// @param $coords: (x y) coordinates
|
7
|
-
// @param $value: value to assign at $matrix[$x, $y]
|
8
|
-
// --------------------------------------------------------------------------------
|
9
|
-
// @return matrix
|
10
|
-
|
11
|
-
@function set-entry($matrix, $coords, $value) {
|
12
|
-
@if length($coords) == 1 {
|
13
|
-
$coords: ($coords $coords);
|
14
|
-
}
|
15
|
-
@if _valid-coords($coords, $matrix) {
|
16
|
-
@return set-nth($matrix, nth($coords, 1), set-nth(nth($matrix, nth($coords, 1)), nth($coords, 2), $value));
|
17
|
-
}
|
18
|
-
@return false;
|
19
|
-
}
|
1
|
+
// Assign `$value` at `$matrix[$coords[1], $coords[2]]`
|
2
|
+
// --------------------------------------------------------------------------------
|
3
|
+
// @require `_valid-coords`
|
4
|
+
// --------------------------------------------------------------------------------
|
5
|
+
// @param $matrix: matrix to update
|
6
|
+
// @param $coords: (x y) coordinates
|
7
|
+
// @param $value: value to assign at $matrix[$x, $y]
|
8
|
+
// --------------------------------------------------------------------------------
|
9
|
+
// @return matrix
|
10
|
+
|
11
|
+
@function set-entry($matrix, $coords, $value) {
|
12
|
+
@if length($coords) == 1 {
|
13
|
+
$coords: ($coords $coords);
|
14
|
+
}
|
15
|
+
@if _valid-coords($coords, $matrix) {
|
16
|
+
@return set-nth($matrix, nth($coords, 1), set-nth(nth($matrix, nth($coords, 1)), nth($coords, 2), $value));
|
17
|
+
}
|
18
|
+
@return false;
|
19
|
+
}
|
@@ -1,37 +1,37 @@
|
|
1
|
-
// Set `$row` at `$index` in `$matrix`
|
2
|
-
// --------------------------------------------------------------------------------
|
3
|
-
// @require `columns`
|
4
|
-
// @require `rows`
|
5
|
-
// --------------------------------------------------------------------------------
|
6
|
-
// @param $matrix: matrix
|
7
|
-
// @param $row: row
|
8
|
-
// @param $index: index
|
9
|
-
// --------------------------------------------------------------------------------
|
10
|
-
// @return matrix
|
11
|
-
|
12
|
-
@function set-row($matrix, $index, $row: ()) {
|
13
|
-
$desired-length: columns($matrix);
|
14
|
-
|
15
|
-
@if type-of($index) != number {
|
16
|
-
@warn "Invalid row index.";
|
17
|
-
@return false;
|
18
|
-
}
|
19
|
-
|
20
|
-
@if abs($index) > rows($matrix) {
|
21
|
-
@warn "Out of bound row index.";
|
22
|
-
@return false;
|
23
|
-
}
|
24
|
-
|
25
|
-
@if $row == () {
|
26
|
-
@for $i from 1 through $desired-length {
|
27
|
-
$row: append($row, 0);
|
28
|
-
}
|
29
|
-
}
|
30
|
-
|
31
|
-
@if length($row) != $desired-length {
|
32
|
-
@warn "Wrong length for new row; should be #{$desired-length}.";
|
33
|
-
@return false;
|
34
|
-
}
|
35
|
-
|
36
|
-
@return set-nth($matrix, $index, $row);
|
1
|
+
// Set `$row` at `$index` in `$matrix`
|
2
|
+
// --------------------------------------------------------------------------------
|
3
|
+
// @require `columns`
|
4
|
+
// @require `rows`
|
5
|
+
// --------------------------------------------------------------------------------
|
6
|
+
// @param $matrix: matrix
|
7
|
+
// @param $row: row
|
8
|
+
// @param $index: index
|
9
|
+
// --------------------------------------------------------------------------------
|
10
|
+
// @return matrix
|
11
|
+
|
12
|
+
@function set-row($matrix, $index, $row: ()) {
|
13
|
+
$desired-length: columns($matrix);
|
14
|
+
|
15
|
+
@if type-of($index) != number {
|
16
|
+
@warn "Invalid row index.";
|
17
|
+
@return false;
|
18
|
+
}
|
19
|
+
|
20
|
+
@if abs($index) > rows($matrix) {
|
21
|
+
@warn "Out of bound row index.";
|
22
|
+
@return false;
|
23
|
+
}
|
24
|
+
|
25
|
+
@if $row == () {
|
26
|
+
@for $i from 1 through $desired-length {
|
27
|
+
$row: append($row, 0);
|
28
|
+
}
|
29
|
+
}
|
30
|
+
|
31
|
+
@if length($row) != $desired-length {
|
32
|
+
@warn "Wrong length for new row; should be #{$desired-length}.";
|
33
|
+
@return false;
|
34
|
+
}
|
35
|
+
|
36
|
+
@return set-nth($matrix, $index, $row);
|
37
37
|
}
|
@@ -1,32 +1,32 @@
|
|
1
|
-
// Swaps columns `$c1` and `$c2` from `$matrix`
|
2
|
-
// --------------------------------------------------------------------------------
|
3
|
-
// @require `rows`
|
4
|
-
// @require `columns`
|
5
|
-
// @require `get-entry`
|
6
|
-
// @require `set-entry`
|
7
|
-
// --------------------------------------------------------------------------------
|
8
|
-
// @param $matrix: matrix
|
9
|
-
// @param $c1: index of column 1
|
10
|
-
// @param $c2: index of column 2
|
11
|
-
// --------------------------------------------------------------------------------
|
12
|
-
// @return $matrix
|
13
|
-
|
14
|
-
@function swap-columns($matrix, $c1, $c2) {
|
15
|
-
@if type-of($c1) != number or type-of($c2) != number {
|
16
|
-
@warn "Invalid column index.";
|
17
|
-
@return false;
|
18
|
-
}
|
19
|
-
|
20
|
-
@if abs($c1) > columns($matrix) or abs($c2) > columns($matrix) {
|
21
|
-
@warn "Out of bounds column index.";
|
22
|
-
@return false;
|
23
|
-
}
|
24
|
-
|
25
|
-
@for $i from 1 through rows($matrix) {
|
26
|
-
$tmp: get-entry($matrix, ($i $c1));
|
27
|
-
$matrix: set-entry($matrix, ($i $c1), get-entry($matrix, ($i $c2)));
|
28
|
-
$matrix: set-entry($matrix, ($i $c2), $tmp);
|
29
|
-
}
|
30
|
-
|
31
|
-
@return $matrix;
|
32
|
-
}
|
1
|
+
// Swaps columns `$c1` and `$c2` from `$matrix`
|
2
|
+
// --------------------------------------------------------------------------------
|
3
|
+
// @require `rows`
|
4
|
+
// @require `columns`
|
5
|
+
// @require `get-entry`
|
6
|
+
// @require `set-entry`
|
7
|
+
// --------------------------------------------------------------------------------
|
8
|
+
// @param $matrix: matrix
|
9
|
+
// @param $c1: index of column 1
|
10
|
+
// @param $c2: index of column 2
|
11
|
+
// --------------------------------------------------------------------------------
|
12
|
+
// @return $matrix
|
13
|
+
|
14
|
+
@function swap-columns($matrix, $c1, $c2) {
|
15
|
+
@if type-of($c1) != number or type-of($c2) != number {
|
16
|
+
@warn "Invalid column index.";
|
17
|
+
@return false;
|
18
|
+
}
|
19
|
+
|
20
|
+
@if abs($c1) > columns($matrix) or abs($c2) > columns($matrix) {
|
21
|
+
@warn "Out of bounds column index.";
|
22
|
+
@return false;
|
23
|
+
}
|
24
|
+
|
25
|
+
@for $i from 1 through rows($matrix) {
|
26
|
+
$tmp: get-entry($matrix, ($i $c1));
|
27
|
+
$matrix: set-entry($matrix, ($i $c1), get-entry($matrix, ($i $c2)));
|
28
|
+
$matrix: set-entry($matrix, ($i $c2), $tmp);
|
29
|
+
}
|
30
|
+
|
31
|
+
@return $matrix;
|
32
|
+
}
|