From fa4dbb1b9ba448c5989a04c50a68b88b80f409de Mon Sep 17 00:00:00 2001
From: Ondrej Martinsky <ondrej.martinsky@gmail.com>
Date: Wed, 21 Feb 2018 00:55:22 +0000
Subject: [PATCH] some of the code relocated to
 https://github.com/omartinsky/AutomaticDifferentiation

---
 autodiff_handwritten/ad_handwritten.sln       |  28 ---
 autodiff_handwritten/ad_handwritten.vcxproj   | 156 ----------------
 autodiff_handwritten/example1-simple.h        |  41 -----
 .../example2-partialderivatives.h             |  57 ------
 autodiff_handwritten/example3-callstack.h     |  69 -------
 autodiff_handwritten/example4-cycles.h        |  81 ---------
 autodiff_handwritten/example5-vectors1.h      |  47 -----
 autodiff_handwritten/example6-vectors2.h      | 107 -----------
 autodiff_handwritten/helpers.h                |  86 ---------
 autodiff_handwritten/main.cpp                 |  33 ----
 autodiff_handwritten/tree_adjoint.png         | Bin 28278 -> 0 bytes
 autodiff_operators_overloading/README.md      |   3 -
 autodiff_operators_overloading/ad_engine.cpp  |  59 ------
 autodiff_operators_overloading/ad_engine.hpp  | 171 ------------------
 .../ad_overloading.sln                        |  28 ---
 .../ad_overloading.vcxproj                    | 139 --------------
 autodiff_operators_overloading/example.cpp    |  51 ------
 .../tree_forward.png                          | Bin 28973 -> 0 bytes
 autodiff_operators_overloading/unit_tests.cpp | 103 -----------
 autodiff_operators_overloading/unit_tests.hpp |   6 -
 20 files changed, 1265 deletions(-)
 delete mode 100644 autodiff_handwritten/ad_handwritten.sln
 delete mode 100644 autodiff_handwritten/ad_handwritten.vcxproj
 delete mode 100644 autodiff_handwritten/example1-simple.h
 delete mode 100644 autodiff_handwritten/example2-partialderivatives.h
 delete mode 100644 autodiff_handwritten/example3-callstack.h
 delete mode 100644 autodiff_handwritten/example4-cycles.h
 delete mode 100644 autodiff_handwritten/example5-vectors1.h
 delete mode 100644 autodiff_handwritten/example6-vectors2.h
 delete mode 100644 autodiff_handwritten/helpers.h
 delete mode 100644 autodiff_handwritten/main.cpp
 delete mode 100644 autodiff_handwritten/tree_adjoint.png
 delete mode 100644 autodiff_operators_overloading/README.md
 delete mode 100644 autodiff_operators_overloading/ad_engine.cpp
 delete mode 100644 autodiff_operators_overloading/ad_engine.hpp
 delete mode 100644 autodiff_operators_overloading/ad_overloading.sln
 delete mode 100644 autodiff_operators_overloading/ad_overloading.vcxproj
 delete mode 100644 autodiff_operators_overloading/example.cpp
 delete mode 100644 autodiff_operators_overloading/tree_forward.png
 delete mode 100644 autodiff_operators_overloading/unit_tests.cpp
 delete mode 100644 autodiff_operators_overloading/unit_tests.hpp

