Nelson - Nelson numerical interpreter

Overview

Nelson logo

Codacy Badge Total alerts CII Best Practices

Build Status Build Status Build status CircleCI Build Status

GitHub license CLA assistant Open Hub Weblate

Join the chat at https://gitter.im/nelson-numerical-software/Lobby

Nelson is an array programming language providing a powerful open computing environment for engineering and scientific applications using modern C/C++ libraries (Boost, Eigen, …) and others state of art numerical libraries.

It has sophisticated data structures (including cell, struct, linear systems, …), an interpreter and a high level programming language.

Nelson has been developed to be an open/modular system where an user can define these own data types and operations on these data types by using overload.

Nelson environment

Web site

Features

  • Types managed by Nelson:

    • double and double complex: scalar, vector, matrix 2D, N dimensions array, sparse matrix.
    • single and single complex: scalar, vector, matrix 2D, N dimensions array, sparse matrix.
    • logical: scalar, vector, matrix 2D, N dimensions array, sparse matrix.
    • character array (UNICODE supported).
    • string array (UNICODE supported).
    • integers 8, 16, 32, 64 signed and unsigned: scalar, vector, matrix 2D, N dimensions array.
    • handle objects.
  • OpenMP and SIMD extensions used.

  • Fast Fourrier Transformation functions based on FFTW and MKL wrapper.

  • SLICOT (Subroutine Library in Systems and Control Theory) interfaces (optional).

  • Message Passing Interface (MPI): functions for parallel computing.

  • JSON decode/encode data support.

  • HDF5 high-level functions I/O,

  • HDF5 used as default data file format (.nh5) load/save workspace,

  • MAT-file compatible load/save workspace,

  • Foreign Function Interface C/Fortran.

  • Interfacing C/C++ or Fortran with Nelson (build and load external code on the fly).

  • MEX C API compatibility.

  • Nelson Engine API for C (compatible with MEX Engine). Call Nelson from your C code as engine.

  • RESTful API web service.

  • Inter-process communication between Nelson's process.

  • The QML engine enables nelson programs to display and manipulate graphical content using Qt's QML framework.

  • Component Object Model (COM) client interface: binary-interface standard for software components on Windows.

  • Write/Read xlsx files on Windows using COM.

  • Embedded Nelson code editor.

  • Help engine:

    Generate help files using Nelson dedicated functions. View your generated help files as html, markdown, pdf, gitbook or directly in Nelson help viewer.

  • Tests engine:

    Validate your algorithm using Nelson dedicated functions. Export the test results under the xUnit reports format.

  • Profiling and Code coverage tools for Nelson's language:

    Nelson has a built-in profiler that is very useful to profile your code and find out what script or function is taking the most time.

  • Nelson cloud: Instant access to Nelson anywhere from an web browser.

  • Module skeleton to extend Nelson available here:

  • Nelson Modules Manager (nmm) : package manager for Nelson

Licenses

Nelson is delivered under dual-license:

  • License (GNU Lesser General Public License (LGPL) v2.1)

    or

  • License (GNU General Public License (GPL) v2.0)

Resources

Tested and supported platforms

Systems with ✓ downloads are available on downloads page.

Systems with ✓ for CI are tested with continuous integration for every commit.

The systems listed here without CI or binaries are known to build and operate, but the continued support of these platforms is user-dependent.

Operating System Architecture CI Binaries
Windows 7 to 11 x86-64 (64-bit)
i686 (32-bit)
MacOS 10.10+ x86-64 (64-bit)
Ubuntu 20.04 x86-64 (64-bit)
Ubuntu 18.04 x86-64 (64-bit)
Ubuntu 16.04 x86-64 (64-bit)
Debian 10 x86-64 (64-bit)
Fedora 30 x86-64 (64-bit)
ArchLinux x86-64 (64-bit)
ARM v7 (32-bit)
ARM v8 (64-bit)
Ubuntu (aarch64) ARM v8 (64-bit)
Raspbian ARM v7 (32-bit)

Allan CORNET ([email protected])

