www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - How to use libmir --> mir-algorithm, numir, mir-random?

reply Shaleen Chhabra <chhabrashaleen gmail.com> writes:
Hi,

The libmir libraries can be found here: https://github.com/libmir

I wish to use mir-algorithm and numir so that i can directly use 
.npy format from python and perform the required analysis.

I checked out latest commits of each of the libraries mentioned 
--> mir-algorithm, mir-random and numir.

But they don't seem to build together. what are the correct 
dependencies for each library.

TASK:  how can i read / write mir.ndslice matrices and in what 
preferable format, an example should be good. I also wish to read 
/ write in .npy format, how can i do this?
Sep 02 2020
next sibling parent WebFreak001 <d.forum webfreak.org> writes:
On Wednesday, 2 September 2020 at 07:01:48 UTC, Shaleen Chhabra 
wrote:
 Hi,

 The libmir libraries can be found here: 
 https://github.com/libmir

 I wish to use mir-algorithm and numir so that i can directly 
 use .npy format from python and perform the required analysis.

 I checked out latest commits of each of the libraries mentioned 
 --> mir-algorithm, mir-random and numir.

 But they don't seem to build together. what are the correct 
 dependencies for each library.

 TASK:  how can i read / write mir.ndslice matrices and in what 
 preferable format, an example should be good. I also wish to 
 read / write in .npy format, how can i do this?
numir seems to be what you are looking for: https://libmir.github.io/numir/ You can check the loadNpy and saveNpy examples at the bottom of this page: https://libmir.github.io/numir/io.html Sample: auto a1_i4 = loadNpy!(int, 1)("./test/a1_i4.npy"); assert(a1_i4 == iota(6).map!(to!int)); loadNpy returns a mir.ndslice Slice so you should be able to operate on it like usual. You need to specify the dimensions of your slice at compile time though, the lengths of each dimension do seem to be loaded at runtime.
Sep 02 2020
prev sibling parent reply 9il <ilyayaroshenko gmail.com> writes:
On Wednesday, 2 September 2020 at 07:01:48 UTC, Shaleen Chhabra 
wrote:
 Hi,

 The libmir libraries can be found here: 
 https://github.com/libmir

 I wish to use mir-algorithm and numir so that i can directly 
 use .npy format from python and perform the required analysis.

 I checked out latest commits of each of the libraries mentioned 
 --> mir-algorithm, mir-random and numir.

 But they don't seem to build together. what are the correct 
 dependencies for each library.
You can just import numir, it will automatically include mir-algorithm, mir-core, and mir-random. https://github.com/libmir/numir/blob/master/dub.json#L9
 TASK:  how can i read / write mir.ndslice matrices and in what 
 preferable format, an example should be good. I also wish to 
 read / write in .npy format, how can i do this?
import std.stdio; import mir.ndslice; void main() { auto mat = [[1, 2, 3], [4, 5, 6], [7, 8, 9]].fuse; writefln("%(%(%d %)\n%)", mat); writeln(); writefln("[%(%(%d %)\n %)]", mat); writeln(); writefln("[%([%(%d %)]%|\n %)]", mat); writeln(); } See also https://dlang.org/phobos/std_format.html
Sep 02 2020
parent reply Shaleen Chhabra <chhabrashaleen gmail.com> writes:
On Wednesday, 2 September 2020 at 08:19:30 UTC, 9il wrote:
 On Wednesday, 2 September 2020 at 07:01:48 UTC, Shaleen Chhabra 
 wrote:
 Hi,

 The libmir libraries can be found here: 
 https://github.com/libmir

 I wish to use mir-algorithm and numir so that i can directly 
 use .npy format from python and perform the required analysis.

 I checked out latest commits of each of the libraries 
 mentioned --> mir-algorithm, mir-random and numir.

 But they don't seem to build together. what are the correct 
 dependencies for each library.