diff --git a/autodiff_handwritten/ad_handwritten.sln b/autodiff_handwritten/ad_handwritten.sln
deleted file mode 100644
index 498136e..0000000
--- a/autodiff_handwritten/ad_handwritten.sln
+++ /dev/null
@@ -1,28 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 15
-VisualStudioVersion = 15.0.26430.6
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ad_handwritten", "ad_handwritten.vcxproj", "{5179767B-A7C1-4252-A885-FF52149486AD}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|x64 = Debug|x64
-		Debug|x86 = Debug|x86
-		Release|x64 = Release|x64
-		Release|x86 = Release|x86
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{5179767B-A7C1-4252-A885-FF52149486AD}.Debug|x64.ActiveCfg = Debug|x64
-		{5179767B-A7C1-4252-A885-FF52149486AD}.Debug|x64.Build.0 = Debug|x64
-		{5179767B-A7C1-4252-A885-FF52149486AD}.Debug|x86.ActiveCfg = Debug|Win32
-		{5179767B-A7C1-4252-A885-FF52149486AD}.Debug|x86.Build.0 = Debug|Win32
-		{5179767B-A7C1-4252-A885-FF52149486AD}.Release|x64.ActiveCfg = Release|x64
-		{5179767B-A7C1-4252-A885-FF52149486AD}.Release|x64.Build.0 = Release|x64
-		{5179767B-A7C1-4252-A885-FF52149486AD}.Release|x86.ActiveCfg = Release|Win32
-		{5179767B-A7C1-4252-A885-FF52149486AD}.Release|x86.Build.0 = Release|Win32
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-EndGlobal
diff --git a/autodiff_handwritten/ad_handwritten.vcxproj b/autodiff_handwritten/ad_handwritten.vcxproj
deleted file mode 100644
index cdcc952..0000000
--- a/autodiff_handwritten/ad_handwritten.vcxproj
+++ /dev/null
@@ -1,156 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="example1-simple.h" />
-    <ClInclude Include="example2-partialderivatives.h" />
-    <ClInclude Include="example3-callstack.h" />
-    <ClInclude Include="example4-cycles.h" />
-    <ClInclude Include="example5-vectors1.h" />
-    <ClInclude Include="example6-vectors2.h" />
-    <ClInclude Include="helpers.h" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="main.cpp" />
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <VCProjectVersion>15.0</VCProjectVersion>
-    <ProjectGuid>{5179767B-A7C1-4252-A885-FF52149486AD}</ProjectGuid>
-    <Keyword>Win32Proj</Keyword>
-    <RootNamespace>handwritten</RootNamespace>
-    <WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <PlatformToolset>v141</PlatformToolset>
-    <CharacterSet>Unicode</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <PlatformToolset>v141</PlatformToolset>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <CharacterSet>Unicode</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <PlatformToolset>v141</PlatformToolset>
-    <CharacterSet>Unicode</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <PlatformToolset>v141</PlatformToolset>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <CharacterSet>Unicode</CharacterSet>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Label="Shared">
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <LinkIncremental>true</LinkIncremental>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <LinkIncremental>true</LinkIncremental>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <LinkIncremental>false</LinkIncremental>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <LinkIncremental>false</LinkIncremental>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level4</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <ClCompile>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <WarningLevel>Level4</WarningLevel>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <Optimization>MaxSpeed</Optimization>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <OptimizeReferences>true</OptimizeReferences>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <Optimization>MaxSpeed</Optimization>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <OptimizeReferences>true</OptimizeReferences>
-    </Link>
-  </ItemDefinitionGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
diff --git a/autodiff_handwritten/example1-simple.h b/autodiff_handwritten/example1-simple.h
deleted file mode 100644
index 4a0288f..0000000
--- a/autodiff_handwritten/example1-simple.h
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright © 2018 Ondrej Martinsky, All rights reserved
-// www.quantandfinancial.com
-
-#pragma once
-
-#include "helpers.h"
-
-/* Example 1: Differentiating simple function call */
-
-namespace example1
-{
-    double f(double x)
-    {
-        double result = x*x;                     // Step 1
-        return result;
-    }
-
-    void f_AD(double d_dresult, double x, double& d_dx)
-    {
-        double result = x * x;                   // Step 1
-
-        // Reverse sweep
-        d_dx += d_dresult * 2 * x;               // Step 1 reverse
-    }
-
-    void example1()
-    {
-        double x = 3;
-        double y = f(x);                         // Step 1
-        cout << "y = " << y << endl;
-
-        // Reverse sweep
-        double d_dy = 1;                         // Seed
-        double d_dx = create_AD(x);
-        f_AD(d_dy, x, d_dx);                     // Step 1 reverse
-        cout << "dy_dx = " << d_dy << endl;
-
-        // Numerical Checks
-        CheckEqual(d_dx, FiniteDifference(std::bind(&f, _1), x));
-    }
-}
diff --git a/autodiff_handwritten/example2-partialderivatives.h b/autodiff_handwritten/example2-partialderivatives.h
deleted file mode 100644
index 253968b..0000000
--- a/autodiff_handwritten/example2-partialderivatives.h
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright © 2018 Ondrej Martinsky, All rights reserved
-// www.quantandfinancial.com
-
-#pragma once
-
-#include "helpers.h"
-
-/* Example 2: Partial derivatives of a function with two arguments */
-
-namespace example2
-{
-
-    double f(double x1, double x2)
-    {
-        double tmp1 = log(x1);                   // Step 1
-        double tmp2 = x2 * x2* x2;               // Step 2
-        double result = tmp1 + tmp2;             // Step 3
-        return result;
-    }
-
-    void f_AD(double d_dresult, double x1, double x2, double& d_dx1, double& d_dx2)
-    {
-        double t1 = log(x1);                     // Step 1
-        double t2 = x2 * x2 * x2;                // Step 2
-        double result = t1 + t2;                 // Step 3
-
-        // Reverse sweep
-        double d_dt1 = create_AD(t1);
-        double d_dt2 = create_AD(t2);
-        d_dt1 += d_dresult * 1;                  // Step 3 reverse, derivative w.r.t. "t1"
-        d_dt2 += d_dresult * 1;                  // Step 3 reverse, derivative w.r.t. "t2"
-                                                                                      
-        d_dx2 += d_dt2 * 3 * x2 * x2;            // Step 2 reverse, derivative w.r.t. "x2"
-                                                                                      
-        d_dx1 += d_dt1 * 1 / x1;                 // Step 1 reverse, derivative w,r.t. "x1"
-    }
-
-    void example2()
-    {
-        double x1 = 3;
-        double x2 = 4;
-        double y = f(x1, x2);                    // Step 1
-        cout << "y = " << y << endl;
-
-        // Reverse sweep
-        double d_dy = 1;                         // Seed
-        double d_dx1 = create_AD(x1);
-        double d_dx2 = create_AD(x2);
-        f_AD(d_dy, x1, x2, d_dx1, d_dx2);        // Step 1 reverse, derivative w.r.t. "x1" and "x2"
-        cout << "dy_dx1 = " << d_dx1 << endl;
-        cout << "dy_dx2 = " << d_dx2 << endl;
-
-        // Numerical Checks
-        CheckEqual(d_dx1, FiniteDifference(std::bind(&f, _1, x2), x1));
-        CheckEqual(d_dx2, FiniteDifference(std::bind(&f, x1, _1), x2));
-    }
-}
diff --git a/autodiff_handwritten/example3-callstack.h b/autodiff_handwritten/example3-callstack.h
deleted file mode 100644
index 4a47df9..0000000
--- a/autodiff_handwritten/example3-callstack.h
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright © 2018 Ondrej Martinsky, All rights reserved
-// www.quantandfinancial.com
-
-#pragma once
-
-#include "helpers.h"
-
-/* Example 3: Differentiating call stack (function calling other functions) */
-
-namespace example3
-{
-    double f(double x)
-    {
-        double result = x*x;                     // Step 1
-        return result;
-    }
-
-    void f_AD(double d_dresult, double x, double& d_dx)
-    {
-        double result = x * x;                   // Step 1
-
-        // Reverse sweep
-        d_dx += d_dresult * 2 * x;               // Step 1 reverse
-    }
-
-    double g(double x, double p)
-    {
-        double t1 = 5 * f(x);                    // Step 1
-        double t2 = 4 * f(p);                    // Step 2
-        double result = t1 * t2;                 // Step 3
-        return result;
-    }
-
-    void g_AD(double d_dresult, double x, double p, double& d_dx)
-    {
-        double t1 = 5 * f(x);                    // Step 1
-        double t2 = 4 * f(p);                    // Step 2
-        double result = t1 * t2;                 // Step 3
-
-        // Reverse sweep
-        double d_dt1 = create_AD(t1);
-        double d_dt2 = create_AD(t2);
-        d_dt1 = d_dresult * t2;                  // Step 3 reverse, derivative w.r.t. "t1"
-        d_dt2 = d_dresult * t1;                  // Step 3 reverse, derivative w.r.t. "t2"
-
-        // Derivative with w.r.t. "p"  is not necessary, skipping Step 2 reverse
-        // double d_dp = create_AD(p);
-        // f_AD(4 * d_dt2, p, d_dp); 
-
-        f_AD(5 * d_dt1, x, d_dx);               //  Step 1 reverse
-    }
-
-    void example3()
-    {
-        double x = 4;
-        double p = 5;
-        double y = g(x, p);                       // Step 1
-        cout << "y = " << y << endl;
-
-        // Reverse sweep
-        double d_dy = 1;                          // Seed
-        double d_dx = create_AD(x);               
-        g_AD(d_dy, x, p, d_dx);                   // Step 1 reverse, derivative w.r.t. "x1"
-        cout << "dy_dx = " << d_dx << endl;
-
-        // Numerical Checks
-        CheckEqual(d_dx, FiniteDifference(std::bind(&g, _1, p), x));
-    }
-}
diff --git a/autodiff_handwritten/example4-cycles.h b/autodiff_handwritten/example4-cycles.h
deleted file mode 100644
index e39d1c5..0000000
--- a/autodiff_handwritten/example4-cycles.h
+++ /dev/null
@@ -1,81 +0,0 @@
-// Copyright © 2018 Ondrej Martinsky, All rights reserved
-// www.quantandfinancial.com
-
-#pragma once
-
-#include "helpers.h"
-
-/* Example 4: Differentiating cycles  */
-
-namespace example4
-{
-    double f(double x, int n)
-    {
-        double result = 1;
-        for (int i = 0; i < n; ++i)
-            result *= x + i;                     // Step 1
-        return result;
-    }
-
-    void f_AD(double d_dresult, double x, int n, double& d_dx)
-    {
-        // We need to cache history of results for reverse sweep
-        vector<double> results;
-        results.reserve(n);     
-
-        double result = 1;
-        for (int i = 0; i < n; ++i)
-        {
-            results.push_back(result);
-            result *= x + i;                     // Step 1
-        }
-
-        // Reverse sweep
-        for (int i = n - 1; i >= 0; --i)
-        {
-            d_dx += d_dresult * results[i];
-            d_dresult = d_dresult * (x + i);     // Step 1 Reverse
-        }
-
-        /*
-        Illustration of manual calculation for n=3
-        double r0 = 1;                           // Step 0
-        double r1 = r0*(x+0) = r0*x + r0*0;      // Step 1
-        double r2 = r1*(x+1) = r1*x + r1*1;      // Step 2
-        double r3 = r2*(x+2) = r2*x + r2*2;      // Step 3
-
-        // Reverse sweep
-        double d_dr3 = 1;
-        double d_dx = 0;
-
-        d_dx += d_dr3 * r2;                      // Step 3 reverse, derivative w.r.t. "x"
-        double d_dr2 = create_AD(r2);            
-        d_dr2 += d_dr3 * (x + 2);                // Step 3 reverse, derivative w.r.t. "r2"             
-
-        d_dx += d_dr2 * r1;                      // Step 2 reverse, derivative w.r.t. "x"       
-        double d_dr1 = create_AD(r1);
-        d_dr1 += d_dr2 * (x + 1);                // Step 2 reverse, derivative w.r.t. "r1" 
-
-        d_dx += d_dr1 * r0;                      // Step 1 reverse, derivative w.r.t. "x" 
-        double d_dr0 = create_AD(r0);
-        d_dr1 += d_dr1 * (x + 0);                // Step 1 reverse, derivative w.r.t. "r0" 
-        */ 
-    }
-
-    void example4()
-    {
-        double x = 4;
-        int n = 3;
-        double y = f(x, n);                      // Step 1
-        cout << "y = " << y << endl;
-        
-        // Reverse sweep
-        double d_dy = 1;                         // Seed
-        double d_dx = create_AD(x);
-        f_AD(d_dy, x, n, d_dx);                  // Step 1 reverse
-        cout << "dy_dx = " << d_dx << endl;
-
-        // Numerical Checks
-        CheckEqual(d_dx, FiniteDifference(std::bind(&f, _1, n), x));
-    }
-}
diff --git a/autodiff_handwritten/example5-vectors1.h b/autodiff_handwritten/example5-vectors1.h
deleted file mode 100644
index a63f4c5..0000000
--- a/autodiff_handwritten/example5-vectors1.h
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright © 2018 Ondrej Martinsky, All rights reserved
-// www.quantandfinancial.com
-
-#pragma once
-
-#include "helpers.h"
-
-/* Example 5: Differentiating function with vector arguments */
-
-namespace example5
-{
-    double f(vector<double> x)
-    {
-        double mult = 1;
-        for (int i = 0; i < x.size(); ++i)
-            mult *= (1 + x[i]);                  // Step 1
-        double result = mult - 1;
-        return result;
-    }
-
-    void f_AD(double d_dresult, vector<double> x, vector<double>& d_dx)
-    {
-        double mult = 1;
-        for (int i = 0; i < x.size(); ++i)
-            mult *= (1 + x[i]);                  // Step 1
-        
-        // Reverse sweep
-        for (int i = 0; i < x.size(); ++i)
-            d_dx[i] += mult / (1 + x[i]);        // Step 1 reverse
-    }
-
-    void example5()
-    {
-        vector<double> x = { .01, .03, .02 };
-        double y = f(x);                         // Step 1
-        cout << "y = " << y << endl;
-        
-        // Reverse sweep
-        double d_dy = 1;                         // Seed
-        vector<double> d_dx = create_AD(x);
-        f_AD(d_dy, x, d_dx);                     // Step 1 reverse
-        cout << "dy_dx = " << ToString(d_dx) << endl;
-
-        // Numerical Checks
-        CheckEqual(d_dx, FiniteDifference(std::bind(&f, _1), x));
-    }
-}
diff --git a/autodiff_handwritten/example6-vectors2.h b/autodiff_handwritten/example6-vectors2.h
deleted file mode 100644
index 2ae0273..0000000
--- a/autodiff_handwritten/example6-vectors2.h
+++ /dev/null
@@ -1,107 +0,0 @@
-// Copyright © 2018 Ondrej Martinsky, All rights reserved
-// www.quantandfinancial.com
-
-#pragma once
-
-#include "helpers.h"
-
-/* Example 6: Differentiating functions returning vectors */
-
-namespace example6
-{
-    vector<double> multiplyGroups(vector<double> x, int n)
-    {
-        double prod = 1;
-        vector<double> result;
-        for (int i = 0; i < x.size(); ++i)
-        {
-            prod *= x[i];                        // Step 1
-            if ((i + 1) % n == 0)
-            {
-                result.push_back(prod);
-                prod = 1;
-            }
-        }
-        return result;
-    }
-
-    void multiplyGroups_AD(vector<double> d_dresult, vector<double> x, int n, vector<double>& d_dx)
-    {
-        double prod = 1;
-        vector<double> result;
-        for (int i = 0; i < x.size(); ++i)
-        {
-            prod *= x[i];                        // Step 1
-            if ((i + 1) % n == 0)
-            {
-                result.push_back(prod);
-                prod = 1;
-            }
-        }
-
-        // Reverse sweep
-        for (int i = 0; i < x.size(); ++i)
-        {
-            int o = i / n; // Index to output array
-            auto dresult_dx = result[o] / x[i];  // Step 1 reverse
-            d_dx[i] += d_dresult[o] * dresult_dx;
-        }
-    }
-
-    double polynomial(vector<double> x)
-    {
-        double result = 0;
-        for (int i = 0; i < x.size(); ++i)
-            result += x[i] * (i + 1);            // Step 1
-        return result;
-    }
-
-    void polynomial_AD(double d_dresult, vector<double> x, vector<double>& d_dx)
-    {
-        double result = 0;
-        for (int i = 0; i < x.size(); ++i)
-            result += x[i] * (i + 1);            // Step 1
-
-        // Reverse sweep
-        for (int i = 0; i < x.size(); ++i)
-        {
-            double dresult_dx = (i + 1);
-            d_dx[i] += d_dresult * dresult_dx;   // Step 1 reverse
-        }
-    }
-
-    double f(vector<double> x, int n)
-    {
-        vector<double> y = multiplyGroups(x, n); // Step 1
-        double result = polynomial(y); // Step 2
-        return result;
-    }
-
-    void f_AD(double d_dresult, vector<double> x, int n, vector<double>& d_dx)
-    {
-        vector<double> y = multiplyGroups(x, n); // Step 1
-        double result = polynomial(y);           // Step 2
-
-        // Reverse sweep
-        vector<double> d_dy = create_AD(y);      
-        polynomial_AD(d_dresult, y, d_dy);       // Step 2 reverse
-        multiplyGroups_AD(d_dy, x, n, d_dx);     // Step 1 reverse
-    }
-
-    void example6()
-    {
-        vector<double> x = { 2, 3, 4, 5, 6, 4, 4, 3 };
-        int n = 4;
-        double y = f(x, n);                      // Step 1
-        cout << "y = " << y << endl;
-
-        // Reverse sweep
-        double d_dy = 1;                         // Seed
-        vector<double> d_dx = create_AD(x);
-        f_AD(d_dy, x, n, d_dx);                  // Step 1 reverse
-        cout << "dy_dx = " << ToString(d_dx) << endl;
-
-        // Numerical Checks
-        CheckEqual(d_dx, FiniteDifference(std::bind(&f, _1, n), x));
-    }
-}
diff --git a/autodiff_handwritten/helpers.h b/autodiff_handwritten/helpers.h
deleted file mode 100644
index 7d96d15..0000000
--- a/autodiff_handwritten/helpers.h
+++ /dev/null
@@ -1,86 +0,0 @@
-// Copyright © 2018 Ondrej Martinsky, All rights reserved
-// www.quantandfinancial.com
-
-#pragma once
-
-#include <assert.h>
-#include <stdio.h>
-#include <functional>
-#include <iostream>
-#include <memory>
-#include <sstream>
-#include <vector>
-
-using namespace std;
-using std::placeholders::_1;
-using std::placeholders::_2;
-
-double create_AD(double v) 
-{ 
-    return 0; 
-}
-
-vector<double> create_AD(const vector<double>& v)
-{ 
-    return vector<double>(v.size(), 0);
-}
-
-double FiniteDifference(function<double(double)> f, double x)
-{
-    const double d = 1e-6;
-    double f_plus = f(x + d);
-    double f_minus = f(x - d);
-    return (f_plus - f_minus) / (2 * d);
-}
-
-vector<double> FiniteDifference(function<double(vector<double>)> f, vector<double> x)
-{
-    const double d = 1e-6;
-    vector<double> out(x.size(), 0);
-    for(int i=0; i<x.size(); ++i)
-    { 
-        vector<double> xp = x;
-        vector<double> xm = x;
-        xp[i] += d;
-        xm[i] -= d;
-        out[i] = (f(xp) - f(xm)) / (2 * d);
-    }
-    return out;
-}
-
-string ToString(vector<double> v)
-{
-    stringstream ss;
-    for (double x : v)
-        ss << x << " ";
-    return ss.str();
-}
-
-void CheckEqual(double actual, double expected)
-{
-    double diff = abs(actual - expected);
-    if (diff >= 3e-6)
-    {
-        stringstream ss;
-        ss << "Numerical mismatch: Actual = " << actual << ", Expected = " << expected << ", Difference = " << diff;
-        cout << ss.str();
-        throw exception(ss.str().c_str());
-    }
-}
-
-void CheckEqual(vector<double> actual, vector<double> expected)
-{
-    if (actual.size() != expected.size())
-        throw exception("Actual and expected size differs");
-    for (int i = 0; i < actual.size(); ++i)
-    {
-        double diff = abs(actual[i] - expected[i]);
-        if (diff >= 3e-6)
-        {
-            stringstream ss;
-            ss << "Numerical mismatch: Actual = " << actual[i] << ", Expected = " << expected[i] << ", Difference = " << diff << " at position " << i;
-            cout << ss.str();
-            throw exception(ss.str().c_str());
-        }
-    }
-}
diff --git a/autodiff_handwritten/main.cpp b/autodiff_handwritten/main.cpp
deleted file mode 100644
index 0704672..0000000
--- a/autodiff_handwritten/main.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright © 2018 Ondrej Martinsky, All rights reserved
-// www.quantandfinancial.com
-
-#include "helpers.h"
-#include "example1-simple.h"
-#include "example2-partialderivatives.h"
-#include "example3-callstack.h"
-#include "example4-cycles.h"
-#include "example5-vectors1.h"
-#include "example6-vectors2.h"
-
-void header(string s)
-{
-    cout << "---------------" << endl;
-    cout << s << endl;
-}
-
-int main()
-{
-    header("Example 1");
-    example1::example1();
-    header("Example 2");
-    example2::example2();
-    header("Example 3");
-    example3::example3();
-    header("Example 4");
-    example4::example4();
-    header("Example 5");
-    example5::example5();
-    header("Example 6");
-    example6::example6();
-}
-
diff --git a/autodiff_handwritten/tree_adjoint.png b/autodiff_handwritten/tree_adjoint.png
deleted file mode 100644
index 33562bd5fb12e26cc890f2731b0fc71e95685d5c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 28278
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
E0p%OstpET3

