SassyMatrix 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (32) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +16 -16
  3. data/README.md +61 -61
  4. data/lib/SassyMatrix.rb +14 -14
  5. data/stylesheets/functions/checkers/_is-diagonal.scss +22 -22
  6. data/stylesheets/functions/checkers/_is-lower-triangular.scss +12 -12
  7. data/stylesheets/functions/checkers/_is-numeric.scss +18 -18
  8. data/stylesheets/functions/checkers/_is-square.scss +11 -11
  9. data/stylesheets/functions/checkers/_is-symmetric.scss +14 -14
  10. data/stylesheets/functions/checkers/_is-upper-triangular.scss +12 -12
  11. data/stylesheets/functions/getters/_get-column.scss +29 -29
  12. data/stylesheets/functions/getters/_get-entry.scss +20 -20
  13. data/stylesheets/functions/getters/_get-row.scss +21 -21
  14. data/stylesheets/functions/helpers/_is-triangular.scss +30 -30
  15. data/stylesheets/functions/helpers/_valid-coords.scss +37 -37
  16. data/stylesheets/functions/init/_matrix.scss +23 -23
  17. data/stylesheets/functions/init/_unit-matrix.scss +25 -25
  18. data/stylesheets/functions/misc/_add-matrices.scss +33 -33
  19. data/stylesheets/functions/misc/_columns.scss +9 -9
  20. data/stylesheets/functions/misc/_display.scss +42 -42
  21. data/stylesheets/functions/misc/_rows.scss +8 -8
  22. data/stylesheets/functions/misc/_transpose.scss +22 -22
  23. data/stylesheets/functions/setters/_add-column.scss +34 -34
  24. data/stylesheets/functions/setters/_add-row.scss +32 -32
  25. data/stylesheets/functions/setters/_set-column.scss +42 -42
  26. data/stylesheets/functions/setters/_set-entry.scss +19 -19
  27. data/stylesheets/functions/setters/_set-row.scss +36 -36
  28. data/stylesheets/functions/swap/_swap-columns.scss +32 -32
  29. data/stylesheets/functions/swap/_swap-entries.scss +20 -20
  30. data/stylesheets/functions/swap/_swap-rows.scss +24 -24
  31. data/stylesheets/matrix.scss +102 -102
  32. metadata +7 -9