You can just import numir, it will automatically include mir-algorithm, mir-core, and mir-random. https://github.com/libmir/numir/blob/master/dub.json#L9
 TASK:  how can i read / write mir.ndslice matrices and in what 
 preferable format, an example should be good. I also wish to 
 read / write in .npy format, how can i do this?
import std.stdio; import mir.ndslice; void main() { auto mat = [[1, 2, 3], [4, 5, 6], [7, 8, 9]].fuse; writefln("%(%(%d %)\n%)", mat); writeln(); writefln("[%(%(%d %)\n %)]", mat); writeln(); writefln("[%([%(%d %)]%|\n %)]", mat); writeln(); } See also https://dlang.org/phobos/std_format.html
Hi I ran dub build on the numir library, it fetched some dependencies from dub.json. But there was an error ../../.dub/packages/mir-core-1.1.10/mir-core/source/mir/conv.d(9,15): Error: module lifetime is in file 'core/lifetime.d' which cannot be read when i do dub build. Also, do i need to upgrade my dmd version in order to get it working?
Sep 09 2020
parent reply Shaleen Chhabra <chhabrashaleen gmail.com> writes:
On Wednesday, 9 September 2020 at 11:30:58 UTC, Shaleen Chhabra 
wrote:
 On Wednesday, 2 September 2020 at 08:19:30 UTC, 9il wrote:
 On Wednesday, 2 September 2020 at 07:01:48 UTC, Shaleen 
 Chhabra wrote:
 Hi,

 The libmir libraries can be found here: 
 https://github.com/libmir

 I wish to use mir-algorithm and numir so that i can directly 
 use .npy format from python and perform the required analysis.

 I checked out latest commits of each of the libraries 
 mentioned --> mir-algorithm, mir-random and numir.

 But they don't seem to build together. what are the correct 
 dependencies for each library.
You can just import numir, it will automatically include mir-algorithm, mir-core, and mir-random. https://github.com/libmir/numir/blob/master/dub.json#L9
 TASK:  how can i read / write mir.ndslice matrices and in 
 what preferable format, an example should be good. I also 
 wish to read / write in .npy format, how can i do this?
import std.stdio; import mir.ndslice; void main() { auto mat = [[1, 2, 3], [4, 5, 6], [7, 8, 9]].fuse; writefln("%(%(%d %)\n%)", mat); writeln(); writefln("[%(%(%d %)\n %)]", mat); writeln(); writefln("[%([%(%d %)]%|\n %)]", mat); writeln(); } See also https://dlang.org/phobos/std_format.html
Hi I ran dub build on the numir library, it fetched some dependencies from dub.json. But there was an error ../../.dub/packages/mir-core-1.1.10/mir-core/source/mir/conv.d(9,15): Error: module lifetime is in file 'core/lifetime.d' which cannot be read when i do dub build. Also, do i need to upgrade my dmd version in order to get it working?
The task which i want to achieve is: From scratch, i need numir and mir-algorithm to work on my system as a part of one of my repositories. I need to achieve the following targets as the first go and then use mir-algorithm to perform the needful research. 1. Load/save mir.ndslice arrays in NPY format 2. Load/save mir.sparse arrays in coordinate format as NPY files but i am unable to configure the libraries, have dmd v2.076.1 installed on my PC. thanks
Sep 09 2020
parent reply Fynn =?UTF-8?B?U2NocsO2ZGVy?= <fynnos live.com> writes:
On Wednesday, 9 September 2020 at 11:36:56 UTC, Shaleen Chhabra 
wrote:
 but i am unable to configure the libraries, have dmd v2.076.1 
 installed on my PC.
DMD v2.076 is ancient (almost 2 years old!). Current is DMD 2.093.1. I can only recommend to download and install an up-to-date version of DMD or LDC. This should solve your issues with using the mir libraries (and others). Then, try to get a simple example from numir working with your installation.
Sep 09 2020
next sibling parent reply Fynn =?UTF-8?B?U2NocsO2ZGVy?= <fynnos live.com> writes:
On Wednesday, 9 September 2020 at 11:43:16 UTC, Fynn Schröder 
wrote:
 DMD v2.076 is ancient (almost 2 years old!)
