Git Product home page Git Product logo

common-lisp-numsci-call-for-needs's Introduction

Common Lisp: Numerical and Scientific Computing - Call for Needs

There are numerous numerical and scientific computing libraries in Common Lisp - the awesome-cl list is given below. And yet, it always feels insufficient.

The following repository is an effort to consolidate the needs of multiple individuals and organizations who are using or want to use Common Lisp to meet their numerical and scientific (numsci) computing needs. To contribute, simply create an issue with the following details:

  1. What problems or end-goals do you plan to use the numsci ecosystem for? Examples may include: graphics, physics, biology, etc. Try to be specific, but if it’s difficult to be specific because, say, you are still in an exploratory phase, that’s okay.
  2. What current libraries from those listed below are the closest to meeting your needs?
  3. What non-lisp libraries and framework do you think are the closest to meeting your needs?
  4. Do you think your needs can be met by a thin CFFI wrapper around the foreign libraries? Did you try cl-autowrap? If you tried cl-autowrap but ran into difficulties, could you describe the issues you faced?
  5. What problems do you face while using the lisp numsci libraries, and what is your wish-list for them? When was the last time you wanted to drop Common Lisp in favour of another ecosystem? What made you want to switch, what made you stick?
  6. Any other details you wish to provide.

The issues may eventually be consolidated into this README by issuing Pull requests. If you feel the consolidation process can be improved in some way, feel free to create an issue for that too, and tag it as Meta.

Remarks

OpenCV

awesome-cl list

Source: awesome-cl

Graphics

These are libraries for working with graphics, rather than making GUIs (i.e. widget toolkits), which have their own section.

  • Sketch - A CL framework for the creation of electronic art, graphics, and lots more. [MIT][200].
  • cl-svg - A basic library for producing SVG files. [Expat][14].
  • dufy - exact color manipulation and conversion in various color models. [MIT][200].
  • opticl - a library for representing and processing images. [BSD_2Clause][17].
  • Varjo - Lisp to GLSL translator. [BSD_2Clause][17].
  • Vecto - Simple vector drawing library. [FreeBSD][39].
  • zpng - A library for creating PNG files. [FreeBSD][39].
  • pngload-fast - A PNG (Portable Network Graphics) image format decoder in portable Common Lisp with an emphasis on speed. [MIT][200].

Those are bindings:

  • cl-raylib NEW in 2023 - fully auto-generated Common Lisp bindings to Raylib and Raygui using claw and cffi-object. Apache 2.0.
  • glfw NEW in 2023 - An up-to-date Common Lisp bindings library to the most recent GLFW OpenGL context management library.
  • common-cv - the OpenCV (Open Source Computer Vision Library) binding library for CommonLisp. No license specified.
  • cl-cairo2 - Cairo bindings. [Boost 1.0][54]
  • cl-gd - A library providing an interface to the GD graphics library. [FreeBSD][39].
  • cl-horde3d - FFI bindings to the Horde3D graphics library. Not available on Quicklisp. [EPL 1.0][59]
  • cl-jpeg - Baseline JPEG encoder and decoder library. [3-clause BSD][15].
  • cl-liballegro - Interface and bindings to the Allegro 5 game programming library. [zlib][33].
  • cl-opengl - CFFI bindings to OpenGL, GLU and GLUT APIs. [3-clause BSD][15].
  • cl-sdl2 - Bindings for SDL2 using C2FFI. [Expat][14].
  • CLinch - Common Lisp 2D/3D graphics engine for OpenGL. [FreeBSD][39].
  • donuts - Graphviz interface for Common Lisp. [Expat][14].
  • lispbuilder-sdl - A set of bindings for SDL. [Expat][14].
  • lisp-magick-wand - ImageMagick bindings. [BSD][15]. Not in Quicklisp.
  • okra - CFFI bindings to Ogre. Not available on Quicklisp. [3-clause BSD][15].
  • cl-cuda - A library to use NVIDIA CUDA in Common Lisp programs. [LLGPL][8].

Machine Learning

  • MGL - a machine learning library for backpropagation neural networks, boltzmann machines, gaussian processes and more. [MIT][200].
    • some parts originally contributed by Ravenpack International.
    • used by its author to win the Higgs Boson Machine Learning Challenge.
    • more about the author: he also won the Google AI Challenge in 2010 using Common Lisp, but without MGL, as no machine learning was needed. A related talk (59’, 2013).
  • clml - originally developed by Mathematicl Systems Inc., a Japanese company. With a tutorial. [LLGPL][8].
  • antik - a foundation for scientific and engineering computation in Common Lisp. GPL. Also mgl-mat and LLA.

