Skip to content

Commit

Permalink
xrange lib added and supported
Browse files Browse the repository at this point in the history
  • Loading branch information
gyrdym committed Mar 29, 2019
1 parent 1f79288 commit 4a1c267
Show file tree
Hide file tree
Showing 7 changed files with 94 additions and 102 deletions.
1 change: 0 additions & 1 deletion lib/linalg.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,4 @@ export 'package:ml_linalg/float32x4_matrix.dart';
export 'package:ml_linalg/float32x4_vector.dart';
export 'package:ml_linalg/matrix.dart';
export 'package:ml_linalg/norm.dart';
export 'package:ml_linalg/range.dart';
export 'package:ml_linalg/vector.dart';
7 changes: 4 additions & 3 deletions lib/matrix.dart
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import 'dart:typed_data';

import 'package:ml_linalg/matrix_norm.dart';
import 'package:ml_linalg/range.dart';
import 'package:ml_linalg/src/matrix/float32x4/float32x4_matrix.dart';
import 'package:ml_linalg/vector.dart';
import 'package:xrange/range.dart';

/// An algebraic matrix
abstract class Matrix {
Expand Down Expand Up @@ -79,10 +79,11 @@ abstract class Matrix {
Matrix transpose();

/// Cuts out a part of the matrix bounded by [rows] and [columns] range
Matrix submatrix({Range rows, Range columns});
Matrix submatrix({Range<num> rows, Range<num> columns});

/// Creates a new matrix, consisted of different segments of the matrix
Matrix pick({Iterable<Range> rowRanges, Iterable<Range> columnRanges});
Matrix pick({Iterable<Range<num>> rowRanges,
Iterable<Range<num>> columnRanges});

/// Returns a column of the matrix, resided on [index]
Vector getColumn(int index, {bool tryCache = true, bool mutable = false});
Expand Down
11 changes: 0 additions & 11 deletions lib/range.dart

This file was deleted.

43 changes: 20 additions & 23 deletions lib/src/matrix/matrix_mixin.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ import 'dart:typed_data';

import 'package:ml_linalg/matrix.dart';
import 'package:ml_linalg/matrix_norm.dart';
import 'package:ml_linalg/range.dart';
import 'package:ml_linalg/src/matrix/matrix_data_store.dart';
import 'package:ml_linalg/src/matrix/matrix_validatior.dart';
import 'package:ml_linalg/vector.dart';
import 'package:xrange/range.dart';

abstract class MatrixMixin implements
Iterable<Iterable<double>>,
Expand Down Expand Up @@ -111,26 +111,26 @@ abstract class MatrixMixin implements
}

@override
Matrix submatrix({Range rows, Range columns}) {
rows ??= Range(0, rowsNum);
columns ??= Range(0, columnsNum);

final rowsNumber = rows.end - rows.start + (rows.endInclusive ? 1 : 0);
final matrixSource = List<List<double>>(rowsNumber);
final rowEndIdx = rows.endInclusive ? rows.end + 1 : rows.end;
Matrix submatrix({Range<num> rows, Range<num> columns}) {
rows ??= Range<num>.closedOpen(0, rowsNum);
columns ??= Range<num>.closedOpen(0, columnsNum);
final rowsNumber = rows.upper - rows.lower + (rows.isClosed ? 1 : 0);
final matrixSource = List<List<double>>(rowsNumber.toInt());
final rowEndIdx = rows.isClosed ? rows.upper + 1 : rows.upper;
final columnsLength =
columns.end - columns.start + (columns.endInclusive ? 1 : 0);
for (int i = rows.start; i < rowEndIdx; i++) {
matrixSource[i - rows.start] =
_query(i * columnsNum + columns.start, columnsLength);
(columns.upper - columns.lower + (columns.isClosed ? 1 : 0)).toInt();
for (int i = rows.lower.toInt(); i < rowEndIdx; i++) {
matrixSource[i - rows.lower.toInt()] =
_query(i * columnsNum + columns.lower.toInt(), columnsLength);
}
return Matrix.from(matrixSource, dtype: dtype);
}

@override
Matrix pick({Iterable<Range> rowRanges, Iterable<Range> columnRanges}) {
rowRanges ??= [Range(0, rowsNum)];
columnRanges ??= [Range(0, columnsNum)];
Matrix pick({Iterable<Range<num>> rowRanges,
Iterable<Range<num>> columnRanges}) {
rowRanges ??= [Range<num>.closedOpen(0, rowsNum)];
columnRanges ??= [Range<num>.closedOpen(0, columnsNum)];
final rows = _collectVectors(rowRanges, getRow, rowsNum);
final rowBasedMatrix = Matrix.rows(rows, dtype: dtype);
final columns =
Expand Down Expand Up @@ -369,17 +369,14 @@ abstract class MatrixMixin implements
data.buffer.asFloat32List(index * Float32List.bytesPerElement, length);

List<Vector> _collectVectors(
Iterable<Range> ranges, Vector getVector(int i), int maxValue) {
Iterable<Range<num>> ranges, Vector getVector(int i), int maxValue) {
final vectors = <Vector>[];
for (final range in ranges) {
if (range.end > maxValue) {
throw RangeError.range(range.end, 0, maxValue);
}
final rowEndIdx = range.endInclusive ? range.end + 1 : range.end;
for (int i = range.start; i < rowEndIdx; i++) {
ranges.forEach((range) {
final rowEndIdx = range.isClosed ? range.upper + 1 : range.upper;
for (int i = range.lower.toInt(); i < rowEndIdx; i++) {
vectors.add(getVector(i));
}
}
});
return vectors;
}
}
62 changes: 31 additions & 31 deletions pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ packages:
name: analyzer
url: "https://pub.dartlang.org"
source: hosted
version: "0.35.3"
version: "0.35.4"
args:
dependency: transitive
description:
Expand All @@ -21,7 +21,7 @@ packages:
name: async
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.8"
version: "2.1.0"
benchmark_harness:
dependency: "direct dev"
description:
Expand All @@ -42,7 +42,7 @@ packages:
name: build
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.1"
version: "1.1.2"
build_config:
dependency: transitive
description:
Expand All @@ -56,7 +56,7 @@ packages:
name: build_daemon
url: "https://pub.dartlang.org"
source: hosted
version: "0.4.1"
version: "0.5.0"
build_resolvers:
dependency: transitive
description:
Expand All @@ -70,14 +70,14 @@ packages:
name: build_runner
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.8"
version: "1.3.1"
build_runner_core:
dependency: transitive
description:
name: build_runner_core
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.3"
version: "3.0.1"
build_test:
dependency: "direct dev"
description:
Expand All @@ -98,7 +98,7 @@ packages:
name: built_value
url: "https://pub.dartlang.org"
source: hosted
version: "6.3.1"
version: "6.3.2"
charcode:
dependency: transitive
description:
Expand Down Expand Up @@ -147,7 +147,7 @@ packages:
name: dart_style
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.3"
version: "1.2.4"
dartdoc:
dependency: "direct dev"
description:
Expand Down Expand Up @@ -175,7 +175,7 @@ packages:
name: front_end
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.13"
version: "0.1.14"
glob:
dependency: transitive
description:
Expand All @@ -196,7 +196,7 @@ packages:
name: html
url: "https://pub.dartlang.org"
source: hosted
version: "0.13.3+3"
version: "0.13.4+1"
http:
dependency: transitive
description:
Expand Down Expand Up @@ -224,7 +224,7 @@ packages:
name: intl
url: "https://pub.dartlang.org"
source: hosted
version: "0.15.7"
version: "0.15.8"
io:
dependency: transitive
description:
Expand Down Expand Up @@ -252,14 +252,14 @@ packages:
name: json_rpc_2
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.9"
version: "2.0.10"
kernel:
dependency: transitive
description:
name: kernel
url: "https://pub.dartlang.org"
source: hosted
version: "0.3.13"
version: "0.3.14"
logging:
dependency: transitive
description:
Expand All @@ -280,7 +280,7 @@ packages:
name: matcher
url: "https://pub.dartlang.org"
source: hosted
version: "0.12.3+1"
version: "0.12.5"
meta:
dependency: transitive
description:
Expand Down Expand Up @@ -358,13 +358,6 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "2.2.0"
plugin:
dependency: transitive
description:
name: plugin
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.0+3"
pool:
dependency: transitive
description:
Expand Down Expand Up @@ -399,7 +392,7 @@ packages:
name: quiver
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.1"
version: "2.0.2"
resource:
dependency: transitive
description:
Expand All @@ -413,7 +406,7 @@ packages:
name: shelf
url: "https://pub.dartlang.org"
source: hosted
version: "0.7.4"
version: "0.7.4+1"
shelf_packages_handler:
dependency: transitive
description:
Expand All @@ -434,7 +427,7 @@ packages:
name: shelf_web_socket
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.2+4"
version: "0.2.2+5"
source_map_stack_trace:
dependency: transitive
description:
Expand Down Expand Up @@ -469,14 +462,14 @@ packages:
name: stream_channel
url: "https://pub.dartlang.org"
source: hosted
version: "1.6.8"
version: "2.0.0"
stream_transform:
dependency: transitive
description:
name: stream_transform
url: "https://pub.dartlang.org"
source: hosted
version: "0.0.15"
version: "0.0.17"
string_scanner:
dependency: transitive
description:
Expand All @@ -497,21 +490,21 @@ packages:
name: test
url: "https://pub.dartlang.org"
source: hosted
version: "1.5.3"
version: "1.6.1"
test_api:
dependency: transitive
description:
name: test_api
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.2"
version: "0.2.4"
test_core:
dependency: transitive
description:
name: test_core
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.1+1"
version: "0.2.3"
timing:
dependency: transitive
description:
Expand Down Expand Up @@ -539,7 +532,7 @@ packages:
name: vm_service_client
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.6"
version: "0.2.6+1"
watcher:
dependency: transitive
description:
Expand All @@ -553,7 +546,14 @@ packages:
name: web_socket_channel
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.9"
version: "1.0.12"
xrange:
dependency: "direct main"
description:
name: xrange
url: "https://pub.dartlang.org"
source: hosted
version: "0.0.2"
yaml:
dependency: transitive
description:
Expand Down
1 change: 1 addition & 0 deletions pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ environment:

dependencies:
quiver: '>=2.0.0 <3.0.0'
xrange: ^0.0.2

dev_dependencies:
benchmark_harness: ">=1.0.0 <2.0.0"
Expand Down

0 comments on commit 4a1c267

Please sign in to comment.