diff --git a/autodiff_operators_overloading/README.md b/autodiff_operators_overloading/README.md
deleted file mode 100644
index 7761b08..0000000
--- a/autodiff_operators_overloading/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-### Automatic differentiation via C++ operators overloading
-
-Please refer to the corresponding article on http://www.quantandfinancial.com/2017/02/automatic-differentiation-templated.html
diff --git a/autodiff_operators_overloading/ad_engine.cpp b/autodiff_operators_overloading/ad_engine.cpp
deleted file mode 100644
index 8e3faad..0000000
--- a/autodiff_operators_overloading/ad_engine.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright © 2016 Ondrej Martinsky, All rights reserved
-// www.quantandfinancial.com
-
-#include "ad_engine.hpp"
-#include <assert.h>
-
-//////////////////////////////////////////////////////////////
-// ADDouble
-
-ADDouble::ADDouble(ADEngine& engine, double value)
-    : _engine(engine)
-    , _value(value)
-{
-    _id = engine._id_counter++;
-#ifdef AD_ENABLE_LOGGING
-    cout << "Creating new variable AD" << _id << " = " << value << endl;
-#endif
-    engine._variables.insert(make_pair(_id, *this));
-}
-
-//////////////////////////////////////////////////////////////
-// ADEngine
-
-void ADEngine::add_direct_derivative(const ADDouble& of, const ADDouble& wrt, double value)
-{
-#ifdef AD_ENABLE_LOGGING
-    cout << "    " << logging::getVariableName(of) << "/d" 
-        << logging::getVariableName(wrt) << " += " << value << endl;
-#endif
-    _derivatives[of._id][wrt._id] += value;
-}
-
-double ADEngine::get_derivative(const ADDouble& of, const ADDouble& wrt)
-{
-    return get_derivative(of._id, wrt._id);
-}
-
-double ADEngine::get_derivative(NodeId of, NodeId wrt)
-{
-    if (wrt == of)
-        return 1.0;     // d variable w.r.t. self is 1.0 by definition
-
-    DerivativeTable::const_iterator it = _derivatives.find(of);
-    if (it == _derivatives.end())
-        return 0.0;
-    double val = 0;
-    for (const map<NodeId, double>::value_type& direct_derivative : it->second)
-    {
-        if (direct_derivative.first == wrt)
-            val += direct_derivative.second;
-        else
-            val += direct_derivative.second * get_derivative(direct_derivative.first, wrt);
-    }
-#ifdef AD_ENABLE_LOGGING
-    cout << "Calculating derivative dVAR" << of << "/dVAR" << wrt << " = " << val << endl;
-#endif
-
-    return val;
-}
\ No newline at end of file
diff --git a/autodiff_operators_overloading/ad_engine.hpp b/autodiff_operators_overloading/ad_engine.hpp
deleted file mode 100644
index 10b6e03..0000000
--- a/autodiff_operators_overloading/ad_engine.hpp
+++ /dev/null
@@ -1,171 +0,0 @@
-// Copyright © 2016 Ondrej Martinsky, All rights reserved
-// www.quantandfinancial.com
-
-#pragma once
-
-#include <iostream>
-#include <string>
-#include <vector>
-#include <map>
-#include <set>
-
-#define AD_ENABLE_LOGGING
-
-using namespace std;
-
-typedef int NodeId; // Variables represent nodes in the derivative tree
-
-class ADEngine;
-
-class ADDouble
-{
-public:
-    ADDouble(ADEngine& engine, double value);
-    double get_value() const { return _value; }
-
-    double _value;
-    ADEngine& _engine;
-    NodeId _id;
-};
-
-class ADEngine
-{
-public:
-    typedef map<NodeId, map<NodeId, double>> DerivativeTable; // [Dependent, Independent] -> Value
-
-    ADEngine() : _id_counter(0) {}
-    void add_direct_derivative(const ADDouble& of, const ADDouble& wrt, double value);
-    double get_derivative(const ADDouble& of, const ADDouble& wrt);
-
-private:
-    double get_derivative(NodeId dependent, NodeId independent);
-
-    map<NodeId, ADDouble> _variables;
-    DerivativeTable _derivatives;
-    set<NodeId> _independent_variables;
-    NodeId _id_counter;
-
-    friend class ADDouble;
-};
-
-namespace logging
-{
-    inline string getVariableName(const ADDouble& var)
-    {
-        return "AD" + std::to_string(var._id);
-    }
-
-    inline string getVariableName(const double&)
-    {
-        return "CONST";
-    }
-
-    inline double getValue(const ADDouble& var)
-    {
-        return var.get_value();
-    }
-
-    inline double getValue(const double& var)
-    {
-        return var;
-    }
-
-    template <typename TL, typename TR>
-    void logBinaryOperation(string op, const ADDouble& result, const TL& l, const TR& r)
-    {
-        cout << "Operation "
-            << getVariableName(result) << " := "
-            << getVariableName(l) << " " << op << " "
-            << getVariableName(r) << " = "
-            << getValue(l) << " " << op << " " << getValue(r)  << endl;
-    }
-
-    inline void logUnaryOperation(string op, const ADDouble& result, const ADDouble& x)
-    {
-        cout << "Operation "
-            << getVariableName(result) << " := " << op + "(" << getVariableName(x) << ") = "
-            << op << "(" << getValue(x) << ")" << endl;
-    }
-}
-
-inline ADDouble operator+(const ADDouble& l, const ADDouble& r)
-{
-    ADEngine& e = l._engine;
-    ADDouble out(e, l._value + r._value);
-#ifdef AD_ENABLE_LOGGING
-    logging::logBinaryOperation("+", out, l, r);
-#endif
-    e.add_direct_derivative(out, l, 1.);
-    e.add_direct_derivative(out, r, 1.);
-    return out;
-}
-
-inline ADDouble operator-(const ADDouble& l, const ADDouble& r)
-{
-    ADEngine& e = l._engine;
-    ADDouble out(e, l._value - r._value);
-#ifdef AD_ENABLE_LOGGING
-    logging::logBinaryOperation("-", out, l, r);
-#endif
-    e.add_direct_derivative(out, l, 1.);
-    e.add_direct_derivative(out, r, -1.);
-    return out;
-}
-
-inline ADDouble operator*(const ADDouble& l, const ADDouble& r)
-{
-    ADDouble out(l._engine, l._value * r._value);
-#ifdef AD_ENABLE_LOGGING
-    logging::logBinaryOperation("*", out, l, r);
-#endif
-    ADEngine& e = out._engine;
-    e.add_direct_derivative(out, l, r._value);
-    e.add_direct_derivative(out, r, l._value);
-    return out;
-}
-
-inline ADDouble operator*(double l, const ADDouble& r)
-{
-    ADDouble out(r._engine, l * r._value);
-#ifdef AD_ENABLE_LOGGING
-    logging::logBinaryOperation("*", out, l, r);
-#endif
-    ADEngine& e = out._engine;
-    e.add_direct_derivative(out, r, l);
-    return out;
-}
-
-inline ADDouble operator/(const ADDouble& l, const ADDouble& r)
-{
-    ADDouble out(l._engine, l._value * r._value);
-#ifdef AD_ENABLE_LOGGING
-    logging::logBinaryOperation("/", out, l, r);
-#endif
-    ADEngine& e = out._engine;
-    e.add_direct_derivative(out, l, 1.0 / r._value);
-    e.add_direct_derivative(out, r, -l._value / r._value);
-    return out;
-}
-
-inline ADDouble exp(const ADDouble& x)
-{
-    double ex = exp(x._value);
-    ADDouble out(x._engine, ex);
-#ifdef AD_ENABLE_LOGGING
-    logging::logUnaryOperation("exp", out, x);
-#endif
-    ADEngine& e = out._engine;
-    e.add_direct_derivative(out, x, ex);
-    return out;
-}
-
-inline ADDouble log(const ADDouble& x)
-{
-    ADDouble out(x._engine, log(x._value));
-#ifdef AD_ENABLE_LOGGING
-    logging::logUnaryOperation("log", out, x);
-#endif
-    ADEngine& e = out._engine;
-    e.add_direct_derivative(out, x, 1/x._value);
-    return out;
-}
diff --git a/autodiff_operators_overloading/ad_overloading.sln b/autodiff_operators_overloading/ad_overloading.sln
deleted file mode 100644
index 8cffa87..0000000
--- a/autodiff_operators_overloading/ad_overloading.sln
+++ /dev/null
@@ -1,28 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 14
-VisualStudioVersion = 14.0.25420.1
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ad_overloading", "ad_overloading.vcxproj", "{F0FBC0C9-03F6-42F6-8663-B5B7A47734B7}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|x64 = Debug|x64
-		Debug|x86 = Debug|x86
-		Release|x64 = Release|x64
-		Release|x86 = Release|x86
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{F0FBC0C9-03F6-42F6-8663-B5B7A47734B7}.Debug|x64.ActiveCfg = Debug|x64
-		{F0FBC0C9-03F6-42F6-8663-B5B7A47734B7}.Debug|x64.Build.0 = Debug|x64
-		{F0FBC0C9-03F6-42F6-8663-B5B7A47734B7}.Debug|x86.ActiveCfg = Debug|Win32
-		{F0FBC0C9-03F6-42F6-8663-B5B7A47734B7}.Debug|x86.Build.0 = Debug|Win32
-		{F0FBC0C9-03F6-42F6-8663-B5B7A47734B7}.Release|x64.ActiveCfg = Release|x64
-		{F0FBC0C9-03F6-42F6-8663-B5B7A47734B7}.Release|x64.Build.0 = Release|x64
-		{F0FBC0C9-03F6-42F6-8663-B5B7A47734B7}.Release|x86.ActiveCfg = Release|Win32
-		{F0FBC0C9-03F6-42F6-8663-B5B7A47734B7}.Release|x86.Build.0 = Release|Win32
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-EndGlobal
diff --git a/autodiff_operators_overloading/ad_overloading.vcxproj b/autodiff_operators_overloading/ad_overloading.vcxproj
deleted file mode 100644
index deeebf0..0000000
--- a/autodiff_operators_overloading/ad_overloading.vcxproj
+++ /dev/null
@@ -1,139 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{F0FBC0C9-03F6-42F6-8663-B5B7A47734B7}</ProjectGuid>
-    <RootNamespace>templated</RootNamespace>
-    <WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <PlatformToolset>v141</PlatformToolset>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <PlatformToolset>v141</PlatformToolset>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <PlatformToolset>v141</PlatformToolset>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <PlatformToolset>v141</PlatformToolset>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Label="Shared">
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup />
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <SDLCheck>true</SDLCheck>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <SDLCheck>true</SDLCheck>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>MaxSpeed</Optimization>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <SDLCheck>true</SDLCheck>
-    </ClCompile>
-    <Link>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <OptimizeReferences>true</OptimizeReferences>
-      <SubSystem>Console</SubSystem>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>MaxSpeed</Optimization>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <SDLCheck>true</SDLCheck>
-    </ClCompile>
-    <Link>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <OptimizeReferences>true</OptimizeReferences>
-      <SubSystem>Console</SubSystem>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="ad_engine.cpp" />
-    <ClCompile Include="example.cpp">
-      <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level4</WarningLevel>
-      <TreatWarningAsError Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</TreatWarningAsError>
-      <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level4</WarningLevel>
-      <TreatWarningAsError Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</TreatWarningAsError>
-    </ClCompile>
-    <ClCompile Include="unit_tests.cpp" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="ad_engine.hpp" />
-    <ClInclude Include="unit_tests.hpp" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
diff --git a/autodiff_operators_overloading/example.cpp b/autodiff_operators_overloading/example.cpp
deleted file mode 100644
index e26d370..0000000
--- a/autodiff_operators_overloading/example.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright © 2016 Ondrej Martinsky, All rights reserved
-// www.quantandfinancial.com
-
-#include "ad_engine.hpp"
-
-#include <iomanip>
-#include "unit_tests.hpp"
-
-using namespace std;
-
-template <typename T>
-T f(T x0, T x1)
-{
-    return log(x0) + x1 * x1 * x1;
-}
-
-void example1()
-{
-    ADEngine e;   // Create AD engine with derivatives tree
-
-    // Register independent variables. Later, we will request derivative of the result
-    // with respect to these variables
-    ADDouble x0(e, 3);
-    ADDouble x1(e, 4);
-
-    // Do the calculation 
-    ADDouble y = f(x0, x1);
-    cout << "y = " << y.get_value() << endl;
-
-    // Apply chain rule to derivatives in calculation tree
-    cout << endl;
-    cout << "*** Automatic differentiation" << endl;
-    cout << "dy_dx0 = " << e.get_derivative(y, x0) << endl;
-    cout << "dy_dx1 = " << e.get_derivative(y, x1) << endl;
-
-    // Finite difference method
-    double d = 1e-6;
-    cout << endl;
-    cout << "*** Finite difference method" << endl;
-    cout << "dy_dx0 = " << (f(3. + d, 4.) - f(3. - d, 4.)) / (2 * d) << endl;
-    cout << "dy_dx1 = " << (f(3., 4. + d) - f(3., 4. - d)) / (2 * d) << endl;
-}
-
-void main()
-{
-#if 0
-    unit_tests();
-#endif
-
-    example1();
-}
\ No newline at end of file
diff --git a/autodiff_operators_overloading/tree_forward.png b/autodiff_operators_overloading/tree_forward.png
deleted file mode 100644
index bc10dbf3ba744a3c335ebf45d1cbd8372731280b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 28973
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