Comments
  • Overloading

    Overloading

    speed optimization about overloading operators and functions reworked to support overloading By default basic type are used and overloading called after.

    enhancement 
    opened by Nelson-numerical-software 17
  • h5_load, h5_save templates

    h5_load, h5_save templates

    Nelson uses hdf5 file as default matrix variables backup. h5_save(filename) h5_save(filename, 'varname1', ..., 'varnameN') h5_save(filename, 'varname1', ..., 'varnameN', '-nocompression') h5_save(filename, 'varname1', ..., 'varnameN', '-append')

    h5_load(filename) h5_load(filename, 'varname1', ..., 'varnameN') st = h5_load(filename, 'varname1', ..., 'varnameN')

    enhancement 
    opened by Nelson-numerical-software 13
  • mex (.nex) load on fly, functions in memory reworked, inmem builtin, ...

    mex (.nex) load on fly, functions in memory reworked, inmem builtin, ...

    To do:

    • [x] ismex and modify exist, update mex tests
    • [x] clear mex artefacts after build
    • [x] rehash after mex build
    • [x] mex, mfunctions loaded in memory callable only if in path or current directy
    cd d:/
    mex('mxUnlock.c')
    mxUnlock()
    cd e:/
    // must return an error
    
    • [x] mex map must be LIFO
    cd d:/
    mex('mxUnlock.c')
    mxUnlock()
    cd e:/
    mex('mxUnlock.c')
    mxUnlock()
    
    • [x] add timestamp check on macro functions
    • [x] fix regression about bench on overloading
    opened by Nelson-numerical-software 10
  • Enable LGTM.com analysis for C/C++ code

    Enable LGTM.com analysis for C/C++ code

    Hi team!

    I noticed that you've recently enabled LGTM's automatic code review for pull requests, but that your C/C++ code wasn't being analysed. This lgtm.yml file should install the right dependencies that we couldn't automatically detect (working on a fix to the auto-detection); C/C++ results are on their way! If you ever need to tweak your build process for LGTM: https://lgtm.com/help/lgtm/cpp-extraction

    This lgtm.yml also lists some modules as 'library' code — do add more if you think I've missed some. You obviously know the code base much better than me. Last but not least: an LGTM badge :slightly_smiling_face:

    Feel free to tweak the PR!

    enhancement 
    opened by sj 10
  • colon operator does not return expected for non scalar element

    colon operator does not return expected for non scalar element

    Describe the bug

    --> [1 2]:2
    Expected a real value scalar.
    called from:
    EvaluateString
    at line: 1 position: 7
    
    --> (1:2):2
    
    ans =
    
         1     0  // Not OK, should raise an error, cf. above
    

    Desktop (please complete the following information):

    • OS: Ubuntu 14.04
    • Version 0.2.50
    bug 
    opened by rdbyk 9
  • Matrix Cosine is Slooooooow!

    Matrix Cosine is Slooooooow!

    To Reproduce

    --> A=rand(500,500);
    --> tic;expm(A);toc
    Elapsed time is 0.382739 seconds.
    --> tic;cosm(A);toc
    Elapsed time is 11.684408 seconds.
    

    Desktop (please complete the following information):

    • OS: Ubuntu 14.04 LTS
    enhancement 
    opened by rdbyk 9
  • Execution of Simple Expression

    Execution of Simple Expression "1+2+3" is Rather Slow

    I am aware, that the project is in an early stage of development and it really looks very promising, but there seems to be a bottle neck which slows down the execution of simple expressions, e.g. "1+2+3", significantly ...

    Nelson (current master)

    --> tic;for i=1:1e5;1+2+3;end;toc
    Elapsed time is 4.590101 seconds.
    

    Scilab (current master)

    --> tic;for i=1:1e5;1+2+3;end;toc
     ans  =
    
       0.079408
    

    Your Environment

    • OS: Ubuntu 14.04 LTS
    • Nelson version: current master
    enhancement 
    opened by rdbyk 8
  • Temporarily revert to old CodeQL version

    Temporarily revert to old CodeQL version

    What was a problem?

    https://github.com/github/codeql/issues/10194

    How this Pull Request fixes the problem?

    Switch to the 2.10.4 (pre-release) version of CodeQL , which includes https://github.com/github/codeql/pull/10128

    @Nelson-numerical-software

    opened by aibaars 5
  • matio

    matio

    read/write mat file format in Nelson

    • [x] savemat
    • [x] savemat tests
    • [x] savemat help
    • [x] loadmat
    • [x] loadmat tests
    • [x] loadmat help
    • [x] whosmat
    • [x] whosnh5
    • [x] whos
    enhancement 
    opened by Nelson-numerical-software 5
  • Build fails with `Recursion stack not enough.`

    Build fails with `Recursion stack not enough.`

    For some experiments I'm trying to set up a CodeQL job identical to yours, except that I'm using a somewhat differently configured Ubuntu 22.04 runner. Unfortunately on that particular runner I see the build failing with the error below. Could you offer some guidance how to solve this or work around this? We did play around a bit with ulimit, but that seemed to have little effect. Thanks.

    FAILED: modules/main/CMakeFiles/Name /home/runner/work/codeql-dca-worker/codeql-dca-worker/modules/main/CMakeFiles/Name 
    cd /home/runner/work/codeql-dca-worker/codeql-dca-worker/modules/main && /home/runner/work/codeql-dca-worker/codeql-dca-worker/bin/linux/nelson-cli --nousermodules --noipc --quiet --file /home/runner/work/codeql-dca-worker/codeql-dca-worker/bin/linux/../../tools/gettext/generatemo.m
    Recursion stack not enough.
    Please set C recursion stack to 62914560
    Current C stack is: 16777216
    

    Your Environment

    • OS: Ubuntu 22.04
    • Nelson version: 3479d3b1b3a8a7fa5e4dc246546b967bdbc8631a (this is completely arbitrarily chosen)
    opened by jketema 4
  • Nelson Portable Apps

    Nelson Portable Apps

    see https://portableapps.com/development

    Nelson windows binary are already portable. Unzip and click bin/x64/nelson-gui.exe But we could update to register in portableapps

    enhancement 
    opened by Nelson-numerical-software 4
  • Minimal build

    Minimal build

    For some usage, It is sometime interesting to build Nelson with minimal dependencies. equivalent to `nelson -cli --noipc --nostartup' a flag will be defined in cmake, vs projects and empty projects will be also generated.

    enhancement 
    opened by Nelson-numerical-software 0
  • rework bench_run to use 'timeit'

    rework bench_run to use 'timeit'

    result of 'timeit' are better than run only once bench It requires to rework bench and it can also change some times references :( ... But it will be near of the true value.

    enhancement 
    opened by Nelson-numerical-software 0
Releases(v0.6.8)
Owner
Allan CORNET
inspiration and perspiration.
Allan CORNET
Freeze OS is a cross-platform operating system emulator that runs on top of an interpreter called the Freeze interpreter.

Freeze OS is a cross-platform operating system emulator that runs on top of an interpreter called the Freeze interpreter. The operating system code is basically written in the Freeze programming language that is passed to the Freeze interpreter. The idea is to skip instances where the operating system needs to handle low level operators and focus on higher level stuff, like malware analysis, AI, and others.

null 24 May 2, 2022
SANM: A Symbolic Asymptotic Numerical Solver

SANM: A Symbolic Asymptotic Numerical Solver This repository is the official implementation of the SANM solver described in our paper to appear at SIG

Kai Jia 27 Aug 13, 2022
numerical optimizaiton methods with msnhnet

Numerical Optimization with Msnhnet. Algorithms: Unconstrained Methods Steepest Descent Newton Damped Newton Newton Levenberg Marquardt Quasi Newton (

msnh2012 11 May 22, 2022
Wolfram Language interface to the Gurobi numerical optimization library

GurobiLink for Wolfram Language GurobiLink is a package implemented in Wolfram Language and C++ using LibraryLink that provides an interface to the Gu

Wolfram Research, Inc. 15 Mar 14, 2022
lightweight, compile-time and rust-like wrapper around the primitive numerical c++ data types

prim_wrapper header-only, fast, compile-time, rust-like wrapper around the primitive numerical c++ data types dependencies gcem - provides math functi

null 1 Oct 22, 2021
An efficient C++17 GPU numerical computing library with Python-like syntax

MatX - Matrix Primitives Library MatX is a modern C++ library for numerical computing on NVIDIA GPUs. Near-native performance can be achieved while us

NVIDIA Corporation 549 Sep 9, 2022
OptimLib: a lightweight C++ library of numerical optimization methods for nonlinear functions

OptimLib OptimLib is a lightweight C++ library of numerical optimization methods for nonlinear functions. Features: A C++11 library of local and globa

Keith O'Hara 578 Sep 16, 2022
Xerus - A general purpose library for numerical calculations with higher order tensors, Tensor-Train Decompositions / Matrix Product States and other Tensor Networks

About The xerus library is a general purpose library for numerical calculations with higher order tensors, Tensor-Train Decompositions / Matrix Produc

null 18 Apr 20, 2021
Nano - C++ library [machine learning & numerical optimization] - superseeded by libnano

Nano Nano provides numerical optimization and machine learning utilities. For example it can be used to train models such as multi-layer perceptrons (

Cosmin Atanasoaei 1 Apr 18, 2020
SubLink is a C++ library used for constructing and analyzing merger trees in numerical simulations of galaxy formation

README SubLink is a C++ library used for constructing and analyzing merger trees in numerical simulations of galaxy formation. Brief description SubLi

nelson-group 1 Jan 20, 2022
lambda calculus interpreter

lambda calculus interpreter what: A small lambda calculus interpreter written in C++. It supports α-conversion and β-reduction, as well as precise tra

zhiayang 23 Jun 15, 2022
INSTEAD interpreter for developers

instead-cli Trivial INSTEAD interpreter for developers. Build and run Dependencies: luajit (or lua), iconv. $ git clone https://github.com/instead-hub

INSTEAD 8 Apr 22, 2022
C64 Watch is a customized T-Watch 2020 that was inspired by the Commodore 64 computer. It features a C64 theme and a built-in BASIC interpreter.

C64 Watch C64 Watch is a customized T-Watch 2020 that was inspired by the Commodore 64 computer. It features a C64 theme and a built-in BASIC interpre

Nick Bild 29 Sep 21, 2022
A interpreter that runs the script which is programmed in the language of FF0 script (or you can call it as Warfarin)

ff0-script A interpreter that runs the script which is programmed in the language of FF0 script (or you can call it as Warfarin) You can do it, unders

null 24 Apr 27, 2022
Tails is a fast, minimal Forth-like interpreter core in C++ with no assembly

Tails is a minimal, fast Forth-like interpreter core. It uses no assembly code, only C++, but an elegant tail-recursion technique inspired by Wasm3 makes it nearly as efficient as hand-written assembly. I created it as a one-day hack to celebrate May Forth 2021 … then kept going because it's fun.

Jens Alfke 63 Jun 13, 2022
Python bindings for Wasm3, the fastest WebAssembly interpreter

pywasm3 Python bindings for Wasm3, the fastest WebAssembly interpreter Main repository: Wasm3 project Install # Latest release: pip3 install pywasm3

Wasm3 Labs 47 Aug 8, 2022
C.impl is a small portable C interpreter integrated with a line text editor

C.impl C.impl is a small portable C interpreter integrated with a line text editor, originally developed for the ELLO 1A computer: http://ello.cc The

KnivD 19 Aug 12, 2022
A WebAssembly interpreter written in C for demonstration.

wasmc 中文文档 A WebAssembly interpreter written in C for demonstration. This repository implements a WebAssembly interpreter. It is written to clarify ho

湮远 54 Jul 25, 2022
Interpreter and miner for the LODA language written in C++

LODA Interpreter and Miner (C++) LODA is an assembly language, a computational model and a tool for mining integer sequences. You can use it to search

LODA Language 12 Sep 22, 2022
An interpreter for a simple imperative language called IPL

For this project, I've implemented an interpreter for IPL, a small imperative language created for educational purposes in the Introduction to Programming course (k04), using some of the techniques I learned from the book Crafting Interpreters.

Jo 11 Aug 20, 2022