mir 0.16.0-alpha5
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.ndsliceMultidimensional Random Access Ranges and Arraysmir.sparseSparse TensorsSparse- DOK format- Different ranges for COO format
CompressedTensor- CSR/CSC formatsmir.sparse.blas- Sparse BLAS forCompressedTensormir.model.lda.hoffman- Online variational Bayes for latent Dirichlet allocation (Online VB LDA) for sparse documents. LDA is used for topic modeling.mir.combinatoricsCombinations, combinations with repeats, cartesian power, permutations.mir.las.sumFunctions 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 | |||
| LDC 32 | OS X >= 10.7 is x86-64 only |
- 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.soas Phobos is statically linked by default.fPICto 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.ndsliceis a development version of thestd.experimental.ndslicepackage.
- 0.16.0-alpha5 released 9 years ago
- libmir/mir
- BSL-1.0
- 2015-2016, Ilya Yaroshenko, Mir Team
- Authors:
- Dependencies:
- none
- Versions:
-
Show all 81 versions3.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
-
360 downloads this month
-
22832 downloads total
-
- Score:
- 4.3
- Short URL:
- mir.dub.pm