typo: its almost 3 years old
Sep 09 2020
parent Shaleen Chhabra <chhabrashaleen gmail.com> writes:
On Wednesday, 9 September 2020 at 11:44:35 UTC, Fynn Schröder 
wrote:
 On Wednesday, 9 September 2020 at 11:43:16 UTC, Fynn Schröder 
 wrote:
 DMD v2.076 is ancient (almost 2 years old!)
typo: its almost 3 years old
thanks, I have upgraded my dmd to latest version. I now import numir and face this error: /home/.dub/packages/mir-core-1.1.11/mir-core/source/mir/math/ieee.d:974: undefined reference to `_D3mir10checkedint4addsFNaNbNiNfiiKbZi' collect2: error: ld returned 1 exit status Error: linker exited with status 1 ../blackbird//etc/build.makefile:295: recipe for target 'tools/mir_utils.d:unittest' failed make: *** [tools/mir_utils.d:unittest] Error 1 What can be the reason?
Sep 09 2020
prev sibling parent reply Shaleen Chhabra <chhabrashaleen gmail.com> writes:
On Wednesday, 9 September 2020 at 11:43:16 UTC, Fynn Schröder 
wrote:
 On Wednesday, 9 September 2020 at 11:36:56 UTC, Shaleen Chhabra 
 wrote:
 but i am unable to configure the libraries, have dmd v2.076.1 
 installed on my PC.
DMD v2.076 is ancient (almost 2 years old!). Current is DMD 2.093.1. I can only recommend to download and install an up-to-date version of DMD or LDC. This should solve your issues with using the mir libraries (and others). Then, try to get a simple example from numir working with your installation.
Hi, I updated my dmd version to dmd-2.093.1 Now it throws a conflict error between 1. function mir.ndslice.topology.iota!(long, 1LU).iota at mir/ndslice/topology.d(630) conflicts with function std.range.iota!int.iota at /home/shaleen/.dvm/compilers/dmd-2.093.1/linux/bin/../../src/phobos/std/range/package.d 2. template mir.ndslice.topology.map(fun...) if (fun.length) at mir/ndslice/topology.d(2565) conflicts with template std.algorithm.iteration.map(fun...) if (fun.length >= 1) at /home/shaleen/.dvm/compilers/dmd-2.093.1/linux/bin/../../src/phobos/std/algorithm/iteration.d(482)
Sep 09 2020
parent jmh530 <john.michael.hall gmail.com> writes:
On Wednesday, 9 September 2020 at 15:30:33 UTC, Shaleen Chhabra 
wrote:
 [snip]

 Hi, I updated my dmd version to dmd-2.093.1
 Now it throws a conflict error between

 1. function mir.ndslice.topology.iota!(long, 1LU).iota at 
 mir/ndslice/topology.d(630) conflicts with function 
 std.range.iota!int.iota at 
 /home/shaleen/.dvm/compilers/dmd-2.093.1/linux/bin/../../src/phobos/std/range/package.d

 2. template mir.ndslice.topology.map(fun...) if (fun.length) at 
 mir/ndslice/topology.d(2565) conflicts with template 
 std.algorithm.iteration.map(fun...) if (fun.length >= 1) at 
 /home/shaleen/.dvm/compilers/dmd-2.093.1/linux/bin/../../src/phobos/std/algorithm/iteration.d(482)
Below would generate the same error for iota. There are iota functions in std.range and mir.ndslice.topology and the compiler does not know which one to use. You can use one or the other or use static imports. In the future, it will be a little easier to identify the issues if you post the code as well. You can also start with simpler examples and work your way to larger ones. ``` /+dub.sdl: dependency "mir-algorithm" version="*" +/ import std.range; import mir.ndslice.topology; void main() { auto x = iota(5); } ```
Sep 09 2020