481 Commits

Author SHA1 Message Date
Vassil Vassilev
fc33c22f45 Bump clad version to v0.4.
The new release includes some improvements in both Forward and
Reverse mode:
  * Support `x += y`, `x -= y`, `x *= y`, `x /= y`, `x++`, `x--`, `++x`, `--x`
    in forward mode.
  * Reduce emission of unused expressions
  * Add a special `#pragma clad ON/OFF/DEFAULT` to annotate regions which
    contain derivatives
  * Various small optimizations

See more at: https://github.com/vgvassilev/clad/blob/v0.4/docs/ReleaseNotes.md
2018-11-06 11:59:41 +01:00
Sylvain Corlay
7116e7239c Add missing libraries 2018-10-19 00:30:04 +02:00
Vassil Vassilev
38eb2b89ba Allow plugins to handle custom pragmas.
This will help clad implement pattern such as:
#pragma clad on
// code which needs derivation
#pragma clad off
2018-10-08 21:44:55 +02:00
Vassil Vassilev
818126599b Also update the version on unix.
This is part of 4ff4d9aa2d.
2018-09-30 20:59:41 +02:00
Vassil Vassilev
628288faee Bump clad version to v0.3.
The new release includes some improvements in both Forward and
Reverse mode:
  * Better correctness of C++ constructs -- handle scopes properly; allow proper
  variable shadowing; and preserve namespaces.
  * Efficient evaluation in forward mode.
  * Reduced cloning complexity.
  * Handle more C++ constructs -- variable reassignments and for loops.

See more at: https://github.com/vgvassilev/clad/blob/v0.3/docs/ReleaseNotes.md
2018-09-28 21:29:14 +02:00
Axel Naumann
0a416cd1ed Inject -isysroot ${CMAKE_OSX_SYSROOT} to clad. 2018-09-28 17:43:44 +02:00
Vassil Vassilev
c63ab13a9e Specify where the clang header files are.
In cases where we build ROOT with -Dbuiltin_llvm=Off -Dbuiltin_clang=On
and we have installed both llvm and clang in /usr/ clad will pick up
the clang headers from there too.

This patch gives higher priority to the header files which ROOT is
supposed to use. It fixes a very obscure initialization issue due to
different versions of the ASTContext.h installed and used by ROOT.
2018-08-22 20:14:52 +02:00
Oksana Shadura
6238cda8df Updating clad build CMake arguments for the case when buiting_llvm and buitin_clang is OFF 2018-08-17 13:14:37 +02:00
Bertrand Bellenot
5b55c52bda Fix builing of clad and related test on Windows 2018-08-10 10:44:09 +02:00
Vassil Vassilev
bba0c4b9e0 Update clad to v0.2
The relevant highlights are:

* Support better Windows (thanks to Bertrand Bellenot!);

* Disabled automatic discovery of system LLVM -- clad should only
  search for LLVM at DCLAD_PATH_TO_LLVM_BUILD. On some platforms
  (discovered by Oksana Shadura via rootbench) clad discovers the
  system LLVM which is compatible in principle but this is not what
  we want for ROOT.

* Implemented -CLAD_BUILD_STATIC_ONLY -- this covers the ROOT usecase
  where we do not need shared objects but link the libraries against
  another shared object (libCling.so). This allows platforms which have
  disabled LLVM_ENABLE_PLUGINS to still build clad and use it. Such
  example is CYGWIN and Windows.

See more at: https://github.com/vgvassilev/clad/releases/tag/v0.2
2018-08-08 20:14:37 +02:00
Vassil Vassilev
e9068c56b1 Enable the automatic differentiation library clad in ROOT.
clad is a C++ plugin for clang and cling that implements automatic
differentiation of user-defined functions by employing the chain rule in
forward and reverse mode, coupled with source code transformation and AST
constant fold.

In mathematics and computer algebra, automatic differentiation (AD) is a
set of techniques to numerically evaluate the derivative of a function
specified by a computer program. AD exploits the fact that every computer
program, no matter how complicated, executes a sequence of elementary
arithmetic operations (addition, subtraction, multiplication, division, etc.)
and elementary functions (exp, log, sin, cos, etc.). By applying the chain
rule repeatedly to these operations, derivatives of arbitrary order can
be computed automatically, accurately to working precision, and using at
most a small constant factor more arithmetic operations than the original
program.

AD is an alternative technique to symbolic and numerical differentiation.
These classical methods run into problems: symbolic differentiation leads
to inefficient code (unless done carefully) and faces the difficulty of
converting a computer program into a single expression, while numerical
differentiation can introduce round-off errors in the discretization
process and cancellation. Both classical methods have problems with
calculating higher derivatives, where the complexity and errors increase.
Finally, both classical methods are slow at computing the partial
derivatives of a function with respect to many inputs, as is needed for
gradient-based optimization algorithms. Automatic differentiation solves
all of these problems, at the expense of introducing more software
dependencies.

