Skip to content

Commit 4f01419

Browse files
committed
update with mir.math
1 parent 06dff30 commit 4f01419

File tree

11 files changed

+945
-70
lines changed

11 files changed

+945
-70
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,4 @@ out/
2525
build/
2626
files
2727
mir-algorithm.lib
28+
mir-algorithm-test-default

dub.sdl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ authors "Ilya Yaroshenko" "Sebastian Wilzbach" "John Michael Hall"
55
copyright "Copyright © 2016 - 2018, Ilya Yaroshenko; see also information per file."
66
license "BSL-1.0"
77

8-
dependency "mir-core" version=">=0.0.10 <1.0.0"
8+
dependency "mir-core" version="~>0.2.0"
99

1010
buildType "unittest" {
1111
buildOptions "unittests" "debugMode" "debugInfo"

source/mir/interpolate/constant.d

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ version(mir_test)
2020
@safe pure unittest
2121
{
2222
import mir.ndslice;
23-
import std.math: approxEqual;
23+
import mir.math.common: approxEqual;
2424

2525
immutable x = [0, 1, 2, 3];
2626
immutable y = [10, 20, 30, 40];

source/mir/interpolate/linear.d

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,9 @@ template linear(T, size_t N = 1, FirstGridIterator = immutable(T)*, NextGridIter
7373
version(mir_test)
7474
@safe pure unittest
7575
{
76+
import mir.algorithm.iteration;
7677
import mir.ndslice;
77-
import std.math: approxEqual;
78+
import mir.math.common: approxEqual;
7879

7980
immutable x = [0, 1, 2, 3, 5.00274, 7.00274, 10.0055, 20.0137, 30.0192];
8081
immutable y = [0.0011, 0.0011, 0.0030, 0.0064, 0.0144, 0.0207, 0.0261, 0.0329, 0.0356,];
@@ -84,14 +85,14 @@ version(mir_test)
8485

8586
auto data = [0.0011, 0.0030, 0.0064, 0.0104, 0.0144, 0.0176, 0.0207, 0.0225, 0.0243, 0.0261, 0.0268, 0.0274, 0.0281, 0.0288, 0.0295, 0.0302, 0.0309, 0.0316, 0.0322, 0.0329, 0.0332, 0.0335, 0.0337, 0.0340, 0.0342, 0.0345, 0.0348, 0.0350, 0.0353, 0.0356];
8687

87-
assert(approxEqual(xs.sliced.map!interpolation, data, 1e-4, 1e-4));
88+
assert(all!((a, b) => approxEqual(a, b, 1e-4, 1e-4))(xs.sliced.map!interpolation, data));
8889
}
8990

9091
/// R^2 -> R: Bilinear interpolation
9192
version(mir_test)
9293
@safe pure unittest
9394
{
94-
import std.math: approxEqual;
95+
import mir.math.common: approxEqual;
9596
import mir.ndslice;
9697
alias appreq = (a, b) => approxEqual(a, b, 10e-10, 10e-10);
9798

@@ -135,7 +136,7 @@ version(mir_test)
135136
version(mir_test)
136137
@safe pure unittest
137138
{
138-
import std.math: approxEqual;
139+
import mir.math.common: approxEqual;
139140
import mir.ndslice;
140141
alias appreq = (a, b) => approxEqual(a, b, 10e-10, 10e-10);
141142

source/mir/interpolate/package.d

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -126,9 +126,9 @@ struct Interp1(Range, Interpolant)
126126
return ret;
127127
}
128128
/// Input range primitives
129-
bool empty ()() @property { return _range.empty; }
129+
bool empty () const @property { return _range.empty; }
130130
/// ditto
131-
void popFront()() { _range.popFront; }
131+
void popFront() { _range.popFront; }
132132
/// ditto
133133
auto front() @property
134134

@@ -152,7 +152,7 @@ PCHIP interpolation.
152152
version(mir_test)
153153
@safe unittest
154154
{
155-
import std.math: approxEqual;
155+
import mir.math.common: approxEqual;
156156
import mir.ndslice.slice: sliced;
157157
import mir.ndslice.allocation: slice;
158158
import mir.interpolate: interp1;
@@ -183,7 +183,7 @@ version(mir_test)
183183
{
184184
import mir.interpolate.linear;
185185
import mir.ndslice;
186-
import std.math: approxEqual;
186+
import mir.math.common: approxEqual;
187187

188188
immutable x = [0, 1, 2, 3, 5.00274, 7.00274, 10.0055, 20.0137, 30.0192];
189189
immutable y = [0.0011, 0.0011, 0.0030, 0.0064, 0.0144, 0.0207, 0.0261, 0.0329, 0.0356,];
@@ -193,7 +193,7 @@ version(mir_test)
193193

194194
auto data = [0.0011, 0.0030, 0.0064, 0.0104, 0.0144, 0.0176, 0.0207, 0.0225, 0.0243, 0.0261, 0.0268, 0.0274, 0.0281, 0.0288, 0.0295, 0.0302, 0.0309, 0.0316, 0.0322, 0.0329, 0.0332, 0.0335, 0.0337, 0.0340, 0.0342, 0.0345, 0.0348, 0.0350, 0.0353, 0.0356];
195195

196-
assert(approxEqual(xs.interp1(interpolation), data, 1e-4, 1e-4));
196+
assert(all!((a, b) => approxEqual(a, b, 1e-4, 1e-4))(xs.interp1(interpolation), data));
197197
}
198198

199199
/++

source/mir/interpolate/pchip.d

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,8 @@ template pchip(T, size_t N = 1, FirstGridIterator = immutable(T)*, NextGridItera
6060
version(mir_test)
6161
@safe unittest
6262
{
63-
import std.math: approxEqual;
63+
import mir.math.common: approxEqual;
64+
import mir.algorithm.iteration: all;
6465
import mir.ndslice.allocation: slice;
6566
import mir.ndslice.slice: sliced;
6667
import mir.ndslice.topology: vmap;
@@ -74,7 +75,7 @@ version(mir_test)
7475
() @trusted {
7576
auto ys = xs.vmap(interpolant);
7677

77-
assert(ys.approxEqual([
78+
assert(ys.all!approxEqual([
7879
5.333333333333334,
7980
2.500000000000000,
8081
10.000000000000000,
@@ -92,7 +93,7 @@ version(mir_test)
9293
version(mir_test)
9394
@safe unittest
9495
{
95-
import std.math: approxEqual;
96+
import mir.math.common: approxEqual;
9697
import mir.ndslice.slice: sliced;
9798
import mir.ndslice.allocation: slice;
9899
import mir.ndslice.topology: retro, map;

source/mir/interpolate/spline.d

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,10 @@ import mir.ndslice.traits;
3636
///
3737
@trusted pure version(mir_test) unittest
3838
{
39-
import std.math: approxEqual;
39+
import mir.algorithm.iteration: all;
40+
import mir.math.common: approxEqual;
4041
import mir.ndslice.slice: sliced;
4142
import mir.ndslice.topology: vmap;
42-
import mir.algorithm.iteration: all;
4343

4444
auto x = [-1.0, 2, 4, 5, 8, 10, 12, 15, 19, 22].idup.sliced;
4545
auto y = [17.0, 0, 16, 4, 10, 15, 19, 5, 18, 6].idup.sliced;
@@ -48,21 +48,21 @@ import mir.ndslice.traits;
4848
auto xs = x + 0.5; // input X values for cubic spline
4949

5050
/// not-a-knot (default)
51-
assert(xs.vmap(interpolant).approxEqual([
51+
assert(xs.vmap(interpolant).all!approxEqual([
5252
-0.68361541, 7.28568719, 10.490694 , 0.36192032,
5353
11.91572713, 16.44546433, 17.66699525, 4.52730869,
5454
19.22825394, -2.3242592 ]));
5555

5656
/// natural cubic spline
5757
interpolant = spline!double(x, y, SplineBoundaryType.secondDerivative);
58-
assert(xs.vmap(interpolant).approxEqual([
58+
assert(xs.vmap(interpolant).all!approxEqual([
5959
10.85298372, 5.26255911, 10.71443229, 0.1824536 ,
6060
11.94324989, 16.45633939, 17.59185094, 4.86340188,
6161
17.8565408 , 2.81856494]));
6262

6363
/// set both boundary derivatives to 3
6464
interpolant = spline!double(x, y, SplineBoundaryType.firstDerivative, 3);
65-
assert(xs.vmap(interpolant).approxEqual([
65+
assert(xs.vmap(interpolant).all!approxEqual([
6666
16.45728263, 4.27981687, 10.82295092, 0.09610695,
6767
11.95252862, 16.47583126, 17.49964521, 5.26561539,
6868
16.21803478, 8.96104974]));
@@ -71,15 +71,15 @@ import mir.ndslice.traits;
7171
interpolant = spline!double(x, y,
7272
SplineBoundaryCondition!double(SplineBoundaryType.firstDerivative, 3),
7373
SplineBoundaryCondition!double(SplineBoundaryType.secondDerivative, -5));
74-
assert(xs.vmap(interpolant).approxEqual([
74+
assert(xs.vmap(interpolant).all!approxEqual([
7575
16.45730084, 4.27966112, 10.82337171, 0.09403945,
7676
11.96265209, 16.44067375, 17.6374694 , 4.67438921,
7777
18.6234452 , -0.05582876]));
7878
// ditto
7979
interpolant = spline!double(x, y,
8080
SplineBoundaryCondition!double(SplineBoundaryType.secondDerivative, -5),
8181
SplineBoundaryCondition!double(SplineBoundaryType.firstDerivative, 3));
82-
assert(xs.vmap(interpolant).approxEqual([
82+
assert(xs.vmap(interpolant).all!approxEqual([
8383
12.37135558, 4.99638066, 10.74362441, 0.16008641,
8484
11.94073593, 16.47908148, 17.49841853, 5.26600921,
8585
16.21796051, 8.96102894]));
@@ -88,12 +88,12 @@ import mir.ndslice.traits;
8888
///
8989
@safe pure version(mir_test) unittest
9090
{
91-
import std.math: approxEqual;
91+
import mir.algorithm.iteration: all;
92+
import mir.functional: aliasCall;
93+
import mir.math.common: approxEqual;
9294
import mir.ndslice.allocation: uninitSlice;
9395
import mir.ndslice.slice: sliced;
9496
import mir.ndslice.topology: vmap, map;
95-
import mir.algorithm.iteration: all;
96-
import mir.functional: aliasCall;
9797

9898
auto x = [-1.0, 2, 4, 5, 8, 10, 12, 15, 19, 22].idup.sliced;
9999
auto y = [
@@ -184,8 +184,9 @@ import mir.ndslice.traits;
184184
version(mir_test)
185185
@safe unittest
186186
{
187+
import mir.algorithm.iteration: all;
188+
import mir.math.common: approxEqual;
187189
import mir.ndslice;
188-
import std.math: approxEqual;
189190

190191
immutable x = [0, 1, 2, 3, 5.00274, 7.00274, 10.0055, 20.0137, 30.0192];
191192
auto y = [0.0011, 0.0011, 0.0030, 0.0064, 0.0144, 0.0207, 0.0261, 0.0329, 0.0356,];
@@ -202,15 +203,15 @@ version(mir_test)
202203
0.03419436, 0.03446018, 0.03477529, 0.03515072, 0.0356 ];
203204

204205
()@trusted{
205-
assert(approxEqual(xs.sliced.vmap(interpolation), data, 1e-4, 1e-4));
206+
assert(all!approxEqual(xs.sliced.vmap(interpolation), data));
206207
}();
207208
}
208209

209210
/// R^2 -> R: Bicubic interpolation
210211
version(mir_test)
211212
unittest
212213
{
213-
import std.math: approxEqual;
214+
import mir.math.common: approxEqual;
214215
import mir.ndslice;
215216
alias appreq = (a, b) => approxEqual(a, b, 10e-10, 10e-10);
216217

@@ -264,7 +265,7 @@ unittest
264265
version(mir_test)
265266
unittest
266267
{
267-
import std.math: approxEqual;
268+
import mir.math.common: approxEqual;
268269
import mir.ndslice;
269270
alias appreq = (a, b) => approxEqual(a, b, 10e-10, 10e-10);
270271

source/mir/interpolate/utility.d

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ ParabolaKernel!(Unqual!(typeof(X.init - Y.init))) parabolaKernel(X, Y)(in X x0,
6565
///
6666
unittest
6767
{
68-
import std.math: approxEqual;
68+
import mir.math.common: approxEqual;
6969

7070
alias f = (double x) => 3 * (x ^^ 2) + 7 * x + 5;
7171
auto p = parabolaKernel(4, 9, 20, f(4), f(9), f(20));

source/mir/math/numeric.d

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ struct Prod(T)
2929
void put()(T e)
3030
{
3131
int lexp;
32-
import std.math: frexp;
32+
import mir.math.ieee: frexp;
3333
x *= frexp(e, lexp);
3434
exp += lexp;
3535
if (x.fabs < 0.5f)
@@ -47,7 +47,7 @@ struct Prod(T)
4747
else
4848
if (exp < int.min)
4949
exp = int.min;
50-
import std.math: ldexp;
50+
import mir.math.ieee: ldexp;
5151
return ldexp(x, cast(int)exp);
5252
}
5353
}
@@ -125,16 +125,16 @@ Unqual!(DeepElementType!Range) sumOfLog2s(Range)(Range r)
125125
version(mir_test)
126126
@safe unittest
127127
{
128-
import std.math : isNaN;
128+
alias isNaN = x => x != x;
129129

130130
assert(sumOfLog2s(new double[0]) == 0);
131131
assert(sumOfLog2s([0.0L]) == -real.infinity);
132132
assert(sumOfLog2s([-0.0L]) == -real.infinity);
133133
assert(sumOfLog2s([2.0L]) == 1);
134-
assert(sumOfLog2s([-2.0L]).isNaN());
135-
assert(sumOfLog2s([real.nan]).isNaN());
136-
assert(sumOfLog2s([-real.nan]).isNaN());
134+
assert(isNaN(sumOfLog2s([-2.0L])));
135+
assert(isNaN(sumOfLog2s([real.nan])));
136+
assert(isNaN(sumOfLog2s([-real.nan])));
137137
assert(sumOfLog2s([real.infinity]) == real.infinity);
138-
assert(sumOfLog2s([-real.infinity]).isNaN());
138+
assert(isNaN(sumOfLog2s([-real.infinity])));
139139
assert(sumOfLog2s([ 0.25, 0.25, 0.25, 0.125 ]) == -9);
140140
}

0 commit comments

Comments
 (0)