Numerical and Scientific

  • maxima - Computer Algebra System. [GNU GPL3][2].
  • numcl - Numpy clone in Common Lisp. [LGPL3][9].
  • GSLL - GNU Scientific Library for Lisp; allows the use of the GSL from Common Lisp. [GNU LGPL2.1][11].
  • Xecto - A library for regular array parallelism. [3-clause BSD][15].
  • Petalisp - an attempt to generate high performance code for parallel computers by JIT-compiling array definitions. It works on a more fundamental level than NumPy, by providing even more powerful N-dimensional arrays, but just a few building blocks for working on them. [AGPL-3.0][agpl3].
  • cl-ana - Common Lisp data analysis library with emphasis on modularity and conceptual clarity. It aims to be a general purpose framework for analyzing small and large scale datasets, including binned data analysis and visualization. [GNU GPL3][2].
  • linear-programming – a library for solving linear programming problems. [MIT][200].
  • avm - Efficient and expressive arrayed vector math library with multi-threading and CUDA support. [MIT][200].
  • array-operations - a collection of functions and macros for manipulating Common Lisp arrays and performing numerical calculations with them. [MIT][200].
  • cl-geometry - a system for two dimensional computational geometry for Common Lisp. [MIT][200].
  • Vellum - Data Frames for Common Lisp. BSD_2Clause.
  • rtg-math - a selection of the math routines most commonly needed for making realtime graphics in lisp (2, 3 and 4 component vectors, 3x3 and 4x4 matrices, quaternions, spherical and polar coordinates). BSD_2Clause.
  • origin - A native Lisp graphics math library with an emphasis on performance and correctness. Includes: vectors, matrices (up to 4x4), quaternions, single/double-float support, destructive/non-destructive operations, shaping & intersections. [MIT][200].

Matrix libraries

  • magicl - Matrix Algebra proGrams In Common Lisp based on BLAS/LAPACK and Expokit, by Rigetti Computing. [BSD_3Clause][15].
  • lisp-matrix - A matrix package. [FreeBSD][39].
  • 3d-matrices - A library implementing common matrix calculations, with an emphasis on 2x2,3x3, and 4x4 matrices as commonly used in graphics. It provides some numerical functions as well, but those are not the focus. The library is heavily optimised, so it is not made of pretty code. [zlib][33].
  • clem - a matrix library. [BSD_2Clause][17].

Statistics

  • lisp-stat - an environment for statistical computing, conceptually similar to R, that is also suitable for front-line production deployments. “It grew out of a desire to have an environment for rapidly prototyping analytical and A.I. solutions, and move directly to production environments with minimal friction.”
  • common-lisp-stat - Common Lisp statistics library. [FreeBSD][39].

Units

  • physical-quantities - a library that provides a numeric type with optional unit and/or uncertainty for computations with automatic error propagation. GPL2

Utils

  • cmu-infix - A library for writing infix mathematical notation in Common Lisp. See also polisher.

common-lisp-numsci-call-for-needs's People

Contributors

digikar99 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Forkers

bebekim

common-lisp-numsci-call-for-needs's Issues

Need a DSL: I don't think standard Common Lisp can lend itself to a sufficiently good numsci ecosystem

I'm mainly drawn to Common Lisp for its stability and suitability for both prototyping and long-term projects.

  1. What problems or end-goals do you plan to use the numsci ecosystem for? Examples may include: graphics, physics, biology, etc. Try to be specific, but if it's difficult to be specific because, say, you are still in an exploratory phase, that's okay.

My main purpose with a Common Lisp numsci ecosystem would be to (i) learn machine learning and computer vision (ii) use them in longer term projects possibly spanning decades. But I also want to use efficient algorithms mirroring the 10W power usage and small data-requirements of the human brain. I usually approach lisp as a hobby. Sometimes, though, the lisp projects do end up helping the other things I am learning or doing - eg: lisp helped replace a python implementation of a certain computational model of cognition (my master's thesis work) with a significantly faster version.

  1. What current libraries from those listed awesome-cl list are the closest to meeting your needs?

At the moment, I'm trying to learn something more theoretical and less applied. As such, I want tools that can help me implement more basic algorithms pertaining to machine learning or computer vision - for example, matrix multiplication, backpropagation, sigmoidal or atan activation. For these, I need fast exp, atan, add, multiply, and other basic math operations. cl-cuda might be the closest but see my answer to question 5.

  1. What non-lisp libraries and framework do you think are the closest to meeting your needs?

NumPy or Julia seem really well suited for my purpose.

  1. Do you think your needs can be met by a thin CFFI wrapper around the foreign libraries? Did you try cl-autowrap? If you tried cl-autowrap but ran into difficulties, could you describe the issues you faced?

I do try to use cl-autowrap wherever possible. One issue I had run into was that cl-autowrap provides no way to inline the C wrapping functions - but I was able to work around it. On the other hand, I'm still trying to figure out how to pass around complex numbers.

  1. What problems do you face while using the lisp numsci libraries, and what is your wish-list for them? When was the last time you wanted to drop Common Lisp in favour of another ecosystem? What made you want to switch, what made you stick?

Unfortunately, I have ended up convincing myself that a sufficiently good numsci ecosystem is beyond standard Common Lisp and requires a full blown DSL, like Coalton. Particularly, dispatching on specialized arrays, custom arrays, optimization with generically written algorithms seem beyond the scope of standard Common Lisp. Even Coalton is a work in progress. So, pretty much always, I'm questioning myself if I'd be better off investing in another ecosystem. But, lisp's SLIME/SLYNK environment, its global-but-dynamically-scoped-variable-bindings, the condition system, paredit, these will make me curse another ecosystem just as much. OTOH, I regularly use python to write short scripts.

I have ended up consolidating a few CLTL2-based tools into peltadot that tries to solve several of these problems in one go.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.