This patch allows ROOT to interoperate with clad. Namely, users can ask
the interpreter to produce a derivative or a gradient to a known function.

An illustrative example code for first order derivative:

root [0] #include "Math/CladDerivator.h"
root [1] double my_pow2(double x) { return x*x; }
root [2] auto meta_obj = clad::differentiate(my_pow2, /*wrt 1-st argument*/0);
root [3] meta_obj.dump();
The code is: double my_pow2_darg0(double x) {
    return (1. * x + x * 1.);
}
root [5] meta_obj.execute(1) // no iterations, at the cost of function call.
(double) 2.0000000

Learn more about clad at https://github.com/vgvassilev/clad

Patch by Aleksandr Efremov and me!
2018-08-03 09:15:01 +02:00
Vassil Vassilev
272905eced Implement clang plugin support.
Clang allows third party shared libraries to provide user-defined
extensions. For example, a custom libTemplateInstantiation.so can
visualize all template instantiation chains in clang. To enable it
one needs to pass a set of options such as -fplugin.

Cling should be able to inherently work with clang plugins. However,
cling still does not make full use of the clang driver where the plugin
setup is handled.

This patch enables plugins in cling and extends them in some aspects.
In particular, cling allows loading of plugins from shared libraries
but also if they are linked to the same library where cling is. This is
very useful in cases where cling runs itself in a shared library (eg
libCling). Users of libCling (such as ROOT) prefer to keep all llvm and
clang related symbols local to avoid symbol clashes if there is another
version of clang and llvm linked against a package. This can be done by
dlopen-ing libCling with RTLD_LOCAL visibility mode. Then the only way
for clang plugins to work in this scenario is to be linked to libCling.

Patch by Aleksandr Efremov and me.
2018-07-28 13:17:44 +02:00
Vassil Vassilev
19915ff6d2 Add missing link libraries. 2018-07-27 11:14:04 +02:00
Axel Naumann
c33c5fb033 cling cpt travis fold: misspelled "end". 2018-06-14 10:14:12 +02:00
Axel Naumann
fa5aa3b2cc cling cpt: make sure TRAVIS_BUILD_DIR is found if set. 2018-06-14 09:44:07 +02:00
Axel Naumann
4f1d3d7d22 cling travis: move cpt log fold into cpt.py. 2018-06-13 12:14:13 +02:00
Nathan Daly
f2bcf29b1c Allow cpt.py to handle double-digit version numbers
Before this commit, cpt.py attempted `"3.11.1" < "3.4.3"`, but this
incorrectly returns `True`. This commit adds a function that splits the
string into version identifiers and checks them all individually.
2018-05-24 11:29:51 +02:00
Damien L-G
6bbf1f3311 Use CLING_OPTS env variable to pass extra arguments to jupyter-cling-kernel
This patch let you customize your kernel:
```
{
  "display_name": "C++14-custom",
  "argv": [
      "jupyter-cling-kernel",
      "-f",
      "{connection_file}",
      "--std=c++14"
  ],
  "language": "C++",
  "env": {"CLING_OPTS": "-I<add_directory_to_include_search_path> -L<add_directory_to_library_search_path>"}
}
```
2018-03-23 16:59:08 +01:00
Simeon Ehrig
83e3eafc44 fix CMakeFiles to allow cling build with shared libraries 2018-03-22 15:59:06 +01:00
Bertrand Bellenot
e26a6cb2df Several fixes for Windows
- cling: add missing symbol in the export list and fix semicolon issue in CMakeList.txt (it has to be in quotes)
 - cling-demo: export symbols and format hexadecimal output
2018-03-22 13:44:16 +01:00
Vassil Vassilev
bfb4168dc9 Implement basic plugin support in cling.
We rely on clang's plugin infrastructure for loading, argument processing
and unloading plugins.

This patch teaches cling to work with clang plugins such as clad -- a
clang plugin implementing automatic differentiation facilities.
2018-02-20 10:59:12 +01:00
Houkime
51acb456a1 Add "language" field to kernel.json 2018-01-15 17:14:05 +01:00
Axel Naumann
3848d29556 Fix exception if cling is not found.
See https://stackoverflow.com/questions/48244332/c-jupyter-kernel-death
2018-01-15 15:59:58 +01:00
Dheepak Krishnamurthy
bf88ee12d3 Get correct path for cling
Required for Mac with `brew install cling`
2018-01-15 12:59:47 +01:00
Dheepak Krishnamurthy
f9db95721e Check in libexec folder as well
Required for Mac brew install
2018-01-15 12:59:47 +01:00
Yuki Yamaura
38923cd710 Add support C++1z for Jupyter kernel
When run C++17 kernel in Jupyter notebook cause some errors
due to currently clang-5.0 in https://root.cern.ch/download/cling/ is not
support c++17.
So add support to C++1z for Jupyter kernel and we can try some new
features in Jupyter notebook.

