This repository contains materials for Python lectures given in Master 1 of Fundamental Physics at the University of Paris Saclay. It provides slides, courses as well as exercices and piece of code to give an introduction of Python programming.
You will need special orgmode
settings to translate the org
files into pdf
documents. All the needed code is embedded within this file in the next
sections. There is no need to detangle this file since emacs will do it when you
will use the Makefile in the corresponding directories. So, next step will be to
do make
within the different directories.
(setq org-export-allow-bind-keywords t)
(setq org-publish-timestamp-directory "/tmp/org-timestamps")
(require 'ox-latex)
(add-to-list 'org-latex-minted-langs '(jupyter-python "python"))
(require 'ox-latex)
(require 'ox-beamer)
(setq org-latex-remove-logfiles nil)
(setq org-latex-toc-command "{\\hypersetup{linkcolor=blue}\\tableofcontents}")
(setq org-export-with-smart-quotes t)
(setq org-latex-table-caption-above nil)
(setq org-export-with-author nil)
This activates a number of widely used languages, you are encouraged to activate
more languages using the customize interface for the org-babel-load-languages
variable, or with an elisp form like the one below. The customize interface of
org-babel-load-languages
contains an up to date list of the currently
supported languages.
(org-babel-do-load-languages
'org-babel-load-languages
'((emacs-lisp . t)
(latex . t)))
You are encouraged to add the following to your personal configuration although it is not added by default as a security precaution.
(setq org-confirm-babel-evaluate nil)
Code fragments are syntax highlighted using minted LaTeX package
(setq org-latex-listings 'minted)
(setq org-latex-minted-options
'(;;("frame" "lines")
("fontsize" "\\footnotesize")
("mathescape" "")
("escapeinside" "@@")
("xrightmargin" "0.cm")
("xleftmargin" "0.cm")
("bgcolor" "solarizedbg")
))
Only include one default package and remove all the crapppy stuff included by
org
→ latex
translation.
(add-to-list 'org-latex-packages-alist '("" "org-preamble"))
(unless (boundp 'org-latex-classes)
(setq org-latex-classes nil))
(add-to-list 'org-latex-classes
'("python-slide"
"\\documentclass[c,aspectratio=32,9pt]{beamer}
[PACKAGES]
\\usepackage[python_teaching]{slide-style}
[NO-DEFAULT-PACKAGES]"
("\\section{%s}" . "\\section*{%s}")
("\\subsection{%s}" . "\\subsection*{%s}")
("\\subsubsection{%s}" . "\\subsubsection*{%s}")
("\\paragraph{%s}" . "\\paragraph*{%s}")
("\\subparagraph{%s}" . "\\subparagraph*{%s}")))
(add-to-list 'org-latex-classes
'("python-slide-handout"
"\\documentclass[c,aspectratio=32,9pt,handout]{beamer}
[PACKAGES]
\\usepackage[python_teaching]{slide-style}
[NO-DEFAULT-PACKAGES]"
("\\section{%s}" . "\\section*{%s}")
("\\subsection{%s}" . "\\subsection*{%s}")
("\\subsubsection{%s}" . "\\subsubsection*{%s}")
("\\paragraph{%s}" . "\\paragraph*{%s}")
("\\subparagraph{%s}" . "\\subparagraph*{%s}")))
We also translate bold into beamer structure
and underline into bold.
(defun python-beamer-bold (contents backend info)
(when (eq backend 'beamer)
(replace-regexp-in-string "\\`\\\\[A-Za-z0-9]+{" "\\\\structure{\\\\bf " contents)))
(defun python-beamer-underline (contents backend info)
(when (eq backend 'beamer)
(replace-regexp-in-string "\\`\\\\[A-Za-z0-9]+" "\\\\textbf" contents)))
(defun python-beamer-strike (contents backend info)
(when (eq backend 'beamer)
(replace-regexp-in-string "\\`\\\\[A-Za-z0-9]+" "\\\\alert" contents)))
(add-to-list 'org-export-filter-bold-functions 'python-beamer-bold)
(add-to-list 'org-export-filter-underline-functions 'python-beamer-underline)
(add-to-list 'org-export-filter-strike-through-functions 'python-beamer-strike)
We add the option frame
to footnote to make sure the footnote appears at the
bottom of the frame.
(defun python-beamer-footnote (contents backend info)
(when (eq backend 'beamer)
(replace-regexp-in-string "\\`\\\\[A-Za-z0-9]+" "\\\\footnote[frame]" contents)))
(add-to-list 'org-export-filter-footnote-reference-functions 'python-beamer-footnote)
We also define a new environment for “colored” box
(add-to-list 'org-beamer-environments-extra
'("cbox" "c" "\\begin{cbox}%o(%h)" "\\end{cbox}"))
Since 26/09/2014, it seems that fragment block are not “lowercased” anymore so
we execute a hook before parsing file to change CBOX
into cbox
.
(defun latex::downcase-begin-filter (contents backend info)
(when (org-export-derived-backend-p backend 'latex)
(replace-regexp-in-string "\\\\begin{CBOX}" "\\\\begin{cbox}"
(replace-regexp-in-string "\\\\begin{QUESTION}" "\\\\begin{question}"
(replace-regexp-in-string "\\\\begin{REMARK}" "\\\\begin{remark}"
(replace-regexp-in-string "\\\\begin{OPINION}" "\\\\begin{opinion}"
(replace-regexp-in-string "\\\\begin{ABSTRACT}" "\\\\begin{abstract}"
(replace-regexp-in-string "\\\\begin{PROMPT}" "\\\\begin{prompt}"
contents))))))))
(defun latex::downcase-end-filter (contents backend info)
(when (org-export-derived-backend-p backend 'latex)
(replace-regexp-in-string "\\\\end{CBOX}" "\\\\end{cbox}"
(replace-regexp-in-string "\\\\end{QUESTION}" "\\\\end{question}"
(replace-regexp-in-string "\\\\end{REMARK}" "\\\\end{remark}"
(replace-regexp-in-string "\\\\end{OPINION}" "\\\\end{opinion}"
(replace-regexp-in-string "\\\\end{ABSTRACT}" "\\\\end{abstract}"
(replace-regexp-in-string "\\\\end{PROMPT}" "\\\\end{prompt}"
contents))))))))
(add-to-list 'org-export-filter-final-output-functions 'latex::downcase-begin-filter)
(add-to-list 'org-export-filter-final-output-functions 'latex::downcase-end-filter)
(add-to-list 'org-latex-classes
'("python-lecture"
"\\documentclass[10pt,a4paper,twoside]{report}
[PACKAGES]
\\usepackage[python_teaching_lectures]{lecture-style}
[NO-DEFAULT-PACKAGES]"
("\\section{%s}" . "\\section*{%s}")
("\\subsection{%s}" . "\\subsection*{%s}")
("\\subsubsection{%s}" . "\\subsubsection*{%s}")
("\\paragraph{%s}" . "\\paragraph*{%s}")
("\\subparagraph{%s}" . "\\subparagraph*{%s}")))
(add-to-list 'org-latex-classes
'("python-lecture-book"
"\\documentclass[10pt,a4paper,twoside]{report}
[PACKAGES]
\\usepackage[python_teaching_lectures,book]{lecture-style}
[NO-DEFAULT-PACKAGES]"
("\\section{%s}" . "\\section*{%s}")
("\\subsection{%s}" . "\\subsection*{%s}")
("\\subsubsection{%s}" . "\\subsubsection*{%s}")
("\\paragraph{%s}" . "\\paragraph*{%s}")
("\\subparagraph{%s}" . "\\subparagraph*{%s}")))
Add a new tag ignoreheading
to skip headline tagged as such.
(defun python-ignore-headline (contents backend info)
(when (and (org-export-derived-backend-p backend 'latex)
(string-match "\\`.*ignoreheading.*\n"
(downcase contents)))
(replace-match "" nil nil contents)))
(add-to-list 'org-export-filter-headline-functions 'python-ignore-headline)
Interpret figures within table environment as figure side-by-side.
(defun python-multicolumn-figure (contents backend info)
(when (and (org-export-derived-backend-p backend 'latex)
(string-match "table" contents)
(string-match "includegraphics" contents))
(replace-regexp-in-string "table" "figure" contents)))
(add-to-list 'org-export-filter-table-functions 'python-multicolumn-figure)
(add-to-list 'org-latex-classes
'("python-class"
"\\documentclass[10pt,a4paper]{report}
[PACKAGES]
\\usepackage[python_teaching_classes]{lecture-style}
[NO-DEFAULT-PACKAGES]"
("\\section{%s}" . "\\section*{%s}")
("\\subsection{%s}" . "\\subsection*{%s}")
("\\subsubsection{%s}" . "\\subsubsection*{%s}")
("\\paragraph{%s}" . "\\paragraph*{%s}")
("\\subparagraph{%s}" . "\\subparagraph*{%s}")))
Add a new tag correction
;; (setq correction-flag nil)
(defun python-correction-headline (contents backend info)
(when (and (org-export-derived-backend-p backend 'latex)
(string-match "\\`.*correction.*\n" (downcase contents)))
(concat "\\begin{correction}" (replace-regexp-in-string "\\`.*correction.*\n" "" contents) "\\end{correction}"))
)
(add-to-list 'org-export-filter-headline-functions 'python-correction-headline)
(defun python-export-slides ()
(progn
(setq org-latex-default-class "python-slide")
(org-beamer-export-to-pdf)
))
(defun python-export-lectures ()
(progn
(if (string-equal "lecture_book.org" (buffer-name))
(setq org-latex-default-class "python-lecture-book")
(setq org-latex-default-class "python-lecture"))
(org-latex-export-to-pdf)
))
(defun python-export-classes ()
(progn
(setq org-latex-default-class "python-class")
(setq org-latex-minted-options
'(;;("frame" "lines")
("fontsize" "\\footnotesize")
("mathescape" "")
("xrightmargin" "0.5cm")
("xleftmargin" "0.5cm")
))
(org-latex-export-to-pdf)
))
(org-add-link-type "cite" 'ebib
(lambda (path desc format)
(cond
((eq format 'latex)
(format "\\cite{%s}" path)))))
(defun python-latexmk-cmd (backend)
"When exporting from .org with latex, automatically run latex,
pdflatex, or xelatex as appropriate, using latexmk."
(when (org-export-derived-backend-p backend 'latex)
(let ((texcmd)))
(setq texcmd "jobname=$(basename %f | sed 's/\.tex//');latexmk -8bit -xelatex -shell-escape -quiet %f ; mkdir -p latex.d ; mv ${jobname}.* latex.d/. ; mv latex.d/${jobname}.{org,tex,pdf,fdb_latexmk,aux,toc,py} .")
(setq org-latex-pdf-process (list texcmd))))
(org-add-hook 'org-export-before-processing-hook 'python-latexmk-cmd)
This section defines org
preamble and settings for documents exported from
.org
to .tex
files. The basic use is to add \usepackage{org-preamble}
in
your LaTeX document.
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{org-preamble}[2013/03/03 v0.01 Bundling of Preamble items for Org to LaTeX export]
Options can be passed to org-preamble
style file within \usepackage[options]
call. For the time being, I have only copied/pasted how to declare such options
but do not use it.
\RequirePackage{ifthen}
\newboolean{@fr} %
\setboolean{@fr}{false} %
\DeclareOption{fr}{
\setboolean{@fr}{true}
}
\ProcessOptions
\RequirePackage{amsmath,amssymb}
minted is a package that facilitates expressive syntax highlighting in LaTeX
using the powerful Pygments library. The package also provides options to
customize the highlighted source code output using fancyvrb
.
\RequirePackage[cache]{minted}
%% \RequirePackage{minted}
\RequirePackage{ifxetex}
\ifxetex
\RequirePackage{fontspec}
\RequirePackage{xunicode}
%%\else
\fi
\RequirePackage{hyperref}
pifont package
\RequirePackage{pifont}
\RequirePackage{fontawesome5}
\RequirePackage{graphicx}
\graphicspath{
{./plot/}
{./figures/}
}
\RequirePackage{comment}
tikz package
\RequirePackage{tikz}
\usetikzlibrary{positioning,arrows,decorations,backgrounds,patterns,matrix,shapes,fit,calc,shadows,plotmarks,spy,trees}
We use the external library from tikz
to cache i.e. produce a pdf
file of
each tikzpicture
. tikz/external
looks if the pdf exist and if not, export it.
xspace package
\RequirePackage{xspace}
\RequirePackage{nicefrac}
\renewcommand{\d}{\text{d}}
%%\newcommand{\vv}[1]{\overrightarrow{#1}}
\renewcommand{\div}{\ensuremath{\text{div}}}
\newcommand{\rot}{\ensuremath{\vv{\text{rot}}}}
\newcommand{\grad}{\ensuremath{\vv{\text{grad}}}}
\newcommand{\ket}[1]{\ensuremath{|#1\rangle}\xspace}
\newcommand{\bra}[1]{\ensuremath{\langle #1|}\xspace}
\newcommand{\psh}[2]{\ensuremath{\langle #1|#2\rangle}\xspace}
\newcommand{\cmark}{\ding{51}}
\newcommand{\xmark}{\ding{55}}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{lecture-style}[2013/09/18 v0.01 Custom lecture/course templates]
\RequirePackage{kvoptions}
\SetupKeyvalOptions{
family=ls,
prefix=ls@
}
\DeclareBoolOption[false]{nologo}
\DeclareBoolOption[false]{oldstyle}
\DeclareBoolOption[false]{book}
\DeclareBoolOption[false]{python_teaching_lectures}
\DeclareBoolOption[false]{python_teaching_classes}
\DeclareBoolOption[false]{novc}
\DeclareStringOption[solarized]{theme}
\ProcessKeyvalOptions*
Here we parse result of ProcessKeyvalOptions
done previously in order to set
different booleans used in the next section.
\RequirePackage{ifthen}
\newboolean{has_driver_name}
\setboolean{has_driver_name}{false}
\newboolean{novc}%
\setboolean{novc}{false}%
\ifthenelse{\boolean{ls@novc}}{
\setboolean{novc}{true}
}{}
\ifthenelse{\boolean{ls@python_teaching_lectures}}{
\setboolean{has_driver_name}{true}
}{}
\ifthenelse{\boolean{ls@python_teaching_classes}}{
\setboolean{has_driver_name}{true}
}{}
\ifthenelse{\boolean{has_driver_name}}{
}{
\PackageWarning{lecture-style}{You do not specify a 'driver' name !}}{
}
hyperref
package
\hypersetup{
xetex,
colorlinks=true,
urlcolor=gray,
filecolor=gray,
linkcolor=gray,
citecolor=gray,
plainpages=false,
pdfpagelabels,
bookmarksnumbered,
pagebackref
}
\let\orighref\href
\renewcommand{\href}[2]{\orighref{#1}{#2\,\scalebox{0.75}{\faExternalLink*}}}
Given the driver
to be used, generic colors, special title inclusion are set
up. Practically, everything can be done within this section.
\ifthenelse{\boolean{has_driver_name}}{
\ifthenelse{\equal{\ls@theme}{whopper}}{
\definecolor{red}{HTML}{DC0D2B}
\definecolor{green}{HTML}{66A70B}
\definecolor{orange}{HTML}{E3B581}
\definecolor{brown}{HTML}{703C2F}
}{}
\ifthenelse{\equal{\ls@theme}{solarized}}{
\definecolor{red}{HTML}{DC322F}
\definecolor{green}{HTML}{859900}
\definecolor{blue}{HTML}{268bd2}
\definecolor{orange}{HTML}{CB4B16}
\definecolor{gray}{RGB}{107,108,110}
\definecolor{violet}{HTML}{6C71C4}
}{}
\ifthenelse{\equal{\ls@theme}{default}}{
\definecolor{red}{RGB}{220,50,47}
\definecolor{green}{RGB}{132,184,24}
\definecolor{blue}{RGB}{0,72,112}
\definecolor{orange}{RGB}{192,128,64}
\definecolor{gray}{RGB}{107,108,110}
\definecolor{violet}{RGB}{99,0,60}
%% \definecolor{solarizedbg}{HTML}{002b36}
}{}
\setmonofont[Scale=0.9]{Ubuntu Mono}
%% \setmonofont[Scale=0.9]{Inconsolata}
\RequirePackage{mathpazo}
\ifthenelse{\boolean{ls@oldstyle}}{
\setmainfont
[ BoldFont = texgyrepagella-bold.otf ,
ItalicFont = texgyrepagella-italic.otf ,
BoldItalicFont = texgyrepagella-bolditalic.otf ]
{texgyrepagella-regular.otf}
}{
\setsansfont[Mapping=tex-text]{Myriad Pro}
\setromanfont[Mapping=tex-text, Numbers=OldStyle]{Minion Pro}
}
\renewcommand{\theFancyVerbLine}{\ttfamily \textcolor[HTML]{93A1A1}{\scriptsize\oldstylenums{\arabic{FancyVerbLine}}}}
\usemintedstyle{solarized}
\definecolor{solarizedbg}{RGB}{253,246,227}
\RequirePackage{fancyhdr}
\ifthenelse{\boolean{ls@oldstyle}}{
\RequirePackage[Lenny]{fncychap}
\ChTitleVar{\Huge\bfseries}
\ChNameVar{\fontsize{14}{16}\usefont{OT1}{ptm}{b}{n}\selectfont}
\ChNumVar{\fontsize{60}{62}\usefont{OT1}{ptm}{b}{n}\selectfont}
}{
\RequirePackage[]{fncychap}
\ChTitleVar{\Huge\bfseries\sffamily\color{blue}}
\ChNameVar{\raggedleft\fontsize{14}{16}\selectfont\sffamily\color{blue}}
\ChNumVar{\raggedleft\fontsize{60}{62}\selectfont\sffamily\color{blue}}
\ifthenelse{\boolean{ls@python_teaching_classes}}{
\ChRuleWidth{0pt}
\renewcommand{\DOCH}{%
\vspace{-2cm}
\raggedleft
\CNV\FmN{\@chapapp}\space \CNoV\thechapter
\par\nobreak
%% \vspace{-3cm}
}
}{}
\ifthenelse{\boolean{ls@python_teaching_lectures}}{
\ChRuleWidth{1.5pt}
}{}
}
\ifthenelse{\boolean{ls@python_teaching_lectures}}{
\ifthenelse{\boolean{ls@book}}{
\renewcommand*{\maketitle}{
{\color{blue}
\begingroup
\hbox{
\hspace*{0.2\textwidth}
\rule{1.5pt}{\textheight}
\hspace*{0.05\textwidth}
\parbox[b]{0.75\textwidth}{
{\noindent\bf\sffamily\Huge\@title}\\
\vspace{0.5\textheight}
\begin{flushright}
\color{gray}\sffamily
Xavier Garrido$^a$, Yann Leprince$^b$ \& Matthieu Loumaigne$^c$
\\[6mm]
$^a$ LAL, IN2P3 \& Université Paris-Sud, France\\
$^b$ LNAO, CEA Saclay, France\\
$^c$ LAC, Université Paris-Sud, France\\
\end{flushright}
}}
\endgroup
}
\thispagestyle{empty}
\clearemptydoublepage
}
\g@addto@macro\tableofcontents{\clearemptydoublepage}
}{
\renewcommand*{\maketitle}{}
}
}{
\renewcommand*{\maketitle}{}
}
\renewcommand\@dotsep{10000}
\ifthenelse{\boolean{ls@python_teaching_classes}}{
\setlength{\parindent}{0cm}
}{}
\chapter
command within the org
document. Thus we use a
LaTeX hook to automatically add this command at the begin of the document.
\ifthenelse{\boolean{ls@python_teaching_classes}}{
\renewcommand{\chaptername}{Exercice}
\ifthenelse{\boolean{ls@oldstyle}}{
\AtBeginDocument{\chapter{}\vspace{-1.5cm}}
}{
\AtBeginDocument{\chapter{}}
}
}{}
\ifthenelse{\boolean{ls@python_teaching_lectures}}{
\ifthenelse{\boolean{ls@book}}{
\renewcommand{\chaptername}{Chapitre}
\renewcommand{\contentsname}{Tables des matières}
\renewcommand{\appendixname}{Annexe}
%% \AtBeginDocument{\chapter{\@title}}
%% \AtEndDocument{\clearemptydoublepage}
}{
\renewcommand{\chaptername}{Fiche}
\AtBeginDocument{\chapter{\@title}}
\AtEndDocument{\clearemptydoublepage}
}
}{}
No page number for first chapter pages
\let\ps@plain=\ps@empty
titlesec
package
\ifthenelse{\boolean{ls@oldstyle}}{}{
\RequirePackage{titlesec}
\titleformat*{\section}{\Large\bfseries\sffamily\color{blue}}
\titleformat*{\subsection}{\large\bfseries\sffamily\color{blue!75}}
\titleformat*{\subsubsection}{\itshape\color{blue!60}}
}
\ifthenelse{\boolean{ls@book}}{
\let\stdchapter\chapter
\renewcommand\chapter{\ifnum\c@chapter>0{\clearemptydoublepage}\else\fi\stdchapter}
}
\RequirePackage[onehalfspacing]{setspace}
\setstretch{1.02}
\RequirePackage{a4wide}
\renewcommand{\footnoterule}{\color{gray}%
\vskip-\footruleskip\vskip-\footrulewidth%
\vspace{10pt}\hrule width\columnwidth height0.0pt \vspace{5pt} \color{gray}}
\renewcommand{\thefootnote}{\alph{footnote}}
\interfootnotelinepenalty=10000
\renewcommand{\headrulewidth}{1.5pt}
\RequirePackage{ccaption}
\captionnamefont{\footnotesize\bfseries}
\captiontitlefont{\footnotesize}
\renewcommand{\fnum@figure}[1]{Figure~\thefigure~-- }
fncychap
redefines geometry
layout)
\ifthenelse{\boolean{ls@python_teaching_classes}}{
\RequirePackage[top=1.0cm, width=16cm]{geometry}
}{}
if [ -d .git ]; then
url=$(git config --get remote.origin.url | sed -e 's#git@github.com:#https://github.com/#' -e 's#\.git##')
log=$(LC_MESSAGES=en git --no-pager log -1 HEAD --date=short --pretty=format:"{\scriptsize\faGithub*} \ttfamily\orighref{$url/commit/%H}{\color{gray}\texttt{%h}} - %ad")
# log=$(LC_MESSAGES=en git --no-pager log -1 HEAD --date=short --pretty=format:"\ttfamily\orighref{$url/commit/%H}{\color{gray}\faGit %h}")
echo "\renewcommand*{\PrelimText}{\textnormal{\small\color{gray}${log}}}"
fi
\ifthenelse{\boolean{novc}}{}{
\RequirePackage{prelim2e}
<<vc-status()>>
}
\newenvironment{remark}
{\begin{quote}\color{red}\faExclamationCircle\itshape}
{\end{quote}}
\newenvironment{prompt}
{\begin{quote}\color{blue!75}\tt\$\;}
{\end{quote}}
\renewenvironment{bibliography}{%
\section*{\bibname}% <-- this line was changed from \chapter* to \section*
\@mkboth{\MakeUppercase\bibname}{\MakeUppercase\bibname}%
\list{\@biblabel{\@arabic\c@enumiv}}%
{\settowidth\labelwidth{\@biblabel{9}}%
\leftmargin\labelwidth
\advance\leftmargin\labelsep
\@openbib@code
\usecounter{enumiv}%
\let\p@enumiv\@empty
\renewcommand\theenumiv{\@arabic\c@enumiv}}%
\sloppy
\clubpenalty4000
\@clubpenalty \clubpenalty
\widowpenalty4000%
\sfcode`\.\@m}{%
\def\@noitemerr
{\@latex@warning{Empty `thebibliography' environment}}%
\endlist}
%% \def\@xobeysp{\mbox{}\space}
\def\verbatim@font{\color{gray}\normalfont\ttfamily\raggedright\leftskip\@totalleftmargin\small}
\RequirePackage[framemethod=tikz]{mdframed}
\renewcommand{\mdf@footnoterule}{\color{gray}%
\vskip-\footruleskip\vskip-\footrulewidth%
\vspace{10pt}\hrule width\columnwidth height0.0pt \vspace{5pt} \color{gray}}
\newmdenv[%
singleextra={
\fill[blue] (P) rectangle ([xshift=-15pt]P|-O);
\node[overlay,anchor=south east,rotate=90,font=\color{white}] at (P) {\sf\textbf{correction}};
},
firstextra={
\fill[blue] (P) rectangle ([xshift=-15pt]P|-O);
\node[overlay,anchor=south east,rotate=90,font=\color{white}] at (P) {\sf\textbf{correction}};
},
secondextra={
\fill[blue] (P) rectangle ([xshift=-15pt]P|-O);
\node[overlay,anchor=south east,rotate=90,font=\color{white}] at (P) {\sf\textbf{correction}};
},
backgroundcolor=blue!2,
%% roundcorner=5pt,
%% hidealllines=true,
%% topline=true,
linecolor=blue,
skipabove=12pt,skipbelow=12pt,
innertopmargin=0.4em,%
innerbottommargin=0.4em,%
innerrightmargin=2.7em,%
rightmargin=0.7em,%
innerleftmargin=1.7em,%
leftmargin=0.7em,%
]{correction}
\newenvironment{opinion}
{\begin{quote}\color{red}\faPencil\itshape\bfseries}
{\end{quote}}
\newcommand{\Cpp}{\mbox{C\vspace{.5em}\protect\raisebox{.2ex}{\footnotesize++~}}}
\newcommand{\clearemptydoublepage}{\newpage{\pagestyle{empty}\cleardoublepage}}
\newcommand{\uline}[1]{\textcolor{blue!75}{#1}}
}{}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{slide-style}[2013/11/07 v0.01 C++ beamer templates]
\RequirePackage{kvoptions}
\SetupKeyvalOptions{
family=cb,
prefix=cb@
}
\DeclareBoolOption[false]{nologo}
\DeclareBoolOption[false]{notitlelogo}
\DeclareBoolOption[false]{noheaderlogo}
\DeclareBoolOption[false]{noauthor}
\DeclareBoolOption[false]{python_teaching}
\DeclareStringOption[solarized]{theme}
\ProcessKeyvalOptions*
Here we parse result of ProcessKeyvalOptions
done previously in order to set
different booleans used in the nex section.
\RequirePackage{ifthen}
\newboolean{has_driver_name}
\setboolean{has_driver_name}{false}
\ifthenelse{\boolean{cb@python_teaching}}{
\setboolean{has_driver_name}{true}
\setboolean{cb@nologo}{true}
%% \setboolean{cb@noauthor}{true}
}{}
\ifthenelse{\boolean{has_driver_name}}{
}{
\PackageWarning{slide-style}{You do not specify a 'driver' name !}}{
}
\ifthenelse{\boolean{cb@nologo}}{
\setboolean{cb@notitlelogo}{true}
\setboolean{cb@noheaderlogo}{true}
}{}
hyperref
package
\hypersetup{
xetex,
colorlinks=false,
urlcolor=gray,
filecolor=gray,
linkcolor=gray,
citecolor=gray,
plainpages=false,
pdfpagelabels,
bookmarksnumbered,
pagebackref
}
\let\orighref\href
\renewcommand{\href}[2]{\orighref{#1}{#2\,\scalebox{0.75}{\faExternalLink*}}}
\RequirePackage[eulergreek,EULERGREEK]{sansmath}
\sansmath
ulem
package
\RequirePackage[normalem]{ulem}
\usetheme{default}
\usecolortheme{whale}
Since color must be applied in a very last time, we define a bash script to be
called within postamble
part of Template settings
\setbeamercolor{structure}{fg=generic2}
\setbeamercolor{alerted text}{fg=generic0}
\setbeamercolor{example text}{fg=generic1}
\setbeamercolor{block title}{use=structure,fg=structure.bg, bg=structure.fg}
\setbeamercolor{block body}{use=structure, fg=structure.fg, bg=structure.bg}
\setbeamercolor{frametitle}{use=structure, fg=structure.fg, bg=}
\setbeamercolor{example title}{use=example,fg=example.bg, bg=example.fg}
\setbeamercolor{example body}{use=example, fg=example.fg, bg=example.bg}
%% \setbeamercolor{itemize item}{fg=gray}
\setbeamercolor{footnote}{fg=generic3}
\setbeamercolor{footnote mark}{fg=generic3}
\setbeamercolor{normal text}{fg=gray}
\setbeamerfont{title}{series=\bfseries, size=\Large}
\setbeamercolor{author}{fg=gray}
\setbeamerfont{author}{series=,size=\normalsize}
\setbeamercolor{institute}{fg=gray}
\setbeamercolor{ruc_upper}{fg=white,bg=red}
\setbeamercolor{ruc_lower}{fg=red,bg=white}
\setbeamercolor{guc_upper}{fg=white,bg=green}
\setbeamercolor{guc_lower}{fg=green,bg=white}
\setbeamercolor{buc_upper}{fg=white,bg=blue}
\setbeamercolor{buc_lower}{fg=blue,bg=white}
\setbeamercolor{-wred}{fg=white,bg=red}
\setbeamercolor{-red}{fg=red,bg=red!10}
\setbeamercolor{-wgreen}{fg=white,bg=green}
\setbeamercolor{-green}{fg=green,bg=green!10}
\setbeamercolor{-wblue}{fg=white,bg=blue}
\setbeamercolor{-blue}{fg=blue,bg=blue!10}
\setbeamercolor{-worange}{fg=white,bg=orange}
\setbeamercolor{-orange}{fg=orange,bg=orange!10}
\setbeamercolor{-wgray}{fg=white,bg=gray}
\setbeamercolor{-gray}{fg=gray,bg=white}
\setbeamercolor{-white}{fg=blue,bg=white}
\setbeamercolor{-hidden}{fg=white,bg=white}
\setbeamercolor{-transparent}{fg=gray!30}
\setbeamercolor{-none}{}
\setmonofont[Scale=0.9]{Ubuntu Mono}
%%\setmonofont[Scale=0.9]{Inconsolata}
\setbeamerfont{page number in head/foot}{size=\tiny}
\DeclareOptionBeamer{shadow}[true]{\def\beamer@themerounded@shadow{#1}}
\ExecuteOptionsBeamer{shadow=true}
\ProcessOptionsBeamer
\setbeamercovered{transparent}
\setbeamertemplate{blocks}[rounded][shadow=\beamer@themerounded@shadow]
First, make title frame plain (no page number, not footline…)
\def\maketitle{\ifbeamer@inframe\titlepage\else\frame[plain,noframenumbering]{\titlepage}\fi}
Also add a logo if any
\renewcommand{\logo}{
\begin{tikzpicture}[y=0.80pt, x=0.80pt, yscale=-1.000000, xscale=1.000000, inner sep=0pt, outer sep=0pt]
%% \definecolor{c20435c}{RGB}{32,67,92}
\definecolor{red}{RGB}{221,42,43}
\definecolor{green}{RGB}{132,184,24}
\definecolor{blue}{RGB}{0,72,112}
\definecolor{orange}{RGB}{192,128,64}
\definecolor{gray}{RGB}{107,108,110}
%% \path[fill=blue,nonzero rule,rounded corners=0.0000cm] (-7.7849,664.0217)
%% rectangle (763.1963,893.9382);
\path[draw=white,fill=blue,line join=miter,line cap=butt,miter
limit=4.00,line width=4.663pt] (365.3037,537.2679) -- (365.3037,454.3871) --
(436.6190,412.9467) -- (507.9343,454.3871) -- (507.9343,537.2679) --
(436.6190,578.7083) -- cycle;
\begin{scope}[cm={{0.58101,0.0,0.0,0.58477,(268.02538,213.4089)}}]
\begin{scope}[cm={{0.93094,0.0,0.0,0.93094,(50.054,93.18509)}},fill=white]
\path[color=white,fill=white,nonzero rule,line width=0.800pt]
(289.7439,337.9207) .. controls (273.3892,321.5661) and (267.3181,329.6797) ..
(267.3181,329.6797) -- (259.9887,337.0456) -- (275.5956,352.6525) --
(273.3894,354.8586) -- (251.5835,333.0527) .. controls (251.5835,333.0527) and
(242.3050,321.4005) .. (225.8030,337.9025) .. controls (209.3009,354.4046) and
(219.0206,362.9538) .. (219.0206,362.9538) -- (224.4720,368.4053) --
(232.1296,360.7477) .. controls (232.1296,360.7477) and (240.9702,351.3194) ..
(250.2526,360.6018) .. controls (259.5350,369.8842) and (265.7319,376.0811) ..
(265.7319,376.0811) .. controls (265.7319,376.0811) and (274.2881,384.9185) ..
(282.8338,376.3728) .. controls (291.3795,367.8271) and (296.9639,362.2427) ..
(296.9639,362.2427) .. controls (296.9639,362.2427) and (306.8353,355.0122) ..
(289.7439,337.9207) -- cycle(276.1972,334.2561) .. controls
(277.7500,335.8088) and (277.7500,338.3188) .. (276.1972,339.8716) .. controls
(274.6445,341.4244) and (272.1344,341.4244) .. (270.5817,339.8716) .. controls
(269.0289,338.3188) and (269.0289,335.8088) .. (270.5817,334.2561) .. controls
(272.1344,332.7033) and (274.6445,332.7033) .. (276.1972,334.2561) -- cycle;
\path[color=white,fill=white,nonzero rule,line width=0.800pt]
(226.1202,402.4733) .. controls (242.4749,418.8281) and (248.5460,410.7144) ..
(248.5460,410.7144) -- (255.8755,403.3485) -- (240.2686,387.7416) --
(242.4747,385.5355) -- (264.2806,407.3414) .. controls (264.2806,407.3414) and
(273.5591,418.9936) .. (290.0611,402.4916) .. controls (306.5632,385.9895) and
(296.8436,377.4403) .. (296.8436,377.4403) -- (291.3921,371.9889) --
(283.7345,379.6465) .. controls (283.7345,379.6465) and (274.8940,389.0747) ..
(265.6115,379.7923) .. controls (256.3291,370.5099) and (250.1323,364.3130) ..
(250.1323,364.3130) .. controls (250.1323,364.3130) and (241.5760,355.4756) ..
(233.0303,364.0213) .. controls (224.4846,372.5670) and (218.9002,378.1514) ..
(218.9002,378.1514) .. controls (218.9002,378.1514) and (209.0289,385.3820) ..
(226.1203,402.4734) -- cycle(239.6669,406.1380) .. controls
(238.1141,404.5853) and (238.1141,402.0752) .. (239.6669,400.5225) .. controls
(241.2196,398.9697) and (243.7297,398.9697) .. (245.2824,400.5225) .. controls
(246.8352,402.0752) and (246.8352,404.5853) .. (245.2824,406.1380) .. controls
(243.7297,407.6908) and (241.2196,407.6908) .. (239.6669,406.1380) -- cycle;
\end{scope}
\begin{scope}[xshift=-2cm]
\path[white] (289.9004,540.2377) node[above right] (text6352-3-3-9)
{\Huge Python};
\end{scope}
\end{scope}
%% Matplotlib
\path[draw=white,fill=green,line join=miter,line cap=butt,miter
limit=4.00,line width=4.663pt] (436.6190,412.9467) -- (436.6190,330.0658) --
(507.9343,288.6254) -- (579.2496,330.0658) -- (579.2496,412.9467) --
(507.9343,454.3871) -- cycle;
\begin{scope}[xshift=-1.8cm]
\path[white] (508.9051,402.8219) node[above right] (text6352-9-2-8) {\Huge Matplotlib};
\end{scope}
\begin{scope}[cm={{0.50301,0.0,0.0,0.50627,(483.11556,127.44849)}}]
\path[draw=white,fill=white,even odd rule] (72.1376,443.9349) .. controls
(67.9051,438.1317) and (59.4988,435.1198) .. (52.1927,433.7612) .. controls
(44.8867,432.4026) and (41.8139,431.4991) .. (37.1119,428.9414) .. controls
(33.4436,426.9460) and (30.7996,420.0990) .. (31.6238,414.4311) .. controls
(32.9044,405.6506) and (41.0864,399.5302) .. (49.9006,400.7639) .. controls
(54.3025,401.3879) and (58.0353,403.7241) .. (60.4965,407.0128) --
(70.2561,419.8656) .. controls (75.8345,427.0671) and (82.1064,429.2104) ..
(88.9296,425.8098) -- (92.3698,424.3427) .. controls (92.6455,424.2143) and
(92.9685,424.2022) .. (93.2821,424.3166) .. controls (93.5388,424.4165) and
(93.7477,424.5999) .. (93.8713,424.8167) -- (94.5557,425.8502) .. controls
(94.7457,426.1621) and (95.0308,426.4145) .. (95.4016,426.5552) .. controls
(96.0287,426.7935) and (96.7036,426.6507) .. (97.1787,426.2409) --
(105.1042,418.7487) .. controls (106.4916,417.5579) and (106.0829,416.4649) ..
(106.0829,416.4649) -- (104.1727,412.1044) .. controls (104.1727,412.1044) and
(103.6501,411.0590) .. (101.8445,411.2995) -- (91.2201,412.2783) .. controls
(90.6024,412.3663) and (90.0511,412.7785) .. (89.8137,413.4071) .. controls
(89.6712,413.7739) and (89.6618,414.1572) .. (89.7661,414.5050) --
(90.1463,415.7314) .. controls (90.2224,415.9862) and (90.2224,416.2720) ..
(90.1179,416.5339) .. controls (89.9944,416.8578) and (89.7474,417.0866) ..
(89.4528,417.2080) -- (86.4498,418.4822) .. controls (83.3042,420.3277) and
(79.7312,419.1489) .. (77.3458,416.2245) -- (74.6185,412.5926) --
(66.8545,402.2641) .. controls (63.1674,397.3629) and (57.6080,393.8669) ..
(51.0415,392.9478) .. controls (37.8940,391.1023) and (25.6921,400.2281) ..
(23.7819,413.3308) .. controls (22.8173,419.9346) and (24.7920,426.1831) ..
(28.3957,431.2013) .. controls (31.0138,434.8478) and (35.8122,436.9311) ..
(38.4075,437.5817) .. controls (44.8950,439.9016) and (50.5075,440.2254) ..
(56.6575,442.4105) .. controls (58.0383,442.9116) and (61.2190,444.0870) ..
(63.8038,446.2074) -- (63.8038,446.2074) .. controls (66.8922,449.3547) and
(68.5268,453.8510) .. (67.8332,458.5664) .. controls (66.6642,466.6063) and
(59.1759,472.2076) .. (51.1079,471.0738) .. controls (47.0668,470.5117) and
(43.6550,468.3648) .. (41.3957,465.3582) -- (32.0733,452.9556) .. controls
(30.1726,450.4275) and (27.2980,448.6214) .. (23.9006,448.1354) .. controls
(20.5081,447.6591) and (17.2248,448.6021) .. (14.6804,450.5130) --
(-4.9314,465.1828) .. controls (-10.9818,469.2598) and (-4.7858,474.8667) ..
(-0.7079,471.6798) -- (19.3815,456.5852) .. controls (20.3008,455.9565) and
(21.4413,455.6707) .. (22.6244,455.8327) .. controls (23.8836,456.0137) and
(24.9550,456.6766) .. (25.6583,457.6141) -- (35.5201,470.8989) .. controls
(38.9933,475.1705) and (44.0397,478.1958) .. (49.9481,479.0284) .. controls
(62.3782,480.7715) and (73.9149,472.1412) .. (75.7205,459.7478) .. controls
(76.5564,453.9808) and (75.1500,448.4119) .. (72.1375,443.9348);
\path[draw=white,fill=white,line join=miter,line cap=butt,miter
limit=4.00,line width=1.848pt] (23.2051,387.6350) -- (23.3607,438.4933);
\path[draw=white,fill=white,line join=miter,line cap=butt,miter
limit=4.00,line width=1.848pt] (67.5312,392.3787) -- (11.6437,392.5342);
\path[draw=white,fill=white,line join=miter,line cap=butt,miter
limit=4.00,line width=1.848pt] (93.6602,479.1644) -- (28.6487,479.3200);
\path[draw=white,fill=white,line join=miter,line cap=butt,miter
limit=4.00,line width=1.848pt] (77.0056,434.0010) -- (76.9505,489.4380);
\path[draw=white,fill=white,line join=miter,line cap=butt,miter
limit=4.00,line width=1.848pt] (41.2466,447.7474) -- (2.2086,447.9029);
\end{scope}
%% Scikit
%% \path[draw=white,fill=blue,line join=miter,line cap=butt,miter
%% limit=4.00,line width=4.663pt] (152.4674,413.7202) -- (152.4674,330.8394) --
%% (223.7827,289.3990) -- (295.0980,330.8394) -- (295.0980,413.7202) --
%% (223.7827,455.1606) -- cycle;
%% \begin{scope}[cm={{0.58101,0.0,0.0,0.58477,(268.02538,211.61993)}}]
%% \path[color=black,draw=white,line join=miter,line cap=butt,miter
%% limit=4.00,line width=2.000pt] (-95.0460,183.1009) .. controls
%% (-96.0177,183.5197) and (-96.9310,184.0151) .. (-97.8695,184.4716) --
%% (-97.9362,184.4951) -- (-95.7766,198.0873) .. controls (-99.2840,200.2995) and
%% (-102.3523,203.0376) .. (-104.8741,206.1778) -- (-118.0309,202.3224) ..
%% controls (-120.0918,205.5248) and (-121.7683,209.0034) .. (-123.0565,212.5851)
%% -- (-112.0247,220.6461) .. controls (-113.0457,224.8066) and
%% (-113.3490,229.2533) .. (-112.8567,233.6392) .. controls (-112.8507,233.6584)
%% and (-112.8345,233.7027) .. (-112.8332,233.7059) -- (-124.8274,240.1870) ..
%% controls (-124.3913,242.1654) and (-123.8026,244.1615) .. (-123.1123,246.1205)
%% .. controls (-122.5474,247.7233) and (-121.9459,249.2891) ..
%% (-121.2393,250.7960) -- (-107.7375,248.5931) .. controls (-105.2800,252.6853)
%% and (-102.1125,256.1997) .. (-98.4368,258.9924) -- (-102.3393,272.0155) ..
%% controls (-99.2295,273.9389) and (-95.8703,275.5040) .. (-92.4185,276.7107) --
%% (-84.3142,265.5885) .. controls (-79.7360,266.6558) and (-74.9741,266.8574) ..
%% (-70.1611,266.0868) -- (-63.7035,278.0142) .. controls (-62.2328,277.6417) and
%% (-60.7700,277.1307) .. (-59.3114,276.6167) .. controls (-57.2521,275.8911) and
%% (-55.3126,275.1199) .. (-53.4129,274.1624) -- (-55.5528,260.4130) .. controls
%% (-51.6350,257.8310) and (-48.2542,254.5555) .. (-45.6289,250.8289) --
%% (-32.6962,254.6881) .. controls (-30.8270,251.4760) and (-29.3057,248.0051) ..
%% (-28.1857,244.4566) -- (-39.4887,236.2658) .. controls (-38.6951,232.0496) and
%% (-38.6517,227.6910) .. (-39.3959,223.3076) -- (-27.4685,216.8501) .. controls
%% (-27.8224,215.4926) and (-28.2500,214.2059) .. (-28.7246,212.8590) .. controls
%% (-29.5494,210.5184) and (-30.6302,208.3193) .. (-31.7525,206.1858) --
%% (-45.4116,208.3690) .. controls (-47.7261,205.0095) and (-50.5975,202.1259) ..
%% (-53.7854,199.7471) -- (-49.8829,186.7240) .. controls (-53.2333,184.6857) and
%% (-56.8364,182.9817) .. (-60.5702,181.7729) -- (-68.8279,193.0995) .. controls
%% (-72.6122,192.3509) and (-76.4831,192.1174) .. (-80.4256,192.6024) --
%% (-86.9067,180.6082) .. controls (-88.8076,181.0367) and (-90.6901,181.5657) ..
%% (-92.5727,182.2291) .. controls (-93.0816,182.4084) and (-93.6105,182.5779) ..
%% (-94.1102,182.7709) .. controls (-94.3532,182.8666) and (-94.6053,182.9284) ..
%% (-94.8455,183.0300) .. controls (-94.9105,183.0577) and (-94.9812,183.0730) ..
%% (-95.0460,183.1006) -- cycle;
%% \begin{scope}[cm={{0.64551,0.0,0.0,0.64551,(-242.64657,-9.6559)}},fill=white]
%% \path[color=black,fill=white,nonzero rule,line width=0.800pt]
%% (289.7439,337.9207) .. controls (273.3892,321.5661) and (267.3181,329.6797) ..
%% (267.3181,329.6797) -- (259.9887,337.0456) -- (275.5956,352.6525) --
%% (273.3894,354.8586) -- (251.5835,333.0527) .. controls (251.5835,333.0527) and
%% (242.3050,321.4005) .. (225.8030,337.9025) .. controls (209.3009,354.4046) and
%% (219.0206,362.9538) .. (219.0206,362.9538) -- (224.4720,368.4053) --
%% (232.1296,360.7477) .. controls (232.1296,360.7477) and (240.9702,351.3194) ..
%% (250.2526,360.6018) .. controls (259.5350,369.8842) and (265.7319,376.0811) ..
%% (265.7319,376.0811) .. controls (265.7319,376.0811) and (274.2881,384.9185) ..
%% (282.8338,376.3728) .. controls (291.3795,367.8271) and (296.9639,362.2427) ..
%% (296.9639,362.2427) .. controls (296.9639,362.2427) and (306.8353,355.0122) ..
%% (289.7439,337.9207) -- cycle(276.1972,334.2561) .. controls
%% (277.7500,335.8088) and (277.7500,338.3188) .. (276.1972,339.8716) .. controls
%% (274.6445,341.4244) and (272.1344,341.4244) .. (270.5817,339.8716) .. controls
%% (269.0289,338.3188) and (269.0289,335.8088) .. (270.5817,334.2561) .. controls
%% (272.1344,332.7033) and (274.6445,332.7033) .. (276.1972,334.2561) -- cycle;
%% \path[color=black,fill=white,nonzero rule,line width=0.800pt]
%% (226.1202,402.4733) .. controls (242.4749,418.8281) and (248.5460,410.7144) ..
%% (248.5460,410.7144) -- (255.8755,403.3485) -- (240.2686,387.7416) --
%% (242.4747,385.5355) -- (264.2806,407.3414) .. controls (264.2806,407.3414) and
%% (273.5591,418.9936) .. (290.0611,402.4916) .. controls (306.5632,385.9895) and
%% (296.8436,377.4403) .. (296.8436,377.4403) -- (291.3921,371.9889) --
%% (283.7345,379.6465) .. controls (283.7345,379.6465) and (274.8940,389.0747) ..
%% (265.6115,379.7923) .. controls (256.3291,370.5099) and (250.1323,364.3130) ..
%% (250.1323,364.3130) .. controls (250.1323,364.3130) and (241.5760,355.4756) ..
%% (233.0303,364.0213) .. controls (224.4846,372.5670) and (218.9002,378.1514) ..
%% (218.9002,378.1514) .. controls (218.9002,378.1514) and (209.0289,385.3820) ..
%% (226.1203,402.4734) -- cycle(239.6669,406.1380) .. controls
%% (238.1141,404.5853) and (238.1141,402.0752) .. (239.6669,400.5225) .. controls
%% (241.2196,398.9697) and (243.7297,398.9697) .. (245.2824,400.5225) .. controls
%% (246.8352,402.0752) and (246.8352,404.5853) .. (245.2824,406.1380) .. controls
%% (243.7297,407.6908) and (241.2196,407.6908) .. (239.6669,406.1380) -- cycle;
%% \end{scope}
%% \path[fill=black] (-75.0286,334.7870) node[above right] (text6352-5-4-1)
%% {SciKits};
%% \end{scope}
%% Numpy
\path[draw=white,fill=blue,line join=miter,line cap=butt,miter
limit=4.00,line width=4.663pt] (293.9884,412.9467) -- (293.9884,330.0658) --
(365.3037,288.6254) -- (436.6190,330.0658) -- (436.6190,412.9467) --
(365.3037,454.3871) -- cycle;
\begin{scope}[xshift=-1.3cm]
\path[white] (365.1383,402.8219) node[above right] (text6352-2-9-62) {\Huge Numpy};
\end{scope}
\begin{scope}[cm={{0.46686,0.0,0.0,0.46988,(369.60147,91.0536)}},draw=white,miter limit=4.00,line width=1.493pt]
\begin{scope}[shift={(-73.64625,-7.08662)},draw=white,miter limit=4.00,line width=1.493pt]
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (30.6859,529.1339) -- (46.0289,520.2756) -- (61.3719,529.1339);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (30.6859,529.1339) -- (46.0289,537.9921) -- (61.3719,529.1339)
-- (61.3719,532.6772);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (30.6859,529.1339) -- (30.6859,546.8504) -- (46.0289,555.7087);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (46.0289,537.9921) -- (46.0289,555.7087) -- (49.0975,553.9370);
\end{scope}
\begin{scope}[shift={(-92.05782,-17.71654)},draw=white,miter limit=4.00,line width=1.493pt]
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (30.6859,529.1339) -- (46.0289,520.2756) -- (61.3719,529.1339);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (30.6859,529.1339) -- (46.0289,537.9921) -- (61.3719,529.1339)
-- (61.3719,532.6772);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (30.6859,529.1339) -- (30.6859,546.8504) -- (46.0289,555.7087);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (46.0289,537.9921) -- (46.0289,555.7087) -- (49.0975,553.9370);
\end{scope}
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (-24.5488,532.6772) -- (-9.2058,523.8189) -- (6.1372,532.6772);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (-24.5488,532.6772) -- (-9.2058,541.5354) -- (6.1372,532.6772)
-- (6.1372,550.3937);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (-24.5488,532.6772) -- (-24.5488,550.3937) --
(-9.2058,559.2520);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (-9.2058,541.5354) -- (-9.2058,559.2520) -- (6.1372,550.3937);
\begin{scope}[shift={(-58.30328,15.94488)},draw=white,miter limit=4.00,line width=1.493pt]
\begin{scope}[shift={(-15.34297,-44.29134)},draw=white,miter limit=4.00,line width=1.493pt]
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (30.6859,529.1339) -- (46.0289,520.2756) -- (61.3719,529.1339);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (30.6859,529.1339) -- (46.0289,537.9921) -- (61.3719,529.1339)
-- (61.3719,532.6772);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (30.6859,529.1339) -- (30.6859,532.6772);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (46.0289,537.9921) -- (46.0289,541.5354);
\end{scope}
\end{scope}
\begin{scope}[shift={(-39.89172,26.5748)},draw=white,miter limit=4.00,line width=1.493pt]
\begin{scope}[shift={(-15.34297,-44.29134)},draw=white,miter limit=4.00,line width=1.493pt]
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (30.6859,529.1339) -- (46.0289,520.2756) -- (61.3719,529.1339);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (30.6859,529.1339) -- (46.0289,537.9921) -- (61.3719,529.1339)
-- (61.3719,532.6772);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (30.6859,529.1339) -- (30.6859,532.6772);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (46.0289,537.9921) -- (46.0289,541.5354);
\end{scope}
\end{scope}
\begin{scope}[draw=white,miter limit=4.00,line width=1.493pt]
\begin{scope}[shift={(-21.48016,37.20472)},draw=white,miter limit=4.00,line width=1.493pt]
\begin{scope}[shift={(-15.34297,-44.29134)},draw=white,miter limit=4.00,line width=1.493pt]
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (30.6859,529.1339) -- (46.0289,520.2756) -- (61.3719,529.1339);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (30.6859,529.1339) -- (46.0289,537.9921) -- (61.3719,529.1339)
-- (61.3719,546.8504);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (30.6859,529.1339) -- (30.6859,532.6772);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (46.0289,537.9921) -- (46.0289,555.7087);
\end{scope}
\end{scope}
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (9.2058,548.6220) -- (24.5488,539.7638);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (9.2058,548.6220) -- (6.1372,546.8504);
\end{scope}
\begin{scope}[shift={(-39.89172,5.31496)},draw=white,miter limit=4.00,line width=1.493pt]
\begin{scope}[shift={(-15.34297,-44.29134)},draw=white,miter limit=4.00,line width=1.493pt]
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (30.6859,529.1339) -- (46.0289,520.2756) -- (61.3719,529.1339);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (30.6859,529.1339) -- (46.0289,537.9921) -- (61.3719,529.1339)
-- (61.3719,532.6772);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (30.6859,529.1339) -- (30.6859,532.6772);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (46.0289,537.9921) -- (46.0289,541.5354);
\end{scope}
\end{scope}
\begin{scope}[shift={(-21.48016,15.94488)},draw=white,miter limit=4.00,line width=1.493pt]
\begin{scope}[shift={(-15.34297,-44.29134)},draw=white,miter limit=4.00,line width=1.493pt]
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (30.6859,529.1339) -- (46.0289,520.2756) -- (61.3719,529.1339);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (30.6859,529.1339) -- (46.0289,537.9921) -- (61.3719,529.1339)
-- (61.3719,532.6772);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (30.6859,529.1339) -- (30.6859,532.6772);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (46.0289,537.9921) -- (46.0289,541.5354);
\end{scope}
\end{scope}
\begin{scope}[shift={(18.41156,-10.62992)},draw=white,miter limit=4.00,line width=1.493pt]
\begin{scope}[shift={(-21.48016,37.20472)},draw=white,miter limit=4.00,line width=1.493pt]
\begin{scope}[shift={(-15.34297,-44.29134)},draw=white,miter limit=4.00,line width=1.493pt]
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (30.6859,529.1339) -- (46.0289,520.2756) -- (61.3719,529.1339);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (30.6859,529.1339) -- (46.0289,537.9921) -- (61.3719,529.1339)
-- (61.3719,546.8504);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (30.6859,529.1339) -- (30.6859,532.6772);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (46.0289,537.9921) -- (46.0289,555.7087);
\end{scope}
\end{scope}
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (9.2058,548.6220) -- (24.5488,539.7638);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (9.2058,548.6220) -- (6.1372,546.8504);
\end{scope}
\begin{scope}[shift={(-92.05782,3.5433)},draw=white,miter limit=4.00,line width=1.493pt]
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (30.6859,529.1339) -- (33.7545,527.3622);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (30.6859,529.1339) -- (46.0289,537.9921) -- (49.0975,536.2205);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (30.6859,529.1339) -- (30.6859,546.8504) -- (46.0289,555.7087);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (46.0289,537.9921) -- (46.0289,555.7087) -- (49.0975,553.9370);
\end{scope}
\begin{scope}[shift={(-73.64625,14.17322)},draw=white,miter limit=4.00,line width=1.493pt]
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (30.6859,529.1339) -- (33.7545,527.3622);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (30.6859,529.1339) -- (46.0289,537.9921) -- (49.0975,536.2205);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (30.6859,529.1339) -- (30.6859,546.8504) -- (46.0289,555.7087);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (46.0289,537.9921) -- (46.0289,555.7087) -- (49.0975,553.9370);
\end{scope}
\begin{scope}[draw=white,miter limit=4.00,line width=1.493pt]
\begin{scope}[shift={(-55.23469,24.80315)},draw=white,miter limit=4.00,line width=1.493pt]
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (30.6859,529.1339) -- (33.7545,527.3622);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (30.6859,529.1339) -- (46.0289,537.9921) -- (61.3719,529.1339);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (30.6859,529.1339) -- (30.6859,546.8504) -- (46.0289,555.7087);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (46.0289,537.9921) -- (46.0289,555.7087) -- (61.3719,546.8504);
\end{scope}
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (6.1372,553.9370) -- (6.1372,571.6535);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (6.1372,553.9370) -- (3.0686,552.1653);
\end{scope}
\begin{scope}[shift={(18.41156,-10.62992)},draw=white,miter limit=4.00,line width=1.493pt]
\begin{scope}[shift={(-55.23469,24.80315)},draw=white,miter limit=4.00,line width=1.493pt]
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (42.9603,536.2205) -- (46.0289,537.9921) -- (61.3719,529.1339);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (42.9603,553.9370) -- (46.0289,555.7087);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (46.0289,537.9921) -- (46.0289,555.7087) -- (61.3719,546.8504);
\end{scope}
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (6.1372,553.9370) -- (6.1372,571.6535);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (6.1372,553.9370) -- (3.0686,552.1653);
\end{scope}
\begin{scope}[shift={(36.82313,-21.25984)},draw=white,miter limit=4.00,line width=1.493pt]
\begin{scope}[shift={(-55.23469,24.80315)},draw=white,miter limit=4.00,line width=1.493pt]
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (42.9603,536.2205) -- (46.0289,537.9921) -- (61.3719,529.1339);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (42.9603,553.9370) -- (46.0289,555.7087);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (46.0289,537.9921) -- (46.0289,555.7087) -- (61.3719,546.8504);
\end{scope}
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (6.1372,553.9370) -- (6.1372,571.6535);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (6.1372,553.9370) -- (3.0686,552.1653);
\end{scope}
\begin{scope}[shift={(-92.05782,24.80314)},draw=white,miter limit=4.00,line width=1.493pt]
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (30.6859,529.1339) -- (33.7545,527.3622);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (30.6859,529.1339) -- (46.0289,537.9921) -- (49.0975,536.2205);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (30.6859,529.1339) -- (30.6859,546.8504) -- (46.0289,555.7087);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (46.0289,537.9921) -- (46.0289,555.7087) -- (49.0975,553.9370);
\end{scope}
\begin{scope}[shift={(-73.64625,35.43306)},draw=white,miter limit=4.00,line width=1.493pt]
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (30.6859,529.1339) -- (33.7545,527.3622);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (30.6859,529.1339) -- (46.0289,537.9921) -- (49.0975,536.2205);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (30.6859,529.1339) -- (30.6859,546.8504) -- (46.0289,555.7087);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (46.0289,537.9921) -- (46.0289,555.7087) -- (49.0975,553.9370);
\end{scope}
\begin{scope}[shift={(0,21.25984)},draw=white,miter limit=4.00,line width=1.493pt]
\begin{scope}[shift={(-55.23469,24.80315)},draw=white,miter limit=4.00,line width=1.493pt]
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (30.6859,529.1339) -- (33.7545,527.3622);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (30.6859,529.1339) -- (46.0289,537.9921) -- (61.3719,529.1339);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (30.6859,529.1339) -- (30.6859,546.8504) -- (46.0289,555.7087);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (46.0289,537.9921) -- (46.0289,555.7087) -- (61.3719,546.8504);
\end{scope}
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (6.1372,553.9370) -- (6.1372,571.6535);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (6.1372,553.9370) -- (3.0686,552.1653);
\end{scope}
\begin{scope}[shift={(18.41156,10.62992)},draw=white,miter limit=4.00,line width=1.493pt]
\begin{scope}[shift={(-55.23469,24.80315)},draw=white,miter limit=4.00,line width=1.493pt]
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (42.9603,536.2205) -- (46.0289,537.9921) -- (61.3719,529.1339);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (42.9603,553.9370) -- (46.0289,555.7087);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (46.0289,537.9921) -- (46.0289,555.7087) -- (61.3719,546.8504);
\end{scope}
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (6.1372,553.9370) -- (6.1372,571.6535);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (6.1372,553.9370) -- (3.0686,552.1653);
\end{scope}
\begin{scope}[shift={(36.82313,0)},draw=white,miter limit=4.00,line width=1.493pt]
\begin{scope}[shift={(-55.23469,24.80315)},draw=white,miter limit=4.00,line width=1.493pt]
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (42.9603,536.2205) -- (46.0289,537.9921) -- (61.3719,529.1339);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (42.9603,553.9370) -- (46.0289,555.7087);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (46.0289,537.9921) -- (46.0289,555.7087) -- (61.3719,546.8504);
\end{scope}
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (6.1372,553.9370) -- (6.1372,571.6535);
\path[draw=white,line join=round,line cap=round,miter limit=4.00,line
width=1.493pt] (6.1372,553.9370) -- (3.0686,552.1653);
\end{scope}
\end{scope}
%% Scipy
%% \path[draw=white,fill=blue,line join=miter,line cap=butt,miter
%% limit=4.00,line width=4.663pt] (223.4533,537.5948) -- (223.4533,454.7140) --
%% (294.7686,413.2736) -- (366.0840,454.7140) -- (366.0840,537.5948) --
%% (294.7686,579.0353) -- cycle;
%% \begin{scope}[cm={{0.58101,0.0,0.0,0.58477,(197.49033,336.19612)}}]
%% \path[fill=white,even odd rule] (180.5306,231.1490) .. controls
%% (177.7528,227.3496) and (173.5081,225.7654) .. (167.4410,224.4881) --
%% (161.7995,223.1578) -- (157.5436,221.3326) .. controls (155.3068,219.7516) and
%% (153.4009,215.5433) .. (153.9419,211.8325) .. controls (154.7823,206.0838) and
%% (160.1520,202.0766) .. (165.9367,202.8843) .. controls (168.8256,203.2929) and
%% (171.2754,204.8224) .. (172.8907,206.9756) -- (179.2957,215.3905) .. controls
%% (182.9568,220.1054) and (187.0730,221.5087) .. (191.5510,219.2822) --
%% (193.8087,218.3217) .. controls (193.9896,218.2376) and (194.2016,218.2297) ..
%% (194.4075,218.3046) .. controls (194.5759,218.3700) and (194.7130,218.4901) ..
%% (194.7941,218.6321) -- (195.2433,219.3087) .. controls (195.3680,219.5129) and
%% (195.5551,219.6782) .. (195.7984,219.7703) .. controls (196.2100,219.9263) and
%% (196.6529,219.8327) .. (196.9647,219.5645) -- (202.1661,214.6592) .. controls
%% (203.0767,213.8796) and (202.8084,213.1640) .. (202.8084,213.1640) --
%% (201.5548,210.3091) .. controls (201.5548,210.3091) and (201.2118,209.6247) ..
%% (200.0268,209.7821) -- (193.0542,210.4230) .. controls (192.6488,210.4807) and
%% (192.2870,210.7504) .. (192.1312,211.1620) .. controls (192.0377,211.4022) and
%% (192.0315,211.6532) .. (192.1001,211.8808) -- (192.3496,212.6838) .. controls
%% (192.3995,212.8506) and (192.3995,213.0377) .. (192.3310,213.2092) .. controls
%% (192.2499,213.4212) and (192.0879,213.5710) .. (191.8945,213.6505) --
%% (189.9237,214.4847) .. controls (187.8592,215.6930) and (185.5143,214.9212) ..
%% (183.9488,213.0066) -- (182.1589,210.6288) -- (177.0635,203.8665) .. controls
%% (174.6437,200.6577) and (170.9951,198.3688) .. (166.6856,197.7670) .. controls
%% (158.0571,196.5587) and (150.0491,202.5335) .. (148.7955,211.1121) .. controls
%% (148.1624,215.4357) and (149.4584,219.5267) .. (151.8234,222.8121) .. controls
%% (153.5417,225.1995) and (156.6908,226.5635) .. (158.3941,226.9895) --
%% (162.8646,228.2668) -- (167.1457,229.2479) .. controls (167.7345,229.3877) and
%% (169.3910,229.7968) .. (170.3713,230.1509) .. controls (171.2776,230.4790) and
%% (173.3649,231.2486) .. (175.0614,232.6368) -- (175.0614,232.6368) .. controls
%% (177.0882,234.6974) and (178.1610,237.6412) .. (177.7058,240.7284) .. controls
%% (176.9386,245.9923) and (172.0241,249.6595) .. (166.7292,248.9172) .. controls
%% (164.0770,248.5492) and (161.8380,247.1436) .. (160.3552,245.1751) --
%% (154.2371,237.0550) .. controls (152.9896,235.3998) and (151.1031,234.2173) ..
%% (148.8734,233.8991) .. controls (146.6470,233.5873) and (144.4922,234.2047) ..
%% (142.8223,235.4558) -- (129.9513,245.0603) .. controls (126.7389,239.3627) and
%% (124.9100,232.8141) .. (124.9100,225.8477) .. controls (124.9100,203.8713) and
%% (143.0995,186.0499) .. (165.5344,186.0499) .. controls (182.2395,186.0499) and
%% (196.5778,195.9257) .. (202.8207,210.0395) -- (204.8789,209.0821) --
%% (206.2697,205.2808) -- (207.7292,205.7922) -- (206.4755,209.1912) --
%% (209.9494,210.3886) -- (209.4256,211.8122) -- (205.5463,210.4573) --
%% (203.4072,211.4411) .. controls (205.1784,215.9113) and (206.1638,220.7650) ..
%% (206.1638,225.8476) .. controls (206.1638,247.8258) and (187.9714,265.6442) ..
%% (165.5346,265.6442) .. controls (152.0571,265.6442) and (140.1121,259.2116) ..
%% (132.7231,249.3140) -- (145.9076,239.4313) .. controls (146.5109,239.0197) and
%% (147.2594,238.8326) .. (148.0358,238.9386) .. controls (148.8623,239.0572) and
%% (149.5654,239.4912) .. (150.0270,240.1049) -- (156.4991,248.8027) .. controls
%% (158.7786,251.5994) and (162.0904,253.5801) .. (165.9681,254.1252) .. controls
%% (174.1258,255.2664) and (181.6972,249.6161) .. (182.8822,241.5020) .. controls
%% (183.4308,237.7262) and (182.5078,234.0802) .. (180.5307,231.1490);
%% \path[fill=black] (166.5490,330.2626) node[above right] (text6352-91-9) {SciPy};
%% \end{scope}
\path[draw=white,fill=green,line join=miter,line cap=butt,miter
limit=4.00,line width=4.663pt] (294.4044,661.0585) -- (294.4044,578.1777) --
(365.7197,536.7372) -- (437.0350,578.1777) -- (437.0350,661.0585) --
(365.7197,702.4989) -- cycle;
\begin{scope}[cm={{0.58101,0.0,0.0,0.58477,(268.02538,211.61993)}}, xshift=-6.8cm]
\begin{scope}[xshift=-2.2cm]
\path[white] (413.1522,756.5214) node[above right] (text6352-3-4-5-6)
{\Huge IPython};
\end{scope}
\path[draw=white,miter limit=4.00,line width=2.000pt,rounded corners=0.4100cm]
(358.1919,621.8396) rectangle (472.7127,696.6207);
\begin{scope}[xshift=-1.4cm, yshift=0.3cm]
\path[white] (417.0812,665.8630) node[above right] (text4084-5-1-0)
{\tt \Large IP[y]:};
\end{scope}
\end{scope}
%% Cython
%% \path[draw=white,fill=green,line join=miter,line cap=butt,miter
%% limit=4.00,line width=4.663pt] (436.9142,661.9552) -- (436.9142,579.0744) --
%% (508.2295,537.6340) -- (579.5448,579.0744) -- (579.5448,661.9552) --
%% (508.2295,703.3956) -- cycle;
%% \begin{scope}[shift={(108.61371,236.39074)}]
%% \path[xscale=0.997,yscale=1.003,fill=black] (258.4141,416.9937) node[above
%% right] (text6352-5-4-4-7) {Cython};
%% \begin{scope}[cm={{0.28235,0.0,0.0,0.28235,(227.87372,329.66354)}}]
%% \path[fill=white] (109.1732,35.7911) .. controls (104.0938,35.8147) and
%% (99.2431,36.2479) .. (94.9750,37.0032) .. controls (82.4016,39.2245) and
%% (80.1187,43.8739) .. (80.1187,52.4481) -- (80.1187,63.7721) --
%% (109.8312,63.7721) -- (109.8312,67.5468) -- (80.1187,67.5468) --
%% (68.9679,67.5468) .. controls (60.3326,67.5468) and (52.7713,72.7371) ..
%% (50.4062,82.6108) .. controls (47.6781,93.9284) and (47.5571,100.9907) ..
%% (50.4062,112.8081) .. controls (52.5183,121.6045) and (57.5622,127.8721) ..
%% (66.1975,127.8721) -- (76.4133,127.8721) -- (76.4133,114.2972) .. controls
%% (76.4133,104.4901) and (84.8986,95.8394) .. (94.9750,95.8394) --
%% (124.6528,95.8394) .. controls (132.9141,95.8394) and (139.5091,89.0374) ..
%% (139.5091,80.7408) -- (139.5091,52.4481) .. controls (139.5091,44.3959) and
%% (132.7161,38.3471) .. (124.6528,37.0032) .. controls (119.5487,36.1535) and
%% (114.2527,35.7675) .. (109.1733,35.7911) -- cycle(93.1050,44.8988) .. controls
%% (96.1741,44.8988) and (98.6804,47.4461) .. (98.6804,50.5781) .. controls
%% (98.6804,53.6990) and (96.1741,56.2228) .. (93.1050,56.2228) .. controls
%% (90.0249,56.2228) and (87.5295,53.6990) .. (87.5295,50.5781) .. controls
%% (87.5295,47.4461) and (90.0249,44.8988) .. (93.1050,44.8988) -- cycle;
%% \path[fill=white] (143.2145,67.5468) -- (143.2145,80.7408) .. controls
%% (143.2145,90.9699) and (134.5422,99.5795) .. (124.6528,99.5795) --
%% (94.9750,99.5795) .. controls (86.8457,99.5795) and (80.1187,106.5370) ..
%% (80.1187,114.6781) -- (80.1187,142.9708) .. controls (80.1187,151.0231) and
%% (87.1207,155.7593) .. (94.9750,158.0695) .. controls (104.3803,160.8350) and
%% (113.3995,161.3348) .. (124.6528,158.0695) .. controls (132.1331,155.9037) and
%% (139.5091,151.5451) .. (139.5091,142.9708) -- (139.5091,131.6468) --
%% (109.8312,131.6468) -- (109.8312,127.8721) -- (139.5091,127.8721) --
%% (154.3653,127.8721) .. controls (163.0006,127.8721) and (166.2185,121.8488) ..
%% (169.2216,112.8081) .. controls (172.3237,103.5008) and (172.1917,94.5503) ..
%% (169.2216,82.6108) .. controls (167.0875,74.0143) and (163.0116,67.5468) ..
%% (154.3653,67.5468) -- (143.2145,67.5468) -- cycle(126.5229,139.1961) ..
%% controls (129.6030,139.1961) and (132.0983,141.7199) .. (132.0983,144.8408) ..
%% controls (132.0983,147.9729) and (129.6030,150.5201) .. (126.5229,150.5201) ..
%% controls (123.4538,150.5201) and (120.9474,147.9729) .. (120.9474,144.8408) ..
%% controls (120.9474,141.7199) and (123.4538,139.1961) .. (126.5229,139.1961) --
%% cycle;
%% \path[fill=white] (107.5938,0.0000) .. controls (74.9700,0.0000) and
%% (48.5729,9.5931) .. (28.5000,28.6875) .. controls (9.5017,46.6869) and
%% (0.0000,68.7821) .. (0.0000,95.0625) .. controls (0.0000,123.0197) and
%% (8.7638,146.2939) .. (26.3438,164.8750) .. controls (45.7289,185.6803) and
%% (72.5905,196.1250) .. (107.0625,196.1250) .. controls (141.8355,196.1250) and
%% (169.0835,185.6803) .. (188.8125,164.8750) .. controls (194.0935,159.4004) and
%% (198.5849,153.5073) .. (202.3125,147.2188) -- (162.1250,147.2188) .. controls
%% (151.7155,166.5139) and (133.6263,176.2430) .. (107.8438,176.4062) .. controls
%% (84.8051,176.7142) and (67.5194,167.6005) .. (56.0000,149.1562) .. controls
%% (46.9737,134.6815) and (42.5000,116.6549) .. (42.5000,95.0625) .. controls
%% (42.5000,47.9768) and (63.9939,23.3910) .. (107.0625,21.4062) .. controls
%% (130.3591,22.2617) and (147.5980,30.5180) .. (158.6875,46.1563) .. controls
%% (160.7986,49.0607) and (162.6463,52.1543) .. (164.2812,55.4063) --
%% (207.0625,55.4063) .. controls (202.3624,45.6638) and (195.7481,36.7684) ..
%% (187.2188,28.6875) .. controls (166.7589,9.5931) and (140.2176,0.0000) ..
%% (107.5938,0.0000) -- cycle;
%% \end{scope}
%% \end{scope}
%% \path[draw=white,fill=blue,line join=miter,line cap=butt,miter
%% limit=4.00,line width=4.663pt] (507.4937,537.9174) -- (507.4937,455.0366) --
%% (578.8090,413.5962) -- (650.1243,455.0366) -- (650.1243,537.9174) --
%% (578.8090,579.3579) -- cycle;
%% \path[fill=white] (516.7370,532.6381) -- (516.7370,460.1173) --
%% (579.1379,423.8570) -- (641.5388,460.1173) -- (641.5388,532.6381) --
%% (579.1379,568.8984) -- cycle;
%% \path[draw=white,fill=blue,opacity=0.100,line join=miter,line
%% cap=butt,miter limit=4.00,line width=4.663pt] (433.1394,163.4074) --
%% (433.1394,80.5266) -- (504.4547,39.0862) -- (575.7701,80.5266) --
%% (575.7701,163.4074) -- (504.4547,204.8478) -- cycle;
%% \path[draw=white,fill=blue,opacity=0.250,line join=miter,line
%% cap=butt,miter limit=4.00,line width=4.663pt] (77.4649,289.2191) --
%% (77.4649,206.3382) -- (148.7803,164.8978) -- (220.0956,206.3382) --
%% (220.0956,289.2191) -- (148.7803,330.6595) -- cycle;
%% \path[draw=white,fill=blue,opacity=0.200,line join=miter,line
%% cap=butt,miter limit=4.00,line width=4.663pt] (79.3966,539.4449) --
%% (79.3966,456.5641) -- (150.7119,415.1237) -- (222.0272,456.5641) --
%% (222.0272,539.4449) -- (150.7119,580.8854) -- cycle;
%% \path[draw=white,fill=blue,opacity=0.250,line join=miter,line
%% cap=butt,miter limit=4.00,line width=4.663pt] (508.5636,287.2191) --
%% (508.5636,204.3382) -- (579.8790,162.8978) -- (651.1943,204.3382) --
%% (651.1943,287.2191) -- (579.8790,328.6595) -- cycle;
%% \path[draw=white,fill=blue,opacity=0.050,line join=miter,line
%% cap=butt,miter limit=4.00,line width=4.663pt] (289.1511,162.0099) --
%% (289.1511,79.1291) -- (360.4664,37.6887) -- (431.7817,79.1291) --
%% (431.7817,162.0099) -- (360.4664,203.4504) -- cycle;
%% Creative commons
%% \begin{scope}[cm={{0.48957,0.0,0.0,0.48957,(575.76898,835.69006)}},fill=blue]
%% \path[fill=blue,even odd rule] (94.2820,49.1160) .. controls
%% (91.5230,44.0860) and (86.8170,42.0840) .. (81.3540,42.0840) .. controls
%% (73.4030,42.0840) and (67.0740,47.7090) .. (67.0740,57.2300) .. controls
%% (67.0740,66.9120) and (73.0240,72.3750) .. (81.6240,72.3750) .. controls
%% (87.1410,72.3750) and (91.8470,69.3460) .. (94.4430,64.7480) --
%% (88.3850,61.6650) .. controls (87.0320,64.9110) and (84.9770,65.8850) ..
%% (82.3810,65.8850) .. controls (77.8910,65.8850) and (75.8360,62.1530) ..
%% (75.8360,57.2310) .. controls (75.8360,52.3080) and (77.5670,48.5760) ..
%% (82.3810,48.5760) .. controls (83.6790,48.5760) and (86.2760,49.2790) ..
%% (87.7900,52.5250) -- (94.2820,49.1160) -- cycle;
%% \path[fill=blue,even odd rule] (109.7460,48.5750) .. controls
%% (114.5600,48.5750) and (116.6160,52.3070) .. (116.6160,56.9050) .. controls
%% (116.6160,62.1520) and (114.5600,65.8840) .. (109.7460,65.8840) .. controls
%% (104.9320,65.8840) and (102.8770,62.1520) .. (102.8770,57.2300) .. controls
%% (102.8770,52.3080) and (104.9320,48.5750) .. (109.7460,48.5750) --
%% cycle(109.7460,42.0840) .. controls (100.7670,42.0840) and (94.4390,47.5470)
%% .. (94.4390,57.2300) .. controls (94.4390,66.9120) and (100.7670,72.3750) ..
%% (109.7460,72.3750) .. controls (118.7250,72.3750) and (125.0540,66.9120) ..
%% (125.0540,57.2300) .. controls (125.0540,47.5480) and (118.7250,42.0840) ..
%% (109.7460,42.0840) -- cycle;
%% \path[fill=blue,even odd rule] (126.7830,71.6170) -- (135.2210,71.6170) --
%% (135.2210,53.7140) .. controls (135.2210,51.1180) and (136.3030,48.9000) ..
%% (139.7100,48.9000) .. controls (142.9560,48.9000) and (143.8210,50.7930) ..
%% (143.8210,53.6060) -- (143.8210,71.6180) -- (152.2590,71.6180) --
%% (152.2590,53.9300) .. controls (152.2590,51.0090) and (153.7190,48.9000) ..
%% (156.5320,48.9000) .. controls (159.7230,48.9000) and (160.8590,50.7390) ..
%% (160.8590,54.7960) -- (160.8590,71.6170) -- (169.2970,71.6170) --
%% (169.2970,49.6570) .. controls (169.2970,43.0580) and (163.2390,42.0840) ..
%% (160.4260,42.0840) .. controls (157.0720,42.0840) and (153.9350,43.1120) ..
%% (151.1770,45.9240) .. controls (149.2830,43.3820) and (146.8500,42.0840) ..
%% (143.5500,42.0840) .. controls (140.9540,42.0840) and (137.3840,42.8410) ..
%% (135.2200,45.3840) -- (135.2200,42.8420) -- (126.7820,42.8420) --
%% (126.7820,71.6170) -- cycle;
%% \path[fill=blue,even odd rule] (171.9970,71.6170) -- (180.4350,71.6170) --
%% (180.4350,53.7140) .. controls (180.4350,51.1180) and (181.5170,48.9000) ..
%% (184.9240,48.9000) .. controls (188.1700,48.9000) and (189.0350,50.7930) ..
%% (189.0350,53.6060) -- (189.0350,71.6180) -- (197.4730,71.6180) --
%% (197.4730,53.9300) .. controls (197.4730,51.0090) and (198.9330,48.9000) ..
%% (201.7450,48.9000) .. controls (204.9360,48.9000) and (206.0730,50.7390) ..
%% (206.0730,54.7960) -- (206.0730,71.6170) -- (214.5110,71.6170) --
%% (214.5110,49.6570) .. controls (214.5110,43.0580) and (208.4520,42.0840) ..
%% (205.6400,42.0840) .. controls (202.2860,42.0840) and (199.1500,43.1120) ..
%% (196.3910,45.9240) .. controls (194.4980,43.3820) and (192.0640,42.0840) ..
%% (188.7640,42.0840) .. controls (186.1680,42.0840) and (182.5980,42.8410) ..
%% (180.4340,45.3840) -- (180.4340,42.8420) -- (171.9960,42.8420) --
%% (171.9960,71.6170) -- cycle;
%% \path[fill=blue,even odd rule] (231.5440,48.5750) .. controls
%% (236.3570,48.5750) and (238.4130,52.3070) .. (238.4130,56.9050) .. controls
%% (238.4130,62.1520) and (236.3570,65.8840) .. (231.5440,65.8840) .. controls
%% (226.7300,65.8840) and (224.6740,62.1520) .. (224.6740,57.2300) .. controls
%% (224.6740,52.3080) and (226.7300,48.5750) .. (231.5440,48.5750) --
%% cycle(231.5440,42.0840) .. controls (222.5650,42.0840) and (216.2360,47.5470)
%% .. (216.2360,57.2300) .. controls (216.2360,66.9120) and (222.5640,72.3750) ..
%% (231.5440,72.3750) .. controls (240.5230,72.3750) and (246.8520,66.9120) ..
%% (246.8520,57.2300) .. controls (246.8520,47.5480) and (240.5230,42.0840) ..
%% (231.5440,42.0840) -- cycle;
%% \path[fill=blue,even odd rule] (249.1220,71.6170) -- (257.5600,71.6170) --
%% (257.5600,53.7140) .. controls (257.5600,51.1180) and (258.6420,48.9000) ..
%% (262.0500,48.9000) .. controls (265.2950,48.9000) and (266.1600,50.7930) ..
%% (266.1600,53.6060) -- (266.1600,71.6180) -- (274.5980,71.6180) --
%% (274.5980,50.3600) .. controls (274.5980,46.0330) and (272.7040,42.0840) ..
%% (265.8890,42.0840) .. controls (263.2930,42.0840) and (259.7230,42.8410) ..
%% (257.5590,45.3840) -- (257.5590,42.8420) -- (249.1210,42.8420) --
%% (249.1210,71.6170) -- cycle;
%% \path[fill=blue,even odd rule] (302.7740,46.2500) .. controls
%% (298.8790,43.6540) and (294.4990,42.0850) .. (290.0630,42.0850) .. controls
%% (284.2200,42.0850) and (277.8920,44.8980) .. (277.8920,52.1460) .. controls
%% (277.8920,62.3690) and (294.9300,58.7990) .. (294.9300,63.2890) .. controls
%% (294.9300,65.8860) and (291.7400,66.2100) .. (290.3320,66.2100) .. controls
%% (286.4920,66.2100) and (283.8420,64.6420) .. (281.2450,62.1530) --
%% (275.9980,66.6960) .. controls (280.2180,70.5910) and (283.7870,72.3760) ..
%% (290.0620,72.3760) .. controls (296.3350,72.3760) and (303.0430,69.6710) ..
%% (303.0430,62.0990) .. controls (303.0430,51.3350) and (286.0050,55.3920) ..
%% (286.0050,50.4700) .. controls (286.0050,49.0100) and (287.5190,48.2530) ..
%% (289.6280,48.2530) .. controls (292.2790,48.2530) and (295.9030,49.3350) ..
%% (297.5790,51.3360) -- (302.7740,46.2500) -- cycle;
%% \path[fill=blue,even odd rule] (94.2820,16.0110) .. controls
%% (91.5230,10.9810) and (86.8170,8.9790) .. (81.3540,8.9790) .. controls
%% (73.4030,8.9790) and (67.0740,14.6040) .. (67.0740,24.1240) .. controls
%% (67.0740,33.8060) and (73.0240,39.2700) .. (81.6240,39.2700) .. controls
%% (87.1410,39.2700) and (91.8470,36.2410) .. (94.4430,31.6430) --
%% (88.3850,28.5600) .. controls (87.0320,31.8060) and (84.9770,32.7790) ..
%% (82.3810,32.7790) .. controls (77.8910,32.7790) and (75.8360,29.0470) ..
%% (75.8360,24.1240) .. controls (75.8360,19.2020) and (77.5670,15.4700) ..
%% (82.3810,15.4700) .. controls (83.6790,15.4700) and (86.2760,16.1730) ..
%% (87.7900,19.4190) -- (94.2820,16.0110) -- cycle;
%% \path[fill=blue,even odd rule] (96.3400,38.5120) -- (104.7780,38.5120) --
%% (104.7780,21.8520) .. controls (104.7780,18.6610) and (106.7790,17.7950) ..
%% (111.8100,17.2000) -- (112.7290,17.0920) -- (112.6750,9.6280) .. controls
%% (109.7000,9.8450) and (106.6170,10.9260) .. (104.7780,12.6570) --
%% (104.7780,9.7360) -- (96.3400,9.7360) -- (96.3400,38.5120) -- cycle;
%% \path[fill=blue,even odd rule] (141.3860,25.8550) .. controls
%% (141.3320,16.9840) and (137.7620,8.9790) .. (127.2680,8.9790) .. controls
%% (118.5050,8.9790) and (113.1500,14.8210) .. (113.1500,24.9900) .. controls
%% (113.1500,33.1030) and (118.3430,39.2700) .. (127.2680,39.2700) .. controls
%% (133.7050,39.2700) and (138.3020,36.7280) .. (141.2230,31.3190) --
%% (134.8940,28.0190) .. controls (132.4600,31.4810) and (130.9990,33.1030) ..
%% (127.8620,33.1030) .. controls (125.1580,33.1030) and (121.6420,31.3720) ..
%% (121.5880,25.8550) -- (141.3860,25.8550) -- cycle(121.4810,20.6630) ..
%% controls (121.8590,16.8760) and (124.7800,15.1460) .. (127.2140,15.1460) ..
%% controls (129.6480,15.1460) and (132.6770,16.4440) .. (132.9470,20.6630) --
%% (121.4810,20.6630) -- cycle;
%% \path[fill=blue,even odd rule] (160.7420,26.5040) .. controls
%% (160.7420,30.8850) and (158.2540,33.1030) .. (154.9540,33.1030) .. controls
%% (152.8980,33.1030) and (151.0050,32.1290) .. (151.0050,29.8580) .. controls
%% (151.0050,27.5320) and (152.9520,26.7210) .. (155.0620,26.1260) --
%% (160.7420,24.5030) -- (160.7420,26.5040) -- cycle(168.8550,17.3090) ..
%% controls (168.8010,10.8180) and (163.8790,8.9790) .. (156.0360,8.9790) ..
%% controls (152.1410,8.9790) and (144.4610,9.7360) .. (144.1900,18.0120) --
%% (152.3040,18.0120) .. controls (152.7370,15.1450) and (154.0340,14.1720) ..
%% (156.7390,14.1720) .. controls (159.0110,14.1720) and (160.7420,15.0910) ..
%% (160.7420,17.2550) -- (160.7420,19.6350) -- (157.6590,20.0680) .. controls
%% (148.4640,21.3660) and (142.8920,23.8000) .. (142.8920,30.7240) .. controls
%% (142.8920,36.2410) and (147.0030,39.2700) .. (152.5200,39.2700) .. controls
%% (155.5490,39.2700) and (159.7680,37.8100) .. (161.1740,35.5380) --
%% (161.2820,35.5380) .. controls (161.3360,36.5120) and (161.4990,37.5390) ..
%% (161.8230,38.5130) -- (169.6120,38.5130) .. controls (168.9090,36.7280) and
%% (168.8550,34.5110) .. (168.8550,32.5090) -- (168.8550,17.3090) -- cycle;
%% \path[fill=blue,even odd rule] (188.6990,10.2770) -- (183.6680,10.2770) --
%% (183.6680,1.9470) -- (175.2300,1.9470) -- (175.2300,10.2770) --
%% (171.1200,10.2770) -- (171.1200,15.4690) -- (175.2300,15.4690) --
%% (175.2300,30.6150) .. controls (175.2300,34.7800) and (176.2580,39.2690) ..
%% (183.4530,39.2690) .. controls (185.2920,39.2690) and (187.7800,39.0530) ..
%% (188.8620,38.9440) -- (188.8620,32.2910) .. controls (188.4280,32.3450) and
%% (187.2390,32.4530) .. (186.3200,32.4530) .. controls (184.8040,32.4530) and
%% (183.6690,31.8580) .. (183.6690,29.5860) -- (183.6690,15.4700) --
%% (188.7000,15.4700) -- (188.7000,10.2770) -- cycle;
%% \path[fill=blue,even odd rule] (191.8760,9.7360) -- (191.8760,38.5120) --
%% (200.3140,38.5120) -- (200.3140,9.7360) -- (191.8760,9.7360) --
%% cycle(200.3150,6.4910) -- (200.3150,0.0000) -- (191.8770,0.0000) --
%% (191.8770,6.4910) -- (200.3150,6.4910) -- cycle;
%% \path[fill=blue,even odd rule] (215.9440,30.0740) -- (210.9660,9.7360) --
%% (201.9340,9.7360) -- (211.6700,38.5120) -- (220.1620,38.5120) --
%% (230.0070,9.7360) -- (221.0280,9.7360) -- (216.0510,30.0740) -- cycle;
%% \path[fill=blue,even odd rule] (257.2560,25.8550) .. controls
%% (257.2020,16.9840) and (253.6320,8.9790) .. (243.1390,8.9790) .. controls
%% (234.3750,8.9790) and (229.0220,14.8210) .. (229.0220,24.9900) .. controls
%% (229.0220,33.1030) and (234.2130,39.2700) .. (243.1390,39.2700) .. controls
%% (249.5760,39.2700) and (254.1730,36.7280) .. (257.0940,31.3190) --
%% (250.7650,28.0190) .. controls (248.3310,31.4810) and (246.8700,33.1030) ..
%% (243.7340,33.1030) .. controls (241.0300,33.1030) and (237.5130,31.3720) ..
%% (237.4600,25.8550) -- (257.2560,25.8550) -- cycle(237.3510,20.6630) ..
%% controls (237.7300,16.8760) and (240.6500,15.1460) .. (243.0840,15.1460) ..
%% controls (245.5180,15.1460) and (248.5480,16.4440) .. (248.8180,20.6630) --
%% (237.3510,20.6630) -- cycle;
%% \end{scope}
%% \begin{scope}[cm={{1.13425,0.0,0.0,1.13425,(520.37788,832.9539)}}]
%% \path[fill=white] (34.2541,19.6061) .. controls (34.2593,27.1358) and
%% (28.1575,33.2428) .. (20.6276,33.2477) .. controls (13.0976,33.2529) and
%% (6.9889,27.1522) .. (6.9845,19.6226) .. controls (6.9845,19.6174) and
%% (6.9845,19.6119) .. (6.9845,19.6061) .. controls (6.9802,12.0764) and
%% (13.0811,5.9694) .. (20.6111,5.9650) .. controls (28.1420,5.9598) and
%% (34.2497,12.0605) .. (34.2541,19.5901) .. controls (34.2541,19.5953) and
%% (34.2541,19.6008) .. (34.2541,19.6061) -- cycle;
%% \begin{scope}[cm={{0.86749,0.0,0.0,0.8674,(-379.11677,228.23655)}},fill=blue]
%% \path[fill=blue] (473.5757,-253.3275) .. controls (477.0611,-249.8421) and
%% (478.8041,-245.5736) .. (478.8041,-240.5253) .. controls (478.8041,-235.4759)
%% and (477.0914,-231.2533) .. (473.6658,-227.8574) .. controls
%% (470.0305,-224.2808) and (465.7340,-222.4931) .. (460.7763,-222.4931) ..
%% controls (455.8786,-222.4931) and (451.6565,-224.2663) .. (448.1112,-227.8126)
%% .. controls (444.5654,-231.3585) and (442.7928,-235.5956) ..
%% (442.7928,-240.5253) .. controls (442.7928,-245.4539) and (444.5654,-249.7213)
%% .. (448.1112,-253.3275) .. controls (451.5664,-256.8140) and
%% (455.7885,-258.5570) .. (460.7763,-258.5570) .. controls (465.8246,-258.5570)
%% and (470.0904,-256.8140) .. (473.5757,-253.3275) -- cycle(450.4578,-250.9827)
%% .. controls (447.5110,-248.0063) and (446.0382,-244.5198) ..
%% (446.0382,-240.5203) .. controls (446.0382,-236.5220) and (447.4965,-233.0651)
%% .. (450.4125,-230.1497) .. controls (453.3290,-227.2332) and
%% (456.8010,-225.7754) .. (460.8295,-225.7754) .. controls (464.8581,-225.7754)
%% and (468.3597,-227.2477) .. (471.3361,-230.1938) .. controls
%% (474.1620,-232.9303) and (475.5755,-236.3709) .. (475.5755,-240.5203) ..
%% controls (475.5755,-244.6384) and (474.1390,-248.1338) .. (471.2678,-251.0050)
%% .. controls (468.3971,-253.8757) and (464.9179,-255.3116) ..
%% (460.8295,-255.3116) .. controls (456.7411,-255.3116) and (453.2831,-253.8684)
%% .. (450.4578,-250.9827) -- cycle(458.2122,-242.2795) .. controls
%% (457.7620,-243.2612) and (457.0879,-243.7523) .. (456.1890,-243.7523) ..
%% controls (454.5999,-243.7523) and (453.8056,-242.6822) .. (453.8056,-240.5432)
%% .. controls (453.8056,-238.4037) and (454.5999,-237.3347) ..
%% (456.1890,-237.3347) .. controls (457.2384,-237.3347) and (457.9880,-237.8555)
%% .. (458.4377,-238.8992) -- (460.6404,-237.7262) .. controls
%% (459.5905,-235.8608) and (458.0154,-234.9278) .. (455.9150,-234.9278) ..
%% controls (454.2951,-234.9278) and (452.9973,-235.4245) .. (452.0229,-236.4168)
%% .. controls (451.0468,-237.4102) and (450.5602,-238.7795) ..
%% (450.5602,-240.5253) .. controls (450.5602,-242.2404) and (451.0625,-243.6019)
%% .. (452.0676,-244.6103) .. controls (453.0728,-245.6189) and
%% (454.3247,-246.1229) .. (455.8254,-246.1229) .. controls (458.0456,-246.1229)
%% and (459.6353,-245.2480) .. (460.5963,-243.5001) -- (458.2122,-242.2795) --
%% cycle(468.5756,-242.2795) .. controls (468.1247,-243.2612) and
%% (467.4642,-243.7523) .. (466.5932,-243.7523) .. controls (464.9722,-243.7523)
%% and (464.1611,-242.6822) .. (464.1611,-240.5432) .. controls
%% (464.1611,-238.4037) and (464.9722,-237.3347) .. (466.5932,-237.3347) ..
%% controls (467.6443,-237.3347) and (468.3804,-237.8555) .. (468.8005,-238.8992)
%% -- (471.0525,-237.7262) .. controls (470.0042,-235.8608) and
%% (468.4313,-234.9278) .. (466.3348,-234.9278) .. controls (464.7171,-234.9278)
%% and (463.4222,-235.4245) .. (462.4483,-236.4168) .. controls
%% (461.4761,-237.4102) and (460.9890,-238.7795) .. (460.9890,-240.5253) ..
%% controls (460.9890,-242.2404) and (461.4834,-243.6019) .. (462.4718,-244.6103)
%% .. controls (463.4597,-245.6189) and (464.7171,-246.1229) ..
%% (466.2453,-246.1229) .. controls (468.4615,-246.1229) and (470.0490,-245.2480)
%% .. (471.0066,-243.5001) -- (468.5756,-242.2795) -- cycle;
%% \end{scope}
%% \end{scope}
%% \begin{scope}[cm={{1.52778,0.0,0.0,1.52778,(465.57971,833.03561)}}]
%% \path[cm={{0.99377,0.0,0.0,0.99367,(-177.69267,0.0)}},fill=white]
%% (255.5512,15.3135) circle (0.3050cm);
%% \begin{scope}[cm={{0.99377,0.0,0.0,0.99367,(-177.69267,0.0)}},fill=blue]
%% \path[fill=blue] (258.6782,12.1870) .. controls (258.6782,11.7705) and
%% (258.3403,11.4331) .. (257.9253,11.4331) -- (253.1518,11.4331) .. controls
%% (252.7368,11.4331) and (252.3989,11.7705) .. (252.3989,12.1870) --
%% (252.3989,16.9600) -- (253.7299,16.9600) -- (253.7299,22.6118) --
%% (257.3471,22.6118) -- (257.3471,16.9600) -- (258.6782,16.9600) --
%% (258.6782,12.1870) -- (258.6782,12.1870) -- cycle;
%% \path[fill=blue] (255.5385,9.1724) circle (0.0461cm);
%% \end{scope}
%% \path[fill=blue,even odd rule] (76.2400,3.3857) .. controls (73.0277,3.3857)
%% and (70.3084,4.5065) .. (68.0831,6.7480) .. controls (65.7996,9.0668) and
%% (64.6583,11.8115) .. (64.6583,14.9803) .. controls (64.6583,18.1490) and
%% (65.7996,20.8743) .. (68.0831,23.1547) .. controls (70.3667,25.4346) and
%% (73.0860,26.5748) .. (76.2400,26.5748) .. controls (79.4329,26.5748) and
%% (82.2007,25.4259) .. (84.5415,23.1256) .. controls (86.7474,20.9423) and
%% (87.8509,18.2271) .. (87.8509,14.9802) .. controls (87.8509,11.7334) and
%% (86.7280,8.9896) .. (84.4843,6.7480) .. controls (82.2386,4.5065) and
%% (79.4911,3.3857) .. (76.2400,3.3857) -- cycle(76.2692,5.4720) .. controls
%% (78.9011,5.4720) and (81.1361,6.4001) .. (82.9742,8.2555) .. controls
%% (84.8317,10.0910) and (85.7605,12.3326) .. (85.7605,14.9803) .. controls
%% (85.7605,17.6469) and (84.8511,19.8598) .. (83.0324,21.6181) .. controls
%% (81.1157,23.5123) and (78.8623,24.4589) .. (76.2692,24.4589) .. controls
%% (73.6751,24.4589) and (71.4400,23.5220) .. (69.5641,21.6473) .. controls
%% (67.6862,19.7725) and (66.7487,17.5503) .. (66.7487,14.9803) .. controls
%% (66.7487,12.4097) and (67.6969,10.1686) .. (69.5932,8.2555) .. controls
%% (71.4119,6.4001) and (73.6372,5.4720) .. (76.2692,5.4720) -- cycle;
%% \end{scope}
\end{tikzpicture}
}
\ifthenelse{\boolean{cb@notitlelogo}}{}{
\titlegraphic{\resizebox{!}{15mm}{\logo}}}
Set subtitle
font to \scriptsize
\setbeamerfont{subtitle}{size=\scriptsize,parent=title}
Then define the custom beamer template
\newcommand{\insertprefixtitle}{}
\renewcommand{\insertinstitute}{}
\newcommand{\insertgitstatus}{}
\defbeamertemplate*{title page}{custom}[1][colsep=-4bp,
rounded=true,shadow=\beamer@themerounded@shadow]{
\vbox{}
\vfill
\begin{textblock}{10}(5,10)
\begin{flushright}
{%
\usebeamerfont{title}\usebeamercolor[bg]{title}\insertprefixtitle{\vspace{+0.2em}\LARGE\inserttitle}\par%
}%
\ifx\insertauthor\@empty%
\else%
\vskip0.5em{%
\usebeamerfont{author}\usebeamercolor[fg]{author}\insertauthor%
}
\ifx\insertinstitute\@empty%
\else%
\vskip-0.35em{%
\usebeamerfont{institute}\usebeamercolor[fg]{institute}\insertinstitute%
}
\ifx\insertgitstatus\@empty%
\else%
\begin{textblock}{5}(10.75,15.5)
\usebeamerfont{institute}\usebeamercolor[fg]{institute}\insertgitstatus%
\end{textblock}
\end{flushright}
\end{textblock}
\begin{textblock}{14}(1,1)
\resizebox{!}{75mm}{\includegraphics{cover.pdf}}
\end{textblock}
\vfill
}
This tweak is used to include appendix
page with the name style as title
page. First, rename the appendix
name :
\renewcommand{\appendix}{
\begin{frame}[plain]{}
\partpage
\end{frame}
}
Then use almost the default part page style but include the command \appendix
in order to keep the total page number unchanged.
\defbeamertemplate*{part page}{custom}[1][colsep=-4bp,
rounded=true,shadow=\beamer@themerounded@shadow]{
\begin{centering}
\vskip1em\par
\begin{beamercolorbox}[sep=16pt,center,#1]{part title}
\usebeamerfont{part title}\appendixname\par
\end{beamercolorbox}
\end{centering}
}
\RequirePackage[absolute,overlay]{textpos}
\ifthenelse{\boolean{cb@noheaderlogo}}{}{
\addtobeamertemplate{frametitle}{}{%
\begin{textblock}{14}(13.9,0.25)
\resizebox{!}{8mm}{\logo}
\end{textblock}
}
}
We define a new colored bow environment that can be also used for orgmode
headline. The parameters are the following one :
- box width,
- box color,
- text options such as
\centering
of text size, x
andy
positions,- box title.
The last parameters, if specified, are used within a textblock
environment, otherwise a minipage
is defined.
\newcommand{\IfNoValueOrEmptyTF}[3]{\IfNoValueTF{#1}{#2}{\if\relax\detokenize{#1}\relax#2\else#3\fi}}
\RequirePackage{xparse}
\NewDocumentEnvironment{cbox}{o o o o o d()}{
\IfNoValueOrEmptyTF{#4}{
\begin{center}
\begin{minipage}[c]{\IfNoValueOrEmptyTF{#1}{0.9\linewidth}{#1}}}{
\begin{textblock}{\IfNoValueOrEmptyTF{#1}{10}{#1}}(#4,#5)}
\begin{beamerboxesrounded}[upper=\IfNoValueOrEmptyTF{#2}{-blue}{#2}, lower=\IfNoValueOrEmptyTF{#2}{-blue}{#2}, shadow=false]
{\IfNoValueOrEmptyTF{#3}{}{#3}\IfNoValueOrEmptyTF{#6}{}{#6}}
\IfNoValueOrEmptyTF{#3}{}{#3}
}{
\end{beamerboxesrounded}
\IfNoValueOrEmptyTF{#4}{\end{minipage}\end{center}}{\end{textblock}}
}
Taken from this post forum on stackexchange. For some obscure reasons, this piece of code can not be included into the C++ teaching style.
\RequirePackage{animate}
\RequirePackage{expl3}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%commands for simulating terminal in/output
%\scroll[<line separator string>]{<width as TeX dim>}
% {<number of lines>}{terminal text line}
%\clearbuf %clears line buffer
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\ExplSyntaxOn
\seq_new:N\g_linebuffer_seq
\seq_new:N\g_inputline_seq
\newcommand\scroll[4][§§]{
\color{generic2}
\seq_set_split:Nnn\g_inputline_seq{#1}{#4}
\seq_map_inline:Nn\g_inputline_seq{
\seq_gput_right:Nx\g_linebuffer_seq{##1}
\int_compare:nT{\seq_count:N\g_linebuffer_seq>#3}{
\seq_gpop_left:NN\g_linebuffer_seq\dummy
}
}
\mbox{\begin{minipage}[t][#3\baselineskip]{#2}
\ttfamily
\seq_map_inline:Nn\g_linebuffer_seq{\mbox{##1}\\}
\end{minipage}}
}
\newcommand\clearbuf{\seq_gclear:N\g_linebuffer_seq}
\ExplSyntaxOff
Remove navigation symbols
\beamertemplatenavigationsymbolsempty
Add special footline with a slick progress bar
\ifthenelse{\boolean{has_driver_name}}{
\ifthenelse{\boolean{cb@python_teaching}}{
\defbeamertemplate{footline}{cbfootline}{%
\usebeamerfont{page number in head/foot}
\hspace{1em}\inserttitle\hfill\insertframenumber\hspace{1em}
\vspace{1pt}
}
}{}
\setbeamertemplate{footline}[cbfootline]{}
\setbeamercolor{footline}{use=structure, fg=gray!75, bg=structure.bg}
}{}
Redefine footnote template for beamer
\defbeamertemplate*{footnote}{custom}
{
\hfill\parbox{6.5cm}{\raggedleft
\tiny
\parindent 1em\noindent%
\hbox to 1em{\hfil\insertfootnotemark}\insertfootnotetext%
}
\vskip +1pt
}
Use personal footnote symbol starting with dagger and not with asterisk.
\def\@fnsymbol#1{\ensuremath{\ifcase#1\or \dagger\or \ddagger\or
\mathsection\or \mathparagraph\or \|\or **\or \dagger\dagger
\or \ddagger\ddagger \else\@ctrerr\fi}}
\renewcommand{\thefootnote}{\fnsymbol{footnote}}
\renewcommand{\footnoterule}{}
Reset counter for every beamer frame
\RequirePackage{perpage}
\MakePerPage{footnote}
If the text within the footnote is very long, LaTeX may split the footnote over several pages. You can prevent LaTeX from doing so by increasing the penalty for such an operation.
\interfootnotelinepenalty=10000
url=$(git config --get remote.origin.url | sed -e 's#git@github.com:#https://github.com/#' -e 's#\.git##')
log=$(LC_MESSAGES=en git --no-pager log -1 HEAD --date=short --pretty=format:"{\scriptsize\faGithub*} \ttfamily\orighref{$url/commit/%H}{\color{gray}\texttt{%h}} - %ad")
# log=$(LC_MESSAGES=en git --no-pager log -1 HEAD --date=short --pretty=format:"\ttfamily\orighref{$url/commit/%H}{\color{gray}\faGit %h}")
echo "\renewcommand{\insertgitstatus}{\textnormal{\color{gray}${log}}}"
<<git-status()>>
Given the driver
to be used, generic colors, special title inclusion are set
up. Practically, everything can be done within this section.
\ifthenelse{\boolean{cb@python_teaching}}{
\renewcommand{\appendixname}{Annexes}
\ifthenelse{\equal{\cb@theme}{whopper}}{
\definecolor{red}{HTML}{DC0D2B}
\definecolor{green}{HTML}{66A70B}
\definecolor{orange}{HTML}{E3B581}
\definecolor{brown}{HTML}{703C2F}
}{}
\ifthenelse{\equal{\cb@theme}{solarized}}{
\definecolor{red}{HTML}{DC322F}
\definecolor{green}{HTML}{859900}
\definecolor{blue}{HTML}{268bd2}
\definecolor{orange}{HTML}{CB4B16}
\definecolor{gray}{RGB}{107,108,110}
\definecolor{violet}{HTML}{6C71C4}
\colorlet{orange}{violet}
\colorlet{generic0}{red}
\colorlet{generic1}{gray}
\colorlet{generic2}{blue}
\colorlet{generic3}{gray}
}{}
\ifthenelse{\equal{\cb@theme}{default}}{
\definecolor{red}{RGB}{220,50,47}
\definecolor{green}{RGB}{132,184,24}
\definecolor{blue}{RGB}{0,72,112}
\definecolor{orange}{RGB}{192,128,64}
\definecolor{gray}{RGB}{107,108,110}
\definecolor{violet}{RGB}{99,0,60}
%% \definecolor{solarizedbg}{HTML}{002b36}
\colorlet{generic0}{green}
\colorlet{generic1}{gray}
\colorlet{generic2}{violet}
\colorlet{generic3}{gray}
}{}
\setbeamerfont{title}{series=\bfseries, size=\Large}
\setbeamerfont{frametitle}{series=\bfseries}
\setbeamertemplate{frametitle}{%
\flushright%
\color{generic1}\insertframetitle\par%
\ifx\insertframesubtitle\@empty\else
\vskip+3pt\color{generic1!75}\footnotesize\faHandPointRight[regular]\xspace\xspace\insertframesubtitle\par\fi}
%% \setbeamertemplate{frametitle}{\vskip+10pt\hfill\insertframetitle\\ \flushright\small\insertframesubtitle}
\renewcommand{\insertprefixtitle}{{\color{generic1}\small\textbf{Cours Python – Master 1 Physique Fondamentale\\}}}
\newcommand*\quotesize{45}
\newcommand*{\openquote}
{\tikz[remember picture,overlay,xshift=-4ex,yshift=-1.0ex]
\node (OQ) {\fontsize{\quotesize}{\quotesize}\selectfont“};\kern0pt}
\newcommand*{\closequote}
{\tikz[remember picture,overlay,xshift=+2ex,yshift=-2.5ex]
\node (CQ) {\fontsize{\quotesize}{\quotesize}\hfill\selectfont”};}
\let\origquote\quote
\let\endorigquote\endquote
\renewenvironment{quote}{%
\origquote\openquote
}%
{\closequote\endorigquote}
\newenvironment{remark}
{\begin{cbox}[0.85\linewidth][-wgray][\centering]\faExclamationTriangle\small}
{\end{cbox}}
\renewcommand{\theFancyVerbLine}{\ttfamily \textcolor{gray}{\scriptsize\oldstylenums{\arabic{FancyVerbLine}}}}
\usemintedstyle{solarized}
\definecolor{solarizedbg}{RGB}{253,246,227}
\newcommand{\prompt}{\color{orange}{\scriptsize\faIcon{terminal}}}
%% \let\origttt\texttt
%% \renewcommand{\texttt}[1]{\tikz[overlay]\node[draw=green,inner sep=1pt, anchor=text, rectangle, rounded corners=1pt, green] {\smaller[0.75]{\origttt{#1}}};\phantom{#1}\ignorespaces}
<<generate_beamer_colors>>
\setbeamercolor{frametitle}{fg=gray}
<<generate_colored_box>>
}{}