diff --git a/autodiff_operators_overloading/unit_tests.cpp b/autodiff_operators_overloading/unit_tests.cpp
deleted file mode 100644
index ebbf32f..0000000
--- a/autodiff_operators_overloading/unit_tests.cpp
+++ /dev/null
@@ -1,103 +0,0 @@
-// Copyright © 2016 Ondrej Martinsky, All rights reserved
-// www.quantandfinancial.com
-
-#include <functional>
-#include <math.h>
-#include <iomanip>
-#include <algorithm>
-#include <assert.h>
-#include <sstream>
-#include "ad_engine.hpp"
-
-#include "unit_tests.hpp"
-
-using namespace std;
-
-double numerical_derivative(function<double(double)> f, double x)
-{
-    double d = 1e-6;
-    return (f(x + d) - f(x - d)) / (2 * d);
-}
-
-double numerical_derivative(function<double(double, double)> f, double x, double y, int which)
-{
-    double d = 1e-6;
-    if (which==0)
-        return (f(x + d, y) - f(x - d, y)) / (2 * d);
-    else
-        return (f(x, y + d) - f(x, y - d)) / (2 * d);
-}
-
-#define CHECK(actual, expected)     check((actual), (expected), __LINE__)
-
-void check(double actual, double expected, int line)
-{
-    double absdiff = abs(actual - expected);
-    double reldiff = absdiff / max(abs(actual), abs(expected));
-
-    if (reldiff > 1e-6 && absdiff > 1e-10)
-    {
-        stringstream ss;
-        ss << "Error Line=" << line;
-        ss << ", Actual=" << setw(10) << actual << endl;
-        ss << ", Expected=" << setw(10) << expected << endl;
-        ss << ", AbsDiff=" << setw(10) << absdiff << endl;
-        ss << ", RelDiff=" << setw(10) << reldiff << endl;
-        throw exception(ss.str().c_str());
-    }
-
-}
-
-void unit_tests()
-{
-    {
-        ADEngine e;
-        ADDouble a(e, 3.);
-
-        auto f = [&](auto x) -> auto {
-            return ADDouble(e, 1.0);
-        };
-        CHECK(e.get_derivative(f(a), a), 0.0);
-    }
-
-    {
-        ADEngine e;
-        ADDouble a(e, 3.);
-
-        auto f = [](auto x) -> auto {
-            return x;
-        };
-        CHECK(e.get_derivative(f(a), a), 1.0);
-    }
-
-    {
-        ADEngine e;
-        ADDouble a(e, 3.);
-
-        auto f = [](auto x) -> auto {
-            return x + x + x + x;
-        };
-        CHECK(e.get_derivative(f(a), a), numerical_derivative(f, a.get_value()));
-    }
-
-    {
-        ADEngine e;
-        ADDouble a(e, 3.);
-
-        auto f = [](auto x) -> auto {
-            return (x + x) + (x + x);
-        };
-        CHECK( e.get_derivative(f(a), a), numerical_derivative(f, a.get_value()));
-    }
-
-    {
-        ADEngine e;
-        ADDouble a(e, 3.);
-        ADDouble b(e, 4.);
-
-        auto f = [](auto x, auto y) -> auto {
-            return log(x) + log(x) + exp(y) + (x + y) * (2. * x - y) / (x - 0.5 * y) / y;
-        };
-        CHECK(e.get_derivative(f(a, b), a), numerical_derivative(f, a.get_value(), b.get_value(), 0));
-    }
-}
\ No newline at end of file
diff --git a/autodiff_operators_overloading/unit_tests.hpp b/autodiff_operators_overloading/unit_tests.hpp
deleted file mode 100644
index 6687c04..0000000
--- a/autodiff_operators_overloading/unit_tests.hpp
+++ /dev/null
@@ -1,6 +0,0 @@
-// Copyright © 2016 Ondrej Martinsky, All rights reserved
-// www.quantandfinancial.com
-
-#pragma once
-
-void unit_tests();
\ No newline at end of file