{"id":13514823,"url":"https://github.com/wichtounet/etl","last_synced_at":"2025-04-09T22:17:34.616Z","repository":{"id":18174768,"uuid":"21286771","full_name":"wichtounet/etl","owner":"wichtounet","description":"Blazing-fast Expression Templates Library (ETL) with GPU support, in C++","archived":false,"fork":false,"pushed_at":"2023-12-16T18:15:19.000Z","size":10727,"stargazers_count":222,"open_issues_count":1,"forks_count":18,"subscribers_count":20,"default_branch":"master","last_synced_at":"2025-04-09T22:17:29.116Z","etag":null,"topics":["c-plus-plus","convolution","cpp","cpp11","cpp14","cpu","expression-template","gpu","matrix","performance"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wichtounet.png","metadata":{"files":{"readme":"README.rst","changelog":"ChangeLog.rst","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2014-06-27T19:26:25.000Z","updated_at":"2025-02-19T03:01:53.000Z","dependencies_parsed_at":"2023-11-07T02:57:01.104Z","dependency_job_id":"fcb2ed53-ae86-4502-ad06-d6738af78e37","html_url":"https://github.com/wichtounet/etl","commit_stats":{"total_commits":5630,"total_committers":4,"mean_commits":1407.5,"dds":0.000532859680284159,"last_synced_commit":"581a3deba6a1e1733805118d0d7ba4473736b9e0"},"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wichtounet%2Fetl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wichtounet%2Fetl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wichtounet%2Fetl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wichtounet%2Fetl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wichtounet","download_url":"https://codeload.github.com/wichtounet/etl/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248119286,"owners_count":21050755,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c-plus-plus","convolution","cpp","cpp11","cpp14","cpu","expression-template","gpu","matrix","performance"],"created_at":"2024-08-01T05:01:02.302Z","updated_at":"2025-04-09T22:17:34.598Z","avatar_url":"https://github.com/wichtounet.png","language":"C++","funding_links":[],"categories":["C++"],"sub_categories":[],"readme":"Expression Templates Library (ETL) 1.3.0\n========================================\n\n|logo|    |coverage| |jenkins| |license| |doc|\n\n.. |logo| image:: logo_small.png\n.. |coverage| image:: https://img.shields.io/sonar/https/sonar.baptiste-wicht.ch/etl/coverage.svg\n.. |jenkins| image:: https://img.shields.io/jenkins/s/https/jenkins.baptiste-wicht.ch/etl.svg\n.. |license| image:: https://img.shields.io/github/license/mashape/apistatus.svg\n.. |doc| image:: https://codedocs.xyz/wichtounet/etl.svg\n   :target: https://codedocs.xyz/wichtounet/etl/\n\nETL is a header only library for C++ that provides vector and matrix classes\nwith support for Expression Templates to perform very efficient operations on\nthem.\n\nAt this time, the library support compile-time sized matrix and vector and\nruntime-sized matrix and vector with all element-wise operations implemented. It\nalso supports 1D and 2D convolution, matrix multiplication (naive algorithm and\nStrassen) and FFT.\n\nYou can clone this repository directly to get all ETL features. I advice using\nit as a submodule of your current project, but you can install it anywhere you\nlike. There are several branches you can chose from\n\n* *master*: The main development branch\n* *stable*: The last stable version\n\nYou can also access by tag to a fixed version such as the tag *1.0*.\n\nUsage\n-----\n\nThe `Reference Documentation \u003chttps://github.com/wichtounet/etl/wiki\u003e`_ is always available on\nthe wiki. This document contains the most basic information that\nshould be enough to get you started.\n\nThe library is header-only and does not need to be built it at all,\nyou just have to include its header files.\n\nMost of the headers are not meant to be included directly inside\na program. Here are the header that are made to be included:\n\n* etl.hpp: Contains all the features of the library\n* etl_light.hpp: Contains the basic features of the library (no matrix multiplication, no convolution, no FFT)\n\nYou should always include one of these headers in your program. You\nshould never include any other header from the library.\n\nData structures\n***************\n\nSeveral data structures are available:\n\n* fast_matrix\u003cT, Dim...\u003e: A matrix of variadic size with elements of type T.\n  This must be used when you know the size of the vector at compile-time. The\n  number of dimensions can be anything. The data is stored is stored\n  directly inside the matrix.\n* fast_dyn_matrix\u003cT, Dim...\u003e: Variant of fast_matrix where the data\n  is stored on the heap.\n* dyn_matrix\u003cT, D\u003e: A matrix with element of type T. The size of the\n  matrix can be set at runtime.  The matrix can have D dimensions.\n\nThere also exists typedefs for vectors:\n\n* fast_vector\u003cT, Rows\u003e\u003e\n* fast_dyn_vector\u003cT, Rows\u003e\u003e\n* dyn_vector\u003cT\u003e\n\nYou have to keep in mind that fast_matrix directly store its values\ninside it, therefore, it can be very large and should rarely be\nstored on the stack. Moreover, that also makes it very expensive to\nmove and copy. This is why fast_dyn_matrix may be an interesting\nalternative.\n\nElement-wise operations\n***********************\n\nClassic element-wise operations can be done on vector and matrix as\nif it was done on scalars. Matrices and vectors can also be\nadded,subtracted,divided, ... by scalars.\n\n.. code:: cpp\n\n    etl::dyn_vector\u003cdouble\u003e a{1.0,2.0,3.0};\n    etl::dyn_vector\u003cdouble\u003e b{3.0,2.0,1.0};\n    etl::dyn_vector\u003cdouble\u003e c;\n\n    c = 1.4 * (a + b) / b + b + a / 1.2;\n\n\nAll the operations are only executed once the expression is\nevaluated to be assigned to a data structure.\n\nUnary operators\n***************\n\nSeveral unary operators are available. Each operation is performed\non every element of the vector or the matrix.\n\nAvailable operators:\n\n* log\n* abs\n* sign\n* max/min\n* sigmoid\n* noise: Add standard normal noise to each element\n* logistic_noise: Add normal noise of mean zero and variance sigmoid(x) to each\n  element\n* exp\n* softplus\n* bernoulli\n\nSeveral transformations are also available:\n\n* hflip: Flip the vector or the matrix horizontally\n* vflip: Flip the vector or the matrix vertically\n* fflip: Flip the vector or the matrix horizontally and vertically. It is the\n  equivalent of hflip(vflip(x))\n* sub: Return a sub part of the matrix. The first dimension is forced to a\n  special value. It works with matrices of any dimension.\n* dim/row/col: Return a vector representing a sub part of a matrix (a row or a\n  col)\n* reshape: Interpret a vector as a matrix\n\nReduction\n*********\n\nSeveral reduction functions are available:\n\n* sum: Return the sum of a vector or matrix\n* mean: Return the sum of a vector or matrix\n* dot: Return the dot product of two vector or matrices\n\nFunctions\n*********\n\nThe header *convolution.hpp* provides several convolution operations\nboth in 1D (vector) and 2D (matrix).\n\nThe header *mutiplication.hpp* provides the matrix multiplication\noperation. mmul is the naive algorithm (ijk), which strassen_mmul implements\nStrassen algorithm.\n\nIt is possible to pass an expression rather than an data structure\nto functions. Keep in mind that expression are lazy, therefore if\nyou pass a + b to a matrix multiplication, an addition will be run\neach time an element is accessed, therefore, it is not often\nefficient.\n\nGenerators\n**********\n\nIt is also possible to generate sequences of data and perform\noperations on them.\n\nFor now, two generators are available:\n\n* normal_generator: Generates real numbers distributed on a normal\n  distribution\n* sequence_generator(c=0): Generates numbers in sequence from c\n\nAll sequences are considered to have infinite size, therefore, they\ncan be used to initialize or modify any containers or expressions.\n\nBuilding\n--------\n\nThis library is completely header-only, there is no need to build it.\n\nHowever, this library makes use of C++23, therefore, a recent compiler \nis necessary to use it. This library is currently tested on the following compilers:\n * GCC 13 and greater\n * Clang 16 and greater\n\nIf compilation does not work on one of these compilers, or produces warnings,\nplease open an issue on Github and I'll do my best to fix the issue.\n\nThe library has never been tested on Windows.\n\nThe folders **include** and **lib/include** must be included with the **-I** option.\n\nThere are no link-time dependencies.\n\nIf you have problems compiling this library, I'd be glad to help,\nbut I do not guarantee that this will work on every compiler. I\nstrongly expect it to not build under Visual Studio.\n\nLicense\n-------\n\nThis library is distributed under the terms of the MIT license, see `LICENSE`\nfile for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwichtounet%2Fetl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwichtounet%2Fetl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwichtounet%2Fetl/lists"}