for avoiding following error:

[I 05:46:38.253 NotebookApp] Kernel restarted:
d3413fa0-7046-4b63-912b-a286610eacc1
error: invalid value 'c++17' in '-std=c++17'
note: use 'c++98' or 'c++03' for 'ISO C++ 1998 with amendments' standard
note: use 'gnu++98' or 'gnu++03' for 'ISO C++ 1998 with amendments and
GNU extensions' standard
note: use 'c++11' for 'ISO C++ 2011 with amendments' standard
note: use 'gnu++11' for 'ISO C++ 2011 with amendments and GNU
extensions' standard
note: use 'c++14' for 'ISO C++ 2014 with amendments' standard
note: use 'gnu++14' for 'ISO C++ 2014 with amendments and GNU
extensions' standard
note: use 'c++1z' for 'Working draft for ISO C++ 2017' standard
note: use 'gnu++1z' for 'Working draft for ISO C++ 2017 with GNU
extensions' standard
2017-09-06 16:44:07 +02:00
Bertrand Bellenot
cb658dd0f8 Fix fatal error LNK1120: 1 unresolved externals (Windows)
Remove export symbol causing the following linker error:
cling.exp : error LNK2001: unresolved external symbol "public: void __cdecl clang::Decl::dump(class llvm::raw_ostream &)const " (?dump@Decl@clang@@QEBAXAEAVraw_ostream@llvm@@@Z)
2017-07-05 10:44:07 +02:00
Vassil Vassilev
e8659b29fc Typo. 2017-06-23 11:59:06 +02:00
Vassil Vassilev
35306f3f37 Simplify artifact selection procedure for distribution of binaries. 2017-06-23 09:59:27 +02:00
Vassil Vassilev
acc63c943c Add back the nightly cron sync job. 2017-06-23 09:29:23 +02:00
Frederich Munch
38c757e36d Have MetaProcessor::process take an llvm::StringRef. Remove unnecessary std::string -> const char* -> std::string conversions. 2017-06-21 11:29:07 +02:00
Axel Naumann
fd3738190f Make symbols visible (ROOT-8823). 2017-06-19 16:00:56 +02:00
Frederich Munch
4e324c1599 CPT: Add runSingleTest method to invoke a single test on CI for better messaging. 2017-06-14 11:29:05 +02:00
Frederich Munch
96f86e79a9 CPT: Consolidate path joining to global variable LLVM_OBJ_ROOT. 2017-06-14 11:29:05 +02:00
Vassil Vassilev
359fa4132d Forward to more-up-to-date repository 2017-06-08 15:44:37 +02:00
Diego Torres Quintanilla
952cf58b0d Fixed codemirror mode to appropriate value. Syntax highlighting in jupyter lab should work when https://github.com/jupyterlab/jupyterlab/pull/2187 is merged. 2017-05-12 09:14:05 +02:00
Axel Naumann
8c3afd1d0a Link against all available targets. 2017-05-09 09:59:05 +02:00
Axel Naumann
b9dbe1614f Update notebook, esp the kernelspec name. 2017-05-02 11:59:10 +02:00
Axel Naumann
8e2700d753 Fix ZMQ issues with threading:
run all ZMQ send()s from the main thread; run cling in a sub-thread.
2017-05-02 11:59:10 +02:00
Axel Naumann
2f13d674eb Do not echo expression results; kernel handles it. 2017-05-02 11:59:10 +02:00
Axel Naumann
97ec4b8e8a Add doc on the sideband mechanism. 2017-05-02 11:59:09 +02:00
Axel Naumann
795adc43e1 Point to authoritative repos; fixes cling builds with cpt. 2017-04-28 18:59:24 +02:00
Axel Naumann
a2cc4528e6 Update location of Jupyter kernel. 2017-04-28 18:59:24 +02:00
Santiago Castro
1b831f04f6 Fix broken Markdown headings
Signed-off-by: Vassil Vassilev <vvasilev@cern.ch>
2017-04-17 20:29:34 +02:00
Axel Naumann
7a083b672a Update doc to follow change in kernel name - thanks, Steven R. Brandt! 2017-04-07 08:44:08 +02:00
Vassil Vassilev
07065b3fff Teach cpt how to handle --create-dev-env Release option. 2017-04-06 19:59:23 +02:00
Axel Naumann
af310ace1d Reflect changed Github repo name. 2017-04-05 11:44:05 +02:00
Axel Naumann
853aa86a45 Remove stray semicolon (nfc). 2017-03-31 16:44:04 +02:00
Axel Naumann
de56970ff0 Shorten the readme path a bit. 2017-03-22 11:20:50 +01:00
Axel Naumann
c3f3247006 More relevant / less obscure examples. Indent. 2017-03-21 21:14:33 +01:00