%%% R code to generate the input data files from corresponding simulation logs
% R> setwd("~/Work/tensorPredictors")
% R>
% R> for (sim.name in c("2a")) {
% R>     pattern <- paste0("sim\\_", sim.name, "\\_ising\\-[0-9T]*\\.csv")
% R>     log.file <- sort(
% R>         list.files(path = "sim/", pattern = pattern, full.names = TRUE),
% R>         decreasing = TRUE
% R>     )[[1]]
% R>
% R>     sim <- read.csv(log.file)
% R>
% R>     aggr <- aggregate(sim[, names(sim) != "sample.size"], list(sample.size = sim$sample.size), mean)
% R>
% R>     write.table(aggr, file = paste0("LaTeX/plots/aggr-", sim.name, "-ising.csv"), row.names = FALSE, quote = FALSE)
% R> }
\documentclass[border=0cm]{standalone}

\usepackage{tikz}
\usepackage{pgfplots}
\usepackage{amssymb, bm}

\definecolor{exact}{RGB}{230,0,0}
\definecolor{MC}{RGB}{30,180,30}
\definecolor{MCthrd}{RGB}{0,0,230}

\pgfplotsset{
    compat=newest,
    grid=both,
    grid style={gray!15}
}
\tikzset{
    legend entry/.style={
        mark = *,
        mark size = 1pt,
        mark indices = {2},
        line width=0.8pt
    }
}

\begin{document}
\begin{tikzpicture}[>=latex]

    \begin{axis}[
        name=perft,
        xmode = normal, ymode = log,
        xtick={10, 30, 50, 70, 90, 110, 130},
        mark = *,
        mark size = 1pt,
        ytick={1,1e1,1e2,1e3,1e4,1e5,1e6,1e7},
        yticklabels={$1\mu s$,$10\mu s$,$100\mu s$,$1 ms$,$10 ms$,$100 ms$,$1 s$,$10 s$},
        xlabel = {Dimension $p$},
        ylabel = {Time}
    ]
        \addplot[
            only marks,
            color = exact
        ] table[x = dim, y = exact] {aggr-ising-perft-m2.csv};
        \addplot[
            only marks,
            color = MC
        ] table[x = dim, y = MC] {aggr-ising-perft-m2.csv};
        \addplot[
            only marks,
            color = MCthrd
        ] table[x = dim, y = MCthrd] {aggr-ising-perft-m2.csv};

        \addplot[smooth, domain = 8:25,  color = exact,  samples = 64] { 2^(x - 3) };
        \addplot[smooth, domain = 1:130, color = MC,     samples = 64] {
            -18340.8 + 7557.0 * x + 200.3 * x^2
        };
        \addplot[smooth, domain = 1:130, color = MCthrd, samples = 64] {
            8413.21 + 3134.98 * x + 41.87 * x^2
        };
    \end{axis}

    \matrix[anchor = west] at (perft.east) {
        \draw[color=exact,  only marks, mark = *, mark size = 1pt, mark indices = {2}] plot coordinates {(0, 0) (.3, 0) (.6, 0)};
        & \node[anchor=west] {exact}; \\
        \draw[color=exact,  line width = 0.8pt] plot coordinates {(0, 0) (.4, 0)};
        & \node[anchor=west] {$\mathcal{O}(2^p)$}; \\
        \draw[color=MC,  only marks, mark = *, mark size = 1pt, mark indices = {2}] plot coordinates {(0, 0) (.3, 0) (.6, 0)};
        & \node[anchor=west] {MC}; \\
        \draw[color=MC,  line width = 0.8pt] plot coordinates {(0, 0) (.4, 0)};
        & \node[anchor=west] {$\mathcal{O}(p^2)$}; \\
        \draw[color=MCthrd,  only marks, mark = *, mark size = 1pt, mark indices = {2}] plot coordinates {(0, 0) (.3, 0) (.6, 0)};
        & \node[anchor=west] {MC (8 thrd)}; \\
        \draw[color=MCthrd,  line width = 0.8pt] plot coordinates {(0, 0) (.4, 0)};
        & \node[anchor=west] {$\mathcal{O}(p^2)$}; \\
    };

    \node[anchor = south] at (current bounding box.north) {Ising Second Moment Performance Test};

\end{tikzpicture}
\end{document}