mir 0.16.0-alpha1
Numerical library for Dlang
To use this package, run the following command in your project's root directory:
Manual usage
Put the following dependency into your project's dependences section:
Mir
Generic Numerical Library for Science and Machine Learning.
Contents
mir.ndslice
Multidimensional Random Access Ranges and Arraysmir.sparse
Sparse TensorsSparse
- DOK format- Different ranges for COO format
CompressedTensor
- CSR/CSC formatsmir.sparse.blas
- Sparse BLAS forCompressedTensor
mir.model.lda.hoffman
- Online variational Bayes for latent Dirichlet allocation (Online VB LDA) for sparse documents. LDA is used for topic modeling.mir.combinatorics
Combinations, combinations with repeats, cartesian power, permutations.mir.las.sum
Functions and Output Ranges for Summation Algorithms. Works with user-defined types.- Precise algorithm: improved analog of Python's
fsum
- Pairwise algorithm: fast version for Input Ranges
- Kahan, KBN, and KB2 algorithms
mir.blas
- this is slow snail, it is for experiments with BLAS API. Don't use for now.
In progress
mir.random
- non-uniform RNGs.mir.blas
- BLAS in D.
Documentation
Alpha version of API is available here.
Compatibility
Linux | Mac OS X | Windows | |
---|---|---|---|
DMD 64 | |||
DMD 32 | OS X >= 10.7 is x86-64 only | ||
LDC 64 | by ignoring issue #120 | ||
LDC 32 | OS X >= 10.7 is x86-64 only | by ignoring issue #120 |
- DMD (reference D compiler) >=
2.070
- LDC (LLVM D Compiler) >=
1.0.0
.
Installation
Fast setup with the dub package manager
Dub is the D's package manager. You can create a new project with:
dub init --format=json <project-name>
Now you need to edit the dub.json
add mir
as dependency and set its targetType to executable
.
{
...
"dependencies": {
"mir": "~><current-version>"
},
"targetType": "executable"
}
Now you can create a main file in the source
and run your code with:
dub
You can use a different compile with dub --compiler ldc
.
For a performance boost, add -b release
to let the compiler perform additional
optimizations, inlining, removal of bound checking and assert
statements.
Rapid edit-run cycle without dub
The easiest way to execute your code is with rdmd
.
rdmd -Isource examples/means_of_columns.d
rdmd
is a companion to the dmd
compiler that simplifies the typical edit-compile-link-run or edit-make-run cycle to a rapid edit-run cycle. Like make and other tools, rdmd
uses the relative dates of the files involved to minimize the amount of work necessary. Unlike make, rdmd
tracks dependencies and freshness without requiring additional information from the user.
You can find more information here.
Compile with ldc
The easiest way is to specify mir's sources during compilation:
ldc -Isource examples/means_of_columns.d
If you copy mir
's sources to /usr/include/dlang/ldc/mir
you don't even need the -Isource
include.
You might want to have a look at dynamic linking with dmd below - it works with ldc
too.
For an additional performance boost, you can pass -release -inline
to ldc
.
Compile with dmd
Warning: Manually using dmd
is a bit more complicated and if you are new
to DLang, we advise you to use either rdmd
, dub
or ldc
.
Step 1: Compile your file(s)
dmd -c -Isource examples/means_of_columns.d
If you do this more often, you probably want to install a Mir package or put the mir sources to /usr/include/dlang/dmd
.
Now you can either use static linking (will copy everything into the binary) or dynamic linking (will load binary on run) to create an executable.
Step 2a: Static linking
Static linking will result in copying all library routines in your binary. While this might require more disk space, it is faster and more portable.
The only downside is that it requires recompilation if mir
is updated.
2.a.1: Create static mir library
You need to create a static library of mir
once:
dmd -lib -oflibmir.a $(find source -name '*.d')
If you have dub
available, you can also use dub -c static-lib
.
2.a.2: Link statically
dmd means_of_columns.o libmir.a
Step 2b: Dynamic linking
With dynamic linking the OS will bind the binary and it's required external shared libraries at runtime.
2.b.1: Create shared mir library
You need to create a shared, dynamic library of mir
once:
dmd -shared -oflibmir.so -defaultlib=libphobos2.so -fPIC $(find source -name '*.d')
We need to specify:
-defaultlib=libphobos2.so
as Phobos is statically linked by default.fPIC
to create Position Independent Code (it creates a global offset table)
If you have dub
available, you can also use dub -c dynamic-lib
.
2.b.2: Link dynamically
dmd means_of_columns.o -Llibmir.so -L-rpath=.
You can inspect the dynamic linking with ldd means_of_columns
.
Packages
Putting mir
in /usr/include/dlang/dmd
, avoids the need for -Isource
.
So you can execute your code with rdmd <your-file.d>
Arch Linux
Type | Name | Version |
---|---|---|
Stable | libmir | |
Latest | libmir-git |
Contributing
See our TODO List. Mir is very young and we are open for contributing to source code, documentation, examples and benchmarks.
Notes
mir.ndslice
is a development version of thestd.experimental.ndslice
package.
- Registered by Ilia Ki
- 0.16.0-alpha1 released 8 years ago
- libmir/mir
- BSL-1.0
- 2015-2016, Ilya Yaroshenko, Mir Team
- Authors:
- Dependencies:
- none
- Versions:
-
3.2.3 2022-Jun-05 3.2.2 2020-Nov-15 3.2.1 2020-Mar-30 3.2.0 2019-Apr-13 3.1.2 2019-Mar-23 - Download Stats:
-
-
0 downloads today
-
0 downloads this week
-
8 downloads this month
-
16731 downloads total
-
- Score:
- 2.7
- Short URL:
- mir.dub.pm