├── slides ├── main.out ├── main.snm ├── main.toc ├── loss.pdf ├── main.pdf ├── numpy.pdf ├── pvr.png ├── matlab.pdf ├── matlab.png ├── ppf_plus.pdf ├── main.synctex.gz ├── python_vs_rest.png ├── main.vrb ├── loss.py ├── main.nav ├── main.aux ├── main.tex ├── main.fdb_latexmk └── main.fls ├── qe-logo-large.png ├── README.md ├── .gitignore └── notebooks └── numba_fortran_horse_race.ipynb /slides/main.out: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /slides/main.snm: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /slides/main.toc: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /slides/loss.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuantEcon/columbia_2023/master/slides/loss.pdf -------------------------------------------------------------------------------- /slides/main.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuantEcon/columbia_2023/master/slides/main.pdf -------------------------------------------------------------------------------- /slides/numpy.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuantEcon/columbia_2023/master/slides/numpy.pdf -------------------------------------------------------------------------------- /slides/pvr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuantEcon/columbia_2023/master/slides/pvr.png -------------------------------------------------------------------------------- /qe-logo-large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuantEcon/columbia_2023/master/qe-logo-large.png -------------------------------------------------------------------------------- /slides/matlab.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuantEcon/columbia_2023/master/slides/matlab.pdf -------------------------------------------------------------------------------- /slides/matlab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuantEcon/columbia_2023/master/slides/matlab.png -------------------------------------------------------------------------------- /slides/ppf_plus.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuantEcon/columbia_2023/master/slides/ppf_plus.pdf -------------------------------------------------------------------------------- /slides/main.synctex.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuantEcon/columbia_2023/master/slides/main.synctex.gz -------------------------------------------------------------------------------- /slides/python_vs_rest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuantEcon/columbia_2023/master/slides/python_vs_rest.png -------------------------------------------------------------------------------- /slides/main.vrb: -------------------------------------------------------------------------------- 1 | \frametitle{Phase 3 continued: Python + Numba copy Julia} 2 | 3 | \begin{minted}{python} 4 | from numba import jit 5 | 6 | @jit 7 | def quad(x0, α, n): 8 | x = x0 9 | for i in range(n-1): 10 | x = α * x * (1 - x) 11 | return x 12 | 13 | quad(0.2, 4.0, 10_000_000) 14 | \end{minted} 15 | 16 | -------------------------------------------------------------------------------- /slides/loss.py: -------------------------------------------------------------------------------- 1 | import matplotlib.pyplot as plt 2 | from mpl_toolkits.mplot3d.axes3d import Axes3D 3 | from matplotlib import cm 4 | import numpy as np 5 | 6 | def f(x, y): 7 | return -np.cos(x**2 + y**2) / (1 + x**2 + y**2) 8 | 9 | xgrid = np.linspace(-3, 3, 50) 10 | ygrid = xgrid 11 | x, y = np.meshgrid(xgrid, ygrid) 12 | 13 | fig = plt.figure(figsize=(10, 6)) 14 | ax = fig.add_subplot(111, projection='3d') 15 | ax.plot_surface(x, 16 | y, 17 | f(x, y), 18 | rstride=2, cstride=2, 19 | cmap=cm.jet, 20 | alpha=0.7, 21 | linewidth=0.25) 22 | ax.set_zlim(-1.0, 0.5) 23 | plt.show() 24 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | ![](qe-logo-large.png) 3 | 4 | # An Introduction to High Performance Computing with Python 5 | 6 | This is the homepage for the [QuantEcon](https://quantecon.org/) introduction to 7 | high performance computing with Python to be held at Columbia University in 8 | October 2023. 9 | 10 | **Instructor**: John Stachurski 11 | 12 | **Abstract**: This workshop will give an overview of Python's high performance 13 | computing capabilities and how they can be used for economic modeling. We will 14 | cover JIT compilers, automation differentiation, cloud computing and GPUs. 15 | Attendees should bring their own laptop, but no software installs are necessary. 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /slides/main.nav: -------------------------------------------------------------------------------- 1 | \headcommand {\slideentry {0}{0}{1}{1/1}{}{0}} 2 | \headcommand {\beamer@framepages {1}{1}} 3 | \headcommand {\slideentry {0}{0}{2}{2/2}{}{0}} 4 | \headcommand {\beamer@framepages {2}{2}} 5 | \headcommand {\slideentry {0}{0}{3}{3/3}{}{0}} 6 | \headcommand {\beamer@framepages {3}{3}} 7 | \headcommand {\slideentry {0}{0}{4}{4/4}{}{0}} 8 | \headcommand {\beamer@framepages {4}{4}} 9 | \headcommand {\slideentry {0}{0}{5}{5/5}{}{0}} 10 | \headcommand {\beamer@framepages {5}{5}} 11 | \headcommand {\slideentry {0}{0}{6}{6/6}{}{0}} 12 | \headcommand {\beamer@framepages {6}{6}} 13 | \headcommand {\slideentry {0}{0}{7}{7/7}{}{0}} 14 | \headcommand {\beamer@framepages {7}{7}} 15 | \headcommand {\slideentry {0}{0}{8}{8/8}{}{0}} 16 | \headcommand {\beamer@framepages {8}{8}} 17 | \headcommand {\slideentry {0}{0}{9}{9/9}{}{0}} 18 | \headcommand {\beamer@framepages {9}{9}} 19 | \headcommand {\slideentry {0}{0}{10}{10/10}{}{0}} 20 | \headcommand {\beamer@framepages {10}{10}} 21 | \headcommand {\slideentry {0}{0}{11}{11/11}{}{0}} 22 | \headcommand {\beamer@framepages {11}{11}} 23 | \headcommand {\slideentry {0}{0}{12}{12/12}{}{0}} 24 | \headcommand {\beamer@framepages {12}{12}} 25 | \headcommand {\slideentry {0}{0}{13}{13/14}{}{0}} 26 | \headcommand {\beamer@framepages {13}{14}} 27 | \headcommand {\slideentry {0}{0}{14}{15/15}{}{0}} 28 | \headcommand {\beamer@framepages {15}{15}} 29 | \headcommand {\beamer@partpages {1}{15}} 30 | \headcommand {\beamer@subsectionpages {1}{15}} 31 | \headcommand {\beamer@sectionpages {1}{15}} 32 | \headcommand {\beamer@documentpages {15}} 33 | \headcommand {\gdef \inserttotalframenumber {14}} 34 | -------------------------------------------------------------------------------- /slides/main.aux: -------------------------------------------------------------------------------- 1 | \relax 2 | \providecommand\hyper@newdestlabel[2]{} 3 | \providecommand\HyperFirstAtBeginDocument{\AtBeginDocument} 4 | \HyperFirstAtBeginDocument{\ifx\hyper@anchor\@undefined 5 | \global\let\oldnewlabel\newlabel 6 | \gdef\newlabel#1#2{\newlabelxx{#1}#2} 7 | \gdef\newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}} 8 | \AtEndDocument{\ifx\hyper@anchor\@undefined 9 | \let\newlabel\oldnewlabel 10 | \fi} 11 | \fi} 12 | \global\let\hyper@last\relax 13 | \gdef\HyperFirstAtBeginDocument#1{#1} 14 | \providecommand*\HyPL@Entry[1]{} 15 | \HyPL@Entry{0<>} 16 | \@writefile{nav}{\headcommand {\slideentry {0}{0}{1}{1/1}{}{0}}} 17 | \@writefile{nav}{\headcommand {\beamer@framepages {1}{1}}} 18 | \HyPL@Entry{1<>} 19 | \@writefile{nav}{\headcommand {\slideentry {0}{0}{2}{2/2}{}{0}}} 20 | \@writefile{nav}{\headcommand {\beamer@framepages {2}{2}}} 21 | \HyPL@Entry{2<>} 22 | \@writefile{nav}{\headcommand {\slideentry {0}{0}{3}{3/3}{}{0}}} 23 | \@writefile{nav}{\headcommand {\beamer@framepages {3}{3}}} 24 | \HyPL@Entry{3<>} 25 | \@writefile{nav}{\headcommand {\slideentry {0}{0}{4}{4/4}{}{0}}} 26 | \@writefile{nav}{\headcommand {\beamer@framepages {4}{4}}} 27 | \HyPL@Entry{4<>} 28 | \@writefile{nav}{\headcommand {\slideentry {0}{0}{5}{5/5}{}{0}}} 29 | \@writefile{nav}{\headcommand {\beamer@framepages {5}{5}}} 30 | \HyPL@Entry{5<>} 31 | \@writefile{nav}{\headcommand {\slideentry {0}{0}{6}{6/6}{}{0}}} 32 | \@writefile{nav}{\headcommand {\beamer@framepages {6}{6}}} 33 | \HyPL@Entry{6<>} 34 | \@writefile{nav}{\headcommand {\slideentry {0}{0}{7}{7/7}{}{0}}} 35 | \@writefile{nav}{\headcommand {\beamer@framepages {7}{7}}} 36 | \HyPL@Entry{7<>} 37 | \@writefile{nav}{\headcommand {\slideentry {0}{0}{8}{8/8}{}{0}}} 38 | \@writefile{nav}{\headcommand {\beamer@framepages {8}{8}}} 39 | \HyPL@Entry{8<>} 40 | \@writefile{nav}{\headcommand {\slideentry {0}{0}{9}{9/9}{}{0}}} 41 | \@writefile{nav}{\headcommand {\beamer@framepages {9}{9}}} 42 | \HyPL@Entry{9<>} 43 | \@writefile{nav}{\headcommand {\slideentry {0}{0}{10}{10/10}{}{0}}} 44 | \@writefile{nav}{\headcommand {\beamer@framepages {10}{10}}} 45 | \HyPL@Entry{10<>} 46 | \@writefile{nav}{\headcommand {\slideentry {0}{0}{11}{11/11}{}{0}}} 47 | \@writefile{nav}{\headcommand {\beamer@framepages {11}{11}}} 48 | \HyPL@Entry{11<>} 49 | \@writefile{nav}{\headcommand {\slideentry {0}{0}{12}{12/12}{}{0}}} 50 | \@writefile{nav}{\headcommand {\beamer@framepages {12}{12}}} 51 | \HyPL@Entry{12<>} 52 | \@writefile{nav}{\headcommand {\slideentry {0}{0}{13}{13/14}{}{0}}} 53 | \@writefile{nav}{\headcommand {\beamer@framepages {13}{14}}} 54 | \HyPL@Entry{14<>} 55 | \@writefile{nav}{\headcommand {\slideentry {0}{0}{14}{15/15}{}{0}}} 56 | \@writefile{nav}{\headcommand {\beamer@framepages {15}{15}}} 57 | \@writefile{nav}{\headcommand {\beamer@partpages {1}{15}}} 58 | \@writefile{nav}{\headcommand {\beamer@subsectionpages {1}{15}}} 59 | \@writefile{nav}{\headcommand {\beamer@sectionpages {1}{15}}} 60 | \@writefile{nav}{\headcommand {\beamer@documentpages {15}}} 61 | \@writefile{nav}{\headcommand {\gdef \inserttotalframenumber {14}}} 62 | \gdef\minted@oldcachelist{, 63 | friendly.pygstyle, 64 | 7D5A5EBDBD1741443C4AF0F5E2287F7E7EF988268F11F881DC95AE21CB0F31F5.pygtex, 65 | B7D8617027954C0D27714BE332300B29227876C9C340E7E2D80B2238AA86E1B6.pygtex, 66 | 24656EB0F15DD934B14BA34BCED063D18FFA95A9271F21977E7D1C6AA5E5964D.pygtex, 67 | D4513B50D233C8C6778A45F5B61E52024281FAF47C70E7389F15E7D045E0286E.pygtex} 68 | \gdef \@abspage@last{15} 69 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | _minted* 4 | *.py[cod] 5 | *$py.class 6 | 7 | # C extensions 8 | *.so 9 | 10 | # tex 11 | .aux 12 | .fls 13 | .log 14 | .nav 15 | .snm 16 | .fdb_latexmk 17 | .toc 18 | .synctex_gz 19 | 20 | # Distribution / packaging 21 | .Python 22 | build/ 23 | develop-eggs/ 24 | dist/ 25 | downloads/ 26 | eggs/ 27 | .eggs/ 28 | lib/ 29 | lib64/ 30 | parts/ 31 | sdist/ 32 | var/ 33 | wheels/ 34 | share/python-wheels/ 35 | *.egg-info/ 36 | .installed.cfg 37 | *.egg 38 | MANIFEST 39 | 40 | # PyInstaller 41 | # Usually these files are written by a python script from a template 42 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 43 | *.manifest 44 | *.spec 45 | 46 | # Installer logs 47 | pip-log.txt 48 | pip-delete-this-directory.txt 49 | 50 | # Unit test / coverage reports 51 | htmlcov/ 52 | .tox/ 53 | .nox/ 54 | .coverage 55 | .coverage.* 56 | .cache 57 | nosetests.xml 58 | coverage.xml 59 | *.cover 60 | *.py,cover 61 | .hypothesis/ 62 | .pytest_cache/ 63 | cover/ 64 | 65 | # Translations 66 | *.mo 67 | *.pot 68 | 69 | # Django stuff: 70 | *.log 71 | local_settings.py 72 | db.sqlite3 73 | db.sqlite3-journal 74 | 75 | # Flask stuff: 76 | instance/ 77 | .webassets-cache 78 | 79 | # Scrapy stuff: 80 | .scrapy 81 | 82 | # Sphinx documentation 83 | docs/_build/ 84 | 85 | # PyBuilder 86 | .pybuilder/ 87 | target/ 88 | 89 | # Jupyter Notebook 90 | .ipynb_checkpoints 91 | 92 | # IPython 93 | profile_default/ 94 | ipython_config.py 95 | 96 | # pyenv 97 | # For a library or package, you might want to ignore these files since the code is 98 | # intended to run in multiple environments; otherwise, check them in: 99 | # .python-version 100 | 101 | # pipenv 102 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 103 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 104 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 105 | # install all needed dependencies. 106 | #Pipfile.lock 107 | 108 | # poetry 109 | # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. 110 | # This is especially recommended for binary packages to ensure reproducibility, and is more 111 | # commonly ignored for libraries. 112 | # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control 113 | #poetry.lock 114 | 115 | # pdm 116 | # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. 117 | #pdm.lock 118 | # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it 119 | # in version control. 120 | # https://pdm.fming.dev/#use-with-ide 121 | .pdm.toml 122 | 123 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm 124 | __pypackages__/ 125 | 126 | # Celery stuff 127 | celerybeat-schedule 128 | celerybeat.pid 129 | 130 | # SageMath parsed files 131 | *.sage.py 132 | 133 | # Environments 134 | .env 135 | .venv 136 | env/ 137 | venv/ 138 | ENV/ 139 | env.bak/ 140 | venv.bak/ 141 | 142 | # Spyder project settings 143 | .spyderproject 144 | .spyproject 145 | 146 | # Rope project settings 147 | .ropeproject 148 | 149 | # mkdocs documentation 150 | /site 151 | 152 | # mypy 153 | .mypy_cache/ 154 | .dmypy.json 155 | dmypy.json 156 | 157 | # Pyre type checker 158 | .pyre/ 159 | 160 | # pytype static type analyzer 161 | .pytype/ 162 | 163 | # Cython debug symbols 164 | cython_debug/ 165 | 166 | # PyCharm 167 | # JetBrains specific template is maintained in a separate JetBrains.gitignore that can 168 | # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore 169 | # and can be added to the global gitignore or merged into this file. For a more nuclear 170 | # option (not recommended) you can uncomment the following to ignore the entire idea folder. 171 | #.idea/ 172 | -------------------------------------------------------------------------------- /slides/main.tex: -------------------------------------------------------------------------------- 1 | \documentclass[ 2 | xcolor={svgnames,dvipsnames}, 3 | hyperref={colorlinks, citecolor=DeepPink4, linkcolor=DarkRed, urlcolor=DarkBlue} 4 | ]{beamer} % for hardcopy add 'trans' 5 | 6 | 7 | \mode 8 | { 9 | \usetheme{Singapore} 10 | % or ... 11 | \setbeamercovered{transparent} 12 | % or whatever (possibly just delete it) 13 | } 14 | 15 | %\usefonttheme{professionalfonts} 16 | %\usepackage[english]{babel} 17 | % or whatever 18 | %\usepackage[latin1]{inputenc} 19 | % or whatever 20 | %\usepackage{times} 21 | %\usepackage[T1]{fontenc} 22 | % Or whatever. Note that the encoding and the font should match. If T1 23 | % does not look nice, try deleting the line with the fontenc. 24 | 25 | %\usepackage{fontspec} 26 | %\setmonofont{CMU Typewriter Text} 27 | %\setmonofont{Consolas} 28 | 29 | \usepackage{fontspec} 30 | \usepackage[xcharter]{newtxmath} 31 | \setmainfont{XCharter} 32 | %\usepackage{unicode-math} 33 | %\setmathfont{XCharter-Math.otf} 34 | \setmonofont{DejaVu Sans Mono}[Scale=MatchLowercase] % provides unicode characters 35 | 36 | 37 | 38 | %%%%%%%%%%%%%%%%%%%%%% start my preamble %%%%%%%%%%%%%%%%%%%%%% 39 | 40 | \addtobeamertemplate{navigation symbols}{}{% 41 | \usebeamerfont{footline}% 42 | \usebeamercolor[fg]{footline}% 43 | \hspace{1em}% 44 | \insertframenumber/\inserttotalframenumber 45 | } 46 | 47 | 48 | \usepackage{graphicx} 49 | \usepackage{amsmath, amssymb, amsthm} 50 | \usepackage{bbm} 51 | \usepackage{mathrsfs} 52 | \usepackage{xcolor} 53 | \usepackage{fancyvrb} 54 | 55 | 56 | % Quotes at start of chapters / sections 57 | \usepackage{epigraph} 58 | %\renewcommand{\epigraphflush}{flushleft} 59 | %\renewcommand{\sourceflush}{flushleft} 60 | \renewcommand{\epigraphwidth}{6in} 61 | 62 | %% Fonts 63 | 64 | %\usepackage[T1]{fontenc} 65 | \usepackage{mathpazo} 66 | %\usepackage{fontspec} 67 | %\defaultfontfeatures{Ligatures=TeX} 68 | %\setsansfont[Scale=MatchLowercase]{DejaVu Sans} 69 | %\setmonofont[Scale=MatchLowercase]{DejaVu Sans Mono} 70 | %\setmathfont{Asana Math} 71 | %\setmainfont{Optima} 72 | %\setmathrm{Optima} 73 | %\setboldmathrm[BoldFont={Optima ExtraBlack}]{Optima Bold} 74 | 75 | % Some colors 76 | 77 | \definecolor{aquamarine}{RGB}{69,139,116} 78 | \definecolor{midnightblue}{RGB}{25,25,112} 79 | \definecolor{darkslategrey}{RGB}{47,79,79} 80 | \definecolor{darkorange4}{RGB}{139,90,0} 81 | \definecolor{dogerblue}{RGB}{24,116,205} 82 | \definecolor{blue2}{RGB}{0,0,238} 83 | \definecolor{bg}{rgb}{0.95,0.95,0.95} 84 | \definecolor{DarkOrange1}{RGB}{255,127,0} 85 | \definecolor{ForestGreen}{RGB}{34,139,34} 86 | \definecolor{DarkRed}{RGB}{139, 0, 0} 87 | \definecolor{DarkBlue}{RGB}{0, 0, 139} 88 | \definecolor{Blue}{RGB}{0, 0, 255} 89 | \definecolor{Brown}{RGB}{165,42,42} 90 | 91 | 92 | \setlength{\parskip}{1.5ex plus0.5ex minus0.5ex} 93 | 94 | %\renewcommand{\baselinestretch}{1.05} 95 | %\setlength{\parskip}{1.5ex plus0.5ex minus0.5ex} 96 | %\setlength{\parindent}{0pt} 97 | 98 | % Typesetting code 99 | \definecolor{bg}{rgb}{0.95,0.95,0.95} 100 | \usepackage{minted} 101 | \setminted{mathescape, frame=lines, framesep=3mm} 102 | \usemintedstyle{friendly} 103 | %\newminted{python}{} 104 | %\newminted{c}{mathescape,frame=lines,framesep=4mm,bgcolor=bg} 105 | %\newminted{java}{mathescape,frame=lines,framesep=4mm,bgcolor=bg} 106 | %\newminted{julia}{mathescape,frame=lines,framesep=4mm,bgcolor=bg} 107 | %\newminted{ipython}{mathescape,frame=lines,framesep=4mm,bgcolor=bg} 108 | 109 | 110 | \newcommand{\Fact}{\textcolor{Brown}{\bf Fact. }} 111 | \newcommand{\Facts}{\textcolor{Brown}{\bf Facts }} 112 | \newcommand{\keya}{\textcolor{turquois4}{\bf Key Idea. }} 113 | \newcommand{\Factnodot}{\textcolor{Brown}{\bf Fact }} 114 | \newcommand{\Eg}{\textcolor{ForestGreen}{Example. }} 115 | \newcommand{\Egs}{\textcolor{ForestGreen}{Examples. }} 116 | \newcommand{\Ex}{{\bf Ex. }} 117 | 118 | 119 | 120 | \renewcommand{\theFancyVerbLine}{\sffamily 121 | \textcolor[rgb]{0.5,0.5,1.0}{\scriptsize {\arabic{FancyVerbLine}}}} 122 | 123 | \newcommand{\navy}[1]{\textcolor{Blue}{\bf #1}} 124 | \newcommand{\brown}[1]{\textcolor{Brown}{\sf #1}} 125 | \newcommand{\green}[1]{\textcolor{ForestGreen}{\sf #1}} 126 | \newcommand{\blue}[1]{\textcolor{Blue}{\sf #1}} 127 | \newcommand{\navymth}[1]{\textcolor{Blue}{#1}} 128 | \newcommand{\emp}[1]{\textcolor{DarkOrange1}{\bf #1}} 129 | \newcommand{\red}[1]{\textcolor{Red}{\bf #1}} 130 | 131 | % Symbols, redefines, etc. 132 | 133 | \newcommand{\code}[1]{\texttt{#1}} 134 | 135 | \newcommand{\argmax}{\operatornamewithlimits{argmax}} 136 | \newcommand{\argmin}{\operatornamewithlimits{argmin}} 137 | 138 | \DeclareMathOperator{\cl}{cl} 139 | \DeclareMathOperator{\interior}{int} 140 | \DeclareMathOperator{\Prob}{Prob} 141 | \DeclareMathOperator{\determinant}{det} 142 | \DeclareMathOperator{\trace}{trace} 143 | \DeclareMathOperator{\Span}{span} 144 | \DeclareMathOperator{\rank}{rank} 145 | \DeclareMathOperator{\cov}{cov} 146 | \DeclareMathOperator{\corr}{corr} 147 | \DeclareMathOperator{\var}{var} 148 | \DeclareMathOperator{\mse}{mse} 149 | \DeclareMathOperator{\se}{se} 150 | \DeclareMathOperator{\row}{row} 151 | \DeclareMathOperator{\col}{col} 152 | \DeclareMathOperator{\range}{rng} 153 | \DeclareMathOperator{\dimension}{dim} 154 | \DeclareMathOperator{\bias}{bias} 155 | 156 | 157 | % mics short cuts and symbols 158 | \newcommand{\st}{\ensuremath{\ \mathrm{s.t.}\ }} 159 | \newcommand{\setntn}[2]{ \{ #1 : #2 \} } 160 | \newcommand{\cf}[1]{ \lstinline|#1| } 161 | \newcommand{\fore}{\therefore \quad} 162 | \newcommand{\tod}{\stackrel { d } {\to} } 163 | \newcommand{\toprob}{\stackrel { p } {\to} } 164 | \newcommand{\toms}{\stackrel { ms } {\to} } 165 | \newcommand{\eqdist}{\stackrel {\textrm{ \scriptsize{d} }} {=} } 166 | \newcommand{\iidsim}{\stackrel {\textrm{ {\sc iid }}} {\sim} } 167 | \newcommand{\1}{\mathbbm 1} 168 | \newcommand{\dee}{\,{\rm d}} 169 | \newcommand{\given}{\, | \,} 170 | \newcommand{\la}{\langle} 171 | \newcommand{\ra}{\rangle} 172 | 173 | \newcommand{\boldA}{\mathbf A} 174 | \newcommand{\boldB}{\mathbf B} 175 | \newcommand{\boldC}{\mathbf C} 176 | \newcommand{\boldD}{\mathbf D} 177 | \newcommand{\boldM}{\mathbf M} 178 | \newcommand{\boldP}{\mathbf P} 179 | \newcommand{\boldQ}{\mathbf Q} 180 | \newcommand{\boldI}{\mathbf I} 181 | \newcommand{\boldX}{\mathbf X} 182 | \newcommand{\boldY}{\mathbf Y} 183 | \newcommand{\boldZ}{\mathbf Z} 184 | 185 | \newcommand{\bSigmaX}{ {\boldsymbol \Sigma_{\hboldbeta}} } 186 | \newcommand{\hbSigmaX}{ \mathbf{\hat \Sigma_{\hboldbeta}} } 187 | 188 | \newcommand{\RR}{\mathbbm R} 189 | \newcommand{\NN}{\mathbbm N} 190 | \newcommand{\PP}{\mathbbm P} 191 | \newcommand{\EE}{\mathbbm E \,} 192 | \newcommand{\XX}{\mathbbm X} 193 | \newcommand{\ZZ}{\mathbbm Z} 194 | \newcommand{\QQ}{\mathbbm Q} 195 | 196 | \newcommand{\fF}{\mathcal F} 197 | \newcommand{\dD}{\mathcal D} 198 | \newcommand{\lL}{\mathcal L} 199 | \newcommand{\gG}{\mathcal G} 200 | \newcommand{\hH}{\mathcal H} 201 | \newcommand{\nN}{\mathcal N} 202 | \newcommand{\pP}{\mathcal P} 203 | 204 | 205 | 206 | 207 | \title{Introduction to HPC with Python} 208 | 209 | \subtitle{Workshop at Columbia University} 210 | 211 | \author{John Stachurski} 212 | 213 | 214 | \date{October 2023} 215 | 216 | 217 | \begin{document} 218 | 219 | \begin{frame} 220 | \titlepage 221 | \end{frame} 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | \begin{frame} 230 | \frametitle{Outline} 231 | 232 | \begin{enumerate} 233 | \item Trends in scientific computing 234 | \vspace{0.5em} 235 | \vspace{0.5em} 236 | \item Likely future directions 237 | \vspace{0.5em} 238 | \vspace{0.5em} 239 | \item Hands-on computing with Python + NumPy + Numba 240 | \vspace{0.5em} 241 | \vspace{0.5em} 242 | \item Hands-on computing with Python + JAX 243 | \end{enumerate} 244 | 245 | \end{frame} 246 | 247 | 248 | 249 | \begin{frame} 250 | \frametitle{A (very) short history of scientific computing} 251 | 252 | 253 | General purpose scientific computing environments: 254 | 255 | \vspace{0.5em} 256 | \vspace{0.5em} 257 | \begin{enumerate} 258 | \item Fortran \& C / C++ 259 | \vspace{0.5em} 260 | \vspace{0.5em} 261 | \item MATLAB \& (Python + NumPy) 262 | \vspace{0.5em} 263 | \vspace{0.5em} 264 | \item Julia \& (Python + Numba) 265 | \vspace{0.5em} 266 | \vspace{0.5em} 267 | \item AI-driven scientific computing (e.g., Python + Google JAX) 268 | \end{enumerate} 269 | 270 | \end{frame} 271 | 272 | 273 | 274 | \begin{frame}[fragile] 275 | \frametitle{Fortran \& C --- static types and AOT compilers} 276 | 277 | {\small 278 | \begin{minted}{c} 279 | #include 280 | int main() { 281 | int x = 1 + 1; 282 | printf("1 + 1 = %d\n", x); 283 | return 0; 284 | } 285 | \end{minted} 286 | } 287 | 288 | 289 | {\small 290 | \begin{minted}{fortran} 291 | PROGRAM ONE_PLUS_ONE 292 | INTEGER :: X = 1 + 1 293 | PRINT *, '1 + 1 = ', X 294 | END PROGRAM ONE_PLUS_ONE 295 | \end{minted} 296 | } 297 | 298 | \end{frame} 299 | 300 | 301 | \begin{frame} 302 | 303 | 304 | Pros 305 | 306 | \begin{itemize} 307 | \item fast --- on a single thread 308 | \end{itemize} 309 | 310 | 311 | \vspace{0.5em} 312 | 313 | Cons 314 | 315 | \begin{itemize} 316 | \item tedious to write 317 | \item lack of portability 318 | \item hard to debug 319 | \item hard to parallelize 320 | \item low interactivity 321 | \end{itemize} 322 | 323 | \end{frame} 324 | 325 | 326 | 327 | \begin{frame} 328 | \frametitle{Phase 2: MATLAB} 329 | 330 | 331 | \begin{figure} 332 | \begin{center} % l b r t 333 | \scalebox{.6}{\includegraphics[trim={2cm 8cm 6cm 3cm},clip]{matlab.pdf}} 334 | \end{center} 335 | \end{figure} 336 | 337 | 338 | \end{frame} 339 | 340 | 341 | 342 | 343 | \begin{frame} 344 | \frametitle{Phase 2A: Python + NumPy} 345 | 346 | 347 | \begin{figure} 348 | \begin{center} % l b r t 349 | \scalebox{.6}{\includegraphics[trim={2cm 8cm 6cm 3cm},clip]{numpy.pdf}} 350 | \end{center} 351 | \end{figure} 352 | 353 | 354 | \end{frame} 355 | 356 | 357 | 358 | \begin{frame}[fragile] 359 | \frametitle{Phase 3: Julia --- rise of the JIT compilers} 360 | 361 | \begin{minted}{julia} 362 | 363 | function quad(x0, α, n) 364 | x = x0 365 | for i in 1:(n-1) 366 | x = α * x * (1 - x) 367 | end 368 | return x 369 | end 370 | 371 | quad(0.2, 4.0, 10_000_000) 372 | \end{minted} 373 | 374 | \end{frame} 375 | 376 | 377 | \begin{frame}[fragile] 378 | \frametitle{Phase 3 continued: Python + Numba copy Julia} 379 | 380 | \begin{minted}{python} 381 | from numba import jit 382 | 383 | @jit 384 | def quad(x0, α, n): 385 | x = x0 386 | for i in range(n-1): 387 | x = α * x * (1 - x) 388 | return x 389 | 390 | quad(0.2, 4.0, 10_000_000) 391 | \end{minted} 392 | 393 | \end{frame} 394 | 395 | \begin{frame} 396 | \frametitle{Phase 4: AI-driven scientific computing} 397 | 398 | Core elements 399 | % 400 | \begin{itemize} 401 | \item JIT-compilers 402 | \vspace{0.5em} 403 | \item automatic differentiation 404 | \vspace{0.5em} 405 | \item parallelization (CPUs / GPUs / TPUs) 406 | \end{itemize} 407 | 408 | Key players 409 | % 410 | \begin{itemize} 411 | \item TensorFlow 412 | \vspace{0.5em} 413 | \item PyTorch 414 | \vspace{0.5em} 415 | \item Google JAX 416 | \vspace{0.5em} 417 | \end{itemize} 418 | 419 | \end{frame} 420 | 421 | \begin{frame} 422 | 423 | 424 | AI / machine learning: minimizing differentiable loss functions 425 | 426 | \begin{figure} 427 | \begin{center} 428 | \scalebox{0.5}{\includegraphics[trim={2cm 2cm 2cm 3cm},clip]{loss.pdf}} 429 | \end{center} 430 | \end{figure} 431 | 432 | 433 | \end{frame} 434 | 435 | 436 | \begin{frame} 437 | 438 | Stack Overflow Trends 439 | 440 | \begin{figure} 441 | \begin{center} 442 | \scalebox{0.25}{\includegraphics{pvr.png}} 443 | \end{center} 444 | \end{figure} 445 | 446 | \end{frame} 447 | 448 | \begin{frame} 449 | 450 | But PyTorch / TensorFlow are not general scientific computing environments 451 | 452 | \begin{itemize} 453 | \item specialized to AI / neural nets 454 | \end{itemize} 455 | 456 | \vspace{1em} 457 | 458 | \pause 459 | Instead we will focus on Google JAX 460 | 461 | \begin{itemize} 462 | \item Exposes low level tools 463 | \item MATLAB / NumPy -like interface 464 | \item automatic differentiation 465 | \item JIT compiler with XLA 466 | \item Automatically detects hardware accelerators 467 | \item Same code runs on CPU / GPU / TPU 468 | \end{itemize} 469 | 470 | 471 | \end{frame} 472 | 473 | 474 | \begin{frame} 475 | 476 | Sample code 477 | 478 | \url{https://github.com/QuantEcon/columbia_2023/notebooks} 479 | 480 | \end{frame} 481 | 482 | 483 | \end{document} 484 | 485 | 486 | -------------------------------------------------------------------------------- /slides/main.fdb_latexmk: -------------------------------------------------------------------------------- 1 | # Fdb version 4 2 | ["pdflatex"] 1696851403 "main.tex" "main.pdf" "main" 1696851406 0 3 | "/usr/local/texlive/2023/texmf-dist/fonts/map/fontname/texfonts.map" 1577235249 3524 cb3e574dea2d1052e39280babc910dc8 "" 4 | "/usr/local/texlive/2023/texmf-dist/fonts/tfm/adobe/zapfding/pzdr.tfm" 1136768653 1528 f853c4d1b4e0550255e02831fdc8496f "" 5 | "/usr/local/texlive/2023/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam10.tfm" 1246382020 916 f87d7c45f9c908e672703b83b72241a3 "" 6 | "/usr/local/texlive/2023/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm10.tfm" 1246382020 908 2921f8a10601f252058503cc6570e581 "" 7 | "/usr/local/texlive/2023/texmf-dist/fonts/tfm/public/cm/cmss10.tfm" 1136768653 1316 b636689f1933f24d1294acdf6041daaa "" 8 | "/usr/local/texlive/2023/texmf-dist/fonts/tfm/public/cm/cmss8.tfm" 1136768653 1296 d77f431d10d47c8ea2cc18cf45346274 "" 9 | "/usr/local/texlive/2023/texmf-dist/fonts/tfm/public/mathpazo/zplmr7m.tfm" 1136768653 2080 40a71f65088bdd047622ce295520749e "" 10 | "/usr/local/texlive/2023/texmf-dist/fonts/tfm/public/mathpazo/zplmr7t.tfm" 1136768653 1828 bb8add3bd19426549f9267c88b0cb8bd "" 11 | "/usr/local/texlive/2023/texmf-dist/fonts/tfm/public/mathpazo/zplmr7v.tfm" 1136768653 1012 955c4ca523d7827d33db91a33412b048 "" 12 | "/usr/local/texlive/2023/texmf-dist/fonts/tfm/public/mathpazo/zplmr7y.tfm" 1136768653 1316 b4037e9c09961a72f8476628774e1ec1 "" 13 | "/usr/local/texlive/2023/texmf-dist/fonts/tfm/public/newtx/ntxexa.tfm" 1589834365 760 e8ec875a87aa119f1af7ea4be48da9e8 "" 14 | "/usr/local/texlive/2023/texmf-dist/fonts/tfm/public/newtx/ntxsyc.tfm" 1589834365 1028 2f6cbe812325cff65b38e4c0a517f4cb "" 15 | "/usr/local/texlive/2023/texmf-dist/fonts/tfm/public/newtx/ntxsym.tfm" 1693080977 1560 755acbe6da75f914298c79fa8bb324fd "" 16 | "/usr/local/texlive/2023/texmf-dist/fonts/tfm/public/rsfs/rsfs10.tfm" 1229303445 688 37338d6ab346c2f1466b29e195316aa4 "" 17 | "/usr/local/texlive/2023/texmf-dist/fonts/tfm/public/rsfs/rsfs5.tfm" 1229303445 684 3a51bd4fd9600428d5264cf25f04bb9a "" 18 | "/usr/local/texlive/2023/texmf-dist/fonts/tfm/public/xcharter/zchmia.tfm" 1617383828 2492 615ae54cf421902490cb6b4b54447fa7 "" 19 | "/usr/local/texlive/2023/texmf-dist/tex/generic/atbegshi/atbegshi.sty" 1575674566 24708 5584a51a7101caf7e6bbf1fc27d8f7b1 "" 20 | "/usr/local/texlive/2023/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty" 1576625341 40635 c40361e206be584d448876bba8a64a3b "" 21 | "/usr/local/texlive/2023/texmf-dist/tex/generic/bitset/bitset.sty" 1576016050 33961 6b5c75130e435b2bfdb9f480a09a39f9 "" 22 | "/usr/local/texlive/2023/texmf-dist/tex/generic/catchfile/catchfile.sty" 1576016007 8622 63834878edeb14dd71d58d8f22bc3e06 "" 23 | "/usr/local/texlive/2023/texmf-dist/tex/generic/etexcmds/etexcmds.sty" 1576625273 7734 b98cbb34c81f667027c1e3ebdbfce34b "" 24 | "/usr/local/texlive/2023/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty" 1576625223 8371 9d55b8bd010bc717624922fb3477d92e "" 25 | "/usr/local/texlive/2023/texmf-dist/tex/generic/iftex/ifluatex.sty" 1572645307 492 1994775aa15b0d1289725a0b1bbc2d4c "" 26 | "/usr/local/texlive/2023/texmf-dist/tex/generic/iftex/iftex.sty" 1644112042 7237 bdd120a32c8fdb4b433cf9ca2e7cd98a "" 27 | "/usr/local/texlive/2023/texmf-dist/tex/generic/iftex/ifvtex.sty" 1572645307 1057 525c2192b5febbd8c1f662c9468335bb "" 28 | "/usr/local/texlive/2023/texmf-dist/tex/generic/infwarerr/infwarerr.sty" 1575499628 8356 7bbb2c2373aa810be568c29e333da8ed "" 29 | "/usr/local/texlive/2023/texmf-dist/tex/generic/intcalc/intcalc.sty" 1576625065 31769 002a487f55041f8e805cfbf6385ffd97 "" 30 | "/usr/local/texlive/2023/texmf-dist/tex/generic/kastrup/binhex.tex" 1215376579 2553 4b99aa9667b708dd355926023d705446 "" 31 | "/usr/local/texlive/2023/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty" 1576878844 5412 d5a2436094cd7be85769db90f29250a6 "" 32 | "/usr/local/texlive/2023/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty" 1600895880 17859 4409f8f50cd365c68e684407e5350b1b "" 33 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pdfescape/pdfescape.sty" 1576015897 19007 15924f7228aca6c6d184b115f4baa231 "" 34 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty" 1593379760 20089 80423eac55aa175305d35b49e04fe23b "" 35 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex" 1673816307 1016 1c2b89187d12a2768764b83b4945667c "" 36 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorearrows.code.tex" 1601326656 43820 1fef971b75380574ab35a0d37fd92608 "" 37 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreexternal.code.tex" 1601326656 19324 f4e4c6403dd0f1605fd20ed22fa79dea "" 38 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoregraphicstate.code.tex" 1601326656 6038 ccb406740cc3f03bbfb58ad504fe8c27 "" 39 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreimage.code.tex" 1673816307 6911 f6d4cf5a3fef5cc879d668b810e82868 "" 40 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorelayers.code.tex" 1601326656 4883 42daaf41e27c3735286e23e48d2d7af9 "" 41 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreobjects.code.tex" 1601326656 2544 8c06d2a7f0f469616ac9e13db6d2f842 "" 42 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathconstruct.code.tex" 1601326656 44195 5e390c414de027626ca5e2df888fa68d "" 43 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathprocessing.code.tex" 1601326656 17311 2ef6b2e29e2fc6a2fc8d6d652176e257 "" 44 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathusage.code.tex" 1601326656 21302 788a79944eb22192a4929e46963a3067 "" 45 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepatterns.code.tex" 1673816307 9691 3d42d89522f4650c2f3dc616ca2b925e "" 46 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepoints.code.tex" 1601326656 33335 dd1fa4814d4e51f18be97d88bf0da60c "" 47 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorequick.code.tex" 1601326656 2965 4c2b1f4e0826925746439038172e5d6f "" 48 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorerdf.code.tex" 1601326656 5196 2cc249e0ee7e03da5f5f6589257b1e5b "" 49 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorescopes.code.tex" 1673816307 20821 7579108c1e9363e61a0b1584778804aa "" 50 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreshade.code.tex" 1601326656 35249 abd4adf948f960299a4b3d27c5dddf46 "" 51 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransformations.code.tex" 1673816307 22012 81b34a0aa8fa1a6158cc6220b00e4f10 "" 52 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransparency.code.tex" 1601326656 8893 e851de2175338fdf7c17f3e091d94618 "" 53 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfint.code.tex" 1557692582 3063 8c415c68a0f3394e45cfeca0b65f6ee6 "" 54 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex" 1673816307 949 cea70942e7b7eddabfb3186befada2e6 "" 55 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathcalc.code.tex" 1673816307 13270 2e54f2ce7622437bf37e013d399743e3 "" 56 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfloat.code.tex" 1673816307 104717 9b2393fbf004a0ce7fa688dbce423848 "" 57 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.base.code.tex" 1601326656 10165 cec5fa73d49da442e56efc2d605ef154 "" 58 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.basic.code.tex" 1601326656 28178 41c17713108e0795aac6fef3d275fbca "" 59 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.code.tex" 1673816307 9649 85779d3d8d573bfd2cd4137ba8202e60 "" 60 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.comparison.code.tex" 1601326656 3865 ac538ab80c5cf82b345016e474786549 "" 61 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.integerarithmetics.code.tex" 1557692582 3177 27d85c44fbfe09ff3b2cf2879e3ea434 "" 62 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.misc.code.tex" 1621110968 11024 0179538121bc2dba172013a3ef89519f "" 63 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.random.code.tex" 1673816307 7890 0a86dbf4edfd88d022e0d889ec78cc03 "" 64 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.round.code.tex" 1601326656 3379 781797a101f647bab82741a99944a229 "" 65 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.trigonometric.code.tex" 1601326656 92405 f515f31275db273f97b9d8f52e1b0736 "" 66 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathparser.code.tex" 1673816307 37466 97b0a1ba732e306a1a2034f5a73e239f "" 67 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex" 1601326656 8471 c2883569d03f69e8e1cabfef4999cfd7 "" 68 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/pgf.revision.tex" 1673816307 114 e6d443369d0673933b38834bf99e422d "" 69 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgf.cfg" 1601326656 926 2963ea0dcf6cc6c0a770b69ec46a477b "" 70 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-pdf.def" 1673816307 5542 32f75a31ea6c3a7e1148cd6d5e93dbb7 "" 71 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-dvipdfmx.def" 1673816307 18502 31140cc20a1b5a69491b497afc514e2d "" 72 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-xetex.def" 1601326656 2926 cf943e23420d552258ae428601f26fbf "" 73 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex" 1673816307 61351 bc5f86e0355834391e736e97a61abced "" 74 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol.code.tex" 1601326656 1896 b8e0ca0ac371d74c0ca05583f6313c91 "" 75 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath.code.tex" 1601326656 7778 53c8b5623d80238f6a20aa1df1868e63 "" 76 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex" 1673816307 39784 414c54e866ebab4b801e2ad81d9b21d8 "" 77 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfkeyslibraryfiltered.code.tex" 1673816307 37433 940bc6d409f1ffd298adfdcaf125dd86 "" 78 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex" 1673816307 4385 510565c2f07998c8a0e14f0ec07ff23c "" 79 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfutil-common.tex" 1673816307 29239 22e8c7516012992a49873eff0d868fed "" 80 | "/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfutil-latex.def" 1673816307 6950 8524a062d82b7afdc4a88a57cb377784 "" 81 | "/usr/local/texlive/2023/texmf-dist/tex/generic/stringenc/stringenc.sty" 1575152242 21514 b7557edcee22835ef6b03ede1802dad4 "" 82 | "/usr/local/texlive/2023/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty" 1576624663 7008 f92eaa0a3872ed622bbf538217cd2ab7 "" 83 | "/usr/local/texlive/2023/texmf-dist/tex/generic/xkeyval/xkeyval.tex" 1655411236 19231 27205ee17aaa2902aea3e0c07a3cfc65 "" 84 | "/usr/local/texlive/2023/texmf-dist/tex/generic/xkeyval/xkvutils.tex" 1655411236 7677 9cb1a74d945bc9331f2181c0a59ff34a "" 85 | "/usr/local/texlive/2023/texmf-dist/tex/generic/xstring/xstring.sty" 1544223003 123 a302f2c651a95033260db60e51527ae8 "" 86 | "/usr/local/texlive/2023/texmf-dist/tex/generic/xstring/xstring.tex" 1692744296 49397 a8071cbd06dd0bb15ae8acf876c73f20 "" 87 | "/usr/local/texlive/2023/texmf-dist/tex/latex/amscls/amsthm.sty" 1591045760 12594 0d51ac3a545aaaa555021326ff22a6cc "" 88 | "/usr/local/texlive/2023/texmf-dist/tex/latex/amsfonts/amsfonts.sty" 1359763108 5949 3f3fd50a8cc94c3d4cbf4fc66cd3df1c "" 89 | "/usr/local/texlive/2023/texmf-dist/tex/latex/amsfonts/amssymb.sty" 1359763108 13829 94730e64147574077f8ecfea9bb69af4 "" 90 | "/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsbsy.sty" 1686341992 2222 499d61426192c39efd8f410ee1a52b9c "" 91 | "/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsgen.sty" 1686341992 4173 82ac04dfb1256038fad068287fbb4fe6 "" 92 | "/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsmath.sty" 1686341992 88371 d84032c0f422c3d1e282266c01bef237 "" 93 | "/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsopn.sty" 1686341992 4474 b811654f4bf125f11506d13d13647efb "" 94 | "/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amstext.sty" 1686341992 2444 0d0c1ee65478277e8015d65b86983da2 "" 95 | "/usr/local/texlive/2023/texmf-dist/tex/latex/atveryend/atveryend.sty" 1576191570 19336 ce7ae9438967282886b3b036cfad1e4d "" 96 | "/usr/local/texlive/2023/texmf-dist/tex/latex/auxhook/auxhook.sty" 1576625391 3935 57aa3c3e203a5c2effb4d2bd2efbc323 "" 97 | "/usr/local/texlive/2023/texmf-dist/tex/latex/base/atbegshi-ltx.sty" 1686341992 3045 909ba7bc518ac6e8e7ef69971d52f389 "" 98 | "/usr/local/texlive/2023/texmf-dist/tex/latex/base/atveryend-ltx.sty" 1686341992 2462 91a1cb69153367feea29040eef0c27f4 "" 99 | "/usr/local/texlive/2023/texmf-dist/tex/latex/base/fontenc.sty" 1686341992 5119 50695b8f743569fbac71a83f7ef51fe2 "" 100 | "/usr/local/texlive/2023/texmf-dist/tex/latex/base/ifthen.sty" 1686341992 5319 5435f8f7051e23a851a1c665c5b84e22 "" 101 | "/usr/local/texlive/2023/texmf-dist/tex/latex/base/size11.clo" 1686341992 8464 a4a9a859b7fd5b6c1450673c4d301348 "" 102 | "/usr/local/texlive/2023/texmf-dist/tex/latex/base/textcomp.sty" 1686341992 2894 3ac7bdb70dd9b75530be2ade2842c355 "" 103 | "/usr/local/texlive/2023/texmf-dist/tex/latex/base/ts1cmr.fd" 1686341992 2430 a2e8a746c2c6ddf1df1fb6ad609d5f6a "" 104 | "/usr/local/texlive/2023/texmf-dist/tex/latex/bbm-macros/bbm.sty" 1191314257 1644 1e0d54b051369c3f457872824cac219f "" 105 | "/usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamer.cls" 1684185199 12512 085193f7a3b4bb37bde58fa6f0236878 "" 106 | "/usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbaseauxtemplates.sty" 1684185199 24481 f121c5a5d61a3b6ab11da9bf1be13141 "" 107 | "/usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbaseboxes.sty" 1684185199 7396 80d3572bfd86da4e7ca6f7ebf3fed209 "" 108 | "/usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasecolor.sty" 1684185199 12634 5c4ec0054d05878de4e4b72c05776a46 "" 109 | "/usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasecompatibility.sty" 1684185199 27418 5ae6085eeb4b9cd0a423b50ba357714b "" 110 | "/usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasedecode.sty" 1684185199 9397 90105d8818f445af9ed5a33927eeaf84 "" 111 | "/usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasefont.sty" 1684185199 13682 517e35d1ae73dca4573bfddef896545d "" 112 | "/usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbaseframe.sty" 1684185199 25646 671b837e133f8521567fbc47441eac48 "" 113 | "/usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbaseframecomponents.sty" 1684185199 12206 aaa1c1fe2105b241f2b1edd6ceed6c88 "" 114 | "/usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbaseframesize.sty" 1684185199 9009 1790fd9a2a76a37299c072d09c2f64fc "" 115 | "/usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbaselocalstructure.sty" 1684185199 18104 d7b0524fd9e9862f3312c3d15c2a360f "" 116 | "/usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasemisc.sty" 1684185199 8303 3459317cb46f83a5b3ddc3bb5d011a4a "" 117 | "/usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasemodes.sty" 1684185199 7609 0b04388af1aa13779882a8c01cf3c6da "" 118 | "/usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasenavigation.sty" 1684185199 21614 65147881972be6a96c9060907edb30f0 "" 119 | "/usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasenavigationsymbols.tex" 1684185199 8132 1da9f7f1b3c7fd3e87fd29ce1dd0dcb2 "" 120 | "/usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasenotes.sty" 1684185199 5752 a5f025f24ffdd9f95d9e3a09c33ca8ad "" 121 | "/usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbaseoptions.sty" 1684185199 1743 5acd9fac8c2fc5a96f2f36385ae738b3 "" 122 | "/usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbaseoverlay.sty" 1684185199 28548 e89ba40e00155d658f27963171f4d74a "" 123 | "/usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbaserequires.sty" 1684185199 1583 12314c3bb8ab13b289cdcb9f2bb13580 "" 124 | "/usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasesection.sty" 1684185199 13837 26bb0da682a77f4f2e225b43a7c4fd7a "" 125 | "/usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasetemplates.sty" 1684185199 5743 fc0d51414dd291b72b11cad049170b85 "" 126 | "/usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasethemes.sty" 1684185199 1130 844d3db83413a2cb0d2619d67ae2df4e "" 127 | "/usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasetheorems.sty" 1684185199 4538 8d11421ca99f1b20128ce571cca03a4f "" 128 | "/usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasetitle.sty" 1684185199 5346 4fc5e276ce4a45a8801db1fee8201698 "" 129 | "/usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasetoc.sty" 1684185199 7790 5354ce88c7d0f1ed241d45ebd4324fae "" 130 | "/usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasetranslator.sty" 1684185199 627 47d7193c3a1da10f5aa663a70b6d149b "" 131 | "/usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasetwoscreens.sty" 1684185199 1843 380270b46b44460ad75be867a9c7e92d "" 132 | "/usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbaseverbatim.sty" 1684185199 4016 c25a9e117ac7f79cd712d692979a9ed5 "" 133 | "/usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamercolorthemedefault.sty" 1684185199 7197 dcad03a13e9a779eac60ce8060c9ddeb "" 134 | "/usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerfontthemedefault.sty" 1684185199 4226 4a3a91ecbea18e5e04836d585ff0e257 "" 135 | "/usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamericonarticle.20.pdf" 1513642141 2958 4e0c4a6e994e5c4d9da11c477e927f0f "" 136 | "/usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamericonarticle.pdf" 1513642141 2936 6cc3ef0682cbb62be8aa1b19f0a84ed6 "" 137 | "/usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamericonbook.20.pdf" 1513642141 2734 0bcf939051dd2a936cdfe5982f7c233b "" 138 | "/usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamericonbook.pdf" 1513642141 2667 7624351b441ffe4bd2d14e08fbcf063d "" 139 | "/usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamericononline.20.pdf" 1513642141 24451 195d2c060e84f339954bc6d9b52131d7 "" 140 | "/usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamericononline.pdf" 1513642141 24611 df07010540266b2b205b492a4d02e7e1 "" 141 | "/usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerinnerthemedefault.sty" 1684185199 13709 4f26b352db7b1b043afa94abcb4ed777 "" 142 | "/usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerouterthemedefault.sty" 1684185199 6951 ae119ff98033a98bc82623a402c5be13 "" 143 | "/usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerouterthememiniframes.sty" 1684185199 5093 fe590cf2383bf96be137fae7bf69ab42 "" 144 | "/usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerthemeSingapore.sty" 1684185199 1352 579c06e81187cf96b977a033bf2706a1 "" 145 | "/usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerthemedefault.sty" 1684185199 345 b9f1afd5eccd808064d49a802f119443 "" 146 | "/usr/local/texlive/2023/texmf-dist/tex/latex/epigraph/epigraph.sty" 1578002819 4602 e947be1727d6ac747322008f8359ee17 "" 147 | "/usr/local/texlive/2023/texmf-dist/tex/latex/etoolbox/etoolbox.sty" 1601931149 46845 3b58f70c6e861a13d927bff09d35ecbc "" 148 | "/usr/local/texlive/2023/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty" 1674162139 43712 b5e8951fc13f42e748a253743534321f "" 149 | "/usr/local/texlive/2023/texmf-dist/tex/latex/float/float.sty" 1137110151 6749 16d2656a1984957e674b149555f1ea1d "" 150 | "/usr/local/texlive/2023/texmf-dist/tex/latex/fontspec/fontspec-xetex.sty" 1642282977 162076 2f6d31c4632f2730c57b9c0fda038e15 "" 151 | "/usr/local/texlive/2023/texmf-dist/tex/latex/fontspec/fontspec.cfg" 1532898934 549 c4adac819276241fea8eb79c5ab7b99e "" 152 | "/usr/local/texlive/2023/texmf-dist/tex/latex/fontspec/fontspec.sty" 1642282977 1656 7e824878bad4df5a3e8bba4e463d9126 "" 153 | "/usr/local/texlive/2023/texmf-dist/tex/latex/framed/framed.sty" 1338588508 22449 7ec15c16d0d66790f28e90343c5434a3 "" 154 | "/usr/local/texlive/2023/texmf-dist/tex/latex/fvextra/fvextra.sty" 1669926846 87411 b98a80ab82c91364926f170ef842a8b5 "" 155 | "/usr/local/texlive/2023/texmf-dist/tex/latex/geometry/geometry.sty" 1578002852 41601 9cf6c5257b1bc7af01a58859749dd37a "" 156 | "/usr/local/texlive/2023/texmf-dist/tex/latex/graphics-cfg/color.cfg" 1459978653 1213 620bba36b25224fa9b7e1ccb4ecb76fd "" 157 | "/usr/local/texlive/2023/texmf-dist/tex/latex/graphics-cfg/graphics.cfg" 1465944070 1224 978390e9c2234eab29404bc21b268d1e "" 158 | "/usr/local/texlive/2023/texmf-dist/tex/latex/graphics-def/xetex.def" 1663965824 14788 1dde73f396dd97d88c838bee2a352abe "" 159 | "/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/color.sty" 1654720880 7233 e46ce9241d2b2ca2a78155475fdd557a "" 160 | "/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/dvipsnam.def" 1654720880 5009 d242512eef244b70f2fc3fde14419206 "" 161 | "/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/graphics.sty" 1654720880 18387 8f900a490197ebaf93c02ae9476d4b09 "" 162 | "/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/graphicx.sty" 1654720880 8010 a8d949cbdbc5c983593827c9eec252e1 "" 163 | "/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/keyval.sty" 1654720880 2671 7e67d78d9b88c845599a85b2d41f2e39 "" 164 | "/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/mathcolor.ltx" 1667332637 2885 9c645d672ae17285bba324998918efd8 "" 165 | "/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/trig.sty" 1654720880 4023 293ea1c16429fc0c4cf605f4da1791a9 "" 166 | "/usr/local/texlive/2023/texmf-dist/tex/latex/hycolor/hycolor.sty" 1580250785 17914 4c28a13fc3d975e6e81c9bea1d697276 "" 167 | "/usr/local/texlive/2023/texmf-dist/tex/latex/hyperref/hxetex.def" 1688845681 44513 e9749a69393d1108847da513624144f7 "" 168 | "/usr/local/texlive/2023/texmf-dist/tex/latex/hyperref/hyperref.sty" 1688845681 220504 169e62639b625d84e162873f334fc3b1 "" 169 | "/usr/local/texlive/2023/texmf-dist/tex/latex/hyperref/nameref.sty" 1688845681 13887 0d9aeb0c8de393ccff89a8c740a0ac64 "" 170 | "/usr/local/texlive/2023/texmf-dist/tex/latex/hyperref/pd1enc.def" 1688845681 14247 b5446170da36f22f2489e5f7d943db5c "" 171 | "/usr/local/texlive/2023/texmf-dist/tex/latex/hyperref/puenc.def" 1688845681 117118 5595bc841ebb373d40a4c1ec21cfadda "" 172 | "/usr/local/texlive/2023/texmf-dist/tex/latex/ifplatform/ifplatform.sty" 1507930826 3910 e04f6a6d983bdbdb024917b7ccc80262 "" 173 | "/usr/local/texlive/2023/texmf-dist/tex/latex/jknapltx/mathrsfs.sty" 1137110241 300 12fa6f636b617656f2810ee82cb05015 "" 174 | "/usr/local/texlive/2023/texmf-dist/tex/latex/jknapltx/ursfs.fd" 1137110241 548 cc4e3557704bfed27c7002773fad6c90 "" 175 | "/usr/local/texlive/2023/texmf-dist/tex/latex/koma-script/scrlfile-hook.sty" 1688762466 11185 15c86b5a61db19da88ab941ca5b70a12 "" 176 | "/usr/local/texlive/2023/texmf-dist/tex/latex/koma-script/scrlfile.sty" 1688762466 3328 3d5fc41a419bf18130ce17d90a23c295 "" 177 | "/usr/local/texlive/2023/texmf-dist/tex/latex/koma-script/scrlogo.sty" 1688762466 2162 418e29bcf2b8059e8a9ee1ea4d0d0c87 "" 178 | "/usr/local/texlive/2023/texmf-dist/tex/latex/kvoptions/kvoptions.sty" 1655478651 22555 6d8e155cfef6d82c3d5c742fea7c992e "" 179 | "/usr/local/texlive/2023/texmf-dist/tex/latex/kvsetkeys/kvsetkeys.sty" 1665067230 13815 760b0c02f691ea230f5359c4e1de23a7 "" 180 | "/usr/local/texlive/2023/texmf-dist/tex/latex/l3backend/l3backend-xetex.def" 1681935207 31866 ab7ff58e8b7eb91f5882424abf292263 "" 181 | "/usr/local/texlive/2023/texmf-dist/tex/latex/l3kernel/expl3.sty" 1693351260 6547 93cfd2d5e9d40d6ac03d44dd9b0face0 "" 182 | "/usr/local/texlive/2023/texmf-dist/tex/latex/l3packages/xparse/xparse.sty" 1693773314 9327 42f235aa5042e39fdc94e4fc0343a2fa "" 183 | "/usr/local/texlive/2023/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty" 1575499565 5766 13a9e8766c47f30327caf893ece86ac8 "" 184 | "/usr/local/texlive/2023/texmf-dist/tex/latex/lineno/lineno.sty" 1684613922 154524 d78e0d3f9a3cdfd2cab61cd321c9281c "" 185 | "/usr/local/texlive/2023/texmf-dist/tex/latex/minted/minted.sty" 1694549679 49474 5a754e4ee0a1c1e5787072f2c2cacefc "" 186 | "/usr/local/texlive/2023/texmf-dist/tex/latex/newtx/lmsntxsy.fd" 1634244313 1140 ee5963b0c88b5c4f92fed61a27034b79 "" 187 | "/usr/local/texlive/2023/texmf-dist/tex/latex/newtx/lmxntxexx.fd" 1471383769 549 70a2497c311fc8b19acb02f7607eb4e9 "" 188 | "/usr/local/texlive/2023/texmf-dist/tex/latex/newtx/newtxmath.sty" 1690834229 140351 0102293c46f7eadec64643425873e864 "" 189 | "/usr/local/texlive/2023/texmf-dist/tex/latex/newtx/untxexa.fd" 1376004569 558 91031960917530f42e0f8fc4d1db1550 "" 190 | "/usr/local/texlive/2023/texmf-dist/tex/latex/newtx/untxmia.fd" 1596661975 3832 57dfbcfb6f19c9f63a28ca1bfda0abe2 "" 191 | "/usr/local/texlive/2023/texmf-dist/tex/latex/newtx/untxsyc.fd" 1376004569 558 e8967b9c8273bc0c05b993fe92a9b757 "" 192 | "/usr/local/texlive/2023/texmf-dist/tex/latex/newtx/untxsym.fd" 1692649180 568 9df6be53c1b3ec79740d714ff4ae0937 "" 193 | "/usr/local/texlive/2023/texmf-dist/tex/latex/nextpage/nextpage.sty" 1252088423 1745 04b0f50af5d59a9cf3c17f3f4452ed12 "" 194 | "/usr/local/texlive/2023/texmf-dist/tex/latex/oberdiek/centernot.sty" 1575152444 1640 c9cca60f81c5839b9a3e794d72c0b0a7 "" 195 | "/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty" 1673816307 373 00b204b1d7d095b892ad31a7494b0373 "" 196 | "/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/math/pgfmath.sty" 1601326656 306 c56a323ca5bf9242f54474ced10fca71 "" 197 | "/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty" 1601326656 443 8c872229db56122037e86bcda49e14f3 "" 198 | "/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty" 1601326656 274 5ae372b7df79135d240456a1c6f2cf9a "" 199 | "/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty" 1601326656 325 f9f16d12354225b7dd52a3321f085955 "" 200 | "/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/utilities/xxcolor.sty" 1601326656 2232 b9a67bccba736ed334b4b1a860a85c6f "" 201 | "/usr/local/texlive/2023/texmf-dist/tex/latex/psnfss/mathpazo.sty" 1586716065 8976 3f18c815295e2a2949e87fa743bcb489 "" 202 | "/usr/local/texlive/2023/texmf-dist/tex/latex/psnfss/omlzplm.fd" 1137110629 638 2349dd185efcefd0c3380a2601df0cee "" 203 | "/usr/local/texlive/2023/texmf-dist/tex/latex/psnfss/omszplm.fd" 1137110629 455 c09241d92b40b1b84eb2bb5776606aea "" 204 | "/usr/local/texlive/2023/texmf-dist/tex/latex/psnfss/omxzplm.fd" 1137110629 322 fb88cb3e5f25cf1596ba8826c4210e0e "" 205 | "/usr/local/texlive/2023/texmf-dist/tex/latex/psnfss/ot1zplm.fd" 1137110629 436 5e7baa1a259bab50a2bdffad6426f38c "" 206 | "/usr/local/texlive/2023/texmf-dist/tex/latex/refcount/refcount.sty" 1576624809 9878 9e94e8fa600d95f9c7731bb21dfb67a4 "" 207 | "/usr/local/texlive/2023/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty" 1657483315 9714 ba3194bd52c8499b3f1e3eb91d409670 "" 208 | "/usr/local/texlive/2023/texmf-dist/tex/latex/sansmathaccent/sansmathaccent.sty" 1580595219 4282 5d27280ace1239baaa4a225df16125ff "" 209 | "/usr/local/texlive/2023/texmf-dist/tex/latex/tools/enumerate.sty" 1686341992 3468 a25a09d5c0a232a2d82e47496071c7fa "" 210 | "/usr/local/texlive/2023/texmf-dist/tex/latex/tools/shellesc.sty" 1686341992 4121 54904b35568f3b7e15748a2fa1ae9cb4 "" 211 | "/usr/local/texlive/2023/texmf-dist/tex/latex/translator/translator-basic-dictionary-English.dict" 1596662134 3535 7dc96051305a7e943219126c49c44cd6 "" 212 | "/usr/local/texlive/2023/texmf-dist/tex/latex/translator/translator-bibliography-dictionary-English.dict" 1512078926 903 c6d17f0656e9e1abb172b4faebabd617 "" 213 | "/usr/local/texlive/2023/texmf-dist/tex/latex/translator/translator-environment-dictionary-English.dict" 1512078926 433 bfb8d1c2c020defd2de8e5c276710094 "" 214 | "/usr/local/texlive/2023/texmf-dist/tex/latex/translator/translator-months-dictionary-English.dict" 1512078926 1337 9a6c05e8f0c8b3c5f27cbd0e455cf475 "" 215 | "/usr/local/texlive/2023/texmf-dist/tex/latex/translator/translator-numbers-dictionary-English.dict" 1512078926 1638 2bf1a1dea98f8a4d28033fce76e9cc67 "" 216 | "/usr/local/texlive/2023/texmf-dist/tex/latex/translator/translator-theorem-dictionary-English.dict" 1512078926 3523 1f9d9b91f7d78b73e74c7e97bca30fb0 "" 217 | "/usr/local/texlive/2023/texmf-dist/tex/latex/translator/translator.sty" 1622492733 8765 56d370785f0143111ff9898b5adfe08e "" 218 | "/usr/local/texlive/2023/texmf-dist/tex/latex/upquote/upquote.sty" 1334873510 1048 517e01cde97c1c0baf72e69d43aa5a2e "" 219 | "/usr/local/texlive/2023/texmf-dist/tex/latex/url/url.sty" 1388531844 12796 8edb7d69a20b857904dd0ea757c14ec9 "" 220 | "/usr/local/texlive/2023/texmf-dist/tex/latex/xcharter/XCharter.fontspec" 1498512093 311 cdc5e683a6f6a4f8b3262f7d1d34e5ce "" 221 | "/usr/local/texlive/2023/texmf-dist/tex/latex/xcharter/omlzchmi.fd" 1574460897 1690 d061252d1ccfe089133be996bbcd7cca "" 222 | "/usr/local/texlive/2023/texmf-dist/tex/latex/xcolor/svgnam.def" 1655066402 4704 af34fa7e0b1716f97116d8a28100bb35 "" 223 | "/usr/local/texlive/2023/texmf-dist/tex/latex/xcolor/xcolor.sty" 1655066402 56148 51a9a8571c07b9921892ae11063ae853 "" 224 | "/usr/local/texlive/2023/texmf-dist/tex/latex/xkeyval/xkeyval.sty" 1655411236 4937 4ce600ce9bd4ec84d0250eb6892fcf4f "" 225 | "/usr/local/texlive/2023/texmf-dist/web2c/texmf.cnf" 1681165822 40967 d940221f8762fd5848760382d97d1226 "" 226 | "/usr/local/texlive/2023/texmf-var/web2c/xetex/xelatex.fmt" 1696703058 10810160 fee57fa0fe972f8933c9a806b801bc73 "" 227 | "/usr/local/texlive/2023/texmf.cnf" 1696702946 455 5b996dcaa0eb4ef14a83b026bc0a008c "" 228 | "_minted-main/24656EB0F15DD934B14BA34BCED063D18FFA95A9271F21977E7D1C6AA5E5964D.pygtex" 1696785504 954 919a1e53d7260500e4094271e784f3d9 "" 229 | "_minted-main/7D5A5EBDBD1741443C4AF0F5E2287F7E7EF988268F11F881DC95AE21CB0F31F5.pygtex" 1696785504 672 a83d0b7bbeec61669971ab6acfc1bada "" 230 | "_minted-main/B7D8617027954C0D27714BE332300B29227876C9C340E7E2D80B2238AA86E1B6.pygtex" 1696785504 509 bbdd366299813c74176e5bf6485a474d "" 231 | "_minted-main/D4513B50D233C8C6778A45F5B61E52024281FAF47C70E7389F15E7D045E0286E.pygtex" 1696785504 763 73a6835732a94abe258b9ee56bf9411e "" 232 | "_minted-main/friendly.pygstyle" 1696785504 6450 15d0f047f52a9faa9dee239333417776 "" 233 | "loss.pdf" 1696785196 42397 46328585d803abc82547f1019581f0d8 "" 234 | "main.aux" 1696851406 3455 055f54e0568392032591450d10ac7e42 "pdflatex" 235 | "main.nav" 1696851406 1481 4222fe1a7430dd25c0a6eb791014e529 "pdflatex" 236 | "main.out" 1696851405 0 d41d8cd98f00b204e9800998ecf8427e "pdflatex" 237 | "main.tex" 1696851403 10752 4d36a71ad51a74e615809406c1d23a33 "" 238 | "main.vrb" 1696851405 259 3bb0677f0070a999f6b0258995ee854a "pdflatex" 239 | "matlab.pdf" 1696785196 21051 c3b1c68d996fcc765a085e5460f96951 "" 240 | "numpy.pdf" 1696785196 20997 8f58f5151b710477205a932ffb5885ef "" 241 | "pvr.png" 1696851127 113550 a34fa130f7489975f9aaeb73df172dec "" 242 | (generated) 243 | "main.aux" 244 | "main.log" 245 | "main.nav" 246 | "main.out" 247 | "main.pdf" 248 | "main.snm" 249 | "main.toc" 250 | "main.vrb" 251 | (rewritten before read) 252 | "main.vrb" 253 | -------------------------------------------------------------------------------- /slides/main.fls: -------------------------------------------------------------------------------- 1 | PWD /home/john/gh_synced/quantecon/workshops/columbia_2023/slides 2 | INPUT /usr/local/texlive/2023/texmf.cnf 3 | INPUT /usr/local/texlive/2023/texmf-dist/web2c/texmf.cnf 4 | INPUT /usr/local/texlive/2023/texmf-var/web2c/xetex/xelatex.fmt 5 | INPUT main.tex 6 | OUTPUT main.log 7 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamer.cls 8 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamer.cls 9 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasemodes.sty 10 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasemodes.sty 11 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/etoolbox/etoolbox.sty 12 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/etoolbox/etoolbox.sty 13 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasedecode.sty 14 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasedecode.sty 15 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/iftex/iftex.sty 16 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/iftex/iftex.sty 17 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbaseoptions.sty 18 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbaseoptions.sty 19 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/graphics/keyval.sty 20 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/graphics/keyval.sty 21 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/hyperref/hyperref.sty 22 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/geometry/geometry.sty 23 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/geometry/geometry.sty 24 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/iftex/ifvtex.sty 25 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/iftex/ifvtex.sty 26 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/pgf/math/pgfmath.sty 27 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/pgf/math/pgfmath.sty 28 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty 29 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty 30 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfutil-common.tex 31 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfutil-latex.def 32 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex 33 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex 34 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex 35 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/pgf.revision.tex 36 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/pgf.revision.tex 37 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty 38 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty 39 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex 40 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex 41 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex 42 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfkeyslibraryfiltered.code.tex 43 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex 44 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex 45 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex 46 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex 47 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathparser.code.tex 48 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.code.tex 49 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.basic.code.tex 50 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.trigonometric.code.tex 51 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.random.code.tex 52 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.comparison.code.tex 53 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.base.code.tex 54 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.round.code.tex 55 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.misc.code.tex 56 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.integerarithmetics.code.tex 57 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathcalc.code.tex 58 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfloat.code.tex 59 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/xcolor/xcolor.sty 60 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/base/size11.clo 61 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/base/size11.clo 62 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/base/size11.clo 63 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty 64 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty 65 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/graphics/graphicx.sty 66 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/graphics/graphicx.sty 67 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/graphics/graphics.sty 68 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/graphics/graphics.sty 69 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/graphics/trig.sty 70 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/graphics/trig.sty 71 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/graphics-cfg/graphics.cfg 72 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/graphics-cfg/graphics.cfg 73 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/graphics-cfg/graphics.cfg 74 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/graphics-def/xetex.def 75 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/graphics-def/xetex.def 76 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/graphics-def/xetex.def 77 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty 78 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty 79 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex 80 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex 81 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex 82 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgf.cfg 83 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-xetex.def 84 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-xetex.def 85 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-dvipdfmx.def 86 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-pdf.def 87 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath.code.tex 88 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath.code.tex 89 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath.code.tex 90 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol.code.tex 91 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol.code.tex 92 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol.code.tex 93 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/xcolor/xcolor.sty 94 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/graphics-cfg/color.cfg 95 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/graphics-cfg/color.cfg 96 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/graphics-cfg/color.cfg 97 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/graphics/mathcolor.ltx 98 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/graphics/mathcolor.ltx 99 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/graphics/mathcolor.ltx 100 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/graphics/dvipsnam.def 101 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/graphics/dvipsnam.def 102 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/graphics/dvipsnam.def 103 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/xcolor/svgnam.def 104 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/xcolor/svgnam.def 105 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/xcolor/svgnam.def 106 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex 107 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex 108 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex 109 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfint.code.tex 110 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepoints.code.tex 111 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathconstruct.code.tex 112 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathusage.code.tex 113 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorescopes.code.tex 114 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoregraphicstate.code.tex 115 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransformations.code.tex 116 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorequick.code.tex 117 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreobjects.code.tex 118 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathprocessing.code.tex 119 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorearrows.code.tex 120 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreshade.code.tex 121 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreimage.code.tex 122 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreexternal.code.tex 123 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorelayers.code.tex 124 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransparency.code.tex 125 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepatterns.code.tex 126 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorerdf.code.tex 127 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/pgf/utilities/xxcolor.sty 128 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/pgf/utilities/xxcolor.sty 129 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/atbegshi/atbegshi.sty 130 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/base/atbegshi-ltx.sty 131 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/base/atbegshi-ltx.sty 132 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/hyperref/hyperref.sty 133 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty 134 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty 135 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty 136 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty 137 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/infwarerr/infwarerr.sty 138 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/infwarerr/infwarerr.sty 139 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/kvsetkeys/kvsetkeys.sty 140 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/kvsetkeys/kvsetkeys.sty 141 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty 142 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty 143 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pdfescape/pdfescape.sty 144 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/pdfescape/pdfescape.sty 145 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/hycolor/hycolor.sty 146 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/hycolor/hycolor.sty 147 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty 148 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty 149 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/auxhook/auxhook.sty 150 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/auxhook/auxhook.sty 151 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/hyperref/nameref.sty 152 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/hyperref/nameref.sty 153 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/refcount/refcount.sty 154 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/refcount/refcount.sty 155 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty 156 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty 157 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/kvoptions/kvoptions.sty 158 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/kvoptions/kvoptions.sty 159 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/hyperref/pd1enc.def 160 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/hyperref/pd1enc.def 161 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/hyperref/pd1enc.def 162 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/intcalc/intcalc.sty 163 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/intcalc/intcalc.sty 164 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/hyperref/puenc.def 165 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/hyperref/puenc.def 166 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/hyperref/puenc.def 167 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/url/url.sty 168 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/url/url.sty 169 | INPUT /usr/local/texlive/2023/texmf-dist/fonts/map/fontname/texfonts.map 170 | INPUT /usr/local/texlive/2023/texmf-dist/fonts/tfm/adobe/zapfding/pzdr.tfm 171 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/bitset/bitset.sty 172 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/bitset/bitset.sty 173 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty 174 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty 175 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/hyperref/hxetex.def 176 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/hyperref/hxetex.def 177 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/hyperref/hxetex.def 178 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/stringenc/stringenc.sty 179 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/stringenc/stringenc.sty 180 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty 181 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty 182 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/atveryend/atveryend.sty 183 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/base/atveryend-ltx.sty 184 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/base/atveryend-ltx.sty 185 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty 186 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty 187 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbaserequires.sty 188 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbaserequires.sty 189 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasecompatibility.sty 190 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasecompatibility.sty 191 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasefont.sty 192 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasefont.sty 193 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/amsfonts/amssymb.sty 194 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/amsfonts/amssymb.sty 195 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/amsfonts/amsfonts.sty 196 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/amsfonts/amsfonts.sty 197 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/sansmathaccent/sansmathaccent.sty 198 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/sansmathaccent/sansmathaccent.sty 199 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/sansmathaccent/sansmathaccent.sty 200 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/koma-script/scrlfile.sty 201 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/koma-script/scrlfile.sty 202 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/koma-script/scrlfile.sty 203 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/koma-script/scrlfile-hook.sty 204 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/koma-script/scrlfile-hook.sty 205 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/koma-script/scrlogo.sty 206 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/koma-script/scrlogo.sty 207 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasetranslator.sty 208 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasetranslator.sty 209 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/translator/translator.sty 210 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/translator/translator.sty 211 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasemisc.sty 212 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasemisc.sty 213 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasetwoscreens.sty 214 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasetwoscreens.sty 215 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbaseoverlay.sty 216 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbaseoverlay.sty 217 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasetitle.sty 218 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasetitle.sty 219 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasesection.sty 220 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasesection.sty 221 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbaseframe.sty 222 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbaseframe.sty 223 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbaseverbatim.sty 224 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbaseverbatim.sty 225 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbaseframesize.sty 226 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbaseframesize.sty 227 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbaseframecomponents.sty 228 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbaseframecomponents.sty 229 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasecolor.sty 230 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasecolor.sty 231 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasenotes.sty 232 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasenotes.sty 233 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasetoc.sty 234 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasetoc.sty 235 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasetemplates.sty 236 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasetemplates.sty 237 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbaseauxtemplates.sty 238 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbaseauxtemplates.sty 239 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbaseboxes.sty 240 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbaseboxes.sty 241 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbaselocalstructure.sty 242 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbaselocalstructure.sty 243 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/tools/enumerate.sty 244 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/tools/enumerate.sty 245 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasenavigation.sty 246 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasenavigation.sty 247 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasenavigationsymbols.tex 248 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasenavigationsymbols.tex 249 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasenavigationsymbols.tex 250 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasenavigationsymbols.tex 251 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasenavigationsymbols.tex 252 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasetheorems.sty 253 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasetheorems.sty 254 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsmath.sty 255 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsmath.sty 256 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsopn.sty 257 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amstext.sty 258 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amstext.sty 259 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsgen.sty 260 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsgen.sty 261 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsbsy.sty 262 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsbsy.sty 263 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsopn.sty 264 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/amscls/amsthm.sty 265 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/amscls/amsthm.sty 266 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasethemes.sty 267 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerbasethemes.sty 268 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerthemedefault.sty 269 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerthemedefault.sty 270 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerfontthemedefault.sty 271 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerfontthemedefault.sty 272 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamercolorthemedefault.sty 273 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamercolorthemedefault.sty 274 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerinnerthemedefault.sty 275 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerinnerthemedefault.sty 276 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamericonbook.pdf 277 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamericonbook.20.pdf 278 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamericonarticle.pdf 279 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamericonarticle.20.pdf 280 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamericononline.pdf 281 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamericononline.20.pdf 282 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerouterthemedefault.sty 283 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerouterthemedefault.sty 284 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerthemeSingapore.sty 285 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerthemeSingapore.sty 286 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerouterthememiniframes.sty 287 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/beamer/beamerouterthememiniframes.sty 288 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/fontspec/fontspec.sty 289 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/fontspec/fontspec.sty 290 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/l3packages/xparse/xparse.sty 291 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/l3packages/xparse/xparse.sty 292 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/l3kernel/expl3.sty 293 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/l3kernel/expl3.sty 294 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/l3backend/l3backend-xetex.def 295 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/l3backend/l3backend-xetex.def 296 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/fontspec/fontspec-xetex.sty 297 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/fontspec/fontspec-xetex.sty 298 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/base/fontenc.sty 299 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/base/fontenc.sty 300 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/fontspec/fontspec.cfg 301 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/fontspec/fontspec.cfg 302 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/fontspec/fontspec.cfg 303 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/newtx/newtxmath.sty 304 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/newtx/newtxmath.sty 305 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/base/ifthen.sty 306 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/base/ifthen.sty 307 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/xkeyval/xkeyval.sty 308 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/xkeyval/xkeyval.sty 309 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/xkeyval/xkeyval.tex 310 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/xkeyval/xkvutils.tex 311 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/oberdiek/centernot.sty 312 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/oberdiek/centernot.sty 313 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/kastrup/binhex.tex 314 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/kastrup/binhex.tex 315 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/kastrup/binhex.tex 316 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/kastrup/binhex.tex 317 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/kastrup/binhex.tex 318 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/xcharter/XCharter.fontspec 319 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/xcharter/XCharter.fontspec 320 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/bbm-macros/bbm.sty 321 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/bbm-macros/bbm.sty 322 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/jknapltx/mathrsfs.sty 323 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/jknapltx/mathrsfs.sty 324 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty 325 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty 326 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/epigraph/epigraph.sty 327 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/epigraph/epigraph.sty 328 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/nextpage/nextpage.sty 329 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/nextpage/nextpage.sty 330 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/psnfss/mathpazo.sty 331 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/psnfss/mathpazo.sty 332 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/minted/minted.sty 333 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/minted/minted.sty 334 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/fvextra/fvextra.sty 335 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/fvextra/fvextra.sty 336 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/upquote/upquote.sty 337 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/upquote/upquote.sty 338 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/base/textcomp.sty 339 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/base/textcomp.sty 340 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/lineno/lineno.sty 341 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/lineno/lineno.sty 342 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/tools/shellesc.sty 343 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/tools/shellesc.sty 344 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/tools/shellesc.sty 345 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/ifplatform/ifplatform.sty 346 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/ifplatform/ifplatform.sty 347 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/catchfile/catchfile.sty 348 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/catchfile/catchfile.sty 349 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/etexcmds/etexcmds.sty 350 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/etexcmds/etexcmds.sty 351 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/iftex/ifluatex.sty 352 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/iftex/ifluatex.sty 353 | INPUT ./main.w18 354 | INPUT ./main.w18 355 | INPUT main.w18 356 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/xstring/xstring.sty 357 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/xstring/xstring.sty 358 | INPUT /usr/local/texlive/2023/texmf-dist/tex/generic/xstring/xstring.tex 359 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/framed/framed.sty 360 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/framed/framed.sty 361 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/float/float.sty 362 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/float/float.sty 363 | INPUT ./main.aex 364 | INPUT ./main.aex 365 | INPUT ./main.aux 366 | INPUT ./main.aux 367 | INPUT main.aux 368 | OUTPUT main.aux 369 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/xcharter/omlzchmi.fd 370 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/xcharter/omlzchmi.fd 371 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/xcharter/omlzchmi.fd 372 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/base/ts1cmr.fd 373 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/base/ts1cmr.fd 374 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/base/ts1cmr.fd 375 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/newtx/untxexa.fd 376 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/newtx/untxexa.fd 377 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/newtx/untxexa.fd 378 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/newtx/lmsntxsy.fd 379 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/newtx/lmsntxsy.fd 380 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/newtx/lmsntxsy.fd 381 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/newtx/lmxntxexx.fd 382 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/newtx/lmxntxexx.fd 383 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/newtx/lmxntxexx.fd 384 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/graphics/color.sty 385 | INPUT ./main.out 386 | INPUT ./main.out 387 | INPUT main.out 388 | INPUT main.out 389 | INPUT ./main.out 390 | INPUT ./main.out 391 | OUTPUT main.out 392 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/translator/translator-basic-dictionary-English.dict 393 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/translator/translator-basic-dictionary-English.dict 394 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/translator/translator-basic-dictionary-English.dict 395 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/translator/translator-bibliography-dictionary-English.dict 396 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/translator/translator-bibliography-dictionary-English.dict 397 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/translator/translator-bibliography-dictionary-English.dict 398 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/translator/translator-environment-dictionary-English.dict 399 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/translator/translator-environment-dictionary-English.dict 400 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/translator/translator-environment-dictionary-English.dict 401 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/translator/translator-months-dictionary-English.dict 402 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/translator/translator-months-dictionary-English.dict 403 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/translator/translator-months-dictionary-English.dict 404 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/translator/translator-numbers-dictionary-English.dict 405 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/translator/translator-numbers-dictionary-English.dict 406 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/translator/translator-numbers-dictionary-English.dict 407 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/translator/translator-theorem-dictionary-English.dict 408 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/translator/translator-theorem-dictionary-English.dict 409 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/translator/translator-theorem-dictionary-English.dict 410 | INPUT ./main.nav 411 | INPUT ./main.nav 412 | INPUT main.nav 413 | OUTPUT main.vrb 414 | INPUT ./main.vrb 415 | INPUT ./main.vrb 416 | INPUT main.vrb 417 | OUTPUT main.pyg 418 | INPUT ./_minted-main/friendly.pygstyle 419 | INPUT ./_minted-main/friendly.pygstyle 420 | INPUT _minted-main/friendly.pygstyle 421 | INPUT ./main.pyg 422 | INPUT ./_minted-main/7D5A5EBDBD1741443C4AF0F5E2287F7E7EF988268F11F881DC95AE21CB0F31F5.pygtex 423 | INPUT ./_minted-main/7D5A5EBDBD1741443C4AF0F5E2287F7E7EF988268F11F881DC95AE21CB0F31F5.pygtex 424 | INPUT _minted-main/7D5A5EBDBD1741443C4AF0F5E2287F7E7EF988268F11F881DC95AE21CB0F31F5.pygtex 425 | OUTPUT main.pyg 426 | INPUT ./main.pyg 427 | INPUT ./_minted-main/B7D8617027954C0D27714BE332300B29227876C9C340E7E2D80B2238AA86E1B6.pygtex 428 | INPUT ./_minted-main/B7D8617027954C0D27714BE332300B29227876C9C340E7E2D80B2238AA86E1B6.pygtex 429 | INPUT _minted-main/B7D8617027954C0D27714BE332300B29227876C9C340E7E2D80B2238AA86E1B6.pygtex 430 | INPUT /usr/local/texlive/2023/texmf-dist/fonts/tfm/public/cm/cmss10.tfm 431 | INPUT /usr/local/texlive/2023/texmf-dist/fonts/tfm/public/cm/cmss8.tfm 432 | INPUT /usr/local/texlive/2023/texmf-dist/fonts/tfm/public/cm/cmss8.tfm 433 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/psnfss/omlzplm.fd 434 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/psnfss/omlzplm.fd 435 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/psnfss/omlzplm.fd 436 | INPUT /usr/local/texlive/2023/texmf-dist/fonts/tfm/public/mathpazo/zplmr7m.tfm 437 | INPUT /usr/local/texlive/2023/texmf-dist/fonts/tfm/public/mathpazo/zplmr7m.tfm 438 | INPUT /usr/local/texlive/2023/texmf-dist/fonts/tfm/public/mathpazo/zplmr7m.tfm 439 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/psnfss/omszplm.fd 440 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/psnfss/omszplm.fd 441 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/psnfss/omszplm.fd 442 | INPUT /usr/local/texlive/2023/texmf-dist/fonts/tfm/public/mathpazo/zplmr7y.tfm 443 | INPUT /usr/local/texlive/2023/texmf-dist/fonts/tfm/public/mathpazo/zplmr7y.tfm 444 | INPUT /usr/local/texlive/2023/texmf-dist/fonts/tfm/public/mathpazo/zplmr7y.tfm 445 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/psnfss/omxzplm.fd 446 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/psnfss/omxzplm.fd 447 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/psnfss/omxzplm.fd 448 | INPUT /usr/local/texlive/2023/texmf-dist/fonts/tfm/public/mathpazo/zplmr7v.tfm 449 | INPUT /usr/local/texlive/2023/texmf-dist/fonts/tfm/public/mathpazo/zplmr7v.tfm 450 | INPUT /usr/local/texlive/2023/texmf-dist/fonts/tfm/public/mathpazo/zplmr7v.tfm 451 | INPUT /usr/local/texlive/2023/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam10.tfm 452 | INPUT /usr/local/texlive/2023/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam10.tfm 453 | INPUT /usr/local/texlive/2023/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam10.tfm 454 | INPUT /usr/local/texlive/2023/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm10.tfm 455 | INPUT /usr/local/texlive/2023/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm10.tfm 456 | INPUT /usr/local/texlive/2023/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm10.tfm 457 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/newtx/untxmia.fd 458 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/newtx/untxmia.fd 459 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/newtx/untxmia.fd 460 | INPUT /usr/local/texlive/2023/texmf-dist/fonts/tfm/public/xcharter/zchmia.tfm 461 | INPUT /usr/local/texlive/2023/texmf-dist/fonts/tfm/public/xcharter/zchmia.tfm 462 | INPUT /usr/local/texlive/2023/texmf-dist/fonts/tfm/public/xcharter/zchmia.tfm 463 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/newtx/untxsym.fd 464 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/newtx/untxsym.fd 465 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/newtx/untxsym.fd 466 | INPUT /usr/local/texlive/2023/texmf-dist/fonts/tfm/public/newtx/ntxsym.tfm 467 | INPUT /usr/local/texlive/2023/texmf-dist/fonts/tfm/public/newtx/ntxsym.tfm 468 | INPUT /usr/local/texlive/2023/texmf-dist/fonts/tfm/public/newtx/ntxsym.tfm 469 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/newtx/untxsyc.fd 470 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/newtx/untxsyc.fd 471 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/newtx/untxsyc.fd 472 | INPUT /usr/local/texlive/2023/texmf-dist/fonts/tfm/public/newtx/ntxsyc.tfm 473 | INPUT /usr/local/texlive/2023/texmf-dist/fonts/tfm/public/newtx/ntxsyc.tfm 474 | INPUT /usr/local/texlive/2023/texmf-dist/fonts/tfm/public/newtx/ntxsyc.tfm 475 | INPUT /usr/local/texlive/2023/texmf-dist/fonts/tfm/public/newtx/ntxexa.tfm 476 | INPUT /usr/local/texlive/2023/texmf-dist/fonts/tfm/public/newtx/ntxexa.tfm 477 | INPUT /usr/local/texlive/2023/texmf-dist/fonts/tfm/public/newtx/ntxexa.tfm 478 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/jknapltx/ursfs.fd 479 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/jknapltx/ursfs.fd 480 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/jknapltx/ursfs.fd 481 | INPUT /usr/local/texlive/2023/texmf-dist/fonts/tfm/public/rsfs/rsfs10.tfm 482 | INPUT /usr/local/texlive/2023/texmf-dist/fonts/tfm/public/rsfs/rsfs10.tfm 483 | INPUT /usr/local/texlive/2023/texmf-dist/fonts/tfm/public/rsfs/rsfs5.tfm 484 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/psnfss/ot1zplm.fd 485 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/psnfss/ot1zplm.fd 486 | INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/psnfss/ot1zplm.fd 487 | INPUT /usr/local/texlive/2023/texmf-dist/fonts/tfm/public/mathpazo/zplmr7t.tfm 488 | INPUT /usr/local/texlive/2023/texmf-dist/fonts/tfm/public/mathpazo/zplmr7t.tfm 489 | INPUT /usr/local/texlive/2023/texmf-dist/fonts/tfm/public/mathpazo/zplmr7t.tfm 490 | INPUT ./matlab.pdf 491 | INPUT ./matlab.pdf 492 | INPUT ./matlab.pdf 493 | INPUT ./numpy.pdf 494 | INPUT ./numpy.pdf 495 | INPUT ./numpy.pdf 496 | OUTPUT main.vrb 497 | INPUT ./main.vrb 498 | INPUT ./main.vrb 499 | INPUT main.vrb 500 | OUTPUT main.pyg 501 | INPUT ./main.pyg 502 | INPUT ./_minted-main/24656EB0F15DD934B14BA34BCED063D18FFA95A9271F21977E7D1C6AA5E5964D.pygtex 503 | INPUT ./_minted-main/24656EB0F15DD934B14BA34BCED063D18FFA95A9271F21977E7D1C6AA5E5964D.pygtex 504 | INPUT _minted-main/24656EB0F15DD934B14BA34BCED063D18FFA95A9271F21977E7D1C6AA5E5964D.pygtex 505 | OUTPUT main.vrb 506 | INPUT ./main.vrb 507 | INPUT ./main.vrb 508 | INPUT main.vrb 509 | OUTPUT main.pyg 510 | INPUT ./main.pyg 511 | INPUT ./_minted-main/D4513B50D233C8C6778A45F5B61E52024281FAF47C70E7389F15E7D045E0286E.pygtex 512 | INPUT ./_minted-main/D4513B50D233C8C6778A45F5B61E52024281FAF47C70E7389F15E7D045E0286E.pygtex 513 | INPUT _minted-main/D4513B50D233C8C6778A45F5B61E52024281FAF47C70E7389F15E7D045E0286E.pygtex 514 | INPUT ./loss.pdf 515 | INPUT ./loss.pdf 516 | INPUT ./loss.pdf 517 | INPUT ./pvr.png 518 | INPUT ./pvr.png 519 | INPUT ./pvr.png 520 | OUTPUT main.nav 521 | OUTPUT main.toc 522 | OUTPUT main.snm 523 | INPUT main.aux 524 | INPUT ./main.out 525 | INPUT ./main.out 526 | INPUT ./main.pyg 527 | INPUT ./main.pyg 528 | -------------------------------------------------------------------------------- /notebooks/numba_fortran_horse_race.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "c2bc1d53", 6 | "metadata": {}, 7 | "source": [ 8 | "\n", 9 | "\n", 10 | "
\n", 11 | " \n", 12 | " \"QuantEcon\"\n", 13 | " \n", 14 | "
" 15 | ] 16 | }, 17 | { 18 | "cell_type": "markdown", 19 | "id": "acc996bf", 20 | "metadata": {}, 21 | "source": [ 22 | "# Horse Race: Fortran vs Python\n", 23 | "\n", 24 | "* **John Stachurski** \n", 25 | "* October 2023\n", 26 | "\n", 27 | "This notebook runs some simple single-thread speed comparisons for Python and FORTRAN.\n", 28 | "\n", 29 | "These comparisons should be viewed as the basis of a conversation, not a serious scientific study.\n", 30 | "\n", 31 | "The main messages are that \n", 32 | "\n", 33 | "1. all can be fast and \n", 34 | "2. for complex tasks, the ecosystem matters." 35 | ] 36 | }, 37 | { 38 | "cell_type": "code", 39 | "execution_count": 1, 40 | "id": "d5c4c0ff", 41 | "metadata": {}, 42 | "outputs": [], 43 | "source": [ 44 | "import numpy as np\n", 45 | "import matplotlib.pyplot as plt\n", 46 | "from numba import jit, njit" 47 | ] 48 | }, 49 | { 50 | "cell_type": "markdown", 51 | "id": "10d476e0", 52 | "metadata": {}, 53 | "source": [ 54 | "## Problem Statement\n", 55 | "\n", 56 | "Consider the time series model\n", 57 | "\n", 58 | "$$ x_{t+1} = \\alpha x_t (1 - x_t) $$\n", 59 | "\n", 60 | "\n", 61 | "Our aim is to generate time series from this model and analyze them.\n", 62 | "\n", 63 | "Throughout we set $\\alpha = 4$" 64 | ] 65 | }, 66 | { 67 | "cell_type": "code", 68 | "execution_count": 2, 69 | "id": "abea6d2a", 70 | "metadata": {}, 71 | "outputs": [], 72 | "source": [ 73 | "α = 4" 74 | ] 75 | }, 76 | { 77 | "cell_type": "markdown", 78 | "id": "a4f81b0b", 79 | "metadata": {}, 80 | "source": [ 81 | "Here's a typical time series:" 82 | ] 83 | }, 84 | { 85 | "cell_type": "code", 86 | "execution_count": 3, 87 | "id": "99bbb829", 88 | "metadata": {}, 89 | "outputs": [ 90 | { 91 | "data": { 92 | "image/png": "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\n", 93 | "text/plain": [ 94 | "
" 95 | ] 96 | }, 97 | "metadata": {}, 98 | "output_type": "display_data" 99 | } 100 | ], 101 | "source": [ 102 | "n = 200\n", 103 | "x = np.empty(n)\n", 104 | "x[0] = 0.2\n", 105 | "for t in range(n-1):\n", 106 | " x[t+1] = α * x[t] * (1 - x[t])\n", 107 | " \n", 108 | "plt.plot(x)\n", 109 | "plt.show()" 110 | ] 111 | }, 112 | { 113 | "cell_type": "markdown", 114 | "id": "56cb2381", 115 | "metadata": {}, 116 | "source": [ 117 | "## Pure Python --- Interpreted language speed test" 118 | ] 119 | }, 120 | { 121 | "cell_type": "markdown", 122 | "id": "87fefa73", 123 | "metadata": {}, 124 | "source": [ 125 | "Here's a function that iterates forward `n` times, starting from `x0`, and\n", 126 | "returns **the final** value:" 127 | ] 128 | }, 129 | { 130 | "cell_type": "code", 131 | "execution_count": 4, 132 | "id": "d643f659", 133 | "metadata": {}, 134 | "outputs": [], 135 | "source": [ 136 | "def quad(x0, n=10_000_000, α=4.0):\n", 137 | " x = x0\n", 138 | " for i in range(n):\n", 139 | " x = α * x * (1 - x)\n", 140 | " return x" 141 | ] 142 | }, 143 | { 144 | "cell_type": "markdown", 145 | "id": "39898bf7", 146 | "metadata": {}, 147 | "source": [ 148 | "Let's see how fast this runs:" 149 | ] 150 | }, 151 | { 152 | "cell_type": "code", 153 | "execution_count": 5, 154 | "id": "d51e8522", 155 | "metadata": {}, 156 | "outputs": [ 157 | { 158 | "name": "stdout", 159 | "output_type": "stream", 160 | "text": [ 161 | "CPU times: user 482 ms, sys: 3.68 ms, total: 485 ms\n", 162 | "Wall time: 485 ms\n" 163 | ] 164 | } 165 | ], 166 | "source": [ 167 | "%%time\n", 168 | "x = quad(0.2)" 169 | ] 170 | }, 171 | { 172 | "cell_type": "markdown", 173 | "id": "b70f5141", 174 | "metadata": {}, 175 | "source": [ 176 | "## Fortran Test" 177 | ] 178 | }, 179 | { 180 | "cell_type": "markdown", 181 | "id": "cc13bce3", 182 | "metadata": {}, 183 | "source": [ 184 | "Now let's try this in Fortran.\n", 185 | "\n", 186 | "Note --- this step is intended to be a demo and will only execute if\n", 187 | "\n", 188 | "* you have a Fortran compiler installed (on Ubuntu, sudo apt install gfortran) and \n", 189 | "* the compilation code below is modified to match your compiler " 190 | ] 191 | }, 192 | { 193 | "cell_type": "code", 194 | "execution_count": 6, 195 | "id": "9b125605", 196 | "metadata": {}, 197 | "outputs": [ 198 | { 199 | "name": "stdout", 200 | "output_type": "stream", 201 | "text": [ 202 | "Writing fortran_quad.f90\n" 203 | ] 204 | } 205 | ], 206 | "source": [ 207 | "%%file fortran_quad.f90\n", 208 | "\n", 209 | "PURE FUNCTION QUAD(X0, N)\n", 210 | " IMPLICIT NONE\n", 211 | " INTEGER, PARAMETER :: DP=KIND(0.d0) \n", 212 | " REAL(dp), INTENT(IN) :: X0\n", 213 | " REAL(dp) :: QUAD\n", 214 | " INTEGER :: I\n", 215 | " INTEGER, INTENT(IN) :: N\n", 216 | " QUAD = X0\n", 217 | " DO I = 1, N - 1 \n", 218 | " QUAD = 4.0_dp * QUAD * real(1.0_dp - QUAD, dp)\n", 219 | " END DO\n", 220 | " RETURN\n", 221 | "END FUNCTION QUAD\n", 222 | "\n", 223 | "PROGRAM MAIN\n", 224 | " IMPLICIT NONE\n", 225 | " INTEGER, PARAMETER :: DP=KIND(0.d0) \n", 226 | " REAL(dp) :: START, FINISH, X, QUAD\n", 227 | " INTEGER :: N\n", 228 | " N = 10000000\n", 229 | " X = QUAD(0.2_dp, 10)\n", 230 | " CALL CPU_TIME(START)\n", 231 | " X = QUAD(0.2_dp, N)\n", 232 | " CALL CPU_TIME(FINISH)\n", 233 | " PRINT *,'last val = ', X\n", 234 | " PRINT *,'Elapsed time in milliseconds = ', (FINISH-START) * 1000\n", 235 | "END PROGRAM MAIN" 236 | ] 237 | }, 238 | { 239 | "cell_type": "code", 240 | "execution_count": 7, 241 | "id": "7ebe3a91", 242 | "metadata": {}, 243 | "outputs": [], 244 | "source": [ 245 | "!gfortran -O3 fortran_quad.f90" 246 | ] 247 | }, 248 | { 249 | "cell_type": "code", 250 | "execution_count": 8, 251 | "id": "8e029a34", 252 | "metadata": {}, 253 | "outputs": [ 254 | { 255 | "name": "stdout", 256 | "output_type": "stream", 257 | "text": [ 258 | " last val = 0.46200166384322749 \r\n", 259 | " Elapsed time in milliseconds = 19.635999999999999 \r\n" 260 | ] 261 | } 262 | ], 263 | "source": [ 264 | "!./a.out" 265 | ] 266 | }, 267 | { 268 | "cell_type": "markdown", 269 | "id": "2f989593", 270 | "metadata": {}, 271 | "source": [ 272 | "Tidy up" 273 | ] 274 | }, 275 | { 276 | "cell_type": "code", 277 | "execution_count": 9, 278 | "id": "3a26a229", 279 | "metadata": {}, 280 | "outputs": [], 281 | "source": [ 282 | "!rm a.out\n", 283 | "!rm fortran_quad.f90" 284 | ] 285 | }, 286 | { 287 | "cell_type": "markdown", 288 | "id": "54930bbf", 289 | "metadata": {}, 290 | "source": [ 291 | "## Python + Numba Test\n", 292 | "\n", 293 | "\n", 294 | "Now let's replicate the calculations using Numba's JIT compiler.\n", 295 | "\n", 296 | "Here's the Python function we want to speed up" 297 | ] 298 | }, 299 | { 300 | "cell_type": "code", 301 | "execution_count": 10, 302 | "id": "d931ba8d", 303 | "metadata": {}, 304 | "outputs": [], 305 | "source": [ 306 | "@njit\n", 307 | "def quad(x0, n=10_000_000, α=4.0):\n", 308 | " x = x0\n", 309 | " for i in range(n):\n", 310 | " x = α * x * (1 - x)\n", 311 | " return x" 312 | ] 313 | }, 314 | { 315 | "cell_type": "markdown", 316 | "id": "0cc113d5", 317 | "metadata": {}, 318 | "source": [ 319 | "This is the same as before except that we've targeted the function for JIT\n", 320 | "compilation with `@numba.jit`.\n", 321 | "\n", 322 | "Let's see how fast it runs." 323 | ] 324 | }, 325 | { 326 | "cell_type": "code", 327 | "execution_count": 11, 328 | "id": "8ccfb445", 329 | "metadata": {}, 330 | "outputs": [ 331 | { 332 | "name": "stdout", 333 | "output_type": "stream", 334 | "text": [ 335 | "CPU times: user 157 ms, sys: 24 ms, total: 181 ms\n", 336 | "Wall time: 180 ms\n" 337 | ] 338 | } 339 | ], 340 | "source": [ 341 | "%%time\n", 342 | "x = quad(0.2)" 343 | ] 344 | }, 345 | { 346 | "cell_type": "code", 347 | "execution_count": 12, 348 | "id": "8d603794", 349 | "metadata": {}, 350 | "outputs": [ 351 | { 352 | "name": "stdout", 353 | "output_type": "stream", 354 | "text": [ 355 | "16.3 ms ± 161 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n" 356 | ] 357 | } 358 | ], 359 | "source": [ 360 | "%%timeit\n", 361 | "x = quad(0.2)" 362 | ] 363 | }, 364 | { 365 | "cell_type": "code", 366 | "execution_count": null, 367 | "id": "2d1e5e51", 368 | "metadata": {}, 369 | "outputs": [], 370 | "source": [] 371 | } 372 | ], 373 | "metadata": { 374 | "kernelspec": { 375 | "display_name": "Python 3 (ipykernel)", 376 | "language": "python", 377 | "name": "python3" 378 | }, 379 | "language_info": { 380 | "codemirror_mode": { 381 | "name": "ipython", 382 | "version": 3 383 | }, 384 | "file_extension": ".py", 385 | "mimetype": "text/x-python", 386 | "name": "python", 387 | "nbconvert_exporter": "python", 388 | "pygments_lexer": "ipython3", 389 | "version": "3.10.9" 390 | } 391 | }, 392 | "nbformat": 4, 393 | "nbformat_minor": 5 394 | } 395 | --------------------------------------------------------------------------------