@@ -1,22 +1,22 @@
1
- // Return row at `$index` from `$matrix`
2
- // --------------------------------------------------------------------------------
3
- // @require `rows`
4
- // --------------------------------------------------------------------------------
5
- // @param $matrix: matrix
6
- // @param $index: index
7
- // --------------------------------------------------------------------------------
8
- // @return list
9
-
10
- @function get-row($matrix, $index) {
11
- @if type-of($index) != number {
12
- @warn "Invalid row index.";
13
- @return false;
14
- }
15
-
16
- @if abs($index) > rows($matrix) {
17
- @warn "Out of bound row index.";
18
- @return false;
19
- }
20
-
21
- @return nth($matrix, $index);
1
+ // Return row at `$index` from `$matrix`
2
+ // --------------------------------------------------------------------------------
3
+ // @require `rows`
4
+ // --------------------------------------------------------------------------------
5
+ // @param $matrix: matrix
6
+ // @param $index: index
7
+ // --------------------------------------------------------------------------------
8
+ // @return list
9
+
10
+ @function get-row($matrix, $index) {
11
+ @if type-of($index) != number {
12
+ @warn "Invalid row index.";
13
+ @return false;
14
+ }
15
+
16
+ @if abs($index) > rows($matrix) {
17
+ @warn "Out of bound row index.";
18
+ @return false;
19
+ }
20
+
21
+ @return nth($matrix, $index);
22
22
  }
@@ -1,30 +1,30 @@
1
- // Checks whether `$matrix` is `$side` triangular with `$flag` options
2
- // --------------------------------------------------------------------------------
3
- // @require `rows`
4
- // @require `columns`
5
- // @require `get-entry`
6
- // --------------------------------------------------------------------------------
7
- // @param $matrix: matrix
8
- // @param $side: side (top | bottom)
9
- // @param $flag: advanced options (null | strict | unit | atom)
10
- // --------------------------------------------------------------------------------
11
- // @return boolean
12
-
13
- @function _is-triangular($matrix, $side: top, $flag: null) {
14
- @for $i from 1 through rows($matrix) {
15
- @for $j from 1 through columns($matrix) {
16
- $entry: get-entry($matrix, ($i $j));
17
- @if $i > $j {
18
- @if $side == top and $entry != 0 { @return false; }
19
- }
20
- @else if $i < $j {
21
- @if $side == bottom and $entry != 0 { @return false; }
22
- }
23
- @else {
24
- @if $flag == strict and $entry != 0 { @return false; }
25
- @if $flag == unit and $entry != 1 { @return false; }
26
- }
27
- }
28
- }
29
- @return true;
30
- }
1
+ // Checks whether `$matrix` is `$side` triangular with `$flag` options
2
+ // --------------------------------------------------------------------------------
3
+ // @require `rows`
4
+ // @require `columns`
5
+ // @require `get-entry`
6
+ // --------------------------------------------------------------------------------
7
+ // @param $matrix: matrix
8
+ // @param $side: side (top | bottom)
9
+ // @param $flag: advanced options (null | strict | unit | atom)
10
+ // --------------------------------------------------------------------------------
11
+ // @return boolean
12
+
13
+ @function _is-triangular($matrix, $side: top, $flag: null) {
14
+ @for $i from 1 through rows($matrix) {
15
+ @for $j from 1 through columns($matrix) {
16
+ $entry: get-entry($matrix, ($i $j));
17
+ @if $i > $j {
18
+ @if $side == top and $entry != 0 { @return false; }
19
+ }
20
+ @else if $i < $j {
21
+ @if $side == bottom and $entry != 0 { @return false; }
22
+ }
23
+ @else {
24
+ @if $flag == strict and $entry != 0 { @return false; }
25
+ @if $flag == unit and $entry != 1 { @return false; }
26
+ }
27
+ }
28
+ }
29
+ @return true;
30
+ }
@@ -1,37 +1,37 @@
1
- // Checks whether `$coords` are valid coordinates
2
- // --------------------------------------------------------------------------------
3
- // @require `rows`
4
- // @require `columns`
5
- // --------------------------------------------------------------------------------
6
- // @param $matrix: matrix
7
- // @param $coords: coordinates
8
- // --------------------------------------------------------------------------------
9
- // @return boolean
10
-
11
- @function _valid-coords($coords, $matrix: null) {
12
- @if length($coords) == 1 {
13
- $coords: ($coords, $coords);
14
- }
15
-
16
- $x: nth($coords, 1);
17
- $y: nth($coords, 2);
18
-
19
- @if length($coords) != 2 {
20
- @warn "Wrong number of coordinates.";
21
- @return false;
22
- }
23
-
24
- @if type-of($x) != number or type-of($y) != number {
25
- @warn "Invalid coordinates.";
26
- @return false;
27
- }
28
-
29
- @if $matrix {
30
- @if abs($x) > rows($matrix) or abs($y) > columns($matrix) {
31
- @warn "Out of bound coordinates.";
32
- @return false;
33
- }
34
- }
35
-
36
- @return true;
37
- }
1
+ // Checks whether `$coords` are valid coordinates
2
+ // --------------------------------------------------------------------------------
3
+ // @require `rows`
4
+ // @require `columns`
5
+ // --------------------------------------------------------------------------------
6
+ // @param $matrix: matrix
7
+ // @param $coords: coordinates
8
+ // --------------------------------------------------------------------------------
9
+ // @return boolean
10
+
11
+ @function _valid-coords($coords, $matrix: null) {
12
+ @if length($coords) == 1 {
13
+ $coords: ($coords, $coords);
14
+ }
15
+
16
+ $x: nth($coords, 1);
17
+ $y: nth($coords, 2);
18
+
19
+ @if length($coords) != 2 {
20
+ @warn "Wrong number of coordinates.";
21
+ @return false;
22
+ }
23
+
24
+ @if type-of($x) != number or type-of($y) != number {
25
+ @warn "Invalid coordinates.";
26
+ @return false;
27
+ }
28
+
29
+ @if $matrix {
30
+ @if abs($x) > rows($matrix) or abs($y) > columns($matrix) {
31
+ @warn "Out of bound coordinates.";
32
+ @return false;
33
+ }
34
+ }
35
+
36
+ @return true;
37
+ }
@@ -1,23 +1,23 @@
1
- // Initializing a matrix of `$x` by `$y` with 0s
2
- // --------------------------------------------------------------------------------
3
- // @require `_valid-coords`
4
- // --------------------------------------------------------------------------------
5
- // @param $x: number of rows
6
- // @param $y: number of columns
7
- // --------------------------------------------------------------------------------
8
- // @return matrix
9
-
10
- @function matrix($x, $y: $x) {
11
- @if _valid-coords(($x $y)) {
12
- $matrix: ();
13
- @for $i from 1 through $x {
14
- $tmp: ();
15
- @for $y from 1 through $y {
16
- $tmp: append($tmp, 0)
17
- }
18
- $matrix: append($matrix, $tmp);
19
- }
20
- @return $matrix;
21
- }
22
- @return false;
23
- }
1
+ // Initializing a matrix of `$x` by `$y` with 0s
2
+ // --------------------------------------------------------------------------------
3
+ // @require `_valid-coords`
4
+ // --------------------------------------------------------------------------------
5
+ // @param $x: number of rows
6
+ // @param $y: number of columns
7
+ // --------------------------------------------------------------------------------
8
+ // @return matrix
9
+
10
+ @function matrix($x, $y: $x) {
11
+ @if _valid-coords(($x $y)) {
12
+ $matrix: ();
13
+ @for $i from 1 through $x {
14
+ $tmp: ();
15
+ @for $y from 1 through $y {
16
+ $tmp: append($tmp, 0)
17
+ }
18
+ $matrix: append($matrix, $tmp);
19
+ }
20
+ @return $matrix;
21
+ }
22
+ @return false;
23
+ }
@@ -1,25 +1,25 @@
1
- // Initializing a matrix of `$x` by `$y` with its diagonal filled with 1s
2
- // --------------------------------------------------------------------------------
3
- // @require `_valid-coords`
4
- // @require `matrix`
5
- // @require `set-entry`
6
- // --------------------------------------------------------------------------------
7
- // @param $x: number of rows
8
- // @param $y: number of columns
9
- // --------------------------------------------------------------------------------
10
- // @return matrix
11
-
12
- @function unit-matrix($x, $y: $x) {
13
- @if _valid-coords(($x $y)) {
14
- $matrix: matrix($x, $y);
15
- @for $i from 1 through $x {
16
- @for $j from 1 through $y {
17
- @if $i == $j {
18
- $matrix: set-entry($matrix, ($i $j), 1);
19
- }
20
- }
21
- }
22
- @return $matrix;
23
- }
24
- @return false;
25
- }
1
+ // Initializing a matrix of `$x` by `$y` with its diagonal filled with 1s
2
+ // --------------------------------------------------------------------------------
3
+ // @require `_valid-coords`
4
+ // @require `matrix`
5
+ // @require `set-entry`
6
+ // --------------------------------------------------------------------------------
7
+ // @param $x: number of rows
8
+ // @param $y: number of columns
9
+ // --------------------------------------------------------------------------------
10
+ // @return matrix
11
+
12
+ @function unit-matrix($x, $y: $x) {
13
+ @if _valid-coords(($x $y)) {
14
+ $matrix: matrix($x, $y);
15
+ @for $i from 1 through $x {
16
+ @for $j from 1 through $y {
17
+ @if $i == $j {
18
+ $matrix: set-entry($matrix, ($i $j), 1);
19
+ }
20
+ }
21
+ }
22
+ @return $matrix;
23
+ }
24
+ @return false;
25
+ }
@@ -1,33 +1,33 @@
1
- // Add `$matrices`
2
- // --------------------------------------------------------------------------------
3
- // @require `rows`
4
- // @require `columns`
5
- // @require `get-entry`
6
- // @require `set-entry`
7
- // --------------------------------------------------------------------------------
8
- // @param $matrices: matrices
9
- // --------------------------------------------------------------------------------
10
- // @return matrix
11
-
12
- @function add-matrices($matrices...) {
13
- $matrix: nth($matrices, 1);
14
- @each $m in $matrices {
15
- @if columns($matrix) != columns($m)
16
- or rows($matrix) != rows($m) {
17
- @warn "All matrices do not have same dimensions.";
18
- @return false;
19
- }
20
- }
21
-
22
- @for $i from 1 through rows($matrix) {
23
- @for $j from 1 through columns($matrix) {
24
- $value: null;
25
- @each $m in $matrices {
26
- $entry: get-entry($m, ($i $j));
27
- $value: if($value == null, $entry, $value + $entry);
28
- }
29
- $matrix: set-entry($matrix, ($i $j), $value);
30
- }
31
- }
32
- @return $matrix;
33
- }
1
+ // Add `$matrices`
2
+ // --------------------------------------------------------------------------------
3
+ // @require `rows`
4
+ // @require `columns`
5
+ // @require `get-entry`
6
+ // @require `set-entry`
7
+ // --------------------------------------------------------------------------------
8
+ // @param $matrices: matrices
9
+ // --------------------------------------------------------------------------------
10
+ // @return matrix
11
+
12
+ @function add-matrices($matrices...) {
13
+ $matrix: nth($matrices, 1);
14
+ @each $m in $matrices {
15
+ @if columns($matrix) != columns($m)
16
+ or rows($matrix) != rows($m) {
17
+ @warn "All matrices do not have same dimensions.";
18
+ @return false;
19
+ }
20
+ }
21
+
22
+ @for $i from 1 through rows($matrix) {
23
+ @for $j from 1 through columns($matrix) {
24
+ $value: null;
25
+ @each $m in $matrices {
26
+ $entry: get-entry($m, ($i $j));
27
+ $value: if($value == null, $entry, $value + $entry);
28
+ }
29
+ $matrix: set-entry($matrix, ($i $j), $value);
30
+ }
31
+ }
32
+ @return $matrix;
33
+ }
@@ -1,9 +1,9 @@
1
- // Returns number of columns in `$matrix`
2
- // --------------------------------------------------------------------------------
3
- // @param $matrix: matrix
4
- // --------------------------------------------------------------------------------
5
- // @return number
6
-
7
- @function columns($matrix) {
8
- @return length(nth($matrix, 1));
9
- }
1
+ // Returns number of columns in `$matrix`
2
+ // --------------------------------------------------------------------------------
3
+ // @param $matrix: matrix
4
+ // --------------------------------------------------------------------------------
5
+ // @return number
6
+
7
+ @function columns($matrix) {
8
+ @return length(nth($matrix, 1));
9
+ }
@@ -1,42 +1,42 @@
1
- // Returns the visual representation of `$matrix` as a string
2
- // --------------------------------------------------------------------------------
3
- // @param $matrix: matrix to display
4
- // --------------------------------------------------------------------------------
5
- // @return string
6
-
7
- @function display($matrix) {
8
- $str: "";
9
- @each $line in $matrix {
10
- $tmp: "";
11
- @each $item in $line {
12
- $tmp: $tmp + " " + $item;
13
- }
14
- $str: $str + $tmp + "\A ";
15
- }
16
- @return $str;
17
- }
18
-
19
- // Mixin displaying the matrix
20
- // using body pseudo-elements
21
- //
22
- // @param $matrix: matrix to display
23
- // @param $pseudo: pseudo element to use
24
-
25
- @mixin display($matrix, $pseudo: before) {
26
- body:#{$pseudo} {
27
- content: display($matrix) !important;
28
-
29
- display: block !important;
30
- margin: 1em !important;
31
- padding: .5em !important;
32
-
33
- background: #EFEFEF !important;
34
- border: 1px solid #DDD !important;
35
- border-radius: .2em !important;
36
-
37
- color: #333 !important;
38
- font: 1.5em/1.5 "Courier New", monospace !important;
39
- text-shadow: 0 1px white !important;
40
- white-space: pre-wrap !important;
41
- }
42
- }
1
+ // Returns the visual representation of `$matrix` as a string
2
+ // --------------------------------------------------------------------------------
3
+ // @param $matrix: matrix to display
4
+ // --------------------------------------------------------------------------------
5
+ // @return string
6
+
7
+ @function display($matrix) {
8
+ $str: "";
9
+ @each $line in $matrix {
10
+ $tmp: "";
11
+ @each $item in $line {
12
+ $tmp: $tmp + " " + $item;
13
+ }
14
+ $str: $str + $tmp + "\A ";
15
+ }
16
+ @return $str;
17
+ }
18
+
19
+ // Mixin displaying the matrix
20
+ // using body pseudo-elements
21
+ //
22
+ // @param $matrix: matrix to display
23
+ // @param $pseudo: pseudo element to use
24
+
25
+ @mixin display($matrix, $pseudo: before) {
26
+ body:#{$pseudo} {
27
+ content: display($matrix) !important;
28
+
29
+ display: block !important;
30
+ margin: 1em !important;
31
+ padding: .5em !important;
32
+
33
+ background: #EFEFEF !important;
34
+ border: 1px solid #DDD !important;
35
+ border-radius: .2em !important;
36
+
37
+ color: #333 !important;
38
+ font: 1.5em/1.5 "Courier New", monospace !important;
39
+ text-shadow: 0 1px white !important;
40
+ white-space: pre-wrap !important;
41
+ }
42
+ }