├── .gitignore ├── LICENSE ├── NOTES.md ├── README.md ├── applications ├── Applications -- Numerical Quadrature.ipynb └── n-pendulum-control.ipynb ├── imgs ├── Mathematica-ring-a.png └── comic2-1040.png ├── slides ├── .gitattributes ├── .gitignore ├── Makefile ├── authors.py ├── authors.tex ├── beamercolorthemechameleon.sty ├── beamerinnerthemefancy.sty ├── beamerouterthemedecolines.sty ├── beamerthemeTorino.sty ├── commit plots.ipynb ├── commits-all.pdf ├── commits1.pdf ├── commits2.pdf ├── django-all.txt ├── django-year.txt ├── intro.tex ├── ipython-all.txt ├── ipython-year.txt ├── linux-all.txt ├── linux-year.txt ├── matplotlib-all.txt ├── matplotlib-year.txt ├── numpy-all.txt ├── numpy-year.txt ├── pandas-all.txt ├── pandas-year.txt ├── scipy-all.txt ├── scipy-year.txt ├── sklearn-all.txt ├── sklearn-year.txt ├── sympy-250px.pdf ├── sympy-all.txt └── sympy-year.txt ├── tutorial_exercises.zip ├── tutorial_exercises ├── 01-Symbols-Derivatives-Functions.ipynb ├── 02-Solveset-Subs-Plot.ipynb ├── 03-Integrals.ipynb ├── 04-Matrices.ipynb ├── 05-Numeric-Evaluation.ipynb ├── Advanced - Special Series Solutions.ipynb ├── Advanced - Special Series.ipynb ├── Advanced-Basic Operations Solutions.ipynb ├── Advanced-Basic Operations.ipynb ├── Advanced-Calculus Solutions.ipynb ├── Advanced-Calculus.ipynb ├── Advanced-Expression Manipulation Solutions.ipynb ├── Advanced-Expression Manipulation.ipynb ├── Advanced-Gotchas Solutions.ipynb ├── Advanced-Gotchas.ipynb ├── Advanced-Matrices Solutions.ipynb ├── Advanced-Matrices.ipynb ├── Advanced-Simplification Solutions.ipynb ├── Advanced-Simplification.ipynb ├── Advanced-Solvers Solutions.ipynb ├── Advanced-Solvers.ipynb ├── Gotchas.ipynb ├── code-generation.ipynb └── examples-stats.ipynb └── user_test.py /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | env/ 12 | build/ 13 | develop-eggs/ 14 | dist/ 15 | downloads/ 16 | eggs/ 17 | .eggs/ 18 | lib/ 19 | lib64/ 20 | parts/ 21 | sdist/ 22 | var/ 23 | *.egg-info/ 24 | .installed.cfg 25 | *.egg 26 | 27 | # PyInstaller 28 | # Usually these files are written by a python script from a template 29 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 30 | *.manifest 31 | *.spec 32 | 33 | # Installer logs 34 | pip-log.txt 35 | pip-delete-this-directory.txt 36 | 37 | # Unit test / coverage reports 38 | htmlcov/ 39 | .tox/ 40 | .coverage 41 | .coverage.* 42 | .cache 43 | nosetests.xml 44 | coverage.xml 45 | *,cover 46 | .hypothesis/ 47 | 48 | # Translations 49 | *.mo 50 | *.pot 51 | 52 | # Django stuff: 53 | *.log 54 | local_settings.py 55 | 56 | # Flask stuff: 57 | instance/ 58 | .webassets-cache 59 | 60 | # Scrapy stuff: 61 | .scrapy 62 | 63 | # Sphinx documentation 64 | docs/_build/ 65 | 66 | # PyBuilder 67 | target/ 68 | 69 | # IPython Notebook 70 | .ipynb_checkpoints 71 | 72 | # pyenv 73 | .python-version 74 | 75 | # celery beat schedule file 76 | celerybeat-schedule 77 | 78 | # dotenv 79 | .env 80 | 81 | # virtualenv 82 | venv/ 83 | ENV/ 84 | 85 | # Spyder project settings 86 | .spyderproject 87 | 88 | # Rope project settings 89 | .ropeproject 90 | ======= 91 | *.sw[po] 92 | *.py[co] 93 | *~ 94 | 95 | build/ 96 | mathjax/ 97 | 98 | source/img/tikz/*.png 99 | source/img/tikz/*.pdf 100 | source/img/tikz/.*.tex 101 | 102 | .DS_Store 103 | 104 | .ipynb_checkpoints 105 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2016 SymPy Development Team 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | 7 | a. Redistributions of source code must retain the above copyright notice, 8 | this list of conditions and the following disclaimer. 9 | b. Redistributions in binary form must reproduce the above copyright 10 | notice, this list of conditions and the following disclaimer in the 11 | documentation and/or other materials provided with the distribution. 12 | c. Neither the name of SymPy nor the names of its contributors 13 | may be used to endorse or promote products derived from this software 14 | without specific prior written permission. 15 | 16 | 17 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 18 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20 | ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR 21 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 23 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 24 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25 | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26 | OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH 27 | DAMAGE. 28 | -------------------------------------------------------------------------------- /NOTES.md: -------------------------------------------------------------------------------- 1 | *Some notes for the tutorial. Feel free to edit it however you want.* 2 | 3 | ## General notes 4 | 5 | - In general, I think we should first write documentation for SymPy, then 6 | backport that documentation to IPython notebooks for the tutorial. Or, for the 7 | things that it makes sense for, write IPython notebook examples for SymPy and 8 | just use them for the tutorial. 9 | 10 | Either way, we should focus on writing narrative documentation for SymPy. It 11 | is most lacking in this, so this will help. The things we use for the tutorial 12 | should maybe be toned down in the narration, as we will be speaking the things 13 | to them. 14 | 15 | - It will be a lot easier if we can release before the tutorial, but if we 16 | don't make sure that everything works with 0.7.2. 17 | 18 | ## Things to talk about 19 | 20 | - We should talk about the important 21 | [idioms and antipatterns](https://github.com/sympy/sympy/wiki/Idioms-and-Antipatterns). 22 | 23 | - All the important expression manipulation functions (i.e., methods of 24 | Basic). This part should also be first written as documentation for SymPy. 25 | 26 | - Documentation on how to do numerics with SymPy. This is something that a lot 27 | of people at SciPy will care about. It should talk about evalf, lambdify, 28 | code generation, and so on. *Ondřej, can you do this?* 29 | 30 | - All the important modules. We should think about what these are for 31 | rewriting the tutorial. Right now, I am thinking 32 | 33 | - The core (basic operations) 34 | - Functions 35 | - Simplify 36 | - Solve 37 | - Matrices 38 | 39 | - How to install and set things up (like printers and stuff). A lot of this 40 | can be borrowed from the 2011 tutorial. Some stuff, like working with 41 | IPython, will need to be updated. 42 | 43 | - Should we talk about plotting? 44 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | SymPy tutorial for SciPy 2016 2 | ============================= 3 | 4 | All the material for this tutorial can be seen here: http://www.sympy.org/scipy-2016-tutorial/ 5 | 6 | This is the tutorial that Ondřej Čertík, Aaron Meurer, Amit Kumar, Jason Moore, 7 | Sartaj Singh, Harsh Gupta are giving at SciPy 2016 for SymPy. If you are 8 | attending the tutorial, please install Anaconda. You will need SymPy 1.0 and 9 | IPython 4.1.2. The exercises for attendees are in the tutorial_exercises 10 | directory. Everything else is presentation materials for us. 11 | 12 | -------------------------------------------------------------------------------- /applications/Applications -- Numerical Quadrature.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "collapsed": false 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "from sympy.integrals.quadrature import gauss_legendre" 12 | ] 13 | }, 14 | { 15 | "cell_type": "code", 16 | "execution_count": 2, 17 | "metadata": { 18 | "collapsed": false 19 | }, 20 | "outputs": [ 21 | { 22 | "data": { 23 | "text/plain": [ 24 | "([-0.86113631159405258,\n", 25 | " -0.33998104358485626,\n", 26 | " 0.33998104358485626,\n", 27 | " 0.86113631159405258],\n", 28 | " [0.34785484513745386,\n", 29 | " 0.65214515486254614,\n", 30 | " 0.65214515486254614,\n", 31 | " 0.34785484513745386])" 32 | ] 33 | }, 34 | "execution_count": 2, 35 | "metadata": {}, 36 | "output_type": "execute_result" 37 | } 38 | ], 39 | "source": [ 40 | "gauss_legendre(4, 17)" 41 | ] 42 | }, 43 | { 44 | "cell_type": "markdown", 45 | "metadata": {}, 46 | "source": [ 47 | "Compare against:\n", 48 | "\n", 49 | "https://github.com/certik/hfsolver/blob/0693c60abc8da820b9c626f2092bf9d767644a8b/src/quadrature.f90#L30\n", 50 | "\n", 51 | "Points:\n", 52 | "\n", 53 | "```fortran\n", 54 | " case(4)\n", 55 | " xi(1)=-0.86113631159405258_dp\n", 56 | " xi(2)=-0.33998104358485626_dp\n", 57 | " xi(3)=0.33998104358485626_dp\n", 58 | " xi(4)=0.86113631159405258_dp\n", 59 | "```\n", 60 | "\n", 61 | "Weights:\n", 62 | "\n", 63 | "```fortran\n", 64 | " case(4)\n", 65 | " w(1)=0.34785484513745386_dp\n", 66 | " w(2)=0.65214515486254614_dp\n", 67 | " w(3)=0.65214515486254614_dp\n", 68 | " w(4)=0.34785484513745386_dp\n", 69 | "```" 70 | ] 71 | }, 72 | { 73 | "cell_type": "code", 74 | "execution_count": 3, 75 | "metadata": { 76 | "collapsed": true 77 | }, 78 | "outputs": [], 79 | "source": [ 80 | "gauss_legendre??" 81 | ] 82 | } 83 | ], 84 | "metadata": { 85 | "kernelspec": { 86 | "display_name": "Python 2", 87 | "language": "python", 88 | "name": "python2" 89 | }, 90 | "language_info": { 91 | "codemirror_mode": { 92 | "name": "ipython", 93 | "version": 2 94 | }, 95 | "file_extension": ".py", 96 | "mimetype": "text/x-python", 97 | "name": "python", 98 | "nbconvert_exporter": "python", 99 | "pygments_lexer": "ipython2", 100 | "version": "2.7.12" 101 | } 102 | }, 103 | "nbformat": 4, 104 | "nbformat_minor": 0 105 | } 106 | -------------------------------------------------------------------------------- /imgs/Mathematica-ring-a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sympy/scipy-2016-tutorial/aa417427a1de2dcab2a9640b631b809d525d7929/imgs/Mathematica-ring-a.png -------------------------------------------------------------------------------- /imgs/comic2-1040.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sympy/scipy-2016-tutorial/aa417427a1de2dcab2a9640b631b809d525d7929/imgs/comic2-1040.png -------------------------------------------------------------------------------- /slides/.gitattributes: -------------------------------------------------------------------------------- 1 | *.tex diff=tex 2 | *.bib diff=bibtex 3 | -------------------------------------------------------------------------------- /slides/.gitignore: -------------------------------------------------------------------------------- 1 | *.eps 2 | *.pdf 3 | *.aux 4 | *.log 5 | *.out 6 | *.dvi 7 | *.ps 8 | *.swp 9 | *.dat 10 | *.nav 11 | *.snm 12 | *.toc 13 | *.bbl 14 | *.blg 15 | *.lof 16 | *.lot 17 | *.glg 18 | *.glo 19 | *.gls 20 | *.ist 21 | *.acn 22 | *.acr 23 | *.alg 24 | 25 | .DS_Store 26 | -------------------------------------------------------------------------------- /slides/Makefile: -------------------------------------------------------------------------------- 1 | all: 2 | pdflatex intro.tex 3 | pdflatex intro.tex 4 | -------------------------------------------------------------------------------- /slides/authors.py: -------------------------------------------------------------------------------- 1 | """ 2 | Generates list of current authors 3 | Run the script in the main sympy repo. 4 | Copy authors.tex in the tutorial repo. 5 | """ 6 | 7 | 8 | def generate_authors_list(): 9 | authors = [] 10 | with open('AUTHORS') as f: 11 | for line in f: 12 | if line.strip().endswith('>'): 13 | aut = line.split('<')[0].strip() + '\\\\' + '\n' 14 | if aut.startswith('*'): 15 | aut = aut[1:] 16 | authors.append(aut) 17 | return authors 18 | 19 | 20 | def generate_authors_tex(authors, batch=100): 21 | begin_frame1 = '\\begin{frame}{Authors}\n' 22 | begin_frame2 = '\\begin{frame}{Authors (continued)}\n' 23 | end_frame = '\\end{frame}\n' 24 | begin_multicols = '\\begin{multicols}{5}\n' 25 | end_multicols = '\\end{multicols}\n' 26 | tiny = '\\tiny\n' 27 | with open('authors.tex', 'w') as f: 28 | for i in range(0, len(authors), batch): 29 | if i: 30 | f.write(begin_frame2) 31 | else: 32 | f.write(begin_frame1) 33 | f.write(begin_multicols) 34 | f.write(tiny) 35 | if(i + batch < len(authors)): 36 | end = i + batch 37 | else: 38 | end = len(authors) 39 | authors_text = ''.join(authors[i:end]) 40 | f.write(authors_text) 41 | f.write(end_multicols) 42 | f.write(end_frame) 43 | 44 | 45 | if __name__ == '__main__': 46 | authors = generate_authors_list() 47 | generate_authors_tex(authors, 110) 48 | -------------------------------------------------------------------------------- /slides/authors.tex: -------------------------------------------------------------------------------- 1 | \begin{frame}{Authors} 2 | \begin{multicols}{5} 3 | \tiny 4 | Ondřej Čertík\\ 5 | Fabian Pedregosa\\ 6 | Jurjen N.E. Bos\\ 7 | Mateusz Paprocki\\ 8 | Marc-Etienne M.Leveille\\ 9 | Brian Jorgensen\\ 10 | Jason Gedge\\ 11 | Robert Schwarz\\ 12 | Pearu Peterson\\ 13 | Fredrik Johansson\\ 14 | Chris Wu\\ 15 | Ulrich Hecht\\ 16 | Goutham Lakshminarayan\\ 17 | David Lawrence\\ 18 | Jaroslaw Tworek\\ 19 | David Marek\\ 20 | Bernhard R. Link\\ 21 | Andrej Tokarčík\\ 22 | Or Dvory\\ 23 | Saroj Adhikari\\ 24 | Pauli Virtanen\\ 25 | Robert Kern\\ 26 | James Aspnes\\ 27 | Nimish Telang\\ 28 | Abderrahim Kitouni\\ 29 | Pan Peng\\ 30 | Friedrich Hagedorn\\ 31 | Elrond der Elbenfuerst\\ 32 | Rizgar Mella\\ 33 | Felix Kaiser\\ 34 | Roberto Nobrega\\ 35 | David Roberts\\ 36 | Sebastian Krämer\\ 37 | Vinzent Steinberg\\ 38 | Riccardo Gori\\ 39 | Case Van Horsen\\ 40 | Stepan Roucka\\ 41 | Ali Raza Syed\\ 42 | Stefano Maggiolo\\ 43 | Robert Cimrman\\ 44 | Bastian Weber\\ 45 | Sebastian Krause\\ 46 | Sebastian Kreft\\ 47 | Dan\\ 48 | Alan Bromborsky\\ 49 | Boris Timokhin\\ 50 | Robert\\ 51 | Andy R. Terrel\\ 52 | Hubert Tsang\\ 53 | Konrad Meyer\\ 54 | Henrik Johansson\\ 55 | Priit Laes\\ 56 | Freddie Witherden\\ 57 | Brian E. Granger\\ 58 | Andrew Straw\\ 59 | Kaifeng Zhu\\ 60 | Ted Horst\\ 61 | Andrew Docherty\\ 62 | Akshay Srinivasan\\ 63 | Aaron Meurer\\ 64 | Barry Wardell\\ 65 | Tomasz Buchert\\ 66 | Vinay Kumar\\ 67 | Johann Cohen-Tanugi\\ 68 | Jochen Voss\\ 69 | Luke Peterson\\ 70 | Chris Smith\\ 71 | Thomas Sidoti\\ 72 | Florian Mickler\\ 73 | Nicolas Pourcelot\\ 74 | Ben Goodrich\\ 75 | Toon Verstraelen\\ 76 | Ronan Lamy\\ 77 | James Abbatiello\\ 78 | Ryan Krauss\\ 79 | Bill Flynn\\ 80 | Kevin Goodsell\\ 81 | Jorn Baayen\\ 82 | Eh Tan\\ 83 | Renato Coutinho\\ 84 | Oscar Benjamin\\ 85 | Øyvind Jensen\\ 86 | Julio Idichekop Filho\\ 87 | Łukasz Pankowski\\ 88 | Chu-Ching Huang\\ 89 | Fernando Perez\\ 90 | Raffaele De Feo\\ 91 | Christian Muise\\ 92 | Matt Curry\\ 93 | Kazuo Thow\\ 94 | Christian Schubert\\ 95 | Jezreel Ng\\ 96 | James Pearson\\ 97 | Matthew Brett\\ 98 | Addison Cugini\\ 99 | Nicholas J.S. Kinar\\ 100 | Harold Erbin\\ 101 | Thomas Dixon\\ 102 | Cristóvão Sousa\\ 103 | Andre de Fortier Smit\\ 104 | Mark Dewing\\ 105 | Alexey U. Gudchenko\\ 106 | Gary Kerr\\ 107 | Sherjil Ozair\\ 108 | Oleksandr Gituliar\\ 109 | Sean Vig\\ 110 | Prafullkumar P. Tale\\ 111 | Vladimir Perić\\ 112 | Tom Bachmann\\ 113 | Yuri Karadzhov\\ 114 | \end{multicols} 115 | \end{frame} 116 | \begin{frame}{Authors (continued)} 117 | \begin{multicols}{5} 118 | \tiny 119 | Vladimir Lagunov\\ 120 | Matthew Rocklin\\ 121 | Saptarshi Mandal\\ 122 | Gilbert Gede\\ 123 | Anatolii Koval\\ 124 | Tomo Lazovich\\ 125 | Pavel Fedotov\\ 126 | Jack McCaffery\\ 127 | Jeremias Yehdegho\\ 128 | Kibeom Kim\\ 129 | Gregory Ksionda\\ 130 | Tomáš Bambas\\ 131 | Raymond Wong\\ 132 | Luca Weihs\\ 133 | Shai 'Deshe' Wyborski\\ 134 | Thomas Wiecki\\ 135 | Óscar Nájera\\ 136 | Mario Pernici\\ 137 | Benjamin McDonald\\ 138 | Sam Magura\\ 139 | Stefan Krastanov\\ 140 | Bradley Froehle\\ 141 | Min Ragan-Kelley\\ 142 | Emma Hogan\\ 143 | Nikhil Sarda\\ 144 | Julien Rioux\\ 145 | Roberto Colistete, Jr.\\ 146 | Raoul Bourquin\\ 147 | Gert-Ludwig Ingold\\ 148 | Srinivas Vasudevan\\ 149 | Jason Moore\\ 150 | Miha Marolt\\ 151 | Tim Lahey\\ 152 | Luis Garcia\\ 153 | Matt Rajca\\ 154 | David Li\\ 155 | Alexandr Gudulin\\ 156 | Bilal Akhtar\\ 157 | Grzegorz Świrski\\ 158 | Matt Habel\\ 159 | David Ju\\ 160 | Nichita Utiu\\ 161 | Nikolay Lazarov\\ 162 | Steve Anton\\ 163 | Imran Ahmed Manzoor\\ 164 | Ljubiša Moćić\\ 165 | Piotr Korgul\\ 166 | Jim Zhang\\ 167 | Sam Sleight\\ 168 | tsmars15\\ 169 | Chancellor Arkantos\\ 170 | Stepan Simsa\\ 171 | Tobias Lenz\\ 172 | Siddhanathan Shanmugam\\ 173 | Tiffany Zhu\\ 174 | Tristan Hume\\ 175 | Alexey Subach\\ 176 | Joan Creus\\ 177 | Geoffry Song\\ 178 | Puneeth Chaganti\\ 179 | Marcin Kostrzewa\\ 180 | Natalia Nawara\\ 181 | vishal\\ 182 | Shruti Mangipudi\\ 183 | Davy Mao\\ 184 | Swapnil Agarwal\\ 185 | Kendhia\\ 186 | jerryma1121\\ 187 | Joachim Durchholz\\ 188 | Martin Povišer\\ 189 | Siddhant Jain\\ 190 | Kevin Hunter\\ 191 | Michael Mayorov\\ 192 | Nathan Alison\\ 193 | Christian Bühler\\ 194 | Carsten Knoll\\ 195 | Bharath M R\\ 196 | Matthias Toews\\ 197 | Sergiu Ivanov\\ 198 | Jorge E. Cardona\\ 199 | Sanket Agarwal\\ 200 | Manoj Babu K.\\ 201 | Sai Nikhil\\ 202 | Aleksandar Makelov\\ 203 | Sachin Irukula\\ 204 | Raphael Michel\\ 205 | Ashwini Oruganti\\ 206 | Andreas Kloeckner\\ 207 | Prateek Papriwal\\ 208 | Arpit Goyal\\ 209 | Angadh Nanjangud\\ 210 | Comer Duncan\\ 211 | Jens H. Nielsen\\ 212 | Joseph Dougherty\\ 213 | marshall2389\\ 214 | Guru Devanla\\ 215 | George Waksman\\ 216 | Alexandr Popov\\ 217 | Tarun Gaba\\ 218 | Takafumi Arakaki\\ 219 | Saurabh Jha\\ 220 | Rom le Clair\\ 221 | Angus Griffith\\ 222 | Timothy Reluga\\ 223 | Brian Stephanik\\ 224 | Alexander Eberspächer\\ 225 | Sachin Joglekar\\ 226 | Tyler Pirtle\\ 227 | Vasily Povalyaev\\ 228 | Colleen Lee\\ 229 | \end{multicols} 230 | \end{frame} 231 | \begin{frame}{Authors (continued)} 232 | \begin{multicols}{5} 233 | \tiny 234 | Matthew Hoff\\ 235 | Niklas Thörne\\ 236 | Huijun Mai\\ 237 | Marek Šuppa\\ 238 | Ramana Venkata\\ 239 | Prasoon Shukla\\ 240 | Stefen Yin\\ 241 | Thomas Hisch\\ 242 | Madeleine Ball\\ 243 | Case Van Horsen\\ 244 | Mary Clark\\ 245 | Rishabh Dixit\\ 246 | Manoj Kumar\\ 247 | Akshit Agarwal\\ 248 | CJ Carey\\ 249 | Patrick Lacasse\\ 250 | Ananya H\\ 251 | Tarang Patel\\ 252 | Christopher Dembia\\ 253 | Benjamin Fishbein\\ 254 | Sean Ge\\ 255 | Amit Jamadagni\\ 256 | Ankit Agrawal\\ 257 | Björn Dahlgren\\ 258 | Christophe Saint-Jean\\ 259 | Demian Wassermann\\ 260 | Khagesh Patel\\ 261 | Stephen Loo\\ 262 | hm\\ 263 | Patrick Poitras\\ 264 | Katja Sophie Hotz\\ 265 | Varun Joshi\\ 266 | Chetna Gupta\\ 267 | Thilina Rathnayake\\ 268 | Max Hutchinson\\ 269 | Shravas K Rao\\ 270 | Matthew Tadd\\ 271 | Alexander Hirzel\\ 272 | Randy Heydon\\ 273 | Oliver Lee\\ 274 | Seshagiri Prabhu\\ 275 | Pradyumna\\ 276 | Erik Welch\\ 277 | Eric Nelson\\ 278 | Roland Puntaier\\ 279 | Chris Conley\\ 280 | Tim Swast\\ 281 | Dmitry Batkovich\\ 282 | Francesco Bonazzi\\ 283 | Yuriy Demidov\\ 284 | Rick Muller\\ 285 | Manish Gill\\ 286 | Markus Müller\\ 287 | Amit Saha\\ 288 | Jeremy\\ 289 | QuaBoo\\ 290 | Stefan van der Walt\\ 291 | David Joyner\\ 292 | Lars Buitinck\\ 293 | Alkiviadis G. Akritas\\ 294 | Vinit Ravishankar\\ 295 | Mike Boyle\\ 296 | Heiner Kirchhoffer\\ 297 | Pablo Puente\\ 298 | James Fiedler\\ 299 | Harsh Gupta\\ 300 | Tuomas Airaksinen\\ 301 | Paul Strickland\\ 302 | James Goppert\\ 303 | rathmann\\ 304 | Avichal Dayal\\ 305 | Paul Scott\\ 306 | Shipra Banga\\ 307 | Pramod Ch\\ 308 | Akshay\\ 309 | Buck Shlegeris\\ 310 | Jonathan Miller\\ 311 | Edward Schembor\\ 312 | Rajath Shashidhara\\ 313 | Zamrath Nizam\\ 314 | Aditya Shah\\ 315 | Rajat Aggarwal\\ 316 | Sambuddha Basu\\ 317 | Zeel Shah\\ 318 | Abhinav Chanda\\ 319 | Jim Crist\\ 320 | Sudhanshu Mishra\\ 321 | Anurag Sharma\\ 322 | Soumya Dipta Biswas\\ 323 | Sushant Hiray\\ 324 | Ben Lucato\\ 325 | Kunal Arora\\ 326 | Henry Gebhardt\\ 327 | Dammina Sahabandu\\ 328 | Shukla\\ 329 | Ralph Bean\\ 330 | richierichrawr\\ 331 | John Connor\\ 332 | Juan Luis Cano Rodríguez\\ 333 | Sahil Shekhawat\\ 334 | Kundan Kumar\\ 335 | Stas Kelvich\\ 336 | sevaader\\ 337 | Dhruvesh Vijay Parikh\\ 338 | Venkatesh Halli\\ 339 | Lennart Fricke\\ 340 | Vlad Seghete\\ 341 | Shashank Agarwal\\ 342 | carstimon\\ 343 | Pierre Haessig\\ 344 | \end{multicols} 345 | \end{frame} 346 | \begin{frame}{Authors (continued)} 347 | \begin{multicols}{5} 348 | \tiny 349 | Maciej Baranski\\ 350 | Benjamin Gudehus\\ 351 | Faisal Anees\\ 352 | Mark Shoulson\\ 353 | Robert Johansson\\ 354 | Kalevi Suominen\\ 355 | Kaushik Varanasi\\ 356 | Fawaz Alazemi\\ 357 | Ambar Mehrotra\\ 358 | David P. Sanders\\ 359 | Peter Brady\\ 360 | John V. Siratt\\ 361 | Sarwar Chahal\\ 362 | Nathan Woods\\ 363 | Colin B. Macdonald\\ 364 | Marcus Näslund\\ 365 | Clemens Novak\\ 366 | Mridul Seth\\ 367 | Craig A. Stoudt\\ 368 | Raj\\ 369 | Mihai A. Ionescu\\ 370 | immerrr\\ 371 | Chai Wah Wu\\ 372 | Leonid Blouvshtein\\ 373 | Peleg Michaeli\\ 374 | ck Lux\\ 375 | zsc347\\ 376 | Hamish Dickson\\ 377 | Michael Gallaspy\\ 378 | Roman Inflianskas\\ 379 | Duane Nykamp\\ 380 | Ted Dokos\\ 381 | Sunny Aggarwal\\ 382 | Victor Brebenar\\ 383 | Akshat Jain\\ 384 | Shivam Vats\\ 385 | Longqi Wang\\ 386 | Juan Felipe Osorio\\ 387 | GitRay\\ 388 | Lukas Zorich\\ 389 | Eric Miller\\ 390 | Venkata Ramana\\ 391 | Cody Herbst\\ 392 | Nishith Shah\\ 393 | AMiT Kumar\\ 394 | Yury G. Kudryashov\\ 395 | Guillaume Gay\\ 396 | Ray Cathcart\\ 397 | Mihir Wadwekar\\ 398 | Tuan Manh Lai\\ 399 | Asish Panda\\ 400 | Darshan Chaudhary\\ 401 | Alec Kalinin\\ 402 | Ralf Stephan\\ 403 | Aaditya Nair\\ 404 | Jayesh Lahori\\ 405 | Harshil Goel\\ 406 | Luv Agarwal\\ 407 | Jason Ly\\ 408 | Lokesh Sharma\\ 409 | Sartaj Singh\\ 410 | Chris Swierczewski\\ 411 | Konstantin Togoi\\ 412 | Param Singh\\ 413 | Sumith\\ 414 | Juha Remes\\ 415 | Philippe Bouafia\\ 416 | Peter Schmidt\\ 417 | Jiaxing Liang\\ 418 | Lucas Jones\\ 419 | Gregory Ashton\\ 420 | Jennifer White\\ 421 | Renato Orsino\\ 422 | Michael Boyle\\ 423 | Alistair Lynn\\ 424 | Govind Sahai\\ 425 | Adam Bloomston\\ 426 | Kyle McDaniel\\ 427 | Nguyen Truong Duy\\ 428 | Alex Lindsay\\ 429 | Mathew Chong\\ 430 | Jason Siefken\\ 431 | Gaurav Dhingra\\ 432 | Gao, Xiang\\ 433 | Kevin Ventullo\\ 434 | mao8\\ 435 | Isuru Fernando\\ 436 | Shivam Tyagi\\ 437 | Richard Otis\\ 438 | Rich LaSota\\ 439 | dustyrockpyle\\ 440 | Anton Akhmerov\\ 441 | Michael Zingale\\ 442 | Chak-Pong Chung\\ 443 | David T\\ 444 | Phil Ruffwind\\ 445 | Sebastian Koslowski\\ 446 | Kumar Krishna Agrawal\\ 447 | Dustin Gadal\\ 448 | operte\\ 449 | Yu Kobayashi\\ 450 | Shashank Kumar\\ 451 | Timothy Cyrus\\ 452 | Devyani Kota\\ 453 | Keval Shah\\ 454 | Dzhelil Rufat\\ 455 | Pastafarianist\\ 456 | Sourav Singh\\ 457 | Jacob Garber\\ 458 | Vinay\\ 459 | \end{multicols} 460 | \end{frame} 461 | \begin{frame}{Authors (continued)} 462 | \begin{multicols}{5} 463 | \tiny 464 | GolimarOurHero\\ 465 | Prashant Tyagi\\ 466 | Matthew Davis\\ 467 | Tschijnmo TSCHAU\\ 468 | Alexander Bentkamp\\ 469 | Moo VI\\ 470 | Jack Kemp\\ 471 | Kshitij Saraogi\\ 472 | Thomas Baruchel\\ 473 | Nicolás Guarín-Zapata\\ 474 | Jens Jørgen Mortensen\\ 475 | Sampad Kumar Saha\\ 476 | Eva Charlotte Mayer\\ 477 | Laura Domine\\ 478 | Justin Blythe\\ 479 | Meghana Madhyastha\\ 480 | Tanu Hari Dixit\\ 481 | Shekhar Prasad Rajak\\ 482 | Aqnouch Mohammed\\ 483 | Arafat Dad Khan\\ 484 | Boris Atamanovskiy\\ 485 | Sam Tygier\\ 486 | Jai Luthra\\ 487 | Guo Xingjian\\ 488 | Sandeep Veethu\\ 489 | Archit Verma\\ 490 | Shubham Tibra\\ 491 | Ashutosh Saboo\\ 492 | Michael S. Hansen\\ 493 | Anish Shah\\ 494 | Harshil Goel\\ 495 | Guillaume Jacquenot\\ 496 | Bhautik Mavani\\ 497 | Michał Radwański\\ 498 | Jerry Li\\ 499 | Pablo Zubieta\\ 500 | Curious72\\ 501 | Chaitanya Sai Alaparthi\\ 502 | arihant parsoya\\ 503 | Ruslan Pisarev\\ 504 | Akash Trehan\\ 505 | Nishant Nikhil\\ 506 | Vladimir Poluhsin\\ 507 | Akshay Nagar\\ 508 | James Brandon Milam\\ 509 | Abhinav Agarwal\\ 510 | Rishabh Daal\\ 511 | Sanya Khurana\\ 512 | Aman Deep\\ 513 | Aravind Reddy\\ 514 | Abhishek Verma\\ 515 | Matthew Parnell\\ 516 | Thomas Hickman\\ 517 | Akshay Siramdas\\ 518 | YiDing Jiang\\ 519 | Jatin Yadav\\ 520 | Matthew Thomas\\ 521 | Rehas Sachdeva\\ 522 | Michael Mueller\\ 523 | Srajan Garg\\ 524 | Prabhjot Singh\\ 525 | Haruki Moriguchi\\ 526 | Tom Gijselinck\\ 527 | Nitin Chaudhary\\ 528 | Alex Argunov\\ 529 | Nathan Musoke\\ 530 | Abhishek Garg\\ 531 | Dana Jacobsen\\ 532 | Vasiliy Dommes\\ 533 | Phillip Berndt\\ 534 | Haimo Zhang\\ 535 | Subham Tibra\\ 536 | Anthony Scopatz\\ 537 | bluebrook\\ 538 | Normal Human\\ 539 | Josh Burkart\\ 540 | Dimitra Konomi\\ 541 | ChristinaZografou\\ 542 | FiachAntaw\\ 543 | Langston Barrett\\ 544 | Krit Karan\\ 545 | G. D. McBain\\ 546 | Prempal Singh\\ 547 | \end{multicols} 548 | \end{frame} 549 | -------------------------------------------------------------------------------- /slides/beamercolorthemechameleon.sty: -------------------------------------------------------------------------------- 1 | % Copyright 2007 by Marco Barisione 2 | % 3 | % This file may be distributed and/or modified 4 | % 5 | % 1. under the LaTeX Project Public License and/or 6 | % 2. under the GNU Public License. 7 | 8 | \mode 9 | 10 | \definecolor{chameleongreen1}{RGB}{98,189,25} 11 | \definecolor{chameleongreen2}{RGB}{188,225,141} 12 | \definecolor{chameleongreen3}{RGB}{51,149,48} 13 | \definecolor{chameleongreen4}{RGB}{0,98,90} 14 | 15 | \setbeamercolor*{palette primary}{fg=white,bg=chameleongreen2} 16 | \setbeamercolor*{palette secondary}{fg=white,bg=chameleongreen3} 17 | \setbeamercolor*{palette tertiary}{fg=white,bg=chameleongreen4} 18 | \setbeamercolor*{palette quaternary}{fg=white,bg=chameleongreen1} 19 | 20 | \setbeamercolor*{titlelike}{bg=chameleongreen3} 21 | \setbeamercolor*{frametitle}{bg=black,fg=black} 22 | \setbeamercolor*{part title}{bg=black,fg=black} 23 | \setbeamercolor*{item}{fg=chameleongreen3} 24 | 25 | \setbeamercolor*{separation line}{} 26 | \setbeamercolor*{fine separation line}{} 27 | 28 | \mode 29 | 30 | -------------------------------------------------------------------------------- /slides/beamerinnerthemefancy.sty: -------------------------------------------------------------------------------- 1 | % Copyright 2007 by Marco Barisione 2 | % 3 | % This file may be distributed and/or modified 4 | % 5 | % 1. under the LaTeX Project Public License and/or 6 | % 2. under the GNU Public License. 7 | 8 | \mode 9 | 10 | % Use alternative title page style. 11 | \DeclareOptionBeamer{alternativetitlepage}[true]{\def\beamer@fancy@alternativetitlepage{#1}} 12 | 13 | % Logo to use in the alternative title page. 14 | \def\beamer@fancy@titlepagelogo{} 15 | \DeclareOptionBeamer{titlepagelogo}{\def\beamer@fancy@titlepagelogo{#1}} 16 | 17 | % Bullet shape. 18 | \DeclareOptionBeamer{bullet}{\def\beamer@fancy@bullet{#1}} 19 | 20 | \ExecuteOptionsBeamer{alternativetitlepage=false,bullet=square} 21 | \ProcessOptionsBeamer 22 | 23 | % Colors. 24 | \setbeamercolor*{lineup}{parent=palette primary} 25 | \setbeamercolor*{linemid}{parent=palette secondary} 26 | \setbeamercolor*{linebottom}{parent=palette tertiary} 27 | \setbeamercolor*{title page header}{parent=palette quaternary} 28 | 29 | % Lengths. 30 | \newlength{\beamer@fancy@lineup} 31 | \setlength{\beamer@fancy@lineup}{.025\paperheight} 32 | \newlength{\beamer@fancy@linemid} 33 | \setlength{\beamer@fancy@linemid}{.015\paperheight} 34 | \newlength{\beamer@fancy@linebottom} 35 | \setlength{\beamer@fancy@linebottom}{.01\paperheight} 36 | 37 | % Margins. 38 | \newlength{\beamer@fancy@normalmargin} 39 | \setlength{\beamer@fancy@normalmargin}{.06\paperwidth} 40 | \setbeamersize{text margin left=\beamer@fancy@normalmargin} 41 | \setbeamersize{text margin right=\beamer@fancy@normalmargin} 42 | \setlength\leftmargini{.6\beamer@fancy@normalmargin} 43 | \setlength\leftmarginii{.6\beamer@fancy@normalmargin} 44 | \setlength\leftmarginiii{.6\beamer@fancy@normalmargin} 45 | 46 | % Normal title page. 47 | \defbeamertemplate*{title page normal}{fancy theme}[1][] 48 | { 49 | \vbox{} 50 | \vfill 51 | \begin{centering} 52 | \begin{beamercolorbox}[wd=\paperwidth,sep=8pt,center,#1]{title page header} 53 | \usebeamerfont{title}\inserttitle\par% 54 | \ifx\insertsubtitle\@empty% 55 | \else% 56 | \vskip0.25em% 57 | {\usebeamerfont{subtitle}\usebeamercolor[fg]{subtitle}\insertsubtitle\par}% 58 | \fi% 59 | \end{beamercolorbox}% 60 | \vskip1em\par 61 | \begin{beamercolorbox}[sep=8pt,center,#1]{author} 62 | \usebeamerfont{author}\insertauthor 63 | \end{beamercolorbox} 64 | \begin{beamercolorbox}[sep=8pt,center,#1]{institute} 65 | \usebeamerfont{institute}\insertinstitute 66 | \end{beamercolorbox} 67 | \begin{beamercolorbox}[sep=8pt,center,#1]{date} 68 | \usebeamerfont{date}\insertdate 69 | \end{beamercolorbox}\vskip0.5em 70 | {\usebeamercolor[fg]{titlegraphic}\inserttitlegraphic\par} 71 | \end{centering} 72 | \vfill 73 | } 74 | 75 | % Alternative title page, you should use this in a frame with the [plain] 76 | % option. 77 | \defbeamertemplate*{title page alternative}{fancy theme}[1][] 78 | { 79 | {\parskip0pt\offinterlineskip% 80 | \hbox{\hskip-\Gm@lmargin\hbox{\vbox{% 81 | \@tempdima=\textwidth\textwidth=\paperwidth\hsize=\textwidth\def\\{,}\vbox{}\vskip-1.5ex% 82 | % Title. 83 | \begin{beamercolorbox}[wd=\paperwidth,ht=.4\paperheight,center,#1]{title page header} 84 | \usebeamerfont{title}\inserttitle\par% 85 | \ifx\insertsubtitle\@empty% 86 | \else% 87 | \vskip0.25em% 88 | {\usebeamerfont{subtitle}\usebeamercolor[fg]{subtitle}\insertsubtitle\par}% 89 | \fi% 90 | \vspace{.125\paperheight}% 91 | \end{beamercolorbox}% 92 | \vbox{}\vskip-\beamer@fancy@lineup% 93 | \vbox{}\vskip-\beamer@fancy@linemid% 94 | % First line. 95 | \hbox{% 96 | \begin{beamercolorbox}[wd=.2\paperwidth,ht=\beamer@fancy@lineup,dp=0pt]{}% 97 | \end{beamercolorbox}% 98 | \begin{beamercolorbox}[wd=.8\paperwidth,ht=\beamer@fancy@lineup,dp=0pt]{lineup}% 99 | \end{beamercolorbox}% 100 | }% 101 | \vbox{}\vskip0ex% 102 | % Second line. 103 | \hbox{% 104 | \begin{beamercolorbox}[wd=.1\paperwidth,ht=\beamer@fancy@linemid,dp=0pt]{}% 105 | \end{beamercolorbox}% 106 | \begin{beamercolorbox}[wd=.9\paperwidth,ht=\beamer@fancy@linemid,dp=0pt]{linemid}% 107 | \end{beamercolorbox}% 108 | }% 109 | % Third line. 110 | \hbox{% 111 | \begin{beamercolorbox}[wd=.5\paperwidth,ht=\beamer@fancy@linebottom,dp=0pt]{}% 112 | \end{beamercolorbox}% 113 | \begin{beamercolorbox}[wd=.5\paperwidth,ht=\beamer@fancy@linebottom,dp=0pt]{linebottom}% 114 | \end{beamercolorbox}% 115 | }% 116 | \vskip0pt% 117 | }}% 118 | \hskip-\Gm@rmargin% 119 | }}\hfil% 120 | % 121 | \begin{columns} 122 | \ifx\beamer@fancy@titlepagelogo\@empty% 123 | \column{\textwidth} 124 | \else 125 | \column{.5\textwidth} 126 | % Logo. 127 | \begin{centering} 128 | \vbox{}\vfill 129 | \includegraphics[height=.4\paperheight]{\beamer@fancy@titlepagelogo} 130 | \vfill 131 | \end{centering} 132 | \column{.5\textwidth} 133 | \fi 134 | % Authors, institute and date 135 | \vskip1em\par 136 | \begin{beamercolorbox}[sep=8pt,center,#1]{author} 137 | \usebeamerfont{author}\insertauthor 138 | \end{beamercolorbox} 139 | \begin{beamercolorbox}[sep=8pt,center,#1]{institute} 140 | \usebeamerfont{institute}\insertinstitute 141 | \end{beamercolorbox} 142 | \begin{beamercolorbox}[sep=8pt,center,#1]{date} 143 | \usebeamerfont{date}\insertdate 144 | \end{beamercolorbox}\vskip0.5em 145 | {\usebeamercolor[fg]{titlegraphic}\inserttitlegraphic\par} 146 | \end{columns} 147 | } 148 | 149 | \defbeamertemplate*{title page}{fancy}[1][] 150 | { 151 | \def\beamer@fancy@truetext{true}% 152 | \ifx\beamer@fancy@alternativetitlepage\beamer@fancy@truetext% 153 | \usebeamertemplate{title page alternative}% 154 | \else% 155 | \usebeamertemplate{title page normal}% 156 | \fi% 157 | } 158 | 159 | % Items. 160 | \defbeamertemplate{itemize item}{squarealt}% 161 | {\tiny\raise.5ex\hbox{\donotcoloroutermaths$\blacksquare$}} 162 | \defbeamertemplate{itemize subitem}{squarealt}% 163 | {\tiny\raise.4ex\hbox{\donotcoloroutermaths$\square$}} 164 | \defbeamertemplate{itemize subsubitem}{squarealt}% 165 | {\tiny\raise.3ex\hbox{\donotcoloroutermaths$\blacksquare$}} 166 | 167 | \defbeamertemplate{itemize item}{circlealt}% 168 | {\small\raise.2ex\hbox{\donotcoloroutermaths$\bullet$}} 169 | \defbeamertemplate{itemize subitem}{circlealt}% 170 | {\small\raise.1ex\hbox{\donotcoloroutermaths$\circ$}} 171 | \defbeamertemplate{itemize subsubitem}{circlealt}% 172 | {\scriptsize\raise.1ex\hbox{\donotcoloroutermaths$\bullet$}} 173 | 174 | \def\circletext{circle} 175 | \ifx\beamer@fancy@bullet\circletext 176 | \setbeamertemplate{items}[circlealt] 177 | \else 178 | \setbeamertemplate{items}[squarealt] 179 | \fi 180 | 181 | \mode 182 | 183 | -------------------------------------------------------------------------------- /slides/beamerouterthemedecolines.sty: -------------------------------------------------------------------------------- 1 | % Copyright 2007 by Marco Barisione 2 | % 3 | % This file may be distributed and/or modified 4 | % 5 | % 1. under the LaTeX Project Public License and/or 6 | % 2. under the GNU Public License. 7 | 8 | \mode 9 | 10 | % String used between the current page and the total page count. 11 | \def\beamer@decolines@pageofpages{/} 12 | \DeclareOptionBeamer{pageofpages}{\def\beamer@decolines@pageofpages{#1}} 13 | 14 | % Show a line below the frame title. 15 | \DeclareOptionBeamer{titleline}[true]{\def\beamer@decolines@titleline{#1}} 16 | 17 | % Image used for the watermark. 18 | \def\beamer@decolines@watermarkorig{} 19 | \DeclareOptionBeamer{watermark}{\def\beamer@decolines@watermarkorig{#1}} 20 | 21 | % Height of the watermark. 22 | \def\beamer@decolines@watermarkheight{100px} 23 | \DeclareOptionBeamer{watermarkheight}{\def\beamer@decolines@watermarkheight{#1}} 24 | 25 | % The original image height is watermarkheightmult * watermarkheight. 26 | \def\beamer@decolines@watermarkheightmult{1} 27 | \DeclareOptionBeamer{watermarkheightmult}{\def\beamer@decolines@watermarkheightmult{#1}} 28 | 29 | \ExecuteOptionsBeamer{titleline=false} 30 | \ProcessOptionsBeamer 31 | 32 | % Enable/disable the watermark. 33 | \def\watermarkon{% 34 | \def\beamer@decolines@watermark{\beamer@decolines@watermarkorig}% 35 | } 36 | \def\watermarkoff{\def\beamer@decolines@watermark{}} 37 | 38 | % Initially enable the watermark. 39 | \watermarkon 40 | 41 | % Colors. 42 | \setbeamercolor*{lineup}{parent=palette primary} 43 | \setbeamercolor*{linemid}{parent=palette secondary} 44 | \setbeamercolor*{linebottom}{parent=palette tertiary} 45 | \setbeamercolor*{page header}{parent=titlelike} 46 | 47 | % Lengths 48 | \newlength{\headerheight} 49 | \setlength{\headerheight}{.045\paperheight} 50 | \newlength{\beamer@decolines@lineup} 51 | \setlength{\beamer@decolines@lineup}{.025\paperheight} 52 | \newlength{\beamer@decolines@linemid} 53 | \setlength{\beamer@decolines@linemid}{.015\paperheight} 54 | \newlength{\beamer@decolines@linebottom} 55 | \setlength{\beamer@decolines@linebottom}{.01\paperheight} 56 | 57 | % The height of the watermark part below the 3 bottom lines. 58 | \newlength{\beamer@decolines@watermarkheightbottom} 59 | \addtolength{\beamer@decolines@watermarkheightbottom}{\beamer@decolines@lineup} 60 | \addtolength{\beamer@decolines@watermarkheightbottom}{\beamer@decolines@linemid} 61 | \addtolength{\beamer@decolines@watermarkheightbottom}{\beamer@decolines@linebottom} 62 | 63 | % The height of the watermark part over the 3 bottom lines before shrinking. 64 | \newlength{\beamer@decolines@watermarkheightupperorig} 65 | \setlength{\beamer@decolines@watermarkheightupperorig}{\beamer@decolines@watermarkheight} 66 | \addtolength{\beamer@decolines@watermarkheightupperorig}{-\beamer@decolines@watermarkheightbottom} 67 | \multiply\beamer@decolines@watermarkheightupperorig by \beamer@decolines@watermarkheightmult 68 | 69 | % Footer. 70 | \defbeamertemplate*{footline}{decolines theme} 71 | { 72 | \leavevmode% 73 | % Page number. 74 | \hbox{% 75 | \begin{beamercolorbox}[wd=.2\paperwidth,ht=0ex,dp=0ex,center]{}% 76 | \usebeamerfont{palette primary}\insertframenumber{} \beamer@decolines@pageofpages{} \inserttotalframenumber% 77 | \end{beamercolorbox}% 78 | \begin{beamercolorbox}[wd=.8\paperwidth,ht=0ex,dp=0ex]{}% 79 | \end{beamercolorbox}% 80 | } % 81 | % First line. 82 | \hbox{% 83 | \begin{beamercolorbox}[wd=.2\paperwidth,ht=\beamer@decolines@lineup,dp=0pt]{}% 84 | \end{beamercolorbox}% 85 | \begin{beamercolorbox}[wd=.8\paperwidth,ht=\beamer@decolines@lineup,dp=0pt]{lineup}% 86 | \end{beamercolorbox}% 87 | } % 88 | % Second line. 89 | \hbox{% 90 | \begin{beamercolorbox}[wd=\paperwidth,ht=\beamer@decolines@linemid,dp=0pt]{linemid}% 91 | \end{beamercolorbox}% 92 | } % 93 | % Third line. 94 | \hbox{% 95 | \begin{beamercolorbox}[wd=.1\paperwidth,ht=\beamer@decolines@linebottom,dp=0pt]{}% 96 | \end{beamercolorbox}% 97 | \begin{beamercolorbox}[wd=.9\paperwidth,ht=\beamer@decolines@linebottom,dp=0pt]{linebottom}% 98 | \end{beamercolorbox}% 99 | }% 100 | % This seems to fix some alignment problems with the watermark. It has to be 101 | % always applied if you do not want to see the footer moving up and down when 102 | % moving from a page with watermark to a page without or vice versa. 103 | \vskip-.5px% 104 | % Watermark. 105 | \if\beamer@decolines@watermark\@empty\else% 106 | \vskip-\beamer@decolines@watermarkheightbottom% 107 | \llap{\includegraphics[height=\beamer@decolines@watermarkheightbottom,clip=true,% 108 | trim=0pt 0pt 0pt \beamer@decolines@watermarkheightupperorig]{\beamer@decolines@watermark}\hskip-\paperwidth}% 109 | \fi% 110 | } 111 | 112 | \defbeamertemplate*{headline}{decolines theme} 113 | { 114 | \leavevmode% 115 | \hbox{% 116 | \begin{beamercolorbox}[wd=\paperwidth,ht=\headerheight,dp=0pt]{page header}% 117 | \end{beamercolorbox}% 118 | } % 119 | \vskip0pt% 120 | } 121 | 122 | \defbeamertemplate*{frametitle}{decolines theme}[1][left] 123 | { 124 | \ifbeamercolorempty[bg]{frametitle}{}{\nointerlineskip}% 125 | \@tempdima=\textwidth% 126 | \advance\@tempdima by\beamer@leftmargin% 127 | \advance\@tempdima by\beamer@rightmargin% 128 | \vbox{}\vskip-.5\beamer@leftmargin% 129 | \begin{beamercolorbox}[sep=\beamer@leftmargin,#1,wd=\the\@tempdima]{} 130 | \usebeamerfont{frametitle}\usebeamercolor[bg]{framesubtitle}% 131 | \vbox{}\vskip0ex% 132 | \if@tempswa\else\csname beamer@fte#1\endcsname\fi% 133 | \strut\insertframetitle\strut\par% 134 | {% 135 | \ifx\insertframesubtitle\@empty% 136 | \else% 137 | {\usebeamerfont{framesubtitle}\usebeamercolor[bg]{framesubtitle}\insertframesubtitle\strut\par}% 138 | \fi 139 | }% 140 | \vskip-1ex% 141 | \if@tempswa\else\vskip-\beamer@leftmargin\fi 142 | \end{beamercolorbox}% 143 | \def\beamer@decolines@truetext{true}% 144 | \ifx\beamer@decolines@titleline\beamer@decolines@truetext% 145 | \vskip-.5\beamer@leftmargin% 146 | \begin{beamercolorbox}[wd=\textwidth,ht=.1ex,dp=0ex]{linemid}% 147 | \end{beamercolorbox}% 148 | \fi 149 | } 150 | 151 | % Frame title continuations, default 152 | \defbeamertemplate*{frametitle continuation}{decolines theme}{(\insertcontinuationcount)} 153 | 154 | \defbeamertemplate*{sidebar right}{decolines theme} 155 | { 156 | \vskip.1\beamer@leftmargin% 157 | \llap{\insertlogo\hskip.5\beamer@leftmargin}% 158 | \vfill% 159 | \if\beamer@decolines@watermark\@empty\else% 160 | \llap{\includegraphics[height=\beamer@decolines@watermarkheight]{\beamer@decolines@watermark}}% 161 | \vskip-\beamer@decolines@watermarkheightbottom% 162 | \fi 163 | } 164 | 165 | \mode 166 | 167 | -------------------------------------------------------------------------------- /slides/beamerthemeTorino.sty: -------------------------------------------------------------------------------- 1 | % Copyright 2007 by Marco Barisione 2 | % 3 | % This file may be distributed and/or modified 4 | % 5 | % 1. under the LaTeX Project Public License and/or 6 | % 2. under the GNU Public License. 7 | 8 | \mode 9 | 10 | \DeclareOptionBeamer{alternativetitlepage}[true]{\PassOptionsToPackage{alternativetitlepage=#1}{beamerinnerthemefancy}} 11 | \DeclareOptionBeamer{titlepagelogo}{\PassOptionsToPackage{titlepagelogo=#1}{beamerinnerthemefancy}} 12 | \DeclareOptionBeamer{bullet}{\PassOptionsToPackage{bullet=#1}{beamerinnerthemefancy}} 13 | \DeclareOptionBeamer{pageofpages}{\PassOptionsToPackage{pageofpages=#1}{beamerouterthemedecolines}} 14 | \DeclareOptionBeamer{titleline}[true]{\PassOptionsToPackage{titleline=#1}{beamerouterthemedecolines}} 15 | \DeclareOptionBeamer{watermark}{\PassOptionsToPackage{watermark=#1}{beamerouterthemedecolines}} 16 | \DeclareOptionBeamer{watermarkheight}{\PassOptionsToPackage{watermarkheight=#1}{beamerouterthemedecolines}} 17 | \DeclareOptionBeamer{watermarkheightmult}{\PassOptionsToPackage{watermarkheightmult=#1}{beamerouterthemedecolines}} 18 | 19 | \ProcessOptionsBeamer 20 | 21 | \useinnertheme{fancy} 22 | \useoutertheme{decolines} 23 | \usecolortheme{chameleon} 24 | 25 | \setbeamertemplate{navigation symbols}{} 26 | 27 | \mode 28 | 29 | -------------------------------------------------------------------------------- /slides/commits-all.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sympy/scipy-2016-tutorial/aa417427a1de2dcab2a9640b631b809d525d7929/slides/commits-all.pdf -------------------------------------------------------------------------------- /slides/commits1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sympy/scipy-2016-tutorial/aa417427a1de2dcab2a9640b631b809d525d7929/slides/commits1.pdf -------------------------------------------------------------------------------- /slides/commits2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sympy/scipy-2016-tutorial/aa417427a1de2dcab2a9640b631b809d525d7929/slides/commits2.pdf -------------------------------------------------------------------------------- /slides/django-all.txt: -------------------------------------------------------------------------------- 1 | 2793 Adrian Holovaty 2 | 1872 Malcolm Tredinnick 3 | 1700 Russell Keith-Magee 4 | 887 Jannis Leidel 5 | 884 Jacob Kaplan-Moss 6 | 775 Aymeric Augustin 7 | 671 Claude Paroz 8 | 474 Luke Plant 9 | 372 Ramiro Morales 10 | 354 Alex Gaynor 11 | 349 Tim Graham 12 | 335 Gary Wilson Jr 13 | 273 Karen Tracey 14 | 272 Justin Bronn 15 | 250 James Bennett 16 | 202 Georg Bauer 17 | 196 Anssi Kääriäinen 18 | 178 Julien Phalip 19 | 154 Carl Meyer 20 | 150 Brian Rosner 21 | 143 Timo Graham 22 | 123 Gabriel Hurley 23 | 115 Florian Apolloner 24 | 93 Ian Kelly 25 | 84 Chris Beaven 26 | 73 Marc Fargas 27 | 67 Joseph Kocherhans 28 | 67 Preston Holmes 29 | 51 Paul McMillan 30 | 46 Marc Tamlyn 31 | 44 Jarek Zgoda 32 | 44 Wilson Miner 33 | 40 Simon Meers 34 | 38 Honza Král 35 | 36 Andrew Godwin 36 | 36 Nicola Larosa 37 | 35 Baptiste Mispelon 38 | 34 Matt Boersma 39 | 33 Simon Charette 40 | 25 Simon Willison 41 | 18 Preston Timmons 42 | 17 Donald Stufft 43 | 15 Łukasz Langa 44 | 14 Ludvig Ericson 45 | 12 Erik Romijn 46 | 12 Ian Clelland 47 | 11 Honza Kral 48 | 11 Shai Berger 49 | 10 Loic Bistuer 50 | 9 Aljosa Mohorovic 51 | 7 Daniel Greenfeld 52 | 6 Andrew Jesaitis 53 | 6 Daniel Lindsley 54 | 6 David Cramer 55 | 6 Idan Gazit 56 | 6 Nick Sandford 57 | 6 Senko Rasic 58 | 6 Travis Swicegood 59 | 5 Alexey Boriskin 60 | 5 Dan Loewenherz 61 | 5 Daniele Procida 62 | 5 Gavin Wahl 63 | 5 Juan Catalano 64 | 5 Marc Garcia 65 | 5 Michael Manfre 66 | 5 Stephan Jaekel 67 | 5 Tom Christie 68 | 5 Tomek Paczkowski 69 | 4 Baptiste Darthenay 70 | 4 Danilo Bargen 71 | 4 David Fischer 72 | 4 Diederik van der Boor 73 | 4 Mike Fogel 74 | 4 Mitar 75 | 4 Silvan Spross 76 | 4 Zbigniew Siciarz 77 | 4 matiasb 78 | 3 Andrei Antoukh 79 | 3 Aviral Dasgupta 80 | 3 Bryan Veloso 81 | 3 Daniel Hepper 82 | 3 Florian Hahn 83 | 3 Horst Gutmann 84 | 3 Jacob Burch 85 | 3 Jan Bednařík 86 | 3 Marc Egli 87 | 3 Marti Raudsepp 88 | 3 Mike Grouchy 89 | 3 Nick Martini 90 | 3 Not Carl 91 | 3 Piet Delport 92 | 3 Tai Lee 93 | 3 Wiktor Kolodziej 94 | 3 Wilfred Hughes 95 | 3 Yohan Boniface 96 | 2 Alasdair Nicol 97 | 2 Andrew Badr 98 | 2 Anton Baklanov 99 | 2 Anton Danilchenko 100 | 2 Anton I. Sipos 101 | 2 Audrey Roy 102 | 2 Bojan Mihelac 103 | 2 Brian Galey 104 | 2 Bruno Renié 105 | 2 Camilo Nova 106 | 2 Chris Streeter 107 | 2 Collin Anderson 108 | 2 Dmitry Medvinsky 109 | 2 Flavio Curella 110 | 2 Gabe Jackson 111 | 2 George Song 112 | 2 Gilberto Gonçalves 113 | 2 Jaap Roes 114 | 2 Jeremy Dunck 115 | 2 Jeroen Dekkers 116 | 2 Jorge Bastida 117 | 2 Klaas van Schelven 118 | 2 Konrad Hałas 119 | 2 Lee Reilly 120 | 2 Marcin Biernat 121 | 2 Mathijs de Bruin 122 | 2 Matt Robenolt 123 | 2 Matt Stevens 124 | 2 Matthew Tretter 125 | 2 Mike Johnson 126 | 2 Pablo Recio 127 | 2 Ryan Kaskel 128 | 2 Selwin Ong 129 | 2 Shabda Raaj 130 | 2 Stephen Burrows 131 | 2 Thomas Thurman 132 | 2 Tom Insam 133 | 2 Tomasz Rybak 134 | 2 konarkmodi 135 | 2 leandrafinger 136 | 2 martin.bohacek 137 | 2 nklas 138 | 1 Aaron Cannon 139 | 1 Adam Wentz 140 | 1 Adrien Lemaire 141 | 1 Aleksandra Sendecka 142 | 1 Alex Hunley 143 | 1 Alex Ogier 144 | 1 Alisson 145 | 1 Ana Krivokapic 146 | 1 Anders Kaseorg 147 | 1 Andrea Crotti 148 | 1 Andreas 149 | 1 Andreas Hug 150 | 1 Andrew Brown 151 | 1 Andrew Gorcester 152 | 1 Andrews Medina 153 | 1 Andy Dirnberger 154 | 1 Angeline Tan 155 | 1 Axel Haustant 156 | 1 Axel Hecht 157 | 1 Bas Peschier 158 | 1 Ben Konrath 159 | 1 Ben Longden 160 | 1 Ben Spaulding 161 | 1 Benjamin Peterson 162 | 1 Boo 163 | 1 Bozidar Benko 164 | 1 Brad Pitcher 165 | 1 Brandon Adams 166 | 1 Brendan MacDonell 167 | 1 Brent O'Connor 168 | 1 Brett Koonce 169 | 1 CHI Cheng 170 | 1 Caleb Smith 171 | 1 Carlos Palol 172 | 1 Carny Cheng 173 | 1 Chris Khoo 174 | 1 Chris Lawlor 175 | 1 Chris McDonald 176 | 1 Chris Wilson 177 | 1 Christian Metts 178 | 1 Christoph Sieghart 179 | 1 Christopher Allen-Poole 180 | 1 Christopher Medrela 181 | 1 Christos Kontas 182 | 1 Craig Blaszczyk 183 | 1 Daniel D. Beck 184 | 1 Daniel Roseman 185 | 1 Dave Hall 186 | 1 Deni Bertovic 187 | 1 Deric Crago 188 | 1 Dmitry Shevchenko 189 | 1 Don Spaulding 190 | 1 Eduardo Cereto Carvalho 191 | 1 Edward Tjörnhammar 192 | 1 Emil Stenström 193 | 1 Enrico Ehrhardt 194 | 1 Eric Davis 195 | 1 Eric Florenzano 196 | 1 Eric Urban 197 | 1 Evan Carmi 198 | 1 Evrim Çabuk 199 | 1 Filipa Andrade 200 | 1 Gabriel Grant 201 | 1 George Hickman 202 | 1 Glen Robertson 203 | 1 Graham Dumpleton 204 | 1 Grzegorz Nosek 205 | 1 Guilherme Gondim 206 | 1 Hannes Struss 207 | 1 Harm Geerts 208 | 1 Hernan Lozano 209 | 1 Hiroki Kiyohara 210 | 1 Igor Támara 211 | 1 Issac Kelly 212 | 1 James Aylett 213 | 1 James Tauber 214 | 1 Jani Tiainen 215 | 1 Jann Kleen 216 | 1 Jason Davies 217 | 1 Jason Yan 218 | 1 Javier Mansilla 219 | 1 Jens Page 220 | 1 Jeremy Cowgar 221 | 1 Joe Friedl 222 | 1 Joeri Bekker 223 | 1 Johan Charpentier 224 | 1 John Paulett 225 | 1 JonLoy 226 | 1 Jonatan Heyman 227 | 1 Jonathan Loy 228 | 1 Josh Smeaton 229 | 1 Juan Pedro Fisanotti 230 | 1 Juan Riaza 231 | 1 Julian Bez 232 | 1 Justin Turner Arthur 233 | 1 Karol Sikora 234 | 1 Kaspars Sprogis 235 | 1 Kenny Rachuonyo 236 | 1 Kent Hauser 237 | 1 Kevin McCarthy 238 | 1 Krzysztof Jurewicz 239 | 1 Kyle Fuller 240 | 1 Lennart Regebro 241 | 1 Loic Raucy 242 | 1 Lucian Ursu 243 | 1 Ludovic Delaveau 244 | 1 Maik Hoepfel 245 | 1 Marc Aymerich 246 | 1 Marc Neuwirth 247 | 1 Mark Huang 248 | 1 Markus Zapke-Gründemann 249 | 1 Martey Dodoo 250 | 1 Martijn Vermaat 251 | 1 Martin Brochhaus 252 | 1 Mateusz Haligowski 253 | 1 Matthew Somerville 254 | 1 Matthew Wood 255 | 1 Michael Blume 256 | 1 Michael Farrell 257 | 1 Michael Johnson 258 | 1 Michael Kelly 259 | 1 Michael Newman 260 | 1 Michael van Tellingen 261 | 1 Michal Petrucha 262 | 1 Mike Yumatov 263 | 1 Nicolas Ippolito 264 | 1 Nimesh Ghelani 265 | 1 Nuno Maltez 266 | 1 Oliver Beattie 267 | 1 Olivier Sels 268 | 1 Pablo Sanfilippo 269 | 1 Panagiotis H.M. Issaris 270 | 1 Patryk Zawadzki 271 | 1 Paul Collins 272 | 1 Paul Tax 273 | 1 Pedro Mourelle 274 | 1 Peter Inglesby 275 | 1 Rafal Stozek 276 | 1 Rafik Draoui 277 | 1 Raúl Cumplido 278 | 1 Remco Wendt 279 | 1 Renato Pedigoni 280 | 1 René Fleschenberg 281 | 1 Richard Cornish 282 | 1 Rigel Di Scala 283 | 1 Riley Strong 284 | 1 Rocky Meza 285 | 1 Roman Haritonov 286 | 1 Ryan West 287 | 1 Samuel Sutch 288 | 1 Scott Klein 289 | 1 Sean Breant 290 | 1 Sebastián Magrí 291 | 1 Simeon Visser 292 | 1 Simon Kerr 293 | 1 Stefan "hr" Berder 294 | 1 Stefan Kjartansson 295 | 1 Stefan hr Berder 296 | 1 Stratos Moros 297 | 1 Thomas Bartelmess 298 | 1 Tim Saylor 299 | 1 Tobias Carlander 300 | 1 Tobias McNulty 301 | 1 Tom Mortimer-Jones 302 | 1 Tom Terrace 303 | 1 Tom V 304 | 1 Tomasz Jaskowski 305 | 1 Tome Cvitan 306 | 1 Tomáš Ehrlich 307 | 1 Tyler Ball 308 | 1 Ulrich Petri 309 | 1 Val Neekman 310 | 1 Vebjorn Ljosa 311 | 1 Vinod Kurup 312 | 1 Vladimir A Filonov 313 | 1 Vladimír Macek 314 | 1 Vlastimil Zíma 315 | 1 WoLpH 316 | 1 anatoly techtonik 317 | 1 bbjay 318 | 1 danger 319 | 1 fako 320 | 1 ferhat elmas 321 | 1 jakul 322 | 1 jktravis 323 | 1 jnns 324 | 1 juanpex 325 | 1 kspi 326 | 1 maurizio 327 | 1 mitnk 328 | 1 mpaolini 329 | 1 orblivion 330 | 1 postrational 331 | 1 russkel 332 | 1 shepdl 333 | 1 vanschelven 334 | 1 vkuzma 335 | 1 yishaibeeri 336 | 1 zhongqi 337 | 1 zyegfryed 338 | -------------------------------------------------------------------------------- /slides/django-year.txt: -------------------------------------------------------------------------------- 1 | 498 Claude Paroz 2 | 481 Aymeric Augustin 3 | 349 Tim Graham 4 | 162 Anssi Kääriäinen 5 | 111 Florian Apolloner 6 | 105 Alex Gaynor 7 | 82 Ramiro Morales 8 | 67 Preston Holmes 9 | 46 Marc Tamlyn 10 | 37 Carl Meyer 11 | 36 Julien Phalip 12 | 35 Baptiste Mispelon 13 | 33 Russell Keith-Magee 14 | 31 Simon Charette 15 | 26 Jacob Kaplan-Moss 16 | 26 Jannis Leidel 17 | 23 Luke Plant 18 | 21 Adrian Holovaty 19 | 20 Justin Bronn 20 | 18 Preston Timmons 21 | 17 Donald Stufft 22 | 15 James Bennett 23 | 15 Łukasz Langa 24 | 14 Andrew Godwin 25 | 13 Honza Král 26 | 12 Erik Romijn 27 | 12 Ian Clelland 28 | 11 Shai Berger 29 | 10 Loic Bistuer 30 | 9 Karen Tracey 31 | 9 Simon Meers 32 | 7 Daniel Greenfeld 33 | 7 Honza Kral 34 | 6 Andrew Jesaitis 35 | 6 Daniel Lindsley 36 | 6 David Cramer 37 | 6 Nick Sandford 38 | 6 Senko Rasic 39 | 5 Alexey Boriskin 40 | 5 Dan Loewenherz 41 | 5 Daniele Procida 42 | 5 Gavin Wahl 43 | 5 Juan Catalano 44 | 5 Michael Manfre 45 | 5 Stephan Jaekel 46 | 5 Tom Christie 47 | 5 Tomek Paczkowski 48 | 4 Baptiste Darthenay 49 | 4 Danilo Bargen 50 | 4 David Fischer 51 | 4 Diederik van der Boor 52 | 4 Mike Fogel 53 | 4 Mitar 54 | 4 Silvan Spross 55 | 4 Zbigniew Siciarz 56 | 4 matiasb 57 | 3 Bryan Veloso 58 | 3 Chris Beaven 59 | 3 Florian Hahn 60 | 3 Horst Gutmann 61 | 3 Jacob Burch 62 | 3 Jan Bednařík 63 | 3 Malcolm Tredinnick 64 | 3 Marc Egli 65 | 3 Marti Raudsepp 66 | 3 Mike Grouchy 67 | 3 Nick Martini 68 | 3 Piet Delport 69 | 3 Tai Lee 70 | 3 Wiktor Kolodziej 71 | 3 Wilfred Hughes 72 | 3 Yohan Boniface 73 | 2 Alasdair Nicol 74 | 2 Andrei Antoukh 75 | 2 Andrew Badr 76 | 2 Anton Baklanov 77 | 2 Anton Danilchenko 78 | 2 Anton I. Sipos 79 | 2 Bojan Mihelac 80 | 2 Brian Galey 81 | 2 Bruno Renié 82 | 2 Camilo Nova 83 | 2 Chris Streeter 84 | 2 Collin Anderson 85 | 2 Dmitry Medvinsky 86 | 2 Flavio Curella 87 | 2 Gilberto Gonçalves 88 | 2 Jaap Roes 89 | 2 Jeremy Dunck 90 | 2 Jeroen Dekkers 91 | 2 Jorge Bastida 92 | 2 Klaas van Schelven 93 | 2 Konrad Hałas 94 | 2 Marcin Biernat 95 | 2 Mathijs de Bruin 96 | 2 Matt Robenolt 97 | 2 Matt Stevens 98 | 2 Mike Johnson 99 | 2 Pablo Recio 100 | 2 Ryan Kaskel 101 | 2 Selwin Ong 102 | 2 Shabda Raaj 103 | 2 Stephen Burrows 104 | 2 Thomas Thurman 105 | 2 Tom Insam 106 | 2 Tomasz Rybak 107 | 2 Travis Swicegood 108 | 2 konarkmodi 109 | 2 leandrafinger 110 | 2 nklas 111 | 1 Aaron Cannon 112 | 1 Adam Wentz 113 | 1 Adrien Lemaire 114 | 1 Aleksandra Sendecka 115 | 1 Alex Hunley 116 | 1 Alisson 117 | 1 Ana Krivokapic 118 | 1 Anders Kaseorg 119 | 1 Andrea Crotti 120 | 1 Andreas 121 | 1 Andreas Hug 122 | 1 Andrew Brown 123 | 1 Andrew Gorcester 124 | 1 Andrews Medina 125 | 1 Andy Dirnberger 126 | 1 Angeline Tan 127 | 1 Axel Haustant 128 | 1 Axel Hecht 129 | 1 Bas Peschier 130 | 1 Ben Konrath 131 | 1 Ben Longden 132 | 1 Ben Spaulding 133 | 1 Benjamin Peterson 134 | 1 Bozidar Benko 135 | 1 Brad Pitcher 136 | 1 Brandon Adams 137 | 1 Brendan MacDonell 138 | 1 Brent O'Connor 139 | 1 Brett Koonce 140 | 1 Brian Rosner 141 | 1 CHI Cheng 142 | 1 Caleb Smith 143 | 1 Carlos Palol 144 | 1 Carny Cheng 145 | 1 Chris Khoo 146 | 1 Chris Lawlor 147 | 1 Chris McDonald 148 | 1 Chris Wilson 149 | 1 Christian Metts 150 | 1 Christoph Sieghart 151 | 1 Christopher Allen-Poole 152 | 1 Christopher Medrela 153 | 1 Christos Kontas 154 | 1 Craig Blaszczyk 155 | 1 Daniel D. Beck 156 | 1 Dave Hall 157 | 1 Deni Bertovic 158 | 1 Deric Crago 159 | 1 Dmitry Shevchenko 160 | 1 Don Spaulding 161 | 1 Eduardo Cereto Carvalho 162 | 1 Edward Tjörnhammar 163 | 1 Emil Stenström 164 | 1 Enrico Ehrhardt 165 | 1 Eric Davis 166 | 1 Eric Florenzano 167 | 1 Eric Urban 168 | 1 Evan Carmi 169 | 1 Evrim Çabuk 170 | 1 Filipa Andrade 171 | 1 Gabe Jackson 172 | 1 Gabriel Grant 173 | 1 Gabriel Hurley 174 | 1 George Hickman 175 | 1 George Song 176 | 1 Grzegorz Nosek 177 | 1 Guilherme Gondim 178 | 1 Hannes Struss 179 | 1 Harm Geerts 180 | 1 Hernan Lozano 181 | 1 Hiroki Kiyohara 182 | 1 Igor Támara 183 | 1 Issac Kelly 184 | 1 James Aylett 185 | 1 Jani Tiainen 186 | 1 Jason Yan 187 | 1 Javier Mansilla 188 | 1 Joe Friedl 189 | 1 Joeri Bekker 190 | 1 Johan Charpentier 191 | 1 John Paulett 192 | 1 JonLoy 193 | 1 Jonatan Heyman 194 | 1 Jonathan Loy 195 | 1 Josh Smeaton 196 | 1 Juan Pedro Fisanotti 197 | 1 Justin Turner Arthur 198 | 1 Karol Sikora 199 | 1 Kaspars Sprogis 200 | 1 Kenny Rachuonyo 201 | 1 Kent Hauser 202 | 1 Kevin McCarthy 203 | 1 Krzysztof Jurewicz 204 | 1 Lennart Regebro 205 | 1 Loic Raucy 206 | 1 Lucian Ursu 207 | 1 Ludovic Delaveau 208 | 1 Maik Hoepfel 209 | 1 Marc Aymerich 210 | 1 Mark Huang 211 | 1 Markus Zapke-Gründemann 212 | 1 Martey Dodoo 213 | 1 Martijn Vermaat 214 | 1 Martin Brochhaus 215 | 1 Mateusz Haligowski 216 | 1 Matthew Somerville 217 | 1 Matthew Tretter 218 | 1 Matthew Wood 219 | 1 Michael Blume 220 | 1 Michael Farrell 221 | 1 Michael Johnson 222 | 1 Michael Kelly 223 | 1 Michael van Tellingen 224 | 1 Michal Petrucha 225 | 1 Nicolas Ippolito 226 | 1 Nimesh Ghelani 227 | 1 Nuno Maltez 228 | 1 Oliver Beattie 229 | 1 Olivier Sels 230 | 1 Pablo Sanfilippo 231 | 1 Panagiotis H.M. Issaris 232 | 1 Patryk Zawadzki 233 | 1 Paul Collins 234 | 1 Paul Tax 235 | 1 Pedro Mourelle 236 | 1 Peter Inglesby 237 | 1 Rafal Stozek 238 | 1 Rafik Draoui 239 | 1 Raúl Cumplido 240 | 1 Remco Wendt 241 | 1 Renato Pedigoni 242 | 1 René Fleschenberg 243 | 1 Richard Cornish 244 | 1 Rigel Di Scala 245 | 1 Riley Strong 246 | 1 Rocky Meza 247 | 1 Roman Haritonov 248 | 1 Ryan West 249 | 1 Sean Breant 250 | 1 Sebastián Magrí 251 | 1 Simeon Visser 252 | 1 Simon Kerr 253 | 1 Stefan "hr" Berder 254 | 1 Stefan Kjartansson 255 | 1 Stefan hr Berder 256 | 1 Thomas Bartelmess 257 | 1 Tobias Carlander 258 | 1 Tobias McNulty 259 | 1 Tom Mortimer-Jones 260 | 1 Tom V 261 | 1 Tomasz Jaskowski 262 | 1 Tome Cvitan 263 | 1 Tomáš Ehrlich 264 | 1 Ulrich Petri 265 | 1 Val Neekman 266 | 1 Vebjorn Ljosa 267 | 1 Vinod Kurup 268 | 1 Vladimir A Filonov 269 | 1 Vladimír Macek 270 | 1 Vlastimil Zíma 271 | 1 WoLpH 272 | 1 bbjay 273 | 1 fako 274 | 1 ferhat elmas 275 | 1 jktravis 276 | 1 jnns 277 | 1 juanpex 278 | 1 kspi 279 | 1 mitnk 280 | 1 mpaolini 281 | 1 orblivion 282 | 1 postrational 283 | 1 russkel 284 | 1 shepdl 285 | 1 vanschelven 286 | 1 vkuzma 287 | 1 yishaibeeri 288 | 1 zhongqi 289 | 1 zyegfryed 290 | -------------------------------------------------------------------------------- /slides/ipython-all.txt: -------------------------------------------------------------------------------- 1 | 2200 Benjamin Ragan-Kelley 2 | 1673 Fernando Perez 3 | 1306 Brian E. Granger 4 | 926 Thomas Kluyver 5 | 802 Ville M. Vainio 6 | 648 Matthias BUSSONNIER 7 | 287 Evan Patterson 8 | 206 Bradley M. Froehle 9 | 180 Gael Varoquaux 10 | 132 Takafumi Arakaki 11 | 112 Walter Doerwald 12 | 92 Paul Ivanov 13 | 70 Laurent Dufréchou 14 | 54 Jörgen Stenarson 15 | 52 Barry Wark 16 | 50 Robert Kern 17 | 47 Stefan van der Walt 18 | 45 Julian Taylor 19 | 35 Greg Caporaso 20 | 29 Matthias Bussonnier 21 | 28 Jonathan Taylor 22 | 25 Jorgen Stenarson 23 | 25 Thomas Spura 24 | 22 Jörgen Stenarson 25 | 20 Jan Schulz 26 | 20 Nicolas Rougier 27 | 17 Jason Grout 28 | 17 Jonathan March 29 | 16 Christian Boos 30 | 15 Erik Tollerud 31 | 15 Omar Andrés Zapata Mesa 32 | 14 Robert McGibbon 33 | 13 Michael Droettboom 34 | 13 Piti Ongmongkolkul 35 | 13 Puneeth Chaganti 36 | 13 Satrajit Ghosh 37 | 12 Aaron Meurer 38 | 12 David Warde-Farley 39 | 11 Jens Hedegaard Nielsen 40 | 11 W. Trevor King 41 | 10 Aron Ahmadia 42 | 10 Cameron Bates 43 | 10 Timo Paulssen 44 | 10 darren.dale 45 | 10 jdh2358 46 | 9 Administrator 47 | 9 Brandon Parsons 48 | 9 Pauli Virtanen 49 | 9 Robert Marchman 50 | 9 Scott Tsai 51 | 9 Skipper Seabold 52 | 9 jstenar 53 | 8 Andrew Straw 54 | 8 Martin Spacek 55 | 8 Ryan May 56 | 7 Danny Staple 57 | 7 Darren Dale 58 | 7 Thomi Richards 59 | 7 mcelrath 60 | 7 mr.Shu 61 | 7 vds 62 | 6 Daniel Velkov 63 | 6 Dav Clark 64 | 6 Diane Trout 65 | 6 Dominik Dabrowski 66 | 6 Jens H. Nielsen 67 | 6 Mark Voorhies 68 | 6 Siyu Zhang 69 | 6 Tom Fetherston 70 | 5 David Hirschfeld 71 | 5 David Wyde 72 | 5 Eugene Van den Bulke 73 | 5 Ian Murray 74 | 5 Joon Ro 75 | 5 Mikhail Korobov 76 | 5 Pete Aykroyd 77 | 5 Tim Couper 78 | 5 dan.milstein 79 | 4 Ahmet Bakan 80 | 4 Ben Edwards 81 | 4 Carlos Cordoba 82 | 4 Christoph Gohlke 83 | 4 Frank Murphy 84 | 4 Jez Ng 85 | 4 Juergen Hasch 86 | 4 Mani chandra 87 | 4 Olivier Verdier 88 | 4 Prabhu Ramachandran 89 | 4 chapmanb 90 | 4 drevicko 91 | 4 v923z 92 | 3 Andrew Vandever 93 | 3 Antony Lee 94 | 3 Cavendish McKay 95 | 3 Ernie French 96 | 3 Felix Werner 97 | 3 Kyle Kelley 98 | 3 Marc Abramowitz 99 | 3 Mark Wiebe 100 | 3 Omar Andres Zapata Mesa 101 | 3 Pietro Berkes 102 | 3 Roy Hyunjin Han 103 | 3 Steven Johnson 104 | 3 Szabolcs Horvát 105 | 3 Thomas Hisch 106 | 3 Valentin Haenel 107 | 3 Yaroslav Halchenko 108 | 3 dkua 109 | 3 fawce 110 | 3 muzgash 111 | 3 s8weber 112 | 2 Alcides 113 | 2 Alex Kramer 114 | 2 Benjie Chen 115 | 2 Chris Beaumont 116 | 2 Chris Laumann 117 | 2 Gerardo 118 | 2 Guy Haskin Fernald 119 | 2 Hans Meine 120 | 2 Jens H Nielsen 121 | 2 Joseph Lansdowne 122 | 2 Justin Riley 123 | 2 Kent Inverarity 124 | 2 Luis Pedro Coelho 125 | 2 Matt Cottingham 126 | 2 Matthew Brett 127 | 2 Maxim Grechkin 128 | 2 Michael Shuffett 129 | 2 Mike Hansen 130 | 2 Owen Healy 131 | 2 Pawel Jasinski 132 | 2 Ross Jones 133 | 2 Toby Gilham 134 | 2 debjan 135 | 2 macgyver 136 | 2 tzanko 137 | 2 vankayala sowjanya 138 | 2 y-p 139 | 1 Aaron Culich 140 | 1 Adam Davis 141 | 1 Aenugu Sai Kiran Reddy 142 | 1 Alberto Valverde 143 | 1 Anders Hovmöller 144 | 1 Andrew Giessel 145 | 1 Andrew Spiers 146 | 1 André Matos 147 | 1 Anton Akhmerov 148 | 1 Antonio Cuni 149 | 1 Beetoju Anuradha 150 | 1 Benedikt Sauer 151 | 1 Benjamin Jones 152 | 1 Benjamin Thyreau 153 | 1 Bernard Paulus 154 | 1 Bernardo B. Marques 155 | 1 Boris de Laage 156 | 1 Brad Reisfeld 157 | 1 Bradley Froehle 158 | 1 Cody Precord 159 | 1 Corran Webster 160 | 1 DamianHeard 161 | 1 Dan Kilman 162 | 1 Dan McDougall 163 | 1 David 164 | 1 David Zderic 165 | 1 Donald Curtis 166 | 1 Dražen Lučanin 167 | 1 Eric Firing 168 | 1 Erik M. Bray 169 | 1 Gabriel 170 | 1 Grahame Bowland 171 | 1 Hannes Schulz 172 | 1 Harry Moreno 173 | 1 Jack Feser 174 | 1 Jeff Knisley 175 | 1 Jerry Fowler 176 | 1 Johann Cohen-Tanugi 177 | 1 John Zwinck 178 | 1 Jussi Sainio 179 | 1 Kefu Chai 180 | 1 Kiorky 181 | 1 Konrad Hinsen 182 | 1 Lars Solberg 183 | 1 Lessandro Mariano 184 | 1 Mark E. Smith 185 | 1 Mark Sienkiewicz at STScI 186 | 1 MercuryRising 187 | 1 Michał Górny 188 | 1 Nathan Goldbaum 189 | 1 Nathan Rice 190 | 1 Nick Tarleton 191 | 1 Ohad Ravid 192 | 1 Olivier Grisel 193 | 1 Pablo Winant 194 | 1 Pankaj Pandey 195 | 1 Paul 196 | 1 Piotr Zolnierczuk 197 | 1 Ramana 198 | 1 Rob Young 199 | 1 Rui Pereira 200 | 1 Rustam Safin 201 | 1 Samuel Ainsworth 202 | 1 Sathesh Chandra 203 | 1 Sean Vig 204 | 1 Sebastian Busch 205 | 1 Skylar Saveland 206 | 1 Stephan Peijnik 207 | 1 Steven Bethard 208 | 1 Steven Silvester 209 | 1 Takeshi Kanmae 210 | 1 Ted Wright 211 | 1 Thomas Robitaille 212 | 1 Thomas Weißschuh 213 | 1 Timothy O'Donnell 214 | 1 Tom MacWright 215 | 1 Tony S Yu 216 | 1 Vishal Vatsa 217 | 1 Vishnu S G 218 | 1 Yoav Ram 219 | 1 Zoltán Vörös 220 | 1 anatoly techtonik 221 | 1 andy wilson 222 | 1 chebee7i 223 | 1 codebraker 224 | 1 codespaced 225 | 1 klonuo 226 | 1 muzuiget 227 | 1 tcmulcahy 228 | 1 teegaar 229 | 1 ugurthemaster 230 | 1 urielshaolin 231 | 1 vds2212 232 | 1 wilsaj 233 | -------------------------------------------------------------------------------- /slides/ipython-year.txt: -------------------------------------------------------------------------------- 1 | 762 Benjamin Ragan-Kelley 2 | 370 Matthias BUSSONNIER 3 | 245 Brian E. Granger 4 | 223 Thomas Kluyver 5 | 154 Bradley M. Froehle 6 | 107 Fernando Perez 7 | 106 Takafumi Arakaki 8 | 35 Greg Caporaso 9 | 29 Matthias Bussonnier 10 | 22 Jörgen Stenarson 11 | 20 Jan Schulz 12 | 19 Paul Ivanov 13 | 17 Evan Patterson 14 | 16 Julian Taylor 15 | 14 Jörgen Stenarson 16 | 14 Robert McGibbon 17 | 13 Jason Grout 18 | 10 Cameron Bates 19 | 10 Piti Ongmongkolkul 20 | 10 W. Trevor King 21 | 9 Robert Marchman 22 | 8 Aaron Meurer 23 | 8 Aron Ahmadia 24 | 8 Ryan May 25 | 7 Danny Staple 26 | 7 David Warde-Farley 27 | 7 mr.Shu 28 | 6 Diane Trout 29 | 6 Dominik Dabrowski 30 | 6 Siyu Zhang 31 | 5 David Wyde 32 | 5 Eugene Van den Bulke 33 | 5 Jonathan March 34 | 5 Joon Ro 35 | 5 Mikhail Korobov 36 | 4 Ahmet Bakan 37 | 4 David Hirschfeld 38 | 4 Erik Tollerud 39 | 4 Frank Murphy 40 | 4 Juergen Hasch 41 | 4 Robert Kern 42 | 4 Thomas Spura 43 | 4 chapmanb 44 | 4 drevicko 45 | 4 v923z 46 | 3 Andrew Vandever 47 | 3 Antony Lee 48 | 3 Cavendish McKay 49 | 3 Christoph Gohlke 50 | 3 Jens H. Nielsen 51 | 3 Kyle Kelley 52 | 3 Pietro Berkes 53 | 3 dkua 54 | 3 jstenar 55 | 2 Benjie Chen 56 | 2 Carlos Cordoba 57 | 2 Chris Beaumont 58 | 2 Chris Laumann 59 | 2 Guy Haskin Fernald 60 | 2 Jez Ng 61 | 2 Joseph Lansdowne 62 | 2 Martin Spacek 63 | 2 Maxim Grechkin 64 | 2 Michael Droettboom 65 | 2 Michael Shuffett 66 | 2 Owen Healy 67 | 2 Pawel Jasinski 68 | 2 Puneeth Chaganti 69 | 2 debjan 70 | 2 mcelrath 71 | 2 s8weber 72 | 2 y-p 73 | 1 Adam Davis 74 | 1 Alberto Valverde 75 | 1 Alex Kramer 76 | 1 Anders Hovmöller 77 | 1 Andrew Spiers 78 | 1 Anton Akhmerov 79 | 1 Benedikt Sauer 80 | 1 Benjamin Jones 81 | 1 Boris de Laage 82 | 1 Corran Webster 83 | 1 DamianHeard 84 | 1 Dan Kilman 85 | 1 Dan McDougall 86 | 1 Donald Curtis 87 | 1 Dražen Lučanin 88 | 1 Erik M. Bray 89 | 1 Hans Meine 90 | 1 Harry Moreno 91 | 1 Jack Feser 92 | 1 Jeff Knisley 93 | 1 Jerry Fowler 94 | 1 John Zwinck 95 | 1 Jussi Sainio 96 | 1 Konrad Hinsen 97 | 1 Lars Solberg 98 | 1 Lessandro Mariano 99 | 1 Mark Sienkiewicz at STScI 100 | 1 MercuryRising 101 | 1 Michał Górny 102 | 1 Nathan Goldbaum 103 | 1 Ohad Ravid 104 | 1 Olivier Grisel 105 | 1 Olivier Verdier 106 | 1 Rob Young 107 | 1 Rui Pereira 108 | 1 Rustam Safin 109 | 1 Samuel Ainsworth 110 | 1 Sean Vig 111 | 1 Skylar Saveland 112 | 1 Steven Silvester 113 | 1 Takeshi Kanmae 114 | 1 Thomas Robitaille 115 | 1 Thomas Weißschuh 116 | 1 Timothy O'Donnell 117 | 1 Yoav Ram 118 | 1 Zoltán Vörös 119 | 1 codebraker 120 | 1 codespaced 121 | 1 klonuo 122 | 1 tcmulcahy 123 | 1 teegaar 124 | 1 ugurthemaster 125 | 1 urielshaolin 126 | -------------------------------------------------------------------------------- /slides/linux-all.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sympy/scipy-2016-tutorial/aa417427a1de2dcab2a9640b631b809d525d7929/slides/linux-all.txt -------------------------------------------------------------------------------- /slides/matplotlib-all.txt: -------------------------------------------------------------------------------- 1 | 2741 Michael Droettboom 2 | 2145 John Hunter 3 | 1150 Eric Firing 4 | 442 Darren Dale 5 | 417 Jae-Joon Lee 6 | 272 Andrew Straw 7 | 263 Steve Chaplin 8 | 262 Phil Elson 9 | 252 Damon McDougall 10 | 230 Jouni K. Seppänen 11 | 217 Ben Root 12 | 191 Ryan May 13 | 149 Charles Moad 14 | 125 Nelle Varoquaux 15 | 112 Tony S Yu 16 | 72 Christoph Gohlke 17 | 60 Jeff Whitaker 18 | 57 Thomas A Caswell 19 | 56 Matt Giuca 20 | 56 Paul Ivanov 21 | 53 Manuel Metz 22 | 48 Norbert Nemec 23 | 46 Daniel Hyams 24 | 45 James Evans 25 | 45 pwuertz 26 | 42 Todd Miller 27 | 42 pkienzle 28 | 36 endolith 29 | 33 Michiel de Hoon 30 | 33 pelson 31 | 31 Ian Thomas 32 | 29 Paul Barret 33 | 25 Martin Spacek 34 | 23 Jens H. Nielsen 35 | 23 Jochen Voss 36 | 22 Reinier Heeres 37 | 21 Edin Salkovic 38 | 19 Todd Jennings 39 | 18 Nic Eggert 40 | 16 David Kaplan 41 | 16 Fernando Perez 42 | 16 Travis Oliphant 43 | 15 Peter Würtz 44 | 15 Sameer D'Costa 45 | 14 Gerald Storer 46 | 13 Jake Vanderplas 47 | 13 Kevin Davies 48 | 13 Maximilian Albert 49 | 13 Wes Campaigne 50 | 12 Cimarron Mittelsteadt 51 | 12 Grégory Lielens 52 | 12 Matthew Emmett 53 | 12 Piti Ongmongkolkul 54 | 10 Jens Hedegaard Nielsen 55 | 10 Stefan van der Walt 56 | 9 Craig M 57 | 8 Brian Mattern 58 | 8 Geoffroy Billotey 59 | 8 Michael Welter 60 | 8 Mike Kaufman 61 | 8 Till Stensitzki 62 | 7 Neil 63 | 7 Thomas Robitaille 64 | 7 fgb 65 | 6 Amit Aronovitch 66 | 6 Amy 67 | 6 Andrew Dawson 68 | 6 Graham Poulter 69 | 6 Jan-Philip Gehrcke 70 | 6 Joe Kington 71 | 6 Robert Johansson 72 | 5 Anton Akhmerov 73 | 5 David Huard 74 | 5 James R. Evans 75 | 5 Ken McIvor 76 | 5 bblay 77 | 4 Cameron Bates 78 | 4 Hubert Holin 79 | 4 Julien Schueller 80 | 4 Leo Singer 81 | 4 Marc Abramowitz 82 | 4 Matt Newville 83 | 4 Skipper Seabold 84 | 4 Takafumi Arakaki 85 | 4 Thomas Kluyver 86 | 4 Tobias Megies 87 | 4 Víctor Terrón 88 | 4 vbr 89 | 3 Ahmet Bakan 90 | 3 Bradley M. Froehle 91 | 3 Chris Beaumont 92 | 3 Christoph Dann 93 | 3 David Trémouilles 94 | 3 Hans Meine 95 | 3 Jeffrey Bingham 96 | 3 Maximilian Trescher 97 | 3 MinRK 98 | 3 Pauli Virtanen 99 | 3 Simon Cross 100 | 3 Tobias Hoppe 101 | 3 butterw 102 | 3 dhyams 103 | 2 Aaron Boushley 104 | 2 Adam Ginsburg 105 | 2 Alejandro Dubrovsky 106 | 2 Arnaud Gardelein 107 | 2 Ben Gamari 108 | 2 Brett Graham 109 | 2 Evan Davey 110 | 2 Francesco Montesano 111 | 2 Gellule Xg 112 | 2 Jack Kelly 113 | 2 Jeff Bingham 114 | 2 Jeremy O'Donoghue 115 | 2 Julian Taylor 116 | 2 Lodato Luciano 117 | 2 Pim Schellart 118 | 2 Russell Owen 119 | 2 Ryan Dale 120 | 2 Sandro Tosi 121 | 2 Sergey Koposov 122 | 2 Stefano Rivera 123 | 2 Tomas Kazmar 124 | 2 aseagram 125 | 2 drevicko 126 | 2 gitj 127 | 1 Adrian Price-Whelan 128 | 1 Alex C. Szatmary 129 | 1 Andreas Hilboll 130 | 1 Antony Lee 131 | 1 Binglin Chang 132 | 1 Bussonnier Matthias 133 | 1 C. Gohlke 134 | 1 Carl Michal 135 | 1 Corey Farwell 136 | 1 Craig Tenney 137 | 1 Ezra Peisach 138 | 1 Guillaume Gay 139 | 1 Ignas Anikevicius (gns_ank) 140 | 1 Jack (aka Daniel) Kelly 141 | 1 Jarrod Millman 142 | 1 Jason Grout 143 | 1 Jeremy Thurgood 144 | 1 Jim Radford 145 | 1 Jonathan Waltman 146 | 1 Julien Woillez 147 | 1 Lance Hepler 148 | 1 Martin Teichmann 149 | 1 Martin Ueding 150 | 1 Matthias BUSSONNIER 151 | 1 Min RK 152 | 1 Miriam Sierig 153 | 1 Nick Semenkovich 154 | 1 Nicolas Pinto 155 | 1 Nikolay Vyahhi 156 | 1 Pascal Bugnion 157 | 1 Paul Hobson 158 | 1 Perry Greenfield 159 | 1 Pierre Haessig 160 | 1 Richard Hattersley 161 | 1 Richard Trieu 162 | 1 Ryan Blomberg 163 | 1 Sebastian Pinnau 164 | 1 Takeshi Kanmae 165 | 1 Tor Colvin 166 | 1 Wouter Overmeire 167 | 1 Yann Tambouret 168 | 1 Zach Pincus 169 | 1 bev-a-tron 170 | 1 burrbull 171 | 1 goir 172 | 1 jschueller 173 | 1 krischer 174 | 1 mcelrath 175 | 1 montefra 176 | 1 torfbolt 177 | 1 ugurthemaster 178 | -------------------------------------------------------------------------------- /slides/matplotlib-year.txt: -------------------------------------------------------------------------------- 1 | 676 Michael Droettboom 2 | 246 Damon McDougall 3 | 204 Phil Elson 4 | 147 Eric Firing 5 | 125 Nelle Varoquaux 6 | 61 Tony S Yu 7 | 57 Ben Root 8 | 57 Thomas A Caswell 9 | 56 Matt Giuca 10 | 47 Christoph Gohlke 11 | 45 pwuertz 12 | 34 Paul Ivanov 13 | 31 Daniel Hyams 14 | 29 pelson 15 | 25 Jae-Joon Lee 16 | 22 Ian Thomas 17 | 21 Ryan May 18 | 19 Todd Jennings 19 | 18 Jens H. Nielsen 20 | 18 Martin Spacek 21 | 18 Nic Eggert 22 | 15 Peter Würtz 23 | 13 Jake Vanderplas 24 | 13 Maximilian Albert 25 | 13 Wes Campaigne 26 | 12 Cimarron Mittelsteadt 27 | 9 Matthew Emmett 28 | 8 Brian Mattern 29 | 8 Geoffroy Billotey 30 | 8 Kevin Davies 31 | 8 Michael Welter 32 | 8 Michiel de Hoon 33 | 8 Till Stensitzki 34 | 6 Amit Aronovitch 35 | 6 Amy 36 | 6 Jan-Philip Gehrcke 37 | 5 Anton Akhmerov 38 | 5 Joe Kington 39 | 5 Jouni K. Seppänen 40 | 5 Thomas Robitaille 41 | 5 bblay 42 | 5 endolith 43 | 4 Andrew Dawson 44 | 4 Cameron Bates 45 | 4 Jens Hedegaard Nielsen 46 | 4 Julien Schueller 47 | 4 Leo Singer 48 | 4 Takafumi Arakaki 49 | 4 Tobias Megies 50 | 4 Víctor Terrón 51 | 4 vbr 52 | 3 Ahmet Bakan 53 | 3 Chris Beaumont 54 | 3 David Trémouilles 55 | 3 Jeffrey Bingham 56 | 3 MinRK 57 | 3 Piti Ongmongkolkul 58 | 3 Thomas Kluyver 59 | 3 dhyams 60 | 2 Adam Ginsburg 61 | 2 Alejandro Dubrovsky 62 | 2 Ben Gamari 63 | 2 Bradley M. Froehle 64 | 2 Francesco Montesano 65 | 2 Gellule Xg 66 | 2 Jack Kelly 67 | 2 James R. Evans 68 | 2 Jeff Bingham 69 | 2 John Hunter 70 | 2 Lodato Luciano 71 | 2 Pauli Virtanen 72 | 2 Ryan Dale 73 | 2 Sandro Tosi 74 | 2 Sergey Koposov 75 | 2 Tomas Kazmar 76 | 2 aseagram 77 | 2 drevicko 78 | 2 gitj 79 | 1 Adrian Price-Whelan 80 | 1 Andreas Hilboll 81 | 1 Antony Lee 82 | 1 Binglin Chang 83 | 1 Carl Michal 84 | 1 Guillaume Gay 85 | 1 Jack (aka Daniel) Kelly 86 | 1 Jonathan Waltman 87 | 1 Julien Woillez 88 | 1 Martin Teichmann 89 | 1 Martin Ueding 90 | 1 Min RK 91 | 1 Nick Semenkovich 92 | 1 Pascal Bugnion 93 | 1 Paul Hobson 94 | 1 Pierre Haessig 95 | 1 Russell Owen 96 | 1 Ryan Blomberg 97 | 1 Sebastian Pinnau 98 | 1 Takeshi Kanmae 99 | 1 Wouter Overmeire 100 | 1 bev-a-tron 101 | 1 burrbull 102 | 1 jschueller 103 | 1 krischer 104 | 1 mcelrath 105 | 1 montefra 106 | 1 torfbolt 107 | 1 ugurthemaster 108 | -------------------------------------------------------------------------------- /slides/numpy-all.txt: -------------------------------------------------------------------------------- 1 | 1989 Travis Oliphant 2 | 1516 David Cournapeau 3 | 1205 Charles Harris 4 | 1061 Pearu Peterson 5 | 746 Mark Wiebe 6 | 605 Pauli Virtanen 7 | 421 Stefan van der Walt 8 | 284 Ralf Gommers 9 | 249 cookedm 10 | 248 Eric Jones 11 | 199 pierregm 12 | 177 Robert Kern 13 | 140 Nathaniel J. Smith 14 | 127 Jarrod Millman 15 | 110 Sebastian Berg 16 | 81 Alan McIntyre 17 | 74 sasha 18 | 72 Travis E. Oliphant 19 | 69 ovillellas 20 | 64 wfspotz@sandia.gov 21 | 58 Jay Bourque 22 | 52 Ondřej Čertík 23 | 50 Matthew Brett 24 | 46 Julian Taylor 25 | 39 Han Genuit 26 | 38 edschofield 27 | 31 dhuard 28 | 30 David Warde-Farley 29 | 30 m-d-w 30 | 29 Tim Leslie 31 | 25 chanley 32 | 25 mdroe 33 | 24 Christoph Gohlke 34 | 21 endolith 35 | 20 Fernando Perez 36 | 20 jmiller 37 | 18 John Salvatier 38 | 17 Frederic 39 | 16 Tim Hochberg 40 | 15 Aaron River 41 | 15 Thouis (Ray) Jones 42 | 15 seberg 43 | 14 chris.burns 44 | 13 Warren Weckesser 45 | 13 prabhu 46 | 11 87 47 | 11 Chris Jordan-Squire 48 | 11 Robert Cimrman 49 | 10 Christopher L. Farrow 50 | 10 Eric Fode 51 | 10 Michael Droettboom 52 | 10 Skipper Seabold 53 | 10 Thomas Robitaille 54 | 10 skip 55 | 9 Ben Walsh 56 | 8 Yaroslav Halchenko 57 | 7 Darren Dale 58 | 7 Denis Laxalde 59 | 7 Travis Vaught 60 | 7 aarchiba 61 | 6 hangenuit@gmail.com 62 | 6 jayvius 63 | 6 patmiller 64 | 5 Bradley M. Froehle 65 | 5 Derek Homeier 66 | 5 Eric Moore 67 | 5 Joe Kington 68 | 4 Alok Singhal 69 | 4 Bryan Van de Ven 70 | 4 Eric Firing 71 | 4 Geoffrey Irving 72 | 4 Justin Peel 73 | 4 Nicolas Pinto 74 | 4 Paul Anton Letnes 75 | 4 Paul Ivanov 76 | 4 dmorrill 77 | 3 Alex Ford 78 | 3 Aron Ahmadia 79 | 3 Ben Root 80 | 3 Fabian Pedregosa 81 | 3 Fazlul Shahriar 82 | 3 GaelVaroquaux 83 | 3 Guillaume Gay 84 | 3 Lars Buitinck 85 | 3 Scott Sinclair 86 | 3 Steve 87 | 3 Steve R. Hastings 88 | 3 Valentin Haenel 89 | 3 argriffing 90 | 3 peterjc 91 | 3 tim cera 92 | 2 Adam Ginsburg 93 | 2 Bartosz Telenczuk 94 | 2 Chris Barker 95 | 2 Dan Miller 96 | 2 Edward Catmur 97 | 2 Gabriel 98 | 2 Jason Grout 99 | 2 Josh Warner (Mac) 100 | 2 Luis Pedro Coelho 101 | 2 Marc Abramowitz 102 | 2 Nicolas Scheffer 103 | 2 Robert Kende 104 | 2 Ronan Lamy 105 | 2 Sandro Tosi 106 | 2 abaecker 107 | 2 ahmadia 108 | 2 jamestwebber 109 | 2 joe 110 | 2 nobody 111 | 2 swalton 112 | 2 weathergod 113 | 1 Adam Griffiths 114 | 1 Andreas Hilboll 115 | 1 Andrew Horton 116 | 1 Arfrever Frehtes Taifersar Arahesis 117 | 1 Arink Verma 118 | 1 Brent Pedersen 119 | 1 Carlos Valiente 120 | 1 Carwyn Pelley 121 | 1 Chris 122 | 1 Christian Brueffer 123 | 1 Christoph Weidemann 124 | 1 Dag Sverre Seljebotn 125 | 1 Dan Hipschman 126 | 1 David Huard 127 | 1 Derek Homeir 128 | 1 Derek Homier 129 | 1 Eli Stevens 130 | 1 Francesc Alted 131 | 1 Henry Gomersall 132 | 1 Hrvoje Niksic 133 | 1 Ilan Schnell 134 | 1 Jake Vanderplas 135 | 1 John Benediktsson 136 | 1 Jonathan Waltman 137 | 1 Joon Ro 138 | 1 Joonas Paalasmaa 139 | 1 Jos de Kloe 140 | 1 Juan Luis Cano Rodríguez 141 | 1 Julien Phalip 142 | 1 Keith Goodman 143 | 1 Kumar Appaiah 144 | 1 Leon Weber 145 | 1 Loftie Ellis 146 | 1 Marcin Juszkiewicz 147 | 1 Martin Baeuml 148 | 1 Martin Spacek 149 | 1 Martin Teichmann 150 | 1 Matt Davis 151 | 1 Maximilian Albert 152 | 1 Michael McNeil Forbes 153 | 1 Neil Muller 154 | 1 Per A. Brodtkorb 155 | 1 Raymond Roberts 156 | 1 Robert Costa 157 | 1 Rui Pereira 158 | 1 Simon Blyth 159 | 1 Sveinung Gundersen 160 | 1 Takafumi Arakaki 161 | 1 Tim Cera 162 | 1 Timo Kluck 163 | 1 Tony S Yu 164 | 1 Vladimir Rutsky 165 | 1 bebert218 166 | 1 daveydave400 167 | 1 jmozmoz 168 | 1 jswhit 169 | 1 madhusudancs 170 | 1 martin 171 | 1 martingoodson 172 | 1 mwtoews 173 | 1 zed 174 | -------------------------------------------------------------------------------- /slides/numpy-year.txt: -------------------------------------------------------------------------------- 1 | 278 Charles Harris 2 | 110 Sebastian Berg 3 | 109 Nathaniel J. Smith 4 | 69 ovillellas 5 | 61 Ralf Gommers 6 | 58 Jay Bourque 7 | 52 Ondřej Čertík 8 | 50 Pauli Virtanen 9 | 46 Julian Taylor 10 | 46 Travis E. Oliphant 11 | 30 m-d-w 12 | 26 Han Genuit 13 | 24 David Cournapeau 14 | 20 Christoph Gohlke 15 | 20 endolith 16 | 19 David Warde-Farley 17 | 18 John Salvatier 18 | 15 Frederic 19 | 15 seberg 20 | 14 Mark Wiebe 21 | 11 Warren Weckesser 22 | 10 87 23 | 10 Eric Fode 24 | 10 Thomas Robitaille 25 | 8 Matthew Brett 26 | 7 Stefan van der Walt 27 | 7 Yaroslav Halchenko 28 | 6 jayvius 29 | 5 Bradley M. Froehle 30 | 5 Eric Moore 31 | 4 Ben Walsh 32 | 3 Alex Ford 33 | 3 Eric Firing 34 | 3 Fazlul Shahriar 35 | 3 GaelVaroquaux 36 | 3 Guillaume Gay 37 | 3 Skipper Seabold 38 | 3 Steve 39 | 3 argriffing 40 | 3 peterjc 41 | 2 Adam Ginsburg 42 | 2 Aron Ahmadia 43 | 2 Bartosz Telenczuk 44 | 2 Dan Miller 45 | 2 Edward Catmur 46 | 2 Gabriel 47 | 2 Josh Warner (Mac) 48 | 2 Michael Droettboom 49 | 2 Nicolas Scheffer 50 | 2 Paul Ivanov 51 | 2 Robert Kern 52 | 2 Ronan Lamy 53 | 2 Sandro Tosi 54 | 2 Thouis (Ray) Jones 55 | 2 jamestwebber 56 | 1 Adam Griffiths 57 | 1 Andreas Hilboll 58 | 1 Andrew Horton 59 | 1 Arink Verma 60 | 1 Carwyn Pelley 61 | 1 Chris 62 | 1 Christian Brueffer 63 | 1 Dan Hipschman 64 | 1 Denis Laxalde 65 | 1 John Benediktsson 66 | 1 Jonathan Waltman 67 | 1 Joon Ro 68 | 1 Jos de Kloe 69 | 1 Juan Luis Cano Rodríguez 70 | 1 Julien Phalip 71 | 1 Kumar Appaiah 72 | 1 Leon Weber 73 | 1 Loftie Ellis 74 | 1 Luis Pedro Coelho 75 | 1 Marcin Juszkiewicz 76 | 1 Martin Baeuml 77 | 1 Martin Teichmann 78 | 1 Matt Davis 79 | 1 Maximilian Albert 80 | 1 Robert Costa 81 | 1 Sveinung Gundersen 82 | 1 Takafumi Arakaki 83 | 1 Valentin Haenel 84 | 1 Vladimir Rutsky 85 | 1 ahmadia 86 | 1 bebert218 87 | 1 daveydave400 88 | 1 jmozmoz 89 | 1 martingoodson 90 | 1 mwtoews 91 | -------------------------------------------------------------------------------- /slides/pandas-all.txt: -------------------------------------------------------------------------------- 1 | 3108 Wes McKinney 2 | 680 jreback 3 | 639 y-p 4 | 627 Chang She 5 | 327 Adam Klein 6 | 120 Phillip Cloud 7 | 109 Vytautas Jancauskas 8 | 75 Wouter Overmeire 9 | 65 Skipper Seabold 10 | 56 Andy Hayden 11 | 46 Thomas Kluyver 12 | 40 Dieter Vandenbussche 13 | 30 Jeffrey Tratner 14 | 27 Jeff Reback 15 | 25 Stephen Lin 16 | 19 Abraham Flaxman 17 | 16 Yaroslav Halchenko 18 | 15 Kieran O'Mahony 19 | 14 Gábor Lipták 20 | 14 locojaydev 21 | 13 Spencer Lyon 22 | 12 Luca Beltrame 23 | 11 Keith Hughitt 24 | 10 Martin Blais 25 | 9 Tobias Brandt 26 | 7 PKEuS 27 | 7 nipunreddevil 28 | 7 Takafumi Arakaki 29 | 7 Christopher Whelan 30 | 6 Steve 31 | 6 timmie 32 | 6 Nicholaus E. Halecky 33 | 6 K.-Michael Aye 34 | 6 Damien Garaud 35 | 5 dieterv77 36 | 5 tshauck 37 | 5 Vincent Arel-Bundock 38 | 5 Garrett Drapala 39 | 5 Marc Abramowitz 40 | 5 Mark Wiebe 41 | 5 Thierry Moisan 42 | 5 Adam Obeng 43 | 4 TomAugspurger 44 | 4 Gregg Lind 45 | 4 Shane Conway 46 | 4 Jacques Kvam 47 | 4 Dan Allan 48 | 4 Jev Kuznetsov 49 | 4 gliptak 50 | 4 Dan Birken 51 | 4 lexual 52 | 4 Dan Miller 53 | 4 Alvaro Tejero-Cantero 54 | 4 waitingkuo 55 | 4 Brenda Moon 56 | 4 Lars Buitinck 57 | 4 Dražen Lučanin 58 | 4 Loïc Estève 59 | 4 Paul Ivanov 60 | 3 Patrick O'Brien 61 | 3 Chris Billington 62 | 3 Karmel Allison 63 | 3 joshuaar 64 | 3 Nick Pentreath 65 | 3 Josh 66 | 3 Josh Klein 67 | 3 Adam Greenhall 68 | 3 Joon Ro 69 | 3 Olivier Grisel 70 | 3 Richard Höchenberger 71 | 3 dengemann 72 | 3 Kevin Stone 73 | 2 Chapman Siu 74 | 2 Todd DeLuca 75 | 2 Jay Parlar 76 | 2 Mike Kelly 77 | 2 Nathan Pinger 78 | 2 RuiDC 79 | 2 stonebig 80 | 2 Roy Hyunjin Han 81 | 2 Brad Buran 82 | 2 Jonathan deWerd 83 | 2 tim smith 84 | 2 Jonathan Chambers 85 | 2 Kamil Kisiel 86 | 2 Paddy Mullen 87 | 2 John-Colvin 88 | 2 elpres 89 | 2 Jeff Mellen 90 | 2 Will Furnass 91 | 2 Vytautas Jančauskas 92 | 2 Robert Gieseke 93 | 2 Peter Prettenhofer 94 | 2 Travis N. Vaught 95 | 2 Eric Chlebek 96 | 1 Øystein S. Haaland 97 | 1 Aman Thakral 98 | 1 Andreas H. 99 | 1 Anton I. Sipos 100 | 1 Bayle Shanks 101 | 1 Benjamin Gross 102 | 1 Brian Granger 103 | 1 Chris Mulligan 104 | 1 Chris Withers 105 | 1 Christian Geier 106 | 1 Dan Davison 107 | 1 Daniel Shapiro 108 | 1 David Zaslavsky 109 | 1 Donald Curtis 110 | 1 Doug Coleman 111 | 1 Dražen Lučanin 112 | 1 Fabrizio Pollastri 113 | 1 Fernando Perez 114 | 1 Graham Taylor 115 | 1 Illia Polosukhin 116 | 1 James Casbon 117 | 1 Jay Bourque 118 | 1 Jeff Hammerbacher 119 | 1 Jeremy Wagner 120 | 1 Johnny 121 | 1 Joshua Leahy 122 | 1 Juraj Niznan 123 | 1 Justin Berka 124 | 1 Justin C Johnson 125 | 1 Kelsey Jordahl 126 | 1 Ken Van Haren 127 | 1 Kyle Meyer 128 | 1 Laurent Gautier 129 | 1 Lorenzo Bolla 130 | 1 Luke Lee 131 | 1 Mark O'Leary 132 | 1 MinRK 133 | 1 Peng Yu 134 | 1 Ralph Bean 135 | 1 Senthil Palanisami 136 | 1 Stefan van der Walt 137 | 1 Taavi Burns 138 | 1 Thomas Wiecki 139 | 1 Thouis (Ray) Jones 140 | 1 Tim Akinbo 141 | 1 Tim McNamara 142 | 1 alex arsenovic 143 | 1 anomrake 144 | 1 claudiobertoldi 145 | 1 conmai 146 | 1 davidjameshumphreys 147 | 1 ejnens 148 | 1 fabriziop 149 | 1 herrfz 150 | 1 jniznan 151 | 1 lenolib 152 | 1 lgautier 153 | 1 lodagro 154 | 1 stephenwlin 155 | 1 svaksha 156 | 1 thauck 157 | 1 theandygross 158 | 1 thuske 159 | 1 unknown 160 | 1 vytas 161 | 1 zach powers 162 | 1 A. Flaxman 163 | -------------------------------------------------------------------------------- /slides/pandas-year.txt: -------------------------------------------------------------------------------- 1 | 761 Wes McKinney 2 | 680 jreback 3 | 639 y-p 4 | 361 Chang She 5 | 120 Phillip Cloud 6 | 89 Vytautas Jancauskas 7 | 56 Andy Hayden 8 | 37 Wouter Overmeire 9 | 32 Skipper Seabold 10 | 30 Jeffrey Tratner 11 | 27 Jeff Reback 12 | 25 Stephen Lin 13 | 14 locojaydev 14 | 14 Gábor Lipták 15 | 13 Spencer Lyon 16 | 13 Abraham Flaxman 17 | 11 Keith Hughitt 18 | 9 Tobias Brandt 19 | 8 Dieter Vandenbussche 20 | 7 PKEuS 21 | 7 nipunreddevil 22 | 7 Christopher Whelan 23 | 6 Nicholaus E. Halecky 24 | 6 Damien Garaud 25 | 6 Martin Blais 26 | 5 Vincent Arel-Bundock 27 | 5 tshauck 28 | 5 Garrett Drapala 29 | 5 dieterv77 30 | 5 Adam Obeng 31 | 5 Thierry Moisan 32 | 4 TomAugspurger 33 | 4 Dražen Lučanin 34 | 4 gliptak 35 | 4 Alvaro Tejero-Cantero 36 | 4 lexual 37 | 4 Dan Allan 38 | 4 waitingkuo 39 | 4 Dan Miller 40 | 4 Lars Buitinck 41 | 4 Loïc Estève 42 | 4 Brenda Moon 43 | 4 Paul Ivanov 44 | 3 Dan Birken 45 | 3 dengemann 46 | 3 timmie 47 | 3 Karmel Allison 48 | 3 Kevin Stone 49 | 3 Adam Greenhall 50 | 3 Richard Höchenberger 51 | 3 Patrick O'Brien 52 | 2 K.-Michael Aye 53 | 2 Mike Kelly 54 | 2 Vytautas Jančauskas 55 | 2 Chapman Siu 56 | 2 tim smith 57 | 2 Jonathan deWerd 58 | 2 Todd DeLuca 59 | 2 Peter Prettenhofer 60 | 2 stonebig 61 | 2 Jay Parlar 62 | 2 Jonathan Chambers 63 | 2 John-Colvin 64 | 2 Kieran O'Mahony 65 | 2 Will Furnass 66 | 2 Robert Gieseke 67 | 2 Jeff Mellen 68 | 2 Brad Buran 69 | 1 Øystein S. Haaland 70 | 1 Anton I. Sipos 71 | 1 Chris Mulligan 72 | 1 Chris Withers 73 | 1 Christian Geier 74 | 1 Dan Davison 75 | 1 Daniel Shapiro 76 | 1 Donald Curtis 77 | 1 Doug Coleman 78 | 1 Dražen Lučanin 79 | 1 Illia Polosukhin 80 | 1 James Casbon 81 | 1 Jay Bourque 82 | 1 Jeremy Wagner 83 | 1 Johnny 84 | 1 Joshua Leahy 85 | 1 Juraj Niznan 86 | 1 Justin C Johnson 87 | 1 Ken Van Haren 88 | 1 Kyle Meyer 89 | 1 Laurent Gautier 90 | 1 Luke Lee 91 | 1 Mark O'Leary 92 | 1 MinRK 93 | 1 Taavi Burns 94 | 1 Thomas Kluyver 95 | 1 Thouis (Ray) Jones 96 | 1 Tim Akinbo 97 | 1 Yaroslav Halchenko 98 | 1 alex arsenovic 99 | 1 anomrake 100 | 1 conmai 101 | 1 davidjameshumphreys 102 | 1 ejnens 103 | 1 elpres 104 | 1 herrfz 105 | 1 jniznan 106 | 1 lenolib 107 | 1 stephenwlin 108 | 1 svaksha 109 | 1 thauck 110 | 1 vytas 111 | 1 zach powers 112 | 1 A. Flaxman 113 | -------------------------------------------------------------------------------- /slides/scipy-all.txt: -------------------------------------------------------------------------------- 1 | 1182 Pauli Virtanen 2 | 961 Travis Oliphant 3 | 816 David Cournapeau 4 | 514 Ralf Gommers 5 | 504 Pearu Peterson 6 | 375 wnbell 7 | 321 mattknox_ca 8 | 293 Stefan van der Walt 9 | 227 Jarrod Millman 10 | 227 Matthew Brett 11 | 194 rgommers 12 | 190 Denis Laxalde 13 | 189 warren.weckesser 14 | 180 Eric Jones 15 | 168 Warren Weckesser 16 | 160 Robert Kern 17 | 155 pierregm 18 | 152 edschofield 19 | 150 Tim Leslie 20 | 136 cookedm 21 | 130 josef 22 | 126 damian.eads 23 | 108 Jake Vanderplas 24 | 97 tom.waite 25 | 82 endolith 26 | 71 fullung 27 | 64 alex 28 | 54 Robert Cimrman 29 | 50 chris.burns 30 | 46 jonathan.taylor 31 | 45 Ilan Schnell 32 | 43 Charles Harris 33 | 41 aarchiba 34 | 41 Blake Griffith 35 | 37 prabhu 36 | 34 Tim Hochberg 37 | 31 Martin Teichmann 38 | 31 Fabian Pedregosa 39 | 30 Alan McIntyre 40 | 28 Daniel Smith 41 | 26 dmitrey.kroshko 42 | 26 Eric Moore 43 | 26 Jacob Stevenson 44 | 25 Patrick Varilly 45 | 20 Fernando Perez 46 | 19 fred.mailhot 47 | 18 david.warde-farley 48 | 17 jtravs 49 | 17 Lars Buitinck 50 | 17 Anthony Scopatz 51 | 17 Travis Vaught 52 | 16 Nicky van Foreest 53 | 16 Travis E. Oliphant 54 | 14 Skipper Seabold 55 | 14 chanley 56 | 14 Jacob Silterra 57 | 13 pbrod 58 | 13 hagberg 59 | 13 François Boulogne 60 | 12 Scott Sinclair 61 | 12 Julian Taylor 62 | 12 Zhenya 63 | 12 Thomas Robitaille 64 | 11 Chris Jordan-Squire 65 | 11 brian.hawthorne 66 | 10 jtaylor 67 | 10 Josef Perktold 68 | 9 tzito 69 | 9 Niklas K 70 | 9 David Warde-Farley 71 | 8 Daniel B. Smith 72 | 8 cgohlke 73 | 8 Robert Gantner 74 | 8 dhuard 75 | 8 Thouis (Ray) Jones 76 | 7 Matt Terry 77 | 7 Bjørn Forsman 78 | 6 ArmstrongJ 79 | 6 Jacob Vanderplas 80 | 6 Joonas Paalasmaa 81 | 6 Andreas H 82 | 6 Collin RM Stocks 83 | 6 Sturla Molden 84 | 5 Andrey Smirnov 85 | 5 ondrej 86 | 5 uwe.schmitt 87 | 5 Alex Reinhart 88 | 5 jmiller 89 | 5 dmorrill 90 | 5 Tim Cera 91 | 4 nmarais 92 | 4 Ciro Duran Santillli 93 | 4 Illia Polosukhin 94 | 4 Jonathan Helmus 95 | 4 Leo Singer 96 | 4 Max Bolingbroke 97 | 4 Yaroslav Halchenko 98 | 4 abaecker 99 | 4 joe 100 | 4 skip 101 | 3 Tony S Yu 102 | 3 Fazlul Shahriar 103 | 3 Andreas Hilboll 104 | 3 josef-pktd 105 | 3 sturlamolden 106 | 3 ckuster 107 | 3 jswhit 108 | 3 Christoph Weidemann 109 | 3 Nathan Crock 110 | 3 ariel.rokem 111 | 3 Christoph Gohlke 112 | 3 Gilles Rochefort 113 | 3 Robert David Grant 114 | 3 Joseph Jon Booker 115 | 3 SytseK 116 | 3 Jeff Armstrong 117 | 2 Gert-Ludwig Ingold 118 | 2 Sebastian Berg 119 | 2 hm 120 | 2 Gavin Price 121 | 2 argriffing 122 | 2 Jorge Cañardo Alastuey 123 | 2 John Travers 124 | 2 Takuya OSHIMA 125 | 2 Paul Ivanov 126 | 2 Matty G 127 | 2 Bradley M. Froehle 128 | 2 dellsystem 129 | 2 Anton Akhmerov 130 | 2 Mark Wiebe 131 | 2 Andrew Schein 132 | 2 Keith Clawson 133 | 2 fcady 134 | 2 trueprice 135 | 1 Chad Baker 136 | 1 Daniel Velkov 137 | 1 Christopher Lee 138 | 1 Alexis Tabary 139 | 1 rob.falck 140 | 1 roberto 141 | 1 Christian 142 | 1 swalton 143 | 1 thorstenkranz 144 | 1 tonysyu 145 | 1 unknown 146 | 1 Bob Helmbold 147 | 1 Sebastian Werk 148 | 1 Sebastian Gassner 149 | 1 Stephen McQuay 150 | 1 Steven Byrnes 151 | 1 MinRK 152 | 1 Matt Newville 153 | 1 Tom Aldcroft 154 | 1 Luis Pedro Coelho 155 | 1 Louis Thibault 156 | 1 Lorenzo Luengo 157 | 1 Lawrence Chan 158 | 1 Wes McKinney 159 | 1 Christian Brodbeck 160 | 1 Zach Ploskey 161 | 1 K.-Michael Aye 162 | 1 wa03 163 | 1 Jonathan Hunt 164 | 1 Johannes Schönberger 165 | 1 Johann Cohen-Tanugi 166 | 1 Jim Radford 167 | 1 Jerome Kieffer 168 | 1 Branden Rolston 169 | 1 Jan Schlueter 170 | 1 Hugo 171 | 1 Gustav Larsson 172 | 1 honnorat 173 | 1 Alexander Eberspächer 174 | 1 Gael varoquaux 175 | 1 Fabrice Silva 176 | 1 FI$H 2000 177 | 1 lmwang 178 | 1 martin 179 | 1 mszep 180 | 1 Brandon Beacher 181 | 1 Dražen Lučanin 182 | -------------------------------------------------------------------------------- /slides/scipy-year.txt: -------------------------------------------------------------------------------- 1 | 612 Pauli Virtanen 2 | 277 Ralf Gommers 3 | 89 Warren Weckesser 4 | 79 endolith 5 | 64 alex 6 | 56 Tim Leslie 7 | 52 Denis Laxalde 8 | 41 Blake Griffith 9 | 31 Jake Vanderplas 10 | 28 Daniel Smith 11 | 26 Jacob Stevenson 12 | 26 Eric Moore 13 | 24 Patrick Varilly 14 | 13 pbrod 15 | 13 François Boulogne 16 | 12 Zhenya 17 | 12 Julian Taylor 18 | 12 Anthony Scopatz 19 | 11 Matthew Brett 20 | 10 jtaylor 21 | 10 Nicky van Foreest 22 | 9 Niklas K 23 | 8 Daniel B. Smith 24 | 7 Fabian Pedregosa 25 | 7 Lars Buitinck 26 | 6 Travis E. Oliphant 27 | 6 Sturla Molden 28 | 6 cgohlke 29 | 5 Tim Cera 30 | 5 David Cournapeau 31 | 5 Alex Reinhart 32 | 5 Thouis (Ray) Jones 33 | 4 Leo Singer 34 | 4 Illia Polosukhin 35 | 4 Skipper Seabold 36 | 4 Ciro Duran Santillli 37 | 4 Josef Perktold 38 | 4 Max Bolingbroke 39 | 3 sturlamolden 40 | 3 SytseK 41 | 3 Nathan Crock 42 | 3 Joseph Jon Booker 43 | 3 Gilles Rochefort 44 | 3 Stefan van der Walt 45 | 3 Charles Harris 46 | 3 Robert David Grant 47 | 2 Fazlul Shahriar 48 | 2 Andreas Hilboll 49 | 2 Anton Akhmerov 50 | 2 Bradley M. Froehle 51 | 2 Gert-Ludwig Ingold 52 | 2 John Travers 53 | 2 Jorge Cañardo Alastuey 54 | 2 Keith Clawson 55 | 2 Scott Sinclair 56 | 2 Sebastian Berg 57 | 2 Takuya OSHIMA 58 | 2 argriffing 59 | 2 dellsystem 60 | 2 hm 61 | 2 trueprice 62 | 1 K.-Michael Aye 63 | 1 Robert Kern 64 | 1 Bob Helmbold 65 | 1 Alexander Eberspächer 66 | 1 Johannes Schönberger 67 | 1 Jerome Kieffer 68 | 1 Stephen McQuay 69 | 1 Steven Byrnes 70 | 1 Jan Schlueter 71 | 1 Jacob Vanderplas 72 | 1 thorstenkranz 73 | 1 Hugo 74 | 1 Gustav Larsson 75 | 1 Fabrice Silva 76 | 1 Tom Aldcroft 77 | 1 Dražen Lučanin 78 | 1 Daniel Velkov 79 | 1 Yaroslav Halchenko 80 | 1 Zach Ploskey 81 | 1 Christopher Lee 82 | 1 aarchiba 83 | 1 Christoph Gohlke 84 | 1 tonysyu 85 | 1 Christian Brodbeck 86 | 1 wa03 87 | 1 Christian 88 | 1 unknown 89 | 1 Branden Rolston 90 | 1 mszep 91 | 1 MinRK 92 | 1 Matty G 93 | 1 Matt Newville 94 | 1 Louis Thibault 95 | 1 Lorenzo Luengo 96 | 1 Lawrence Chan 97 | 1 Jonathan Helmus 98 | -------------------------------------------------------------------------------- /slides/sklearn-all.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sympy/scipy-2016-tutorial/aa417427a1de2dcab2a9640b631b809d525d7929/slides/sklearn-all.txt -------------------------------------------------------------------------------- /slides/sklearn-year.txt: -------------------------------------------------------------------------------- 1 | 668 Andreas Mueller 2 | 289 Lars Buitinck 3 | 260 Gilles Louppe 4 | 233 Gael Varoquaux 5 | 211 Peter Prettenhofer 6 | 159 Mathieu Blondel 7 | 155 Arnaud Joly 8 | 151 Olivier Grisel 9 | 132 Jaques Grobler 10 | 112 Vlad Niculae 11 | 109 Wei Li 12 | 108 Noel Dawe 13 | 99 Alexandre Gramfort 14 | 66 Joel Nothman 15 | 36 Nelle Varoquaux 16 | 35 Rob Zinkov 17 | 33 eustache 18 | 29 Fabian Pedregosa 19 | 25 Robert Layton 20 | 24 Virgile Fritsch 21 | 19 Aymeric Masurelle 22 | 18 Andrew Winterman 23 | 17 Tadej Janež 24 | 16 Christian Osendorfer 25 | 15 Brian Cheung 26 | 14 Daniel Nouri 27 | 14 Doug Coleman 28 | 14 Yannick Schwartz 29 | 13 Robert Marchman 30 | 13 syhw 31 | 12 Satrajit Ghosh 32 | 11 Jake VanderPlas 33 | 11 John Benediktsson 34 | 11 Mikhail Korobov 35 | 10 Corey Lynch 36 | 10 Immanuel Bayer 37 | 10 Jim Holmström 38 | 10 Kyle Beauchamp 39 | 9 Kernc 40 | 9 Steven De Gryze 41 | 9 mr.Shu 42 | 8 Conrad Lee 43 | 8 James Bergstra 44 | 8 andy 45 | 8 jnothman 46 | 7 Hrishikesh Huilgolkar 47 | 7 Marko Burjek 48 | 6 Brian Cajes 49 | 6 Martin Luessi 50 | 6 Michael Eickenberg 51 | 6 Tiago Nunes 52 | 5 Anze 53 | 5 Nicolas Pinto 54 | 5 Raul Garreta 55 | 5 Shiqiao Du 56 | 4 ApproximateIdentity 57 | 4 Christian Jauvin 58 | 4 Federico Vaggi 59 | 4 Jacques Kvam 60 | 4 Kemal Eren 61 | 4 Richard T. Guy 62 | 3 A. Flaxman 63 | 3 Alexandre Abraham 64 | 3 Brian Holt 65 | 3 Dougal Sutherland 66 | 3 Florian Hoenig 67 | 3 Nicolas Trésegnie 68 | 3 Robert McGibbon 69 | 3 Roman Sinayev 70 | 3 Scott Dickerson 71 | 3 Szabo Roland 72 | 3 Yaroslav Halchenko 73 | 2 Diego Molla 74 | 2 Francois Savard 75 | 2 Imran Haque 76 | 2 Mark Veronda 77 | 2 Matti Lyra 78 | 2 Peter Welinder 79 | 2 Sergey Karayev 80 | 2 Sergio Medina 81 | 2 Xinfan Meng 82 | 2 jamestwebber 83 | 1 Abhijeet Kolhe 84 | 1 Alejandro Weinstein 85 | 1 Alex Companioni 86 | 1 Alexander Fabisch 87 | 1 Alexandre Passos 88 | 1 Bastiaan van den Berg 89 | 1 Benjamin Peterson 90 | 1 Bussonnier Matthias 91 | 1 Charles-Pierre Astolfi 92 | 1 Christoph Deil 93 | 1 Daniel Velkov 94 | 1 David Cournapeau 95 | 1 Denton Cockburn 96 | 1 Eugene Nizhibitsky 97 | 1 Felix Brockherde 98 | 1 JakeMick 99 | 1 James McDermott 100 | 1 Jochen Wersdörfer 101 | 1 Johannes Schönberger 102 | 1 Justin Pati 103 | 1 Ken Geis 104 | 1 Kenneth C. Arnold 105 | 1 Kevin Hughes 106 | 1 Ludwig Schwardt 107 | 1 Luis Pedro Coelho 108 | 1 Matthias Ekman 109 | 1 Miroslav Batchkarov 110 | 1 Miroslav Shubernetskiy 111 | 1 Naoki Orii 112 | 1 Norbert Crombach 113 | 1 Pavel 114 | 1 Rafael Cunha de Almeida 115 | 1 Rolando Espinoza La fuente 116 | 1 Seamus Abshere 117 | 1 Sebastian Berg 118 | 1 Shaun Jackman 119 | 1 Stefano Lattarini 120 | 1 Steve Koch 121 | 1 Subhodeep Moitra 122 | 1 Thomas Jarosch 123 | 1 Tim Sheerman-Chase 124 | 1 X006 125 | 1 bob 126 | 1 buguen 127 | 1 dengemann 128 | 1 draix 129 | 1 emanuele 130 | 1 hrishikeshio 131 | 1 nzer0 132 | 1 unknown 133 | -------------------------------------------------------------------------------- /slides/sympy-250px.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sympy/scipy-2016-tutorial/aa417427a1de2dcab2a9640b631b809d525d7929/slides/sympy-250px.pdf -------------------------------------------------------------------------------- /slides/sympy-all.txt: -------------------------------------------------------------------------------- 1 | 4023 Chris Smith 2 | 2705 Aaron Meurer 3 | 1450 Mateusz Paprocki 4 | 1450 Ondřej Čertík 5 | 1055 Sergey B Kirpichev 6 | 1046 Matthew Rocklin 7 | 677 Julien Rioux 8 | 543 Raoul Bourquin 9 | 464 Ronan Lamy 10 | 374 Kirill Smelkov 11 | 351 Øyvind Jensen 12 | 313 Tom Bachmann 13 | 311 Sudhanshu Mishra 14 | 278 Mario Pernici 15 | 265 AMiT Kumar 16 | 260 Sergiu Ivanov 17 | 258 Sachin Joglekar 18 | 258 Jason Moore 19 | 228 Colin B. Macdonald 20 | 225 Gaurav Dhingra 21 | 204 Sartaj Singh 22 | 190 Saptarshi Mandal 23 | 186 Sean Vig 24 | 186 Thilina Rathnayake 25 | 174 Stefan Krastanov 26 | 174 Jim Crist 27 | 168 Francesco Bonazzi 28 | 167 David Li 29 | 160 Brian E. Granger 30 | 158 Rick Muller 31 | 142 Kalevi Suominen 32 | 141 Shubham Tibra 33 | 138 Vinzent Steinberg 34 | 136 Timothy Reluga 35 | 134 Gilbert Gede 36 | 133 Vladimir Perić 37 | 127 Thomas Hisch 38 | 127 Raymond Wong 39 | 125 Harsh Gupta 40 | 122 Shivam Vats 41 | 119 Fredrik Johansson 42 | 114 Fabian Pedregosa 43 | 111 Bharath M R 44 | 103 Addison Cugini 45 | 102 Kundan Kumar 46 | 98 Peter Brady 47 | 98 Joachim Durchholz 48 | 95 Manoj Kumar 49 | 95 Guru Devanla 50 | 90 Alexey U. Gudchenko 51 | 88 hm 52 | 86 Björn Dahlgren 53 | 81 Priit Laes 54 | 80 Prasoon Shukla 55 | 77 Matt Habel 56 | 73 Alan Bromborsky 57 | 71 Robert Johansson 58 | 70 Juha Remes 59 | 69 Tomo Lazovich 60 | 67 Matt Curry 61 | 65 Mary Clark 62 | 60 Pablo Puente 63 | 59 Harold Erbin 64 | 57 Sampad Kumar Saha 65 | 55 Ramana Venkata 66 | 55 Jason Gedge 67 | 54 Christopher Dembia 68 | 53 Aleksandar Makelov 69 | 53 Katja Sophie Hotz 70 | 50 Brian Jorgensen 71 | 49 Chai Wah Wu 72 | 49 Kendhia 73 | 47 Akshay 74 | 46 Andy R. Terrel 75 | 44 Grzegorz Świrski 76 | 43 Pearu Peterson 77 | 43 Sebastian Krämer 78 | 41 Anurag Sharma 79 | 41 Alkiviadis G. Akritas 80 | 40 Toon Verstraelen 81 | 40 Joan Creus 82 | 40 Siddhanathan Shanmugam 83 | 39 Cristóvão Sousa 84 | 37 Christian Muise 85 | 37 Jorn Baayen 86 | 36 Sahil Shekhawat 87 | 36 Jeremias Yehdegho 88 | 36 Thomas Baruchel 89 | 35 Tanu Hari Dixit 90 | 35 Alexander Hirzel 91 | 35 Matthew Hoff 92 | 35 Riccardo Gori 93 | 35 Kevin Hunter 94 | 34 Shipra Banga 95 | 33 Meghana Madhyastha 96 | 33 Steve Anton 97 | 32 Sanket Agarwal 98 | 32 Oliver Lee 99 | 31 Jason Siefken 100 | 31 Mark Dewing 101 | 31 rathmann 102 | 31 Dustin Gadal 103 | 29 Robert Schwarz 104 | 29 Jatin Yadav 105 | 28 David Ju 106 | 28 Luke Peterson 107 | 28 Keval Shah 108 | 27 Arafat Dad Khan 109 | 27 Angadh Nanjangud 110 | 26 Stephen Loo 111 | 25 Renato Coutinho 112 | 25 Yuriy Demidov 113 | 25 Comer Duncan 114 | 25 Kshitij Saraogi 115 | 24 Bilal Akhtar 116 | 24 Stepan Roucka 117 | 23 Miha Marolt 118 | 23 Peleg Michaeli 119 | 23 Dzhelil Rufat 120 | 23 Alex Lindsay 121 | 23 Chetna Gupta 122 | 22 Soumya Dipta Biswas 123 | 22 Amit Saha 124 | 21 Ralf Stephan 125 | 21 Randy Heydon 126 | 20 Saurabh Jha 127 | 20 arihant parsoya 128 | 19 Aravind Reddy 129 | 19 Nathan Alison 130 | 19 Niklas Thörne 131 | 19 YiDing Jiang 132 | 18 Peter Schmidt 133 | 18 James Brandon Milam 134 | 18 jerryma1121 135 | 18 Kyle McDaniel 136 | 17 Ashutosh Saboo 137 | 17 Sam Sleight 138 | 17 Brian Stephanik 139 | 17 Robert Kern 140 | 17 Sachin Irukula 141 | 16 Swapnil Agarwal 142 | 16 Patrick Lacasse 143 | 16 Angus Griffith 144 | 16 Avichal Dayal 145 | 16 Pablo Zubieta 146 | 15 Anthony Scopatz 147 | 15 Gary Kerr 148 | 14 Mike Boyle 149 | 14 Nicolas Pourcelot 150 | 14 Natalia Nawara 151 | 14 Sherjil Ozair 152 | 14 Anish Shah 153 | 14 Rishabh Daal 154 | 13 Prafullkumar P. Tale 155 | 13 Aaditya Nair 156 | 13 Ankit Agrawal 157 | 13 Ljubiša Moćić 158 | 13 Mark Shoulson 159 | 13 Jim Zhang 160 | 13 Harshil Goel 161 | 13 Huijun Mai 162 | 12 Marek Šuppa 163 | 11 Freddie Witherden 164 | 11 Akshay Siramdas 165 | 11 Chaitanya Sai Alaparthi 166 | 11 Akash Trehan 167 | 11 Richard Otis 168 | 11 kshitij10496 169 | 11 Roberto Nobrega 170 | 10 Min Ragan-Kelley 171 | 10 Mihir Wadwekar 172 | 10 Felix Kaiser 173 | 10 Lennart Fricke 174 | 10 Shekhar Prasad Rajak 175 | 10 David Joyner 176 | 9 Zamrath Nizam 177 | 9 Jennifer White 178 | 9 Saroj Adhikari 179 | 9 Friedrich Hagedorn 180 | 9 Curious72 181 | 9 Sean Ge 182 | 8 Jaroslaw Tworek 183 | 8 Aditya Shah 184 | 8 Yuri Karadzhov 185 | 8 Alexey Subach 186 | 8 CJ Carey 187 | 8 Eric Nelson 188 | 8 Nitin Chaudhary 189 | 8 Moo VI 190 | 8 Michael Boyle 191 | 8 Longqi Wang 192 | 7 Isuru Fernando 193 | 7 Rajat Aggarwal 194 | 7 Rishabh Dixit 195 | 7 Devyani Kota 196 | 7 Abhishek Verma 197 | 7 David T 198 | 7 Ryan Krauss 199 | 7 Christian Bühler 200 | 7 Alex Argunov 201 | 7 Matthew Brett 202 | 6 Andreas Kloeckner 203 | 6 Dana Jacobsen 204 | 6 Dammina Sahabandu 205 | 6 Tim Swast 206 | 6 Sam Magura 207 | 6 Gao, Xiang 208 | 6 carstimon 209 | 6 Eva Charlotte Mayer 210 | 6 Raphael Michel 211 | 6 Duane Nykamp 212 | 6 Sumith 213 | 6 Kumar Krishna Agrawal 214 | 6 Demian Wassermann 215 | 6 Ananya H 216 | 5 Manish Gill 217 | 5 Adam Bloomston 218 | 5 Bhautik Mavani 219 | 5 Chancellor Arkantos 220 | 5 Chris Wu 221 | 5 Christophe Saint-Jean 222 | 5 David P. Sanders 223 | 5 Davy Mao 224 | 5 Jiaxing Liang 225 | 5 Khagesh Patel 226 | 5 Matthew Thomas 227 | 5 Nichita Utiu 228 | 5 Piotr Korgul 229 | 5 Roland Puntaier 230 | 5 Ruslan Pisarev 231 | 5 Tarun Gaba 232 | 5 Tobias Lenz 233 | 5 Tomasz Buchert 234 | 5 richierichrawr 235 | 4 Tom Gijselinck 236 | 4 Óscar Nájera 237 | 4 Ben Lucato 238 | 4 Alexander Bentkamp 239 | 4 Imran Ahmed Manzoor 240 | 4 Tiffany Zhu 241 | 4 Leonid Blouvshtein 242 | 4 Pramod Ch 243 | 4 Michał Radwański 244 | 4 Haruki Moriguchi 245 | 4 Alexandr Popov 246 | 4 Archit Verma 247 | 4 Stefen Yin 248 | 4 Stas Kelvich 249 | 4 Stefano Maggiolo 250 | 4 Stefan van der Walt 251 | 4 Florian Mickler 252 | 4 Chris Conley 253 | 4 Sanya Khurana 254 | 4 Chak-Pong Chung 255 | 4 Nimish Telang 256 | 4 Varun Joshi 257 | 4 Rom le Clair 258 | 4 Nguyen Truong Duy 259 | 4 Tristan Hume 260 | 4 Lokesh Sharma 261 | 4 Jochen Voss 262 | 4 Akshay Nagar 263 | 4 Sebastian Kreft 264 | 4 Boris Atamanovskiy 265 | 4 Juan Felipe Osorio 266 | 4 Zeel Shah 267 | 4 Jai Luthra 268 | 4 ChristinaZografou 269 | 4 Shashank Agarwal 270 | 4 Abderrahim Kitouni 271 | 4 David Roberts 272 | 4 Aman Deep 273 | 3 Benjamin McDonald 274 | 3 Darshan Chaudhary 275 | 3 Craig A. Stoudt 276 | 3 Mathew Chong 277 | 3 Luis Garcia 278 | 3 Case Van Horsen 279 | 3 Sarwar Chahal 280 | 3 Buck Shlegeris 281 | 3 Oscar Benjamin 282 | 3 Bill Flynn 283 | 3 Matthew Parnell 284 | 3 Pan Peng 285 | 3 Nikolay Lazarov 286 | 3 Shravas K Rao 287 | 3 Barry Wardell 288 | 3 Manoj Babu K. 289 | 3 Sunny Aggarwal 290 | 3 Andrew Straw 291 | 3 Phillip Berndt 292 | 3 Ted Dokos 293 | 3 Ted Horst 294 | 3 George Waksman 295 | 3 Geoffry Song 296 | 3 Amit Jamadagni 297 | 3 Tschijnmo TSCHAU 298 | 3 Tuomas Airaksinen 299 | 3 Raffaele De Feo 300 | 3 Vasiliy Dommes 301 | 3 Venkatesh Halli 302 | 3 Mridul Seth 303 | 3 Heiner Kirchhoffer 304 | 3 Jens H. Nielsen 305 | 3 Akshit Agarwal 306 | 3 Akshay Srinivasan 307 | 3 Eric Miller 308 | 3 Emma Hogan 309 | 3 Renato Orsino 310 | 3 operte 311 | 3 Edward Schembor 312 | 3 Kaushik Varanasi 313 | 3 Julio Idichekop Filho 314 | 3 Kevin Ventullo 315 | 3 Abhinav Agarwal 316 | 3 Martin Povišer 317 | 3 Hamish Dickson 318 | 3 Luca Weihs 319 | 2 Krit Karan 320 | 2 Shivam Tyagi 321 | 2 Maciej Baranski 322 | 2 Luv Agarwal 323 | 2 Param Singh 324 | 2 Boris Timokhin 325 | 2 Tomáš Bambas 326 | 2 QuaBoo 327 | 2 Bradley Froehle 328 | 2 Abhishek Garg 329 | 2 Tuan Manh Lai 330 | 2 Jayesh Lahori 331 | 2 Colleen Lee 332 | 2 Matthew Davis 333 | 2 Roman Inflianskas 334 | 2 Henry Gebhardt 335 | 2 James Aspnes 336 | 2 Konstantin Togoi 337 | 2 Rajath Shashidhara 338 | 2 FiachAntaw 339 | 2 Henrik Johansson 340 | 2 Fernando Perez 341 | 2 Oleksandr Gituliar 342 | 2 Nikhil Sarda 343 | 2 Justin Blythe 344 | 2 Lukas Zorich 345 | 2 Vladimir Poluhsin 346 | 2 tsmars15 347 | 2 Yu Kobayashi 348 | 2 James Fiedler 349 | 2 Alec Kalinin 350 | 2 Yury G. Kudryashov 351 | 2 Dmitry Batkovich 352 | 2 Asish Panda 353 | 2 Goutham Lakshminarayan 354 | 2 Ashwini Oruganti 355 | 2 Jack McCaffery 356 | 2 Arpit Goyal 357 | 2 Pavel Fedotov 358 | 2 Laura Domine 359 | 2 Michael Mayorov 360 | 2 Anton Akhmerov 361 | 2 Phil Ruffwind 362 | 2 Sai Nikhil 363 | 2 Sushant Hiray 364 | 2 Jurjen N.E. Bos 365 | 2 Michael Mueller 366 | 2 bluebrook 367 | 2 Michael S. Hansen 368 | 2 John V. Siratt 369 | 2 Cody Herbst 370 | 2 David Marek 371 | 2 Jezreel Ng 372 | 2 Pradyumna 373 | 2 Thomas Dixon 374 | 2 Rehas Sachdeva 375 | 2 Kunal Arora 376 | 2 Shukla 377 | 2 Thomas Wiecki 378 | 2 Ben Goodrich 379 | 2 Dimitra Konomi 380 | 2 Juan Luis Cano Rodríguez 381 | 2 Patrick Poitras 382 | 1 Vinay Kumar 383 | 1 Konrad Meyer 384 | 1 Josh Burkart 385 | 1 Joseph Dougherty 386 | 1 Jorge E. Cardona 387 | 1 Jonathan Miller 388 | 1 Langston Barrett 389 | 1 Lars Buitinck 390 | 1 John Connor 391 | 1 Johann Cohen-Tanugi 392 | 1 Lucas Jones 393 | 1 Madeleine Ball 394 | 1 Jerry Li 395 | 1 Marcin Kostrzewa 396 | 1 Marcus Näslund 397 | 1 Jeremy 398 | 1 Jens Jørgen Mortensen 399 | 1 Markus Müller 400 | 1 Jason Ly 401 | 1 James Pearson 402 | 1 James Goppert 403 | 1 Matt Rajca 404 | 1 James Abbatiello 405 | 1 Matthew Tadd 406 | 1 Łukasz Pankowski 407 | 1 Matthias Toews 408 | 1 Max Hutchinson 409 | 1 Jacob Garber 410 | 1 Michael Gallaspy 411 | 1 Michael Zingale 412 | 1 Jack Kemp 413 | 1 Mihai A. Ionescu 414 | 1 Hubert Tsang 415 | 1 Nathan Musoke 416 | 1 Nathan Woods 417 | 1 sevaader 418 | 1 Nicholas J.S. Kinar 419 | 1 Nicolás Guarín-Zapata 420 | 1 Haimo Zhang 421 | 1 Nishant Nikhil 422 | 1 Nishith Shah 423 | 1 Guo Xingjian 424 | 1 Normal Human 425 | 1 Guillaume Jacquenot 426 | 1 Guillaume Gay 427 | 1 Or Dvory 428 | 1 Gregory Ksionda 429 | 1 Gregory Ashton 430 | 1 Pastafarianist 431 | 1 Govind Sahai 432 | 1 Paul Scott 433 | 1 Paul Strickland 434 | 1 Pauli Virtanen 435 | 1 GolimarOurHero 436 | 1 GitRay 437 | 1 Gert-Ludwig Ingold 438 | 1 Philippe Bouafia 439 | 1 Pierre Haessig 440 | 1 siddharthist 441 | 1 Prabhjot Singh 442 | 1 Prashant Tyagi 443 | 1 Prateek Papriwal 444 | 1 G. D. McBain 445 | 1 Puneeth Chaganti 446 | 1 Raj 447 | 1 Ralph Bean 448 | 1 Fawaz Alazemi 449 | 1 Faisal Anees 450 | 1 Erik Welch 451 | 1 Ray Cathcart 452 | 1 Elrond der Elbenfuerst 453 | 1 Rich LaSota 454 | 1 Eh Tan 455 | 1 Rizgar Mella 456 | 1 Robert 457 | 1 Robert Cimrman 458 | 1 Dhruvesh Vijay Parikh 459 | 1 Roberto Colistete, Jr. 460 | 1 David Lawrence 461 | 1 vishal 462 | 1 Clemens Novak 463 | 1 Christian Schubert 464 | 1 Sam Tygier 465 | 1 Sambuddha Basu 466 | 1 Chris Swierczewski 467 | 1 Sandeep Veethu 468 | 1 Carsten Knoll 469 | 1 Sebastian Koslowski 470 | 1 Sebastian Krause 471 | 1 Bernhard R. Link 472 | 1 Seshagiri Prabhu 473 | 1 Shai 'Deshe' Wyborski 474 | 1 Shashank Kumar 475 | 1 Benjamin Gudehus 476 | 1 Benjamin Fishbein 477 | 1 Shruti Mangipudi 478 | 1 Bastian Weber 479 | 1 Siddhant Jain 480 | 1 Sourav Singh 481 | 1 Srajan Garg 482 | 1 Srinivas Vasudevan 483 | 1 Stepan Simsa 484 | 1 Subham Tibra 485 | 1 Aqnouch Mohammed 486 | 1 Sumith1896 487 | 1 Takafumi Arakaki 488 | 1 Andrew Docherty 489 | 1 Tarang Patel 490 | 1 zsc347 491 | 1 Andrej Tokarčík 492 | 1 Andre de Fortier Smit 493 | 1 Thomas Hickman 494 | 1 Anatolii Koval 495 | 1 Thomas Sidoti 496 | 1 Tim Lahey 497 | 1 Timothy Cyrus 498 | 1 Ambar Mehrotra 499 | 1 Alistair Lynn 500 | 1 Ali Raza Syed 501 | 1 Tyler Pirtle 502 | 1 Vasily Povalyaev 503 | 1 Venkata Ramana 504 | 1 Victor Brebenar 505 | 1 Vinay 506 | 1 Kibeom Kim 507 | 1 Vinit Ravishankar 508 | 1 Vlad Seghete 509 | 1 Vladimir Lagunov 510 | 1 Alexandr Gudulin 511 | 1 Alexander Eberspächer 512 | 1 ck Lux 513 | 1 dustyrockpyle 514 | 1 Akshat Jain 515 | 1 immerrr 516 | 1 Abhinav Chanda 517 | 1 mao8 518 | 1 marshall2389 519 | 1 Kaifeng Zhu 520 | 1 Kazuo Thow 521 | 1 Kevin Goodsell 522 | -------------------------------------------------------------------------------- /slides/sympy-year.txt: -------------------------------------------------------------------------------- 1 | 385 Aaron Meurer 2 | 350 Chris Smith 3 | 204 Gaurav Dhingra 4 | 194 AMiT Kumar 5 | 151 Sartaj Singh 6 | 141 Shubham Tibra 7 | 92 Kalevi Suominen 8 | 86 Francesco Bonazzi 9 | 78 Shivam Vats 10 | 78 Jason Moore 11 | 69 Harsh Gupta 12 | 57 Sampad Kumar Saha 13 | 53 Sudhanshu Mishra 14 | 52 Ondřej Čertík 15 | 39 Björn Dahlgren 16 | 37 Juha Remes 17 | 36 Thomas Baruchel 18 | 35 Tanu Hari Dixit 19 | 33 Meghana Madhyastha 20 | 31 Dustin Gadal 21 | 29 Jatin Yadav 22 | 28 Keval Shah 23 | 27 Arafat Dad Khan 24 | 26 Thomas Hisch 25 | 25 Kshitij Saraogi 26 | 25 Mark Dewing 27 | 24 Alkiviadis G. Akritas 28 | 23 Chai Wah Wu 29 | 23 Dzhelil Rufat 30 | 21 Alex Lindsay 31 | 20 Ralf Stephan 32 | 20 arihant parsoya 33 | 19 YiDing Jiang 34 | 19 Aravind Reddy 35 | 18 James Brandon Milam 36 | 17 Ashutosh Saboo 37 | 16 Pablo Zubieta 38 | 15 Anthony Scopatz 39 | 14 Rishabh Daal 40 | 14 Anish Shah 41 | 13 Colin B. Macdonald 42 | 12 Harshil Goel 43 | 12 Jim Crist 44 | 11 kshitij10496 45 | 11 Chaitanya Sai Alaparthi 46 | 11 Mario Pernici 47 | 11 Akshay Siramdas 48 | 11 Timothy Reluga 49 | 11 Akash Trehan 50 | 10 Richard Otis 51 | 10 Shekhar Prasad Rajak 52 | 9 Sahil Shekhawat 53 | 9 Curious72 54 | 9 Jason Siefken 55 | 8 Nitin Chaudhary 56 | 8 Moo VI 57 | 7 Abhishek Verma 58 | 7 Devyani Kota 59 | 7 David T 60 | 7 Alex Argunov 61 | 6 Eva Charlotte Mayer 62 | 6 Sean Vig 63 | 6 Kumar Krishna Agrawal 64 | 5 Bhautik Mavani 65 | 5 Isuru Fernando 66 | 5 Kyle McDaniel 67 | 5 Ruslan Pisarev 68 | 5 Matthew Thomas 69 | 4 Archit Verma 70 | 4 Alexander Bentkamp 71 | 4 Tom Gijselinck 72 | 4 Akshay Nagar 73 | 4 Boris Atamanovskiy 74 | 4 Sanya Khurana 75 | 4 Chak-Pong Chung 76 | 4 ChristinaZografou 77 | 4 Jai Luthra 78 | 4 Aman Deep 79 | 4 Michał Radwański 80 | 4 Haruki Moriguchi 81 | 4 Oliver Lee 82 | 3 Matthew Parnell 83 | 3 Jiaxing Liang 84 | 3 Phillip Berndt 85 | 3 Sachin Joglekar 86 | 3 Tschijnmo TSCHAU 87 | 3 Vasiliy Dommes 88 | 3 Abhinav Agarwal 89 | 3 operte 90 | 2 FiachAntaw 91 | 2 Matthew Davis 92 | 2 Krit Karan 93 | 2 Peleg Michaeli 94 | 2 bluebrook 95 | 2 Dimitra Konomi 96 | 2 Rehas Sachdeva 97 | 2 Vladimir Poluhsin 98 | 2 Phil Ruffwind 99 | 2 Yu Kobayashi 100 | 2 Min Ragan-Kelley 101 | 2 Anton Akhmerov 102 | 2 Michael Mueller 103 | 2 Justin Blythe 104 | 2 Michael S. Hansen 105 | 2 Abhishek Garg 106 | 1 Shashank Kumar 107 | 1 Haimo Zhang 108 | 1 Shivam Tyagi 109 | 1 Aqnouch Mohammed 110 | 1 Sourav Singh 111 | 1 Srajan Garg 112 | 1 Subham Tibra 113 | 1 Sumith1896 114 | 1 Jack Kemp 115 | 1 Thomas Hickman 116 | 1 Juan Felipe Osorio 117 | 1 Timothy Cyrus 118 | 1 Josh Burkart 119 | 1 Joachim Durchholz 120 | 1 Jerry Li 121 | 1 Vinay 122 | 1 Jacob Garber 123 | 1 siddharthist 124 | 1 Nathan Musoke 125 | 1 Nicolás Guarín-Zapata 126 | 1 Nishant Nikhil 127 | 1 Normal Human 128 | 1 G. D. McBain 129 | 1 Michael Zingale 130 | 1 Oscar Benjamin 131 | 1 Pastafarianist 132 | 1 Yury G. Kudryashov 133 | 1 Prabhjot Singh 134 | 1 Prashant Tyagi 135 | 1 Rich LaSota 136 | 1 GolimarOurHero 137 | 1 Jens Jørgen Mortensen 138 | 1 Sam Tygier 139 | 1 Matthew Brett 140 | 1 Sandeep Veethu 141 | 1 Guillaume Jacquenot 142 | 1 Guo Xingjian 143 | 1 Langston Barrett 144 | -------------------------------------------------------------------------------- /tutorial_exercises.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sympy/scipy-2016-tutorial/aa417427a1de2dcab2a9640b631b809d525d7929/tutorial_exercises.zip -------------------------------------------------------------------------------- /tutorial_exercises/01-Symbols-Derivatives-Functions.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Introduction\n", 8 | "\n", 9 | "In this section we learn to do the following:\n", 10 | "\n", 11 | "* Import SymPy and set up pretty printing\n", 12 | "* Use mathematical operations like `sqrt` and `sin`\n", 13 | "* Make SymPy Symbols\n", 14 | "* Take derivatives of expressions\n", 15 | "* Simplify expressions" 16 | ] 17 | }, 18 | { 19 | "cell_type": "markdown", 20 | "metadata": {}, 21 | "source": [ 22 | "## Preamble" 23 | ] 24 | }, 25 | { 26 | "cell_type": "markdown", 27 | "metadata": {}, 28 | "source": [ 29 | "Just like NumPy and Pandas replace functions like `sin`, `cos`, `exp`, and `log` to powerful numeric implementations, SymPy replaces `sin`, `cos`, `exp` and `log` with powerful mathematical implementations." 30 | ] 31 | }, 32 | { 33 | "cell_type": "code", 34 | "execution_count": null, 35 | "metadata": { 36 | "collapsed": false 37 | }, 38 | "outputs": [], 39 | "source": [ 40 | "from sympy import *\n", 41 | "init_printing() # Set up fancy printing" 42 | ] 43 | }, 44 | { 45 | "cell_type": "code", 46 | "execution_count": null, 47 | "metadata": { 48 | "collapsed": false 49 | }, 50 | "outputs": [], 51 | "source": [ 52 | "import math\n", 53 | "math.sqrt(2)" 54 | ] 55 | }, 56 | { 57 | "cell_type": "code", 58 | "execution_count": null, 59 | "metadata": { 60 | "collapsed": false 61 | }, 62 | "outputs": [], 63 | "source": [ 64 | "sqrt(2) # This `sqrt` comes from SymPy" 65 | ] 66 | }, 67 | { 68 | "cell_type": "code", 69 | "execution_count": null, 70 | "metadata": { 71 | "collapsed": false 72 | }, 73 | "outputs": [], 74 | "source": [ 75 | "cos(0)" 76 | ] 77 | }, 78 | { 79 | "cell_type": "markdown", 80 | "metadata": {}, 81 | "source": [ 82 | "### Exercise\n", 83 | "\n", 84 | "Use the function `acos` on `-1` to find when cosine equals `-1`. Try this same function with the math library. Do you get the same result?" 85 | ] 86 | }, 87 | { 88 | "cell_type": "code", 89 | "execution_count": null, 90 | "metadata": { 91 | "collapsed": false 92 | }, 93 | "outputs": [], 94 | "source": [ 95 | "# Call acos on -1 to find where on the circle the x coordinate equals -1\n", 96 | "\n" 97 | ] 98 | }, 99 | { 100 | "cell_type": "code", 101 | "execution_count": null, 102 | "metadata": { 103 | "collapsed": false 104 | }, 105 | "outputs": [], 106 | "source": [ 107 | "# Call `math.acos` on -1 to find the same result using the builtin math module. \n", 108 | "# Is the result the same? \n", 109 | "# What does `numpy.arccos` give you?\n" 110 | ] 111 | }, 112 | { 113 | "cell_type": "markdown", 114 | "metadata": {}, 115 | "source": [ 116 | "## Symbols\n", 117 | "\n", 118 | "Just like the NumPy `ndarray` or the Pandas `DataFrame`, SymPy has `Symbol`, which represents a mathematical variable.\n", 119 | "\n", 120 | "We create symbols using the function `symbols`. Operations on these symbols don't do numeric work like with NumPy or Pandas, instead they build up mathematical expressions." 121 | ] 122 | }, 123 | { 124 | "cell_type": "code", 125 | "execution_count": null, 126 | "metadata": { 127 | "collapsed": false 128 | }, 129 | "outputs": [], 130 | "source": [ 131 | "x, y, z = symbols('x,y,z')\n", 132 | "alpha, beta, gamma = symbols('alpha,beta,gamma')" 133 | ] 134 | }, 135 | { 136 | "cell_type": "code", 137 | "execution_count": null, 138 | "metadata": { 139 | "collapsed": false 140 | }, 141 | "outputs": [], 142 | "source": [ 143 | "x + 1" 144 | ] 145 | }, 146 | { 147 | "cell_type": "code", 148 | "execution_count": null, 149 | "metadata": { 150 | "collapsed": false 151 | }, 152 | "outputs": [], 153 | "source": [ 154 | "log(alpha**beta) + gamma" 155 | ] 156 | }, 157 | { 158 | "cell_type": "code", 159 | "execution_count": null, 160 | "metadata": { 161 | "collapsed": false 162 | }, 163 | "outputs": [], 164 | "source": [ 165 | "sin(x)**2 + cos(x)**2" 166 | ] 167 | }, 168 | { 169 | "cell_type": "markdown", 170 | "metadata": {}, 171 | "source": [ 172 | "### Exercise\n", 173 | "\n", 174 | "Use `symbols` to create two variables, `mu` and `sigma`. " 175 | ] 176 | }, 177 | { 178 | "cell_type": "code", 179 | "execution_count": null, 180 | "metadata": { 181 | "collapsed": false 182 | }, 183 | "outputs": [], 184 | "source": [ 185 | "?, ? = symbols('?')" 186 | ] 187 | }, 188 | { 189 | "cell_type": "markdown", 190 | "metadata": {}, 191 | "source": [ 192 | "### Exercise\n", 193 | "\n", 194 | "Use `exp`, `sqrt` and Python's arithmetic operators like `+, -, *, **` to create the standard bell curve with SymPy objects\n", 195 | "\n", 196 | "$$ e^{\\frac{(x - \\mu)^2}{ \\sigma^2}} $$" 197 | ] 198 | }, 199 | { 200 | "cell_type": "code", 201 | "execution_count": null, 202 | "metadata": { 203 | "collapsed": false 204 | }, 205 | "outputs": [], 206 | "source": [ 207 | "exp(?)" 208 | ] 209 | }, 210 | { 211 | "cell_type": "markdown", 212 | "metadata": {}, 213 | "source": [ 214 | "## Derivatives\n", 215 | "\n", 216 | "One of the most commonly requested operations in SymPy is the derivative. To take the derivative of an expression use the `diff` method" 217 | ] 218 | }, 219 | { 220 | "cell_type": "code", 221 | "execution_count": null, 222 | "metadata": { 223 | "collapsed": false 224 | }, 225 | "outputs": [], 226 | "source": [ 227 | "(x**2).diff(x)" 228 | ] 229 | }, 230 | { 231 | "cell_type": "code", 232 | "execution_count": null, 233 | "metadata": { 234 | "collapsed": false 235 | }, 236 | "outputs": [], 237 | "source": [ 238 | "sin(x).diff(x)" 239 | ] 240 | }, 241 | { 242 | "cell_type": "code", 243 | "execution_count": null, 244 | "metadata": { 245 | "collapsed": false 246 | }, 247 | "outputs": [], 248 | "source": [ 249 | "(x**2 + x*y + y**2).diff(x)" 250 | ] 251 | }, 252 | { 253 | "cell_type": "code", 254 | "execution_count": null, 255 | "metadata": { 256 | "collapsed": false 257 | }, 258 | "outputs": [], 259 | "source": [ 260 | "diff(x**2 + x*y + y**2, y) # diff is also available as a function" 261 | ] 262 | }, 263 | { 264 | "cell_type": "markdown", 265 | "metadata": {}, 266 | "source": [ 267 | "### Exercise\n", 268 | "\n", 269 | "In the last section you made a normal distribution" 270 | ] 271 | }, 272 | { 273 | "cell_type": "code", 274 | "execution_count": null, 275 | "metadata": { 276 | "collapsed": false 277 | }, 278 | "outputs": [], 279 | "source": [ 280 | "mu, sigma = symbols('mu,sigma')" 281 | ] 282 | }, 283 | { 284 | "cell_type": "code", 285 | "execution_count": null, 286 | "metadata": { 287 | "collapsed": false 288 | }, 289 | "outputs": [], 290 | "source": [ 291 | "bell = exp((x - mu)**2 / sigma**2)\n", 292 | "bell" 293 | ] 294 | }, 295 | { 296 | "cell_type": "markdown", 297 | "metadata": {}, 298 | "source": [ 299 | "Take the derivative of this expression with respect to $x$" 300 | ] 301 | }, 302 | { 303 | "cell_type": "code", 304 | "execution_count": null, 305 | "metadata": { 306 | "collapsed": false 307 | }, 308 | "outputs": [], 309 | "source": [ 310 | "?.diff(?)" 311 | ] 312 | }, 313 | { 314 | "cell_type": "markdown", 315 | "metadata": {}, 316 | "source": [ 317 | "### Exercise\n", 318 | "\n", 319 | "There are three symbols in that expression. We normally are interested in the derivative with respect to `x`, but we could just as easily ask for the derivative with respect to `sigma`. Try this now" 320 | ] 321 | }, 322 | { 323 | "cell_type": "code", 324 | "execution_count": null, 325 | "metadata": { 326 | "collapsed": false 327 | }, 328 | "outputs": [], 329 | "source": [ 330 | "# Derivative of bell curve with respect to sigma\n", 331 | "\n" 332 | ] 333 | }, 334 | { 335 | "cell_type": "markdown", 336 | "metadata": {}, 337 | "source": [ 338 | "### Exercise\n", 339 | "\n", 340 | "The second derivative of an expression is just the derivative of the derivative. Chain `.diff( )` calls to find the second and third derivatives of your expression." 341 | ] 342 | }, 343 | { 344 | "cell_type": "code", 345 | "execution_count": null, 346 | "metadata": { 347 | "collapsed": false 348 | }, 349 | "outputs": [], 350 | "source": [ 351 | "# Find the second and third derivative of `bell`\n", 352 | "\n" 353 | ] 354 | }, 355 | { 356 | "cell_type": "markdown", 357 | "metadata": {}, 358 | "source": [ 359 | "## Functions\n", 360 | "\n", 361 | "SymPy has a number of useful routines to manipulate expressions. The most commonly used function is `simplify`." 362 | ] 363 | }, 364 | { 365 | "cell_type": "code", 366 | "execution_count": null, 367 | "metadata": { 368 | "collapsed": false 369 | }, 370 | "outputs": [], 371 | "source": [ 372 | "expr = sin(x)**2 + cos(x)**2\n", 373 | "expr" 374 | ] 375 | }, 376 | { 377 | "cell_type": "code", 378 | "execution_count": null, 379 | "metadata": { 380 | "collapsed": false 381 | }, 382 | "outputs": [], 383 | "source": [ 384 | "simplify(expr)" 385 | ] 386 | }, 387 | { 388 | "cell_type": "markdown", 389 | "metadata": {}, 390 | "source": [ 391 | "### Exercise\n", 392 | "\n", 393 | "In the last section you found the third derivative of the bell curve" 394 | ] 395 | }, 396 | { 397 | "cell_type": "code", 398 | "execution_count": null, 399 | "metadata": { 400 | "collapsed": false 401 | }, 402 | "outputs": [], 403 | "source": [ 404 | "bell.diff(x).diff(x).diff(x)" 405 | ] 406 | }, 407 | { 408 | "cell_type": "markdown", 409 | "metadata": {}, 410 | "source": [ 411 | "You might notice that this expression has lots of shared structure. We can factor out some terms to simplify this expression. \n", 412 | "\n", 413 | "Call `simplify` on this expression and observe the result." 414 | ] 415 | }, 416 | { 417 | "cell_type": "code", 418 | "execution_count": null, 419 | "metadata": { 420 | "collapsed": false 421 | }, 422 | "outputs": [], 423 | "source": [ 424 | "# Call simplify on the third derivative of the bell expression\n" 425 | ] 426 | }, 427 | { 428 | "cell_type": "markdown", 429 | "metadata": {}, 430 | "source": [ 431 | "## Sympify\n", 432 | "\n", 433 | "The `sympify` function transforms Python objects (ints, floats, strings) into SymPy objects (Integers, Reals, Symbols). \n", 434 | "\n", 435 | "*note the difference between `sympify` and `simplify`. These are not the same functions.*" 436 | ] 437 | }, 438 | { 439 | "cell_type": "code", 440 | "execution_count": null, 441 | "metadata": { 442 | "collapsed": false 443 | }, 444 | "outputs": [], 445 | "source": [ 446 | "sympify('r * cos(theta)^2')" 447 | ] 448 | }, 449 | { 450 | "cell_type": "markdown", 451 | "metadata": {}, 452 | "source": [ 453 | "It's useful whenever you interact with the real world, or for quickly copy-paste an expression from an external source." 454 | ] 455 | } 456 | ], 457 | "metadata": { 458 | "kernelspec": { 459 | "display_name": "Python 2", 460 | "language": "python", 461 | "name": "python2" 462 | }, 463 | "language_info": { 464 | "codemirror_mode": { 465 | "name": "ipython", 466 | "version": 2 467 | }, 468 | "file_extension": ".py", 469 | "mimetype": "text/x-python", 470 | "name": "python", 471 | "nbconvert_exporter": "python", 472 | "pygments_lexer": "ipython2", 473 | "version": "2.7.11" 474 | } 475 | }, 476 | "nbformat": 4, 477 | "nbformat_minor": 0 478 | } 479 | -------------------------------------------------------------------------------- /tutorial_exercises/02-Solveset-Subs-Plot.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": null, 6 | "metadata": { 7 | "collapsed": false 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "from sympy import *\n", 12 | "from sympy.solvers.solveset import solveset\n", 13 | "init_printing()\n", 14 | "x, y, z = symbols('x,y,z')" 15 | ] 16 | }, 17 | { 18 | "cell_type": "markdown", 19 | "metadata": {}, 20 | "source": [ 21 | "## Solveset\n", 22 | "\n", 23 | "Equation solving is both a common need also a common building block for more complicated symbolic algorithms. \n", 24 | "\n", 25 | "Here we introduce the `solveset` function." 26 | ] 27 | }, 28 | { 29 | "cell_type": "code", 30 | "execution_count": null, 31 | "metadata": { 32 | "collapsed": false, 33 | "scrolled": true 34 | }, 35 | "outputs": [], 36 | "source": [ 37 | "solveset(x**2 - 4, x)" 38 | ] 39 | }, 40 | { 41 | "cell_type": "markdown", 42 | "metadata": {}, 43 | "source": [ 44 | "Solveset takes two arguments and one optional argument specifying the domain, an equation like $x^2 - 4$ and a variable on which we want to solve, like $x$ and an optional argument domain specifying the region in which we want to solve.\n", 45 | "\n", 46 | "Solveset returns the values of the variable, $x$, for which the equation, $x^2 - 4$ equals 0." 47 | ] 48 | }, 49 | { 50 | "cell_type": "markdown", 51 | "metadata": {}, 52 | "source": [ 53 | "### Exercise\n", 54 | "\n", 55 | "What would the following code produce? Are you sure?" 56 | ] 57 | }, 58 | { 59 | "cell_type": "code", 60 | "execution_count": null, 61 | "metadata": { 62 | "collapsed": false 63 | }, 64 | "outputs": [], 65 | "source": [ 66 | "solveset(x**2 - 9 == 0, x)" 67 | ] 68 | }, 69 | { 70 | "cell_type": "markdown", 71 | "metadata": {}, 72 | "source": [ 73 | "## Infinite Solutions\n", 74 | "\n", 75 | "One of the major improvements of `solveset` is that it also supports infinite solution." 76 | ] 77 | }, 78 | { 79 | "cell_type": "code", 80 | "execution_count": null, 81 | "metadata": { 82 | "collapsed": false, 83 | "scrolled": true 84 | }, 85 | "outputs": [], 86 | "source": [ 87 | "solveset(sin(x), x)" 88 | ] 89 | }, 90 | { 91 | "cell_type": "markdown", 92 | "metadata": {}, 93 | "source": [ 94 | "## Domain argument" 95 | ] 96 | }, 97 | { 98 | "cell_type": "code", 99 | "execution_count": null, 100 | "metadata": { 101 | "collapsed": false 102 | }, 103 | "outputs": [], 104 | "source": [ 105 | "solveset(exp(x) -1, x)" 106 | ] 107 | }, 108 | { 109 | "cell_type": "markdown", 110 | "metadata": {}, 111 | "source": [ 112 | "`solveset` by default solves everything in the complex domain. In complex domain $exp(x) == cos(x) + i\\ sin(x)$ and solution is basically equal to solution to $cos(x) == 1$. If you want only real solution, you can specify the domain as `S.Reals`." 113 | ] 114 | }, 115 | { 116 | "cell_type": "code", 117 | "execution_count": null, 118 | "metadata": { 119 | "collapsed": false 120 | }, 121 | "outputs": [], 122 | "source": [ 123 | "solveset(exp(x) -1, x, domain=S.Reals)" 124 | ] 125 | }, 126 | { 127 | "cell_type": "markdown", 128 | "metadata": {}, 129 | "source": [ 130 | "## Condition Set\n", 131 | "\n", 132 | "`solveset` isn't always able to solve a given equation, such cases it returns a `ConditionSet` object. `ConditionSet` represents a set satisfying a given condition." 133 | ] 134 | }, 135 | { 136 | "cell_type": "code", 137 | "execution_count": null, 138 | "metadata": { 139 | "collapsed": false 140 | }, 141 | "outputs": [], 142 | "source": [ 143 | "solveset(exp(x) + cos(x) + 1, x, domain=S.Reals)" 144 | ] 145 | }, 146 | { 147 | "cell_type": "markdown", 148 | "metadata": {}, 149 | "source": [ 150 | "`solveset` aims to return all the solutions of the equation. In cases where it able to find some solution but not all it returns a union of the known solutions and `ConditionSet`." 151 | ] 152 | }, 153 | { 154 | "cell_type": "code", 155 | "execution_count": null, 156 | "metadata": { 157 | "collapsed": false 158 | }, 159 | "outputs": [], 160 | "source": [ 161 | "solveset((x - 1)*(exp(x) + cos(x) + 1), x, domain=S.Reals)" 162 | ] 163 | }, 164 | { 165 | "cell_type": "markdown", 166 | "metadata": {}, 167 | "source": [ 168 | "## Symbolic use of `solveset`\n", 169 | "\n", 170 | "Results of `solveset` don't need to be numeric, like `{-2, 2}`. We can use solveset to perform algebraic manipulations. For example if we know a simple equation for the area of a square\n", 171 | "\n", 172 | " area = height * width\n", 173 | " \n", 174 | "we can solve this equation for any of the variables. For example how would we solve this system for the `height`, given the `area` and `width`?" 175 | ] 176 | }, 177 | { 178 | "cell_type": "code", 179 | "execution_count": null, 180 | "metadata": { 181 | "collapsed": false 182 | }, 183 | "outputs": [], 184 | "source": [ 185 | "height, width, area = symbols('height, width, area')\n", 186 | "solveset(area - height*width, height)" 187 | ] 188 | }, 189 | { 190 | "cell_type": "markdown", 191 | "metadata": {}, 192 | "source": [ 193 | "Note that we would have liked to have written\n", 194 | "\n", 195 | " solveset(area == height * width, height)\n", 196 | " \n", 197 | "But the `==` gotcha bites us. Instead we remember that `solveset` expects an expression that is equal to zero, so we rewrite the equation\n", 198 | "\n", 199 | " area = height * width\n", 200 | " \n", 201 | "into the equation\n", 202 | "\n", 203 | " 0 = height * width - area\n", 204 | " \n", 205 | "and that is what we give to solveset." 206 | ] 207 | }, 208 | { 209 | "cell_type": "markdown", 210 | "metadata": {}, 211 | "source": [ 212 | "### Exercise\n", 213 | "\n", 214 | "Compute the radius of a sphere, given the volume. Reminder, the volume of a sphere of radius `r` is given by\n", 215 | "\n", 216 | "$$ V = \\frac{4}{3}\\pi r^3 $$" 217 | ] 218 | }, 219 | { 220 | "cell_type": "code", 221 | "execution_count": null, 222 | "metadata": { 223 | "collapsed": false 224 | }, 225 | "outputs": [], 226 | "source": [ 227 | "# Solve for the radius of a sphere, given the volume\n" 228 | ] 229 | }, 230 | { 231 | "cell_type": "markdown", 232 | "metadata": {}, 233 | "source": [ 234 | "You will probably get several solutions, this is fine. The first one is probably the one that you want." 235 | ] 236 | }, 237 | { 238 | "cell_type": "markdown", 239 | "metadata": {}, 240 | "source": [ 241 | "## Substitution\n", 242 | "\n", 243 | "We often want to substitute in one expression for another. For this we use the subs method" 244 | ] 245 | }, 246 | { 247 | "cell_type": "code", 248 | "execution_count": null, 249 | "metadata": { 250 | "collapsed": false 251 | }, 252 | "outputs": [], 253 | "source": [ 254 | "x**2" 255 | ] 256 | }, 257 | { 258 | "cell_type": "code", 259 | "execution_count": null, 260 | "metadata": { 261 | "collapsed": false 262 | }, 263 | "outputs": [], 264 | "source": [ 265 | "# Replace x with y\n", 266 | "(x**2).subs({x: y})" 267 | ] 268 | }, 269 | { 270 | "cell_type": "markdown", 271 | "metadata": {}, 272 | "source": [ 273 | "### Exercise\n", 274 | "\n", 275 | "Subsitute $x$ for $sin(x)$ in the equation $x^2 + 2\\cdot x + 1$" 276 | ] 277 | }, 278 | { 279 | "cell_type": "code", 280 | "execution_count": null, 281 | "metadata": { 282 | "collapsed": false 283 | }, 284 | "outputs": [], 285 | "source": [ 286 | "# Replace x with sin(x)\n", 287 | "\n" 288 | ] 289 | }, 290 | { 291 | "cell_type": "markdown", 292 | "metadata": {}, 293 | "source": [ 294 | "## Subs + Solveset\n", 295 | "\n", 296 | "We can use subs and solve together to plug the solution of one equation into another" 297 | ] 298 | }, 299 | { 300 | "cell_type": "code", 301 | "execution_count": null, 302 | "metadata": { 303 | "collapsed": false 304 | }, 305 | "outputs": [], 306 | "source": [ 307 | "# Solve for the height of a rectangle given area and width\n", 308 | "\n", 309 | "soln = list(solveset(area - height*width, height))[0]\n", 310 | "soln" 311 | ] 312 | }, 313 | { 314 | "cell_type": "code", 315 | "execution_count": null, 316 | "metadata": { 317 | "collapsed": false 318 | }, 319 | "outputs": [], 320 | "source": [ 321 | "# Define perimeter of rectangle in terms of height and width\n", 322 | "\n", 323 | "perimeter = 2*(height + width)" 324 | ] 325 | }, 326 | { 327 | "cell_type": "code", 328 | "execution_count": null, 329 | "metadata": { 330 | "collapsed": false 331 | }, 332 | "outputs": [], 333 | "source": [ 334 | "# Substitute the solution for height into the expression for perimeter\n", 335 | "\n", 336 | "perimeter.subs({height: soln})" 337 | ] 338 | }, 339 | { 340 | "cell_type": "markdown", 341 | "metadata": {}, 342 | "source": [ 343 | "### Exercise\n", 344 | "\n", 345 | "In the last section you solved for the radius of a sphere given its volume" 346 | ] 347 | }, 348 | { 349 | "cell_type": "code", 350 | "execution_count": null, 351 | "metadata": { 352 | "collapsed": false 353 | }, 354 | "outputs": [], 355 | "source": [ 356 | "V, r = symbols('V,r', real=True)\n", 357 | "4*pi/3 * r**3" 358 | ] 359 | }, 360 | { 361 | "cell_type": "code", 362 | "execution_count": null, 363 | "metadata": { 364 | "collapsed": false 365 | }, 366 | "outputs": [], 367 | "source": [ 368 | "list(solveset(V - 4*pi/3 * r**3, r))[0]" 369 | ] 370 | }, 371 | { 372 | "cell_type": "markdown", 373 | "metadata": {}, 374 | "source": [ 375 | "Now lets compute the surface area of a sphere in terms of the volume. Recall that the surface area of a sphere is given by\n", 376 | "\n", 377 | "$$ 4 \\pi r^2 $$" 378 | ] 379 | }, 380 | { 381 | "cell_type": "code", 382 | "execution_count": null, 383 | "metadata": { 384 | "collapsed": false 385 | }, 386 | "outputs": [], 387 | "source": [ 388 | "(?).subs(?)" 389 | ] 390 | }, 391 | { 392 | "cell_type": "markdown", 393 | "metadata": {}, 394 | "source": [ 395 | "Does the expression look right? How would you expect the surface area to scale with respect to the volume? What is the exponent on $V$?" 396 | ] 397 | }, 398 | { 399 | "cell_type": "markdown", 400 | "metadata": {}, 401 | "source": [ 402 | "## Plotting\n", 403 | "\n", 404 | "SymPy can plot expressions easily using the `plot` function. By default this links against matplotlib." 405 | ] 406 | }, 407 | { 408 | "cell_type": "code", 409 | "execution_count": null, 410 | "metadata": { 411 | "collapsed": true 412 | }, 413 | "outputs": [], 414 | "source": [ 415 | "%matplotlib inline" 416 | ] 417 | }, 418 | { 419 | "cell_type": "code", 420 | "execution_count": null, 421 | "metadata": { 422 | "collapsed": false 423 | }, 424 | "outputs": [], 425 | "source": [ 426 | "plot(x**2)" 427 | ] 428 | }, 429 | { 430 | "cell_type": "markdown", 431 | "metadata": {}, 432 | "source": [ 433 | "### Exercise\n", 434 | "\n", 435 | "In the last exercise you derived a relationship between the volume of a sphere and the surface area. Plot this relationship using `plot`." 436 | ] 437 | }, 438 | { 439 | "cell_type": "code", 440 | "execution_count": null, 441 | "metadata": { 442 | "collapsed": false 443 | }, 444 | "outputs": [], 445 | "source": [ 446 | "plot(?)" 447 | ] 448 | }, 449 | { 450 | "cell_type": "markdown", 451 | "metadata": {}, 452 | "source": [ 453 | "## Low dependencies\n", 454 | "\n", 455 | "You may know that SymPy tries to be a very low-dependency project. Our user base is very broad. Some entertaining aspects result. For example, `textplot`." 456 | ] 457 | }, 458 | { 459 | "cell_type": "code", 460 | "execution_count": null, 461 | "metadata": { 462 | "collapsed": false 463 | }, 464 | "outputs": [], 465 | "source": [ 466 | "textplot(x**2, -3, 3)" 467 | ] 468 | }, 469 | { 470 | "cell_type": "markdown", 471 | "metadata": {}, 472 | "source": [ 473 | "### Exercise\n", 474 | "\n", 475 | "Play with `textplot` and enjoy :)" 476 | ] 477 | } 478 | ], 479 | "metadata": { 480 | "kernelspec": { 481 | "display_name": "Python 2", 482 | "language": "python", 483 | "name": "python2" 484 | }, 485 | "language_info": { 486 | "codemirror_mode": { 487 | "name": "ipython", 488 | "version": 2 489 | }, 490 | "file_extension": ".py", 491 | "mimetype": "text/x-python", 492 | "name": "python", 493 | "nbconvert_exporter": "python", 494 | "pygments_lexer": "ipython2", 495 | "version": "2.7.11" 496 | } 497 | }, 498 | "nbformat": 4, 499 | "nbformat_minor": 0 500 | } 501 | -------------------------------------------------------------------------------- /tutorial_exercises/03-Integrals.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": null, 6 | "metadata": { 7 | "collapsed": false 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "from sympy import *\n", 12 | "init_printing(use_latex='mathjax')\n", 13 | "n = symbols('n', integer=True)\n", 14 | "x, y, z = symbols('x,y,z')" 15 | ] 16 | }, 17 | { 18 | "cell_type": "markdown", 19 | "metadata": {}, 20 | "source": [ 21 | "## Integrals\n", 22 | "\n", 23 | "In the first section we learned symbolic differentiation with `diff`. Here we'll cover symbolic integration with `integrate`." 24 | ] 25 | }, 26 | { 27 | "cell_type": "markdown", 28 | "metadata": {}, 29 | "source": [ 30 | "Here is how we write the indefinite integral\n", 31 | "\n", 32 | "$$ \\int x^2 dx = \\frac{x^3}{3}$$" 33 | ] 34 | }, 35 | { 36 | "cell_type": "code", 37 | "execution_count": null, 38 | "metadata": { 39 | "collapsed": false 40 | }, 41 | "outputs": [], 42 | "source": [ 43 | "# Indefinite integral\n", 44 | "integrate(x**2, x)" 45 | ] 46 | }, 47 | { 48 | "cell_type": "markdown", 49 | "metadata": {}, 50 | "source": [ 51 | "And the definite integral\n", 52 | "\n", 53 | "$$ \\int_0^3 x^2 dx = \\left.\\frac{x^3}{3} \\right|_0^3 = \\frac{3^3}{3} - \\frac{0^3}{3} = 9 $$" 54 | ] 55 | }, 56 | { 57 | "cell_type": "code", 58 | "execution_count": null, 59 | "metadata": { 60 | "collapsed": false 61 | }, 62 | "outputs": [], 63 | "source": [ 64 | "# Definite integral\n", 65 | "integrate(x**2, (x, 0, 3))" 66 | ] 67 | }, 68 | { 69 | "cell_type": "markdown", 70 | "metadata": {}, 71 | "source": [ 72 | "As always, because we're using symbolics, we could use a symbol wherever we previously used a number\n", 73 | "\n", 74 | "$$ \\int_y^z x^n dx $$" 75 | ] 76 | }, 77 | { 78 | "cell_type": "code", 79 | "execution_count": null, 80 | "metadata": { 81 | "collapsed": false 82 | }, 83 | "outputs": [], 84 | "source": [ 85 | "integrate(x**n, (x, y, z))" 86 | ] 87 | }, 88 | { 89 | "cell_type": "markdown", 90 | "metadata": {}, 91 | "source": [ 92 | "### Exercise\n", 93 | "\n", 94 | "Compute the following integrals:\n", 95 | "\n", 96 | "$$ \\int \\sin(x) dx $$\n", 97 | "$$ \\int_0^{\\pi} \\sin(x) dx $$\n", 98 | "$$ \\int_0^y x^5 + 12x^3 - 2x + 1 $$\n", 99 | "$$ \\int e^{\\frac{(x - \\mu)^2}{\\sigma^2}} $$\n", 100 | "\n", 101 | "Feel free to play with various parameters and settings and see how the results change." 102 | ] 103 | }, 104 | { 105 | "cell_type": "code", 106 | "execution_count": null, 107 | "metadata": { 108 | "collapsed": false 109 | }, 110 | "outputs": [], 111 | "source": [ 112 | "# Use `integrate` to solve the integrals above\n", 113 | "\n" 114 | ] 115 | }, 116 | { 117 | "cell_type": "markdown", 118 | "metadata": {}, 119 | "source": [ 120 | "Are there some integrals that SymPy can't do? Find some." 121 | ] 122 | }, 123 | { 124 | "cell_type": "code", 125 | "execution_count": null, 126 | "metadata": { 127 | "collapsed": false 128 | }, 129 | "outputs": [], 130 | "source": [ 131 | "# Use `integrate` on other equations. Symbolic integration has it limits, find them." 132 | ] 133 | } 134 | ], 135 | "metadata": { 136 | "kernelspec": { 137 | "display_name": "Python 2", 138 | "language": "python", 139 | "name": "python2" 140 | }, 141 | "language_info": { 142 | "codemirror_mode": { 143 | "name": "ipython", 144 | "version": 2 145 | }, 146 | "file_extension": ".py", 147 | "mimetype": "text/x-python", 148 | "name": "python", 149 | "nbconvert_exporter": "python", 150 | "pygments_lexer": "ipython2", 151 | "version": "2.7.11" 152 | } 153 | }, 154 | "nbformat": 4, 155 | "nbformat_minor": 0 156 | } 157 | -------------------------------------------------------------------------------- /tutorial_exercises/04-Matrices.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": null, 6 | "metadata": { 7 | "collapsed": false 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "from sympy import *\n", 12 | "init_printing(use_latex='mathjax')\n", 13 | "x, y, z = symbols('x,y,z')\n", 14 | "r, theta = symbols('r,theta', positive=True)" 15 | ] 16 | }, 17 | { 18 | "cell_type": "markdown", 19 | "metadata": {}, 20 | "source": [ 21 | "## Matrices\n", 22 | "\n", 23 | "The SymPy `Matrix` object helps us with small problems in linear algebra." 24 | ] 25 | }, 26 | { 27 | "cell_type": "code", 28 | "execution_count": null, 29 | "metadata": { 30 | "collapsed": false 31 | }, 32 | "outputs": [], 33 | "source": [ 34 | "rot = Matrix([[r*cos(theta), -r*sin(theta)],\n", 35 | " [r*sin(theta), r*cos(theta)]])\n", 36 | "rot" 37 | ] 38 | }, 39 | { 40 | "cell_type": "markdown", 41 | "metadata": {}, 42 | "source": [ 43 | "### Standard methods" 44 | ] 45 | }, 46 | { 47 | "cell_type": "code", 48 | "execution_count": null, 49 | "metadata": { 50 | "collapsed": false 51 | }, 52 | "outputs": [], 53 | "source": [ 54 | "rot.det()" 55 | ] 56 | }, 57 | { 58 | "cell_type": "code", 59 | "execution_count": null, 60 | "metadata": { 61 | "collapsed": false 62 | }, 63 | "outputs": [], 64 | "source": [ 65 | "rot.inv()" 66 | ] 67 | }, 68 | { 69 | "cell_type": "code", 70 | "execution_count": null, 71 | "metadata": { 72 | "collapsed": false 73 | }, 74 | "outputs": [], 75 | "source": [ 76 | "rot.singular_values()" 77 | ] 78 | }, 79 | { 80 | "cell_type": "markdown", 81 | "metadata": {}, 82 | "source": [ 83 | "### Exercise\n", 84 | "\n", 85 | "Find the inverse of the following Matrix:\n", 86 | "\n", 87 | "$$ \\left[\\begin{matrix}1 & x\\\\y & 1\\end{matrix}\\right] $$" 88 | ] 89 | }, 90 | { 91 | "cell_type": "code", 92 | "execution_count": null, 93 | "metadata": { 94 | "collapsed": false 95 | }, 96 | "outputs": [], 97 | "source": [ 98 | "# Create a matrix and use the `inv` method to find the inverse\n", 99 | "\n" 100 | ] 101 | }, 102 | { 103 | "cell_type": "markdown", 104 | "metadata": {}, 105 | "source": [ 106 | "### Operators\n", 107 | "\n", 108 | "The standard SymPy operators work on matrices." 109 | ] 110 | }, 111 | { 112 | "cell_type": "code", 113 | "execution_count": null, 114 | "metadata": { 115 | "collapsed": false 116 | }, 117 | "outputs": [], 118 | "source": [ 119 | "rot * 2" 120 | ] 121 | }, 122 | { 123 | "cell_type": "code", 124 | "execution_count": null, 125 | "metadata": { 126 | "collapsed": false 127 | }, 128 | "outputs": [], 129 | "source": [ 130 | "rot**2" 131 | ] 132 | }, 133 | { 134 | "cell_type": "code", 135 | "execution_count": null, 136 | "metadata": { 137 | "collapsed": false 138 | }, 139 | "outputs": [], 140 | "source": [ 141 | "v = Matrix([[x], [y]])\n", 142 | "v" 143 | ] 144 | }, 145 | { 146 | "cell_type": "code", 147 | "execution_count": null, 148 | "metadata": { 149 | "collapsed": false 150 | }, 151 | "outputs": [], 152 | "source": [ 153 | "rot * v" 154 | ] 155 | }, 156 | { 157 | "cell_type": "markdown", 158 | "metadata": {}, 159 | "source": [ 160 | "### Exercise\n", 161 | "\n", 162 | "In the last exercise you found the inverse of the following matrix" 163 | ] 164 | }, 165 | { 166 | "cell_type": "code", 167 | "execution_count": null, 168 | "metadata": { 169 | "collapsed": false 170 | }, 171 | "outputs": [], 172 | "source": [ 173 | "M = Matrix([[1, x], [y, 1]])\n", 174 | "M" 175 | ] 176 | }, 177 | { 178 | "cell_type": "code", 179 | "execution_count": null, 180 | "metadata": { 181 | "collapsed": false 182 | }, 183 | "outputs": [], 184 | "source": [ 185 | "M.inv()" 186 | ] 187 | }, 188 | { 189 | "cell_type": "markdown", 190 | "metadata": {}, 191 | "source": [ 192 | "Now verify that this is the true inverse by multiplying the matrix times its inverse. Do you get the identity matrix back?" 193 | ] 194 | }, 195 | { 196 | "cell_type": "code", 197 | "execution_count": null, 198 | "metadata": { 199 | "collapsed": false 200 | }, 201 | "outputs": [], 202 | "source": [ 203 | "# Multiply `M` by its inverse. Do you get back the identity matrix?\n" 204 | ] 205 | }, 206 | { 207 | "cell_type": "markdown", 208 | "metadata": {}, 209 | "source": [ 210 | "### Exercise\n", 211 | "\n", 212 | "What are the eigenvectors and eigenvalues of `M`?" 213 | ] 214 | }, 215 | { 216 | "cell_type": "code", 217 | "execution_count": null, 218 | "metadata": { 219 | "collapsed": true 220 | }, 221 | "outputs": [], 222 | "source": [ 223 | "# Find the methods to compute eigenvectors and eigenvalues. Use these methods on `M`\n", 224 | "\n" 225 | ] 226 | }, 227 | { 228 | "cell_type": "markdown", 229 | "metadata": {}, 230 | "source": [ 231 | "### NumPy-like Item access" 232 | ] 233 | }, 234 | { 235 | "cell_type": "code", 236 | "execution_count": null, 237 | "metadata": { 238 | "collapsed": false 239 | }, 240 | "outputs": [], 241 | "source": [ 242 | "rot[0, 0]" 243 | ] 244 | }, 245 | { 246 | "cell_type": "code", 247 | "execution_count": null, 248 | "metadata": { 249 | "collapsed": false 250 | }, 251 | "outputs": [], 252 | "source": [ 253 | "rot[:, 0]" 254 | ] 255 | }, 256 | { 257 | "cell_type": "code", 258 | "execution_count": null, 259 | "metadata": { 260 | "collapsed": false 261 | }, 262 | "outputs": [], 263 | "source": [ 264 | "rot[1, :]" 265 | ] 266 | }, 267 | { 268 | "cell_type": "markdown", 269 | "metadata": {}, 270 | "source": [ 271 | "### Mutation\n", 272 | "\n", 273 | "We can change elements in the matrix." 274 | ] 275 | }, 276 | { 277 | "cell_type": "code", 278 | "execution_count": null, 279 | "metadata": { 280 | "collapsed": false 281 | }, 282 | "outputs": [], 283 | "source": [ 284 | "rot[0, 0] += 1\n", 285 | "rot" 286 | ] 287 | }, 288 | { 289 | "cell_type": "code", 290 | "execution_count": null, 291 | "metadata": { 292 | "collapsed": false 293 | }, 294 | "outputs": [], 295 | "source": [ 296 | "simplify(rot.det())" 297 | ] 298 | }, 299 | { 300 | "cell_type": "code", 301 | "execution_count": null, 302 | "metadata": { 303 | "collapsed": false 304 | }, 305 | "outputs": [], 306 | "source": [ 307 | "rot.singular_values()" 308 | ] 309 | }, 310 | { 311 | "cell_type": "markdown", 312 | "metadata": {}, 313 | "source": [ 314 | "### Exercise\n", 315 | "\n", 316 | "Play around with your matrix `M`, manipulating elements in a NumPy like way. Then try the various methods that we've talked about (or others). See what sort of answers you get." 317 | ] 318 | }, 319 | { 320 | "cell_type": "code", 321 | "execution_count": null, 322 | "metadata": { 323 | "collapsed": false 324 | }, 325 | "outputs": [], 326 | "source": [ 327 | "# Play with matrices\n", 328 | "\n" 329 | ] 330 | } 331 | ], 332 | "metadata": { 333 | "kernelspec": { 334 | "display_name": "Python 2", 335 | "language": "python", 336 | "name": "python2" 337 | }, 338 | "language_info": { 339 | "codemirror_mode": { 340 | "name": "ipython", 341 | "version": 2 342 | }, 343 | "file_extension": ".py", 344 | "mimetype": "text/x-python", 345 | "name": "python", 346 | "nbconvert_exporter": "python", 347 | "pygments_lexer": "ipython2", 348 | "version": "2.7.11" 349 | } 350 | }, 351 | "nbformat": 4, 352 | "nbformat_minor": 0 353 | } 354 | -------------------------------------------------------------------------------- /tutorial_exercises/05-Numeric-Evaluation.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": null, 6 | "metadata": { 7 | "collapsed": false 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "from sympy import *\n", 12 | "init_printing(use_latex='mathjax')\n", 13 | "x, y, z = symbols('x,y,z')\n", 14 | "n, m = symbols('n,m', integer=True)" 15 | ] 16 | }, 17 | { 18 | "cell_type": "code", 19 | "execution_count": null, 20 | "metadata": { 21 | "collapsed": false 22 | }, 23 | "outputs": [], 24 | "source": [ 25 | "%matplotlib inline" 26 | ] 27 | }, 28 | { 29 | "cell_type": "markdown", 30 | "metadata": {}, 31 | "source": [ 32 | "# Numeric Evaluation\n", 33 | "\n", 34 | "In this section we'll learn how to use our symbolic equations to drive numeric computations" 35 | ] 36 | }, 37 | { 38 | "cell_type": "markdown", 39 | "metadata": {}, 40 | "source": [ 41 | "## `.subs` and `.evalf`\n", 42 | "\n", 43 | "The simplest (and slowest) ways to evaluate an expression numerically is with the `.subs` and `.evalf` methods " 44 | ] 45 | }, 46 | { 47 | "cell_type": "code", 48 | "execution_count": null, 49 | "metadata": { 50 | "collapsed": false 51 | }, 52 | "outputs": [], 53 | "source": [ 54 | "sin(x)" 55 | ] 56 | }, 57 | { 58 | "cell_type": "code", 59 | "execution_count": null, 60 | "metadata": { 61 | "collapsed": false 62 | }, 63 | "outputs": [], 64 | "source": [ 65 | "sin(x).subs({x: 0})" 66 | ] 67 | }, 68 | { 69 | "cell_type": "code", 70 | "execution_count": null, 71 | "metadata": { 72 | "collapsed": false 73 | }, 74 | "outputs": [], 75 | "source": [ 76 | "acos(x).subs({x: -1})" 77 | ] 78 | }, 79 | { 80 | "cell_type": "code", 81 | "execution_count": null, 82 | "metadata": { 83 | "collapsed": false 84 | }, 85 | "outputs": [], 86 | "source": [ 87 | "acos(x).subs({x: -1}).evalf()" 88 | ] 89 | }, 90 | { 91 | "cell_type": "code", 92 | "execution_count": null, 93 | "metadata": { 94 | "collapsed": false 95 | }, 96 | "outputs": [], 97 | "source": [ 98 | "acos(x).subs({x: -1}).evalf(n=100)" 99 | ] 100 | }, 101 | { 102 | "cell_type": "markdown", 103 | "metadata": {}, 104 | "source": [ 105 | "### Exercise\n", 106 | "\n", 107 | "In a previous section we computed the following symbolic integral\n", 108 | "\n", 109 | "$$ \\int_y^z x^n dx $$" 110 | ] 111 | }, 112 | { 113 | "cell_type": "code", 114 | "execution_count": null, 115 | "metadata": { 116 | "collapsed": false 117 | }, 118 | "outputs": [], 119 | "source": [ 120 | "result = integrate(x**n, (x, y, z))\n", 121 | "result" 122 | ] 123 | }, 124 | { 125 | "cell_type": "markdown", 126 | "metadata": {}, 127 | "source": [ 128 | "Use `.subs` and a dictionary with keys `n, y, z` to evaluate this result when \n", 129 | "\n", 130 | " n == 2\n", 131 | " y == 0\n", 132 | " z == 3" 133 | ] 134 | }, 135 | { 136 | "cell_type": "code", 137 | "execution_count": null, 138 | "metadata": { 139 | "collapsed": false 140 | }, 141 | "outputs": [], 142 | "source": [ 143 | "# Evaluate the resulting integral on the above values\n", 144 | "\n" 145 | ] 146 | }, 147 | { 148 | "cell_type": "markdown", 149 | "metadata": {}, 150 | "source": [ 151 | "### Exercise\n", 152 | "\n", 153 | "This integral takes on a special form when $n = -1$. Use subs to find the expression when \n", 154 | "\n", 155 | " n == -1\n", 156 | " y == 5\n", 157 | " z == 100\n", 158 | " \n", 159 | "Then use `.evalf` to evaluate this subs-ed expression as a float." 160 | ] 161 | }, 162 | { 163 | "cell_type": "code", 164 | "execution_count": null, 165 | "metadata": { 166 | "collapsed": false 167 | }, 168 | "outputs": [], 169 | "source": [ 170 | "# Evaluate the resulting integral for the values {n: -1, y: 5, z: 100}\n", 171 | "# Then use evalf to get a numeric result\n", 172 | "\n" 173 | ] 174 | }, 175 | { 176 | "cell_type": "markdown", 177 | "metadata": {}, 178 | "source": [ 179 | "## `lambdify`\n", 180 | "\n", 181 | "The `.subs` and `.evalf` methods are great for when you want to evaluate an expression at a single point. When you want to evaluate your expression on lots of points they quickly become slow. \n", 182 | "\n", 183 | "To resolve this problem SymPy can rewrite its expressions as normal Python functions using the `math` library, vectorized computations using the NumPy library, C or Fortran Code using code printers, or even more sophisticated systems.\n", 184 | "\n", 185 | "We'll talk about some of the more advanced topics later. For now, `lambdify`..." 186 | ] 187 | }, 188 | { 189 | "cell_type": "code", 190 | "execution_count": null, 191 | "metadata": { 192 | "collapsed": false 193 | }, 194 | "outputs": [], 195 | "source": [ 196 | "# function = lambdify(input, output)\n", 197 | "\n", 198 | "f = lambdify(x, x**2)\n", 199 | "f(3)" 200 | ] 201 | }, 202 | { 203 | "cell_type": "code", 204 | "execution_count": null, 205 | "metadata": { 206 | "collapsed": false 207 | }, 208 | "outputs": [], 209 | "source": [ 210 | "import numpy as np\n", 211 | "f = lambdify(x, x**2, 'numpy') # Use numpy backend\n", 212 | "data = np.array([1, 2, 3, 4, 5])\n", 213 | "f(data)" 214 | ] 215 | }, 216 | { 217 | "cell_type": "markdown", 218 | "metadata": {}, 219 | "source": [ 220 | "### Exercise\n", 221 | "\n", 222 | "Here is a radial wave function for the Carbon atom at $n=3$, $l=1$" 223 | ] 224 | }, 225 | { 226 | "cell_type": "code", 227 | "execution_count": null, 228 | "metadata": { 229 | "collapsed": false 230 | }, 231 | "outputs": [], 232 | "source": [ 233 | "from sympy.physics.hydrogen import R_nl\n", 234 | "n = 3\n", 235 | "l = 1\n", 236 | "r = 6 # Carbon\n", 237 | "expr = R_nl(n, l, x, r)\n", 238 | "expr" 239 | ] 240 | }, 241 | { 242 | "cell_type": "markdown", 243 | "metadata": {}, 244 | "source": [ 245 | "Create a function, `f`, that evaluate this expression using the `'numpy'` backend" 246 | ] 247 | }, 248 | { 249 | "cell_type": "code", 250 | "execution_count": null, 251 | "metadata": { 252 | "collapsed": false 253 | }, 254 | "outputs": [], 255 | "source": [ 256 | "# Create Numpy function mapping x to expr with the numpy backend\n" 257 | ] 258 | }, 259 | { 260 | "cell_type": "markdown", 261 | "metadata": {}, 262 | "source": [ 263 | "We can plot your function from $x \\in [0, 5]$ with the following numpy/matplotlib code" 264 | ] 265 | }, 266 | { 267 | "cell_type": "code", 268 | "execution_count": null, 269 | "metadata": { 270 | "collapsed": false 271 | }, 272 | "outputs": [], 273 | "source": [ 274 | "from matplotlib.pyplot import plot\n", 275 | "nx = np.linspace(0, 5, 1000)\n", 276 | "plot(nx, f(nx))" 277 | ] 278 | }, 279 | { 280 | "cell_type": "markdown", 281 | "metadata": {}, 282 | "source": [ 283 | "### Exercise\n", 284 | "\n", 285 | "Create a numpy function that computes the derivative of our expression. Plot the result alongside the original." 286 | ] 287 | }, 288 | { 289 | "cell_type": "code", 290 | "execution_count": null, 291 | "metadata": { 292 | "collapsed": false 293 | }, 294 | "outputs": [], 295 | "source": [ 296 | "# Compute derivative of expr with respect to x\n", 297 | "\n" 298 | ] 299 | }, 300 | { 301 | "cell_type": "code", 302 | "execution_count": null, 303 | "metadata": { 304 | "collapsed": false 305 | }, 306 | "outputs": [], 307 | "source": [ 308 | "# Create new fprime function using lambdify\n", 309 | "\n" 310 | ] 311 | }, 312 | { 313 | "cell_type": "code", 314 | "execution_count": null, 315 | "metadata": { 316 | "collapsed": false 317 | }, 318 | "outputs": [], 319 | "source": [ 320 | "# Plot results alongside f(nx)\n", 321 | "\n" 322 | ] 323 | } 324 | ], 325 | "metadata": { 326 | "kernelspec": { 327 | "display_name": "Python 2", 328 | "language": "python", 329 | "name": "python2" 330 | }, 331 | "language_info": { 332 | "codemirror_mode": { 333 | "name": "ipython", 334 | "version": 2 335 | }, 336 | "file_extension": ".py", 337 | "mimetype": "text/x-python", 338 | "name": "python", 339 | "nbconvert_exporter": "python", 340 | "pygments_lexer": "ipython2", 341 | "version": "2.7.11" 342 | } 343 | }, 344 | "nbformat": 4, 345 | "nbformat_minor": 0 346 | } 347 | -------------------------------------------------------------------------------- /tutorial_exercises/Advanced - Special Series.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Special Series" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": null, 13 | "metadata": { 14 | "collapsed": true 15 | }, 16 | "outputs": [], 17 | "source": [ 18 | "%matplotlib inline\n", 19 | "from sympy import *\n", 20 | "init_printing()" 21 | ] 22 | }, 23 | { 24 | "cell_type": "code", 25 | "execution_count": null, 26 | "metadata": { 27 | "collapsed": true 28 | }, 29 | "outputs": [], 30 | "source": [ 31 | "x, t = symbols('x, t')" 32 | ] 33 | }, 34 | { 35 | "cell_type": "markdown", 36 | "metadata": {}, 37 | "source": [ 38 | "SymPy can compute special series like formal power series and fourier series. This is a new feature released in SymPy 1.0\n", 39 | "\n", 40 | "Let's try computing formal power series of some basic functions." 41 | ] 42 | }, 43 | { 44 | "cell_type": "code", 45 | "execution_count": null, 46 | "metadata": { 47 | "collapsed": false 48 | }, 49 | "outputs": [], 50 | "source": [ 51 | "exp_series = fps(exp(x), x)\n", 52 | "exp_series" 53 | ] 54 | }, 55 | { 56 | "cell_type": "markdown", 57 | "metadata": {}, 58 | "source": [ 59 | "This looks very similar to what ``series`` has to offer, but unlike series a formal power series object returns an infinite expansion." 60 | ] 61 | }, 62 | { 63 | "cell_type": "code", 64 | "execution_count": null, 65 | "metadata": { 66 | "collapsed": false 67 | }, 68 | "outputs": [], 69 | "source": [ 70 | "exp_series.infinite # Infinite representation" 71 | ] 72 | }, 73 | { 74 | "cell_type": "markdown", 75 | "metadata": {}, 76 | "source": [ 77 | "We can easily find out any term of the expansion (no need to recompute the expansion)." 78 | ] 79 | }, 80 | { 81 | "cell_type": "code", 82 | "execution_count": null, 83 | "metadata": { 84 | "collapsed": false 85 | }, 86 | "outputs": [], 87 | "source": [ 88 | "exp_series.term(51) # equivalent to exp_series[51]" 89 | ] 90 | }, 91 | { 92 | "cell_type": "code", 93 | "execution_count": null, 94 | "metadata": { 95 | "collapsed": false 96 | }, 97 | "outputs": [], 98 | "source": [ 99 | "exp_series.truncate(10) # return a truncated series expansion" 100 | ] 101 | }, 102 | { 103 | "cell_type": "markdown", 104 | "metadata": {}, 105 | "source": [ 106 | "# Exercise" 107 | ] 108 | }, 109 | { 110 | "cell_type": "markdown", 111 | "metadata": {}, 112 | "source": [ 113 | "Try computing the formal power series of $\\log(1 + x)$. Try to look at the infinite representation. What is the 51st term in this case? Compute the expansion about 1." 114 | ] 115 | }, 116 | { 117 | "cell_type": "code", 118 | "execution_count": null, 119 | "metadata": { 120 | "collapsed": false 121 | }, 122 | "outputs": [], 123 | "source": [ 124 | "log_series = fps(?)\n", 125 | "log_series" 126 | ] 127 | }, 128 | { 129 | "cell_type": "code", 130 | "execution_count": null, 131 | "metadata": { 132 | "collapsed": true 133 | }, 134 | "outputs": [], 135 | "source": [ 136 | "# infinite representation\n" 137 | ] 138 | }, 139 | { 140 | "cell_type": "code", 141 | "execution_count": null, 142 | "metadata": { 143 | "collapsed": true 144 | }, 145 | "outputs": [], 146 | "source": [ 147 | "# 51st term" 148 | ] 149 | }, 150 | { 151 | "cell_type": "code", 152 | "execution_count": null, 153 | "metadata": { 154 | "collapsed": true 155 | }, 156 | "outputs": [], 157 | "source": [ 158 | "# expansion about 1" 159 | ] 160 | }, 161 | { 162 | "cell_type": "markdown", 163 | "metadata": {}, 164 | "source": [ 165 | "# Fourier Series" 166 | ] 167 | }, 168 | { 169 | "cell_type": "markdown", 170 | "metadata": {}, 171 | "source": [ 172 | "Fourier series for functions can be computed using ``fourier_series`` function.\n", 173 | "\n", 174 | "A sawtooth wave is defined as:\n", 175 | " 1. $$ s(x) = x/\\pi \\in (-\\pi, \\pi) $$\n", 176 | " 2. $$ s(x + 2k\\pi) = s(x) \\in (-\\infty, \\infty) $$\n", 177 | " \n", 178 | "Let's compute the fourier series of the above defined wave." 179 | ] 180 | }, 181 | { 182 | "cell_type": "code", 183 | "execution_count": null, 184 | "metadata": { 185 | "collapsed": false 186 | }, 187 | "outputs": [], 188 | "source": [ 189 | "sawtooth_series = fourier_series(x / pi, (x, -pi, pi))\n", 190 | "sawtooth_series" 191 | ] 192 | }, 193 | { 194 | "cell_type": "code", 195 | "execution_count": null, 196 | "metadata": { 197 | "collapsed": false 198 | }, 199 | "outputs": [], 200 | "source": [ 201 | "plot(sawtooth_series.truncate(50)) " 202 | ] 203 | }, 204 | { 205 | "cell_type": "markdown", 206 | "metadata": {}, 207 | "source": [ 208 | "See https://en.wikipedia.org/wiki/Gibbs_phenomenon for why the fourier series has peculiar behavior near jump discontinuties." 209 | ] 210 | }, 211 | { 212 | "cell_type": "markdown", 213 | "metadata": {}, 214 | "source": [ 215 | "Just like formal power series we can index fourier series as well." 216 | ] 217 | }, 218 | { 219 | "cell_type": "code", 220 | "execution_count": null, 221 | "metadata": { 222 | "collapsed": false 223 | }, 224 | "outputs": [], 225 | "source": [ 226 | "sawtooth_series[51]" 227 | ] 228 | }, 229 | { 230 | "cell_type": "markdown", 231 | "metadata": {}, 232 | "source": [ 233 | "It is easy to shift and scale the series using ``shift`` and ``scale`` methods." 234 | ] 235 | }, 236 | { 237 | "cell_type": "code", 238 | "execution_count": null, 239 | "metadata": { 240 | "collapsed": false 241 | }, 242 | "outputs": [], 243 | "source": [ 244 | "sawtooth_series.shift(10).truncate(5)" 245 | ] 246 | }, 247 | { 248 | "cell_type": "code", 249 | "execution_count": null, 250 | "metadata": { 251 | "collapsed": false 252 | }, 253 | "outputs": [], 254 | "source": [ 255 | "sawtooth_series.scale(10).truncate(5)" 256 | ] 257 | }, 258 | { 259 | "cell_type": "markdown", 260 | "metadata": {}, 261 | "source": [ 262 | "# Exercise" 263 | ] 264 | }, 265 | { 266 | "cell_type": "markdown", 267 | "metadata": {}, 268 | "source": [ 269 | "Consider a square wave defined over the range of (0, 1) as:\n", 270 | " 1. $$ f(t) = 1 \\in (0, 1/2] $$\n", 271 | " 2. $$ f(t) = -1 \\in (1/2, 1) $$\n", 272 | " 3. $$ f(t + 1) = f(t) \\in (-\\infty, \\infty) $$\n", 273 | " \n", 274 | "Try computing the fourier series of the above defined function. Also, plot the computed fourier series." 275 | ] 276 | }, 277 | { 278 | "cell_type": "code", 279 | "execution_count": null, 280 | "metadata": { 281 | "collapsed": true 282 | }, 283 | "outputs": [], 284 | "source": [ 285 | "square_wave = Piecewise(?)" 286 | ] 287 | }, 288 | { 289 | "cell_type": "code", 290 | "execution_count": null, 291 | "metadata": { 292 | "collapsed": true 293 | }, 294 | "outputs": [], 295 | "source": [ 296 | "square_series = fourier_series(?)\n", 297 | "square_series" 298 | ] 299 | }, 300 | { 301 | "cell_type": "code", 302 | "execution_count": null, 303 | "metadata": { 304 | "collapsed": true 305 | }, 306 | "outputs": [], 307 | "source": [ 308 | "plot(?)" 309 | ] 310 | }, 311 | { 312 | "cell_type": "markdown", 313 | "metadata": {}, 314 | "source": [ 315 | "# What next?" 316 | ] 317 | }, 318 | { 319 | "cell_type": "markdown", 320 | "metadata": {}, 321 | "source": [ 322 | "Try some basic operations like addition, subtraction, etc on formal power series, fourier series and see what happens." 323 | ] 324 | } 325 | ], 326 | "metadata": { 327 | "kernelspec": { 328 | "display_name": "Python 2", 329 | "language": "python", 330 | "name": "python2" 331 | }, 332 | "language_info": { 333 | "codemirror_mode": { 334 | "name": "ipython", 335 | "version": 2 336 | }, 337 | "file_extension": ".py", 338 | "mimetype": "text/x-python", 339 | "name": "python", 340 | "nbconvert_exporter": "python", 341 | "pygments_lexer": "ipython2", 342 | "version": "2.7.11" 343 | } 344 | }, 345 | "nbformat": 4, 346 | "nbformat_minor": 0 347 | } 348 | -------------------------------------------------------------------------------- /tutorial_exercises/Advanced-Expression Manipulation.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Advanced Expression Manipulation" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": null, 13 | "metadata": { 14 | "collapsed": false 15 | }, 16 | "outputs": [], 17 | "source": [ 18 | "from sympy import *\n", 19 | "x, y, z = symbols('x y z')" 20 | ] 21 | }, 22 | { 23 | "cell_type": "markdown", 24 | "metadata": {}, 25 | "source": [ 26 | "For each exercise, fill in the function according to its docstring. " 27 | ] 28 | }, 29 | { 30 | "cell_type": "markdown", 31 | "metadata": {}, 32 | "source": [ 33 | "## Creating expressions from classes" 34 | ] 35 | }, 36 | { 37 | "cell_type": "markdown", 38 | "metadata": {}, 39 | "source": [ 40 | "Create the following objects without using any mathematical operators like `+`, `-`, `*`, `/`, or `**` by explicitly using the classes `Add`, `Mul`, and `Pow`. You may use `x` instead of `Symbol('x')` and `4` instead of `Integer(4)`.\n", 41 | "\n", 42 | "$$x^2 + 4xyz$$\n", 43 | "$$x^{(x^y)}$$\n", 44 | "$$x - \\frac{y}{z}$$\n" 45 | ] 46 | }, 47 | { 48 | "cell_type": "code", 49 | "execution_count": null, 50 | "metadata": { 51 | "collapsed": false 52 | }, 53 | "outputs": [], 54 | "source": [ 55 | "def explicit_classes1():\n", 56 | " \"\"\"\n", 57 | " Returns the expression x**2 + 4*x*y*z, built using SymPy classes explicitly.\n", 58 | "\n", 59 | " >>> explicit_classes1()\n", 60 | " x**2 + 4*x*y*z\n", 61 | " \"\"\"\n" 62 | ] 63 | }, 64 | { 65 | "cell_type": "code", 66 | "execution_count": null, 67 | "metadata": { 68 | "collapsed": true 69 | }, 70 | "outputs": [], 71 | "source": [ 72 | "explicit_classes1()" 73 | ] 74 | }, 75 | { 76 | "cell_type": "code", 77 | "execution_count": null, 78 | "metadata": { 79 | "collapsed": false 80 | }, 81 | "outputs": [], 82 | "source": [ 83 | "def explicit_classes2():\n", 84 | " \"\"\"\n", 85 | " Returns the expression x**(x**y), built using SymPy classes explicitly.\n", 86 | "\n", 87 | " >>> explicit_classes2()\n", 88 | " x**(x**y)\n", 89 | " \"\"\"\n" 90 | ] 91 | }, 92 | { 93 | "cell_type": "code", 94 | "execution_count": null, 95 | "metadata": { 96 | "collapsed": true 97 | }, 98 | "outputs": [], 99 | "source": [ 100 | "explicit_classes2()" 101 | ] 102 | }, 103 | { 104 | "cell_type": "code", 105 | "execution_count": null, 106 | "metadata": { 107 | "collapsed": false 108 | }, 109 | "outputs": [], 110 | "source": [ 111 | "def explicit_classes3():\n", 112 | " \"\"\"\n", 113 | " Returns the expression x - y/z, built using SymPy classes explicitly.\n", 114 | "\n", 115 | " >>> explicit_classes3()\n", 116 | " x - y/z\n", 117 | " \"\"\"\n" 118 | ] 119 | }, 120 | { 121 | "cell_type": "code", 122 | "execution_count": null, 123 | "metadata": { 124 | "collapsed": true 125 | }, 126 | "outputs": [], 127 | "source": [ 128 | "explicit_classes3()" 129 | ] 130 | }, 131 | { 132 | "cell_type": "markdown", 133 | "metadata": {}, 134 | "source": [ 135 | "## Nested args" 136 | ] 137 | }, 138 | { 139 | "cell_type": "code", 140 | "execution_count": null, 141 | "metadata": { 142 | "collapsed": false 143 | }, 144 | "outputs": [], 145 | "source": [ 146 | "expr = x**2 - y*(2**(x + 3) + z)" 147 | ] 148 | }, 149 | { 150 | "cell_type": "markdown", 151 | "metadata": {}, 152 | "source": [ 153 | "Use nested `.args` calls to get the 3 in expr." 154 | ] 155 | }, 156 | { 157 | "cell_type": "code", 158 | "execution_count": null, 159 | "metadata": { 160 | "collapsed": false 161 | }, 162 | "outputs": [], 163 | "source": [ 164 | "def nested_args():\n", 165 | " \"\"\"\n", 166 | " Get the 3 in the above expression.\n", 167 | "\n", 168 | " >>> nested_args()\n", 169 | " 3\n", 170 | " \"\"\"\n" 171 | ] 172 | }, 173 | { 174 | "cell_type": "code", 175 | "execution_count": null, 176 | "metadata": { 177 | "collapsed": true 178 | }, 179 | "outputs": [], 180 | "source": [ 181 | "nested_args()" 182 | ] 183 | }, 184 | { 185 | "cell_type": "markdown", 186 | "metadata": {}, 187 | "source": [ 188 | "## Traversal " 189 | ] 190 | }, 191 | { 192 | "cell_type": "markdown", 193 | "metadata": {}, 194 | "source": [ 195 | "Write a post-order traversal function that prints each node." 196 | ] 197 | }, 198 | { 199 | "cell_type": "code", 200 | "execution_count": null, 201 | "metadata": { 202 | "collapsed": false 203 | }, 204 | "outputs": [], 205 | "source": [ 206 | "def post(expr):\n", 207 | " \"\"\"\n", 208 | " Post-order traversal\n", 209 | "\n", 210 | " >>> expr = x**2 - y*(2**(x + 3) + z)\n", 211 | " >>> post(expr)\n", 212 | " -1\n", 213 | " y\n", 214 | " 2\n", 215 | " 3\n", 216 | " x\n", 217 | " x + 3\n", 218 | " 2**(x + 3)\n", 219 | " z\n", 220 | " 2**(x + 3) + z\n", 221 | " -y*(2**(x + 3) + z)\n", 222 | " x\n", 223 | " 2\n", 224 | " x**2\n", 225 | " x**2 - y*(2**(x + 3) + z)\n", 226 | " \"\"\"\n" 227 | ] 228 | }, 229 | { 230 | "cell_type": "code", 231 | "execution_count": null, 232 | "metadata": { 233 | "collapsed": true 234 | }, 235 | "outputs": [], 236 | "source": [ 237 | "post(expr)" 238 | ] 239 | }, 240 | { 241 | "cell_type": "code", 242 | "execution_count": null, 243 | "metadata": { 244 | "collapsed": false 245 | }, 246 | "outputs": [], 247 | "source": [ 248 | "for i in postorder_traversal(expr):\n", 249 | " print(i)" 250 | ] 251 | } 252 | ], 253 | "metadata": { 254 | "kernelspec": { 255 | "display_name": "Python 2", 256 | "language": "python", 257 | "name": "python2" 258 | }, 259 | "language_info": { 260 | "codemirror_mode": { 261 | "name": "ipython", 262 | "version": 2 263 | }, 264 | "file_extension": ".py", 265 | "mimetype": "text/x-python", 266 | "name": "python", 267 | "nbconvert_exporter": "python", 268 | "pygments_lexer": "ipython2", 269 | "version": "2.7.11" 270 | } 271 | }, 272 | "nbformat": 4, 273 | "nbformat_minor": 0 274 | } 275 | -------------------------------------------------------------------------------- /tutorial_exercises/Advanced-Gotchas Solutions.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Gotchas Solutions" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": 13, 13 | "metadata": { 14 | "collapsed": false 15 | }, 16 | "outputs": [], 17 | "source": [ 18 | "from sympy import *\n", 19 | "init_printing()" 20 | ] 21 | }, 22 | { 23 | "cell_type": "markdown", 24 | "metadata": {}, 25 | "source": [ 26 | "For each exercise, fill in the function according to its docstring. " 27 | ] 28 | }, 29 | { 30 | "cell_type": "markdown", 31 | "metadata": {}, 32 | "source": [ 33 | "## Symbols" 34 | ] 35 | }, 36 | { 37 | "cell_type": "markdown", 38 | "metadata": {}, 39 | "source": [ 40 | "What will be the output of the following code?\n", 41 | "\n", 42 | " x = 3\n", 43 | " y = symbols('y')\n", 44 | " a = x + y\n", 45 | " y = 5\n", 46 | " print(a)\n", 47 | "\n", 48 | "Replace `???` in the below code with what you think the value of `a` will be. Remember to define any Symbols you need!" 49 | ] 50 | }, 51 | { 52 | "cell_type": "code", 53 | "execution_count": 14, 54 | "metadata": { 55 | "collapsed": false 56 | }, 57 | "outputs": [], 58 | "source": [ 59 | "def symbols_exercise():\n", 60 | " \"\"\"\n", 61 | " >>> def testfunc():\n", 62 | " ... x = 3\n", 63 | " ... y = symbols('y')\n", 64 | " ... a = x + y\n", 65 | " ... y = 5\n", 66 | " ... return a\n", 67 | " >>> symbols_exercise() == testfunc()\n", 68 | " True\n", 69 | " \"\"\"\n", 70 | " y = symbols('y')\n", 71 | " return 3 + y" 72 | ] 73 | }, 74 | { 75 | "cell_type": "code", 76 | "execution_count": 15, 77 | "metadata": { 78 | "collapsed": false 79 | }, 80 | "outputs": [ 81 | { 82 | "data": { 83 | "text/plain": [ 84 | "True" 85 | ] 86 | }, 87 | "execution_count": 15, 88 | "metadata": {}, 89 | "output_type": "execute_result" 90 | } 91 | ], 92 | "source": [ 93 | "def testfunc():\n", 94 | " x = 3\n", 95 | " y = symbols('y')\n", 96 | " a = x + y\n", 97 | " y = 5\n", 98 | " return a\n", 99 | "\n", 100 | "symbols_exercise() == testfunc()" 101 | ] 102 | }, 103 | { 104 | "cell_type": "markdown", 105 | "metadata": {}, 106 | "source": [ 107 | "## Equality" 108 | ] 109 | }, 110 | { 111 | "cell_type": "markdown", 112 | "metadata": {}, 113 | "source": [ 114 | "Write a function that takes two expressions as input, and returns a tuple of two booleans. The first if they are equal symbolically, and the second if they are equal mathematically." 115 | ] 116 | }, 117 | { 118 | "cell_type": "code", 119 | "execution_count": 16, 120 | "metadata": { 121 | "collapsed": false 122 | }, 123 | "outputs": [], 124 | "source": [ 125 | "def equality_exercise(a, b):\n", 126 | " \"\"\"\n", 127 | " Determine if a = b symbolically and mathematically.\n", 128 | "\n", 129 | " Returns a tuple of two booleans. The first is True if a = b symbolically,\n", 130 | " the second is True if a = b mathematically. Note the second may be False\n", 131 | " but the two still equal if SymPy is not powerful enough.\n", 132 | "\n", 133 | " Examples\n", 134 | " ========\n", 135 | "\n", 136 | " >>> x = symbols('x')\n", 137 | " >>> equality_exercise(x, 2)\n", 138 | " (False, False)\n", 139 | " >>> equality_exercise((x + 1)**2, x**2 + 2*x + 1)\n", 140 | " (False, True)\n", 141 | " >>> equality_exercise(2*x, 2*x)\n", 142 | " (True, True)\n", 143 | " \"\"\"\n", 144 | " return (a == b, simplify(a - b) == 0)" 145 | ] 146 | }, 147 | { 148 | "cell_type": "code", 149 | "execution_count": 17, 150 | "metadata": { 151 | "collapsed": false 152 | }, 153 | "outputs": [], 154 | "source": [ 155 | "x = symbols('x')" 156 | ] 157 | }, 158 | { 159 | "cell_type": "code", 160 | "execution_count": 18, 161 | "metadata": { 162 | "collapsed": false 163 | }, 164 | "outputs": [ 165 | { 166 | "data": { 167 | "text/plain": [ 168 | "(False, False)" 169 | ] 170 | }, 171 | "execution_count": 18, 172 | "metadata": {}, 173 | "output_type": "execute_result" 174 | } 175 | ], 176 | "source": [ 177 | "equality_exercise(x, 2)" 178 | ] 179 | }, 180 | { 181 | "cell_type": "code", 182 | "execution_count": 19, 183 | "metadata": { 184 | "collapsed": false 185 | }, 186 | "outputs": [ 187 | { 188 | "data": { 189 | "text/plain": [ 190 | "(False, True)" 191 | ] 192 | }, 193 | "execution_count": 19, 194 | "metadata": {}, 195 | "output_type": "execute_result" 196 | } 197 | ], 198 | "source": [ 199 | "equality_exercise((x + 1)**2, x**2 + 2*x + 1)" 200 | ] 201 | }, 202 | { 203 | "cell_type": "code", 204 | "execution_count": 20, 205 | "metadata": { 206 | "collapsed": false 207 | }, 208 | "outputs": [ 209 | { 210 | "data": { 211 | "text/plain": [ 212 | "(True, True)" 213 | ] 214 | }, 215 | "execution_count": 20, 216 | "metadata": {}, 217 | "output_type": "execute_result" 218 | } 219 | ], 220 | "source": [ 221 | "equality_exercise(2*x, 2*x)" 222 | ] 223 | }, 224 | { 225 | "cell_type": "markdown", 226 | "metadata": {}, 227 | "source": [ 228 | "## `^` and `/`" 229 | ] 230 | }, 231 | { 232 | "cell_type": "markdown", 233 | "metadata": {}, 234 | "source": [ 235 | "Correct the following functions" 236 | ] 237 | }, 238 | { 239 | "cell_type": "code", 240 | "execution_count": 21, 241 | "metadata": { 242 | "collapsed": false 243 | }, 244 | "outputs": [], 245 | "source": [ 246 | "def operator_exercise1():\n", 247 | " \"\"\"\n", 248 | " >>> operator_exercise1()\n", 249 | " x**2 + 2*x + 1/2\n", 250 | " \"\"\"\n", 251 | " x = symbols('x')\n", 252 | " return x**2 + 2*x + Rational(1, 2)" 253 | ] 254 | }, 255 | { 256 | "cell_type": "code", 257 | "execution_count": 22, 258 | "metadata": { 259 | "collapsed": false 260 | }, 261 | "outputs": [ 262 | { 263 | "data": { 264 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAGwAAAAqBAMAAACkSaOPAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAIol2q1SZEGbd7zK7\nzUTvhYErAAAByklEQVRIDe2Sz0sCQRTH37bu6q5Y9hM6JRaeJaSrHoKOCVHXPEVF0hYdPdh/IJ2i\ni8cgCDx16ZCHIugQHboEDkn9AxKERNQ26s7O22mNWc/NwXnf9/1+5umMAMHXbXCEEqX2INjB4kAY\nqP+YeN34SlLXlmj30wjTLf2hX0zsI8yIK5+i3U8jzMyHv/vFxD7CADTZt9e3vzb5SbEErzvVVPHe\n2/BXc962koNs3tvyU5GE0w3Hu0XIAqOFg3tYuPULXPZqLd3dzVMIeS5pxY2iInqzuuTBYm3Q/8TG\nMpMLadO2na/kTKNnGG3oer3jhGnhROTYrPDBHLtKYE/AhkBtaTU/rAHYE7AwhOocos/euxIAvQ7Y\nY9iI3VmUMFmQRgl5OickR7uQ6Xw4XpGQE0IeOx13zdTAcoU7TSvAKAD32DQnGYlnQfXBLgAOsSdg\n6+U7GOfD2DTlKJmqYE/ASvP7s+XfmEF/dwV7AoaIbunepGC4mLLRaAoelcP8Xj3mK1MToL6zOsBO\n/7vVAHEWPbNgucmE/P5swe4AGB1QRe8sPy/6Jp9FyVgdCflyRz6KkmoOCflyDZS4fJolowWIDIBN\nJ5Nb7IgAe9W2P+AHAIprVTpk+QAAAAAASUVORK5CYII=\n", 265 | "text/latex": [ 266 | "$$x^{2} + 2 x + \\frac{1}{2}$$" 267 | ], 268 | "text/plain": [ 269 | " 2 1\n", 270 | "x + 2⋅x + ─\n", 271 | " 2" 272 | ] 273 | }, 274 | "execution_count": 22, 275 | "metadata": {}, 276 | "output_type": "execute_result" 277 | } 278 | ], 279 | "source": [ 280 | "operator_exercise1()" 281 | ] 282 | }, 283 | { 284 | "cell_type": "code", 285 | "execution_count": 23, 286 | "metadata": { 287 | "collapsed": false 288 | }, 289 | "outputs": [], 290 | "source": [ 291 | "def operator_exercise2():\n", 292 | " \"\"\"\n", 293 | " >>> operator_exercise2()\n", 294 | " (x**2/2 + 2*x + 3/4)**(3/2)\n", 295 | " \"\"\"\n", 296 | " x = symbols('x')\n", 297 | " return (x**2/2 + 2*x + Rational(3, 4))**Rational(3, 2)" 298 | ] 299 | }, 300 | { 301 | "cell_type": "code", 302 | "execution_count": 24, 303 | "metadata": { 304 | "collapsed": false 305 | }, 306 | "outputs": [ 307 | { 308 | "data": { 309 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAJcAAAA7BAMAAACEbwXfAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAiUSZq1TdIu8yzRBm\ndrsuMkCWAAAEF0lEQVRYCa1XXYgTVxQ++ZlMJpPoBN8UbZ4Ly0YWRFbcDbjog2AWqqUWZOOLCgqb\nslbxQVxt/V3EFd911SIlDxrpQ6GFbvrSBUF2xX0QFDboiyBiWrGiq07vz7k/M51xJpD7MPc73/nO\nl3vv3LkzAehR61ss9ciJ2NxI1npnVk84vTOzVvfOCyA50zs3B976zBJD231M3NCeNDs+7SYY9DGx\nw/uL0z7tfjjhp3yK6DBRQs1pmBUQmYjOFsuy0nVdPs/1qmSsqXAc9KXQ963jc0pUVNl1BSOQVVw3\nCpCfQdmMNcnQ1xiTTvdVbCCagORHktiCyYOwTJF5HmPS/algFPpiFP4lmiwZHmv82cw5GJJd7Fh8\n5pIJB2PczJhCyW91CrQ1v7prZzO83J9h04SbnMb7epJG5tptezbDJdf1V3wmzlVosp+NCH753SFB\nni3cXfirdYbm4rfLPzFtrsy6cbdG+kyFBg4swW4KumiFU1TMB4Nl/SUKmrAD4y66S2yB6QYRbSOC\ni4KI2R8DeNWi2q1awQ8cm+/A1thIaLtNNBvjd4BWWG9Y3VyhA48jHXTBe4BxZjO7IOkCu5nGhxWT\npiJl9jPgCST/ZulMW6pWTFJov1xTfCK5WMAYGBxlwnRH6rNtCQPBxODTQF6RBXX4zzqKDkBmBZb4\nAAKSnDL4qtOgv8Up/9WuMybdhIyaBqF+9QvBUhttPuR3jQVWlZ2C9D96/R49YNh+LamlaQk9AM1y\ny5CKMINPsnC4LqEHoBnhMsvw3eL3D/lI4f8jgwuysNqU0AOU2TXHdvKHsjWeDjDbJwurEnmBMrsN\nCSh0DFyOALMDspKb0dcetg5PSbNUmzy06bYoEGa8grE/ixwEjizVaNy60GhUqGqRXrJ8xQYbjQON\nBj8UKc1bhBkRiZEZZTgK9KsB11aMTDiRXk1zGEVakkFhdgVgLl9fgkK4mboBEVvD3FtcVRtrPYfj\n+GsBI1NbI2LTZshtqf3x4O7aVriZ2rTzJVSBOXBbYrVmIit6bWRWhZHa46Qe9MNQUM8/JPn9Ex6y\n75MI8FTUHnR1BG0n57BSxkCP2kykHUFZzhD6XBOqJZaOdzHvtZlQOxz5sU3ZO00YLrF0vEsi12bC\ndEfq+QsFw/GQTSfVOphDMzU38apjKou/bvSKcGwvoJn2qgN8CdMqzIYb6JmEkM/XFS0+DwgzpNho\ntFuY6Z8H/dOisFARKEZvO8JMX5tMWZR+BaY2YsGG9MbISPXHBZL0fFLlOyi3ypCPb0aK+G3MVbCe\ndRcxOFIsbtD5SMzN8DMU1d9gP+669Fs8dktUX7eI+JmnIOd4wi6D5JSnwDzrCbsMMqPegm+9YXfR\ngE+eKvuILkJjxi9+6Sfix/IvoixJlSTsEtgv9IL/AHT99A+60z6FAAAAAElFTkSuQmCC\n", 310 | "text/latex": [ 311 | "$$\\left(\\frac{x^{2}}{2} + 2 x + \\frac{3}{4}\\right)^{\\frac{3}{2}}$$" 312 | ], 313 | "text/plain": [ 314 | " 3/2\n", 315 | "⎛ 2 ⎞ \n", 316 | "⎜x 3⎟ \n", 317 | "⎜── + 2⋅x + ─⎟ \n", 318 | "⎝2 4⎠ " 319 | ] 320 | }, 321 | "execution_count": 24, 322 | "metadata": {}, 323 | "output_type": "execute_result" 324 | } 325 | ], 326 | "source": [ 327 | "operator_exercise2()" 328 | ] 329 | }, 330 | { 331 | "cell_type": "code", 332 | "execution_count": null, 333 | "metadata": { 334 | "collapsed": false 335 | }, 336 | "outputs": [], 337 | "source": [] 338 | } 339 | ], 340 | "metadata": {}, 341 | "nbformat": 4, 342 | "nbformat_minor": 0 343 | } -------------------------------------------------------------------------------- /tutorial_exercises/Advanced-Gotchas.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Gotchas" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": null, 13 | "metadata": { 14 | "collapsed": false 15 | }, 16 | "outputs": [], 17 | "source": [ 18 | "from sympy import *\n", 19 | "init_printing()" 20 | ] 21 | }, 22 | { 23 | "cell_type": "markdown", 24 | "metadata": {}, 25 | "source": [ 26 | "For each exercise, fill in the function according to its docstring. " 27 | ] 28 | }, 29 | { 30 | "cell_type": "markdown", 31 | "metadata": {}, 32 | "source": [ 33 | "## Symbols" 34 | ] 35 | }, 36 | { 37 | "cell_type": "markdown", 38 | "metadata": {}, 39 | "source": [ 40 | "What will be the output of the following code?\n", 41 | "\n", 42 | " x = 3\n", 43 | " y = symbols('y')\n", 44 | " a = x + y\n", 45 | " y = 5\n", 46 | " print(a)\n", 47 | "\n", 48 | "Replace `???` in the below code with what you think the value of `a` will be. Remember to define any Symbols you need!" 49 | ] 50 | }, 51 | { 52 | "cell_type": "code", 53 | "execution_count": null, 54 | "metadata": { 55 | "collapsed": false 56 | }, 57 | "outputs": [], 58 | "source": [ 59 | "def symbols_exercise():\n", 60 | " \"\"\"\n", 61 | " >>> def testfunc():\n", 62 | " ... x = 3\n", 63 | " ... y = symbols('y')\n", 64 | " ... a = x + y\n", 65 | " ... y = 5\n", 66 | " ... return a\n", 67 | " >>> symbols_exercise() == testfunc()\n", 68 | " True\n", 69 | " \"\"\"\n", 70 | " return ??? # Replace ??? with what you think the value of a is" 71 | ] 72 | }, 73 | { 74 | "cell_type": "code", 75 | "execution_count": null, 76 | "metadata": { 77 | "collapsed": false 78 | }, 79 | "outputs": [], 80 | "source": [ 81 | "def testfunc():\n", 82 | " x = 3\n", 83 | " y = symbols('y')\n", 84 | " a = x + y\n", 85 | " y = 5\n", 86 | " return a\n", 87 | "\n", 88 | "symbols_exercise() == testfunc()" 89 | ] 90 | }, 91 | { 92 | "cell_type": "markdown", 93 | "metadata": {}, 94 | "source": [ 95 | "## Equality" 96 | ] 97 | }, 98 | { 99 | "cell_type": "markdown", 100 | "metadata": {}, 101 | "source": [ 102 | "Write a function that takes two expressions as input, and returns a tuple of two booleans. The first if they are equal symbolically, and the second if they are equal mathematically." 103 | ] 104 | }, 105 | { 106 | "cell_type": "code", 107 | "execution_count": null, 108 | "metadata": { 109 | "collapsed": false 110 | }, 111 | "outputs": [], 112 | "source": [ 113 | "def equality_exercise(a, b):\n", 114 | " \"\"\"\n", 115 | " Determine if a = b symbolically and mathematically.\n", 116 | "\n", 117 | " Returns a tuple of two booleans. The first is True if a = b symbolically,\n", 118 | " the second is True if a = b mathematically. Note the second may be False\n", 119 | " but the two still equal if SymPy is not powerful enough.\n", 120 | "\n", 121 | " Examples\n", 122 | " ========\n", 123 | "\n", 124 | " >>> x = symbols('x')\n", 125 | " >>> equality_exercise(x, 2)\n", 126 | " (False, False)\n", 127 | " >>> equality_exercise((x + 1)**2, x**2 + 2*x + 1)\n", 128 | " (False, True)\n", 129 | " >>> equality_exercise(2*x, 2*x)\n", 130 | " (True, True)\n", 131 | " \"\"\"\n" 132 | ] 133 | }, 134 | { 135 | "cell_type": "code", 136 | "execution_count": null, 137 | "metadata": { 138 | "collapsed": false 139 | }, 140 | "outputs": [], 141 | "source": [ 142 | "x = symbols('x')" 143 | ] 144 | }, 145 | { 146 | "cell_type": "code", 147 | "execution_count": null, 148 | "metadata": { 149 | "collapsed": false 150 | }, 151 | "outputs": [], 152 | "source": [ 153 | "equality_exercise(x, 2)" 154 | ] 155 | }, 156 | { 157 | "cell_type": "code", 158 | "execution_count": null, 159 | "metadata": { 160 | "collapsed": false 161 | }, 162 | "outputs": [], 163 | "source": [ 164 | "equality_exercise((x + 1)**2, x**2 + 2*x + 1)" 165 | ] 166 | }, 167 | { 168 | "cell_type": "code", 169 | "execution_count": null, 170 | "metadata": { 171 | "collapsed": false 172 | }, 173 | "outputs": [], 174 | "source": [ 175 | "equality_exercise(2*x, 2*x)" 176 | ] 177 | }, 178 | { 179 | "cell_type": "markdown", 180 | "metadata": {}, 181 | "source": [ 182 | "## `^` and `/`" 183 | ] 184 | }, 185 | { 186 | "cell_type": "markdown", 187 | "metadata": {}, 188 | "source": [ 189 | "Correct the following functions" 190 | ] 191 | }, 192 | { 193 | "cell_type": "code", 194 | "execution_count": null, 195 | "metadata": { 196 | "collapsed": false 197 | }, 198 | "outputs": [], 199 | "source": [ 200 | "def operator_exercise1():\n", 201 | " \"\"\"\n", 202 | " >>> operator_exercise1()\n", 203 | " x**2 + 2*x + 1/2\n", 204 | " \"\"\"\n", 205 | " x = symbols('x')\n", 206 | " return x^2 + 2*x + 1/2" 207 | ] 208 | }, 209 | { 210 | "cell_type": "code", 211 | "execution_count": null, 212 | "metadata": { 213 | "collapsed": false 214 | }, 215 | "outputs": [], 216 | "source": [ 217 | "operator_exercise1()" 218 | ] 219 | }, 220 | { 221 | "cell_type": "code", 222 | "execution_count": null, 223 | "metadata": { 224 | "collapsed": false 225 | }, 226 | "outputs": [], 227 | "source": [ 228 | "def operator_exercise2():\n", 229 | " \"\"\"\n", 230 | " >>> operator_exercise2()\n", 231 | " (x**2/2 + 2*x + 3/4)**(3/2)\n", 232 | " \"\"\"\n", 233 | " x = symbols('x')\n", 234 | " return (1/2*x^2 + 2*x + 3/4)^(3/2)" 235 | ] 236 | }, 237 | { 238 | "cell_type": "code", 239 | "execution_count": null, 240 | "metadata": { 241 | "collapsed": false 242 | }, 243 | "outputs": [], 244 | "source": [ 245 | "operator_exercise2()" 246 | ] 247 | } 248 | ], 249 | "metadata": {}, 250 | "nbformat": 4, 251 | "nbformat_minor": 0 252 | } -------------------------------------------------------------------------------- /tutorial_exercises/Advanced-Simplification Solutions.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Simplification Solutions" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": null, 13 | "metadata": { 14 | "collapsed": false 15 | }, 16 | "outputs": [], 17 | "source": [ 18 | "from sympy import *\n", 19 | "x, y, z = symbols('x y z')\n", 20 | "init_printing()" 21 | ] 22 | }, 23 | { 24 | "cell_type": "markdown", 25 | "metadata": {}, 26 | "source": [ 27 | "For each exercise, fill in the function according to its docstring. " 28 | ] 29 | }, 30 | { 31 | "cell_type": "markdown", 32 | "metadata": {}, 33 | "source": [ 34 | "## Polynomial/Rational Function Simplification" 35 | ] 36 | }, 37 | { 38 | "cell_type": "markdown", 39 | "metadata": {}, 40 | "source": [ 41 | "In each exercise, apply specific simplification functions to get the desired result." 42 | ] 43 | }, 44 | { 45 | "cell_type": "code", 46 | "execution_count": null, 47 | "metadata": { 48 | "collapsed": false 49 | }, 50 | "outputs": [], 51 | "source": [ 52 | "def polysimp1(expr):\n", 53 | " \"\"\"\n", 54 | " >>> polysimp1(cos(x)*sin(x) + cos(x))\n", 55 | " (sin(x) + 1)*cos(x)\n", 56 | " >>> polysimp1(cos(x)*sin(x) + cos(x) + 1)\n", 57 | " (sin(x) + 1)*cos(x) + 1\n", 58 | " \"\"\"\n", 59 | " return collect(expr, cos(x))" 60 | ] 61 | }, 62 | { 63 | "cell_type": "code", 64 | "execution_count": null, 65 | "metadata": { 66 | "collapsed": false 67 | }, 68 | "outputs": [], 69 | "source": [ 70 | "polysimp1(cos(x)*sin(x) + cos(x))" 71 | ] 72 | }, 73 | { 74 | "cell_type": "code", 75 | "execution_count": null, 76 | "metadata": { 77 | "collapsed": false 78 | }, 79 | "outputs": [], 80 | "source": [ 81 | "polysimp1(cos(x)*sin(x) + cos(x) + 1)" 82 | ] 83 | }, 84 | { 85 | "cell_type": "code", 86 | "execution_count": null, 87 | "metadata": { 88 | "collapsed": false 89 | }, 90 | "outputs": [], 91 | "source": [ 92 | "def polysimp2(expr):\n", 93 | " \"\"\"\n", 94 | " >>> polysimp2((2*x + 1)/(x**2 + x))\n", 95 | " 1/(x + 1) + 1/x\n", 96 | " >>> polysimp2((x**2 + 3*x + 1)/(x**3 + 2*x**2 + x))\n", 97 | " 1/(x**2 + 2*x + 1) + 1/x\n", 98 | " \"\"\"\n", 99 | " return expand(apart(expr))" 100 | ] 101 | }, 102 | { 103 | "cell_type": "code", 104 | "execution_count": null, 105 | "metadata": { 106 | "collapsed": false 107 | }, 108 | "outputs": [], 109 | "source": [ 110 | "polysimp2((2*x + 1)/(x**2 + x))" 111 | ] 112 | }, 113 | { 114 | "cell_type": "code", 115 | "execution_count": null, 116 | "metadata": { 117 | "collapsed": false 118 | }, 119 | "outputs": [], 120 | "source": [ 121 | "polysimp2((x**2 + 3*x + 1)/(x**3 + 2*x**2 + x))" 122 | ] 123 | }, 124 | { 125 | "cell_type": "markdown", 126 | "metadata": {}, 127 | "source": [ 128 | "## Powers" 129 | ] 130 | }, 131 | { 132 | "cell_type": "markdown", 133 | "metadata": {}, 134 | "source": [ 135 | "In each exercise, apply specific simplification functions to get the desired result. " 136 | ] 137 | }, 138 | { 139 | "cell_type": "code", 140 | "execution_count": null, 141 | "metadata": { 142 | "collapsed": false 143 | }, 144 | "outputs": [], 145 | "source": [ 146 | "def powersimp1(expr):\n", 147 | " \"\"\"\n", 148 | " >>> powersimp1(exp(x)*(exp(y) + 1))\n", 149 | " exp(x) + exp(x + y)\n", 150 | " \"\"\"\n", 151 | " return powsimp(expand(expr))" 152 | ] 153 | }, 154 | { 155 | "cell_type": "code", 156 | "execution_count": null, 157 | "metadata": { 158 | "collapsed": false 159 | }, 160 | "outputs": [], 161 | "source": [ 162 | "powersimp1(exp(x)*(exp(y) + 1))" 163 | ] 164 | }, 165 | { 166 | "cell_type": "code", 167 | "execution_count": null, 168 | "metadata": { 169 | "collapsed": false 170 | }, 171 | "outputs": [], 172 | "source": [ 173 | "def powersimp2(expr):\n", 174 | " \"\"\"\n", 175 | " >>> powersimp2(2**x*x**x)\n", 176 | " (2*x)**x\n", 177 | " >>> powersimp2(x**x*x**x)\n", 178 | " (x**2)**x\n", 179 | " \"\"\"\n", 180 | " return powsimp(expr, force=True)" 181 | ] 182 | }, 183 | { 184 | "cell_type": "code", 185 | "execution_count": null, 186 | "metadata": { 187 | "collapsed": false 188 | }, 189 | "outputs": [], 190 | "source": [ 191 | "powersimp2(2**x*x**x)" 192 | ] 193 | }, 194 | { 195 | "cell_type": "code", 196 | "execution_count": null, 197 | "metadata": { 198 | "collapsed": false 199 | }, 200 | "outputs": [], 201 | "source": [ 202 | "powersimp2(x**x*x**x)" 203 | ] 204 | }, 205 | { 206 | "cell_type": "code", 207 | "execution_count": null, 208 | "metadata": { 209 | "collapsed": false 210 | }, 211 | "outputs": [], 212 | "source": [ 213 | "def powersimp3(expr):\n", 214 | " \"\"\"\n", 215 | " >>> a, b, c = symbols('a b c')\n", 216 | " >>> powersimp3((a**b)**c)\n", 217 | " a**(b*c)\n", 218 | " >>> powersimp3((a**b)**(c + 1))\n", 219 | " a**(b*c + b)\n", 220 | " \"\"\"\n", 221 | " return powdenest(expand_power_exp(expr), force=True)" 222 | ] 223 | }, 224 | { 225 | "cell_type": "code", 226 | "execution_count": null, 227 | "metadata": { 228 | "collapsed": false 229 | }, 230 | "outputs": [], 231 | "source": [ 232 | "a, b, c = symbols('a b c')" 233 | ] 234 | }, 235 | { 236 | "cell_type": "code", 237 | "execution_count": null, 238 | "metadata": { 239 | "collapsed": false 240 | }, 241 | "outputs": [], 242 | "source": [ 243 | "powersimp3((a**b)**c)" 244 | ] 245 | }, 246 | { 247 | "cell_type": "code", 248 | "execution_count": null, 249 | "metadata": { 250 | "collapsed": false 251 | }, 252 | "outputs": [], 253 | "source": [ 254 | "powersimp3((a**b)**(c + 1))" 255 | ] 256 | }, 257 | { 258 | "cell_type": "markdown", 259 | "metadata": {}, 260 | "source": [ 261 | "## Logs" 262 | ] 263 | }, 264 | { 265 | "cell_type": "code", 266 | "execution_count": null, 267 | "metadata": { 268 | "collapsed": false 269 | }, 270 | "outputs": [], 271 | "source": [ 272 | "def logsimp1(expr):\n", 273 | " \"\"\"\n", 274 | " >>> a, b = symbols('a b', positive=True)\n", 275 | " >>> logsimp1(log(x**y*a**b))\n", 276 | " y*log(x) + log(a**b)\n", 277 | " >>> logsimp1(log(x*y*a*b))\n", 278 | " log(x) + log(y) + log(a*b)\n", 279 | " \"\"\"\n", 280 | " return logcombine(expand_log(expr, force=True))" 281 | ] 282 | }, 283 | { 284 | "cell_type": "code", 285 | "execution_count": null, 286 | "metadata": { 287 | "collapsed": false 288 | }, 289 | "outputs": [], 290 | "source": [ 291 | "a, b = symbols('a b', positive=True)" 292 | ] 293 | }, 294 | { 295 | "cell_type": "code", 296 | "execution_count": null, 297 | "metadata": { 298 | "collapsed": false 299 | }, 300 | "outputs": [], 301 | "source": [ 302 | "logsimp1(log(x**y*a**b))" 303 | ] 304 | }, 305 | { 306 | "cell_type": "code", 307 | "execution_count": null, 308 | "metadata": { 309 | "collapsed": false 310 | }, 311 | "outputs": [], 312 | "source": [ 313 | "logsimp1(log(x*y*a*b))" 314 | ] 315 | }, 316 | { 317 | "cell_type": "markdown", 318 | "metadata": {}, 319 | "source": [ 320 | "## Miscellaneous " 321 | ] 322 | }, 323 | { 324 | "cell_type": "code", 325 | "execution_count": null, 326 | "metadata": { 327 | "collapsed": false 328 | }, 329 | "outputs": [], 330 | "source": [ 331 | "def miscsimp1(expr):\n", 332 | " \"\"\"\n", 333 | " >>> miscsimp1(sin(x + y))\n", 334 | " 2*(-tan(x/2)**2 + 1)*tan(y/2)/((tan(x/2)**2 + 1)*(tan(y/2)**2 + 1)) + 2*(-tan(y/2)**2 + 1)*tan(x/2)/((tan(x/2)**2 + 1)*(tan(y/2)**2 + 1))\n", 335 | " \"\"\"\n", 336 | " return expand_trig(expr).rewrite(tan)" 337 | ] 338 | }, 339 | { 340 | "cell_type": "code", 341 | "execution_count": null, 342 | "metadata": { 343 | "collapsed": false 344 | }, 345 | "outputs": [], 346 | "source": [ 347 | "miscsimp1(sin(x + y))" 348 | ] 349 | }, 350 | { 351 | "cell_type": "code", 352 | "execution_count": null, 353 | "metadata": { 354 | "collapsed": false 355 | }, 356 | "outputs": [], 357 | "source": [ 358 | "def miscsimp2(expr):\n", 359 | " \"\"\"\n", 360 | " >>> miscsimp2(gamma(x + 4))\n", 361 | " x**4*gamma(x) + 6*x**3*gamma(x) + 11*x**2*gamma(x) + 6*x*gamma(x)\n", 362 | " \"\"\"\n", 363 | " return expand(expand_func(expr))" 364 | ] 365 | }, 366 | { 367 | "cell_type": "code", 368 | "execution_count": null, 369 | "metadata": { 370 | "collapsed": false 371 | }, 372 | "outputs": [], 373 | "source": [ 374 | "miscsimp2(gamma(x + 4))" 375 | ] 376 | }, 377 | { 378 | "cell_type": "markdown", 379 | "metadata": {}, 380 | "source": [ 381 | "## Continued Fractions" 382 | ] 383 | }, 384 | { 385 | "cell_type": "markdown", 386 | "metadata": {}, 387 | "source": [ 388 | "If we do not cover this, see http://asmeurer.github.io/scipy-2014-tutorial/html/tutorial/simplification.html#example-continued-fractions." 389 | ] 390 | }, 391 | { 392 | "cell_type": "code", 393 | "execution_count": null, 394 | "metadata": { 395 | "collapsed": false 396 | }, 397 | "outputs": [], 398 | "source": [ 399 | "def list_to_frac(l):\n", 400 | " expr = Integer(0)\n", 401 | " for i in reversed(l[1:]):\n", 402 | " expr += i\n", 403 | " expr = 1/expr\n", 404 | " return l[0] + expr" 405 | ] 406 | }, 407 | { 408 | "cell_type": "code", 409 | "execution_count": null, 410 | "metadata": { 411 | "collapsed": false 412 | }, 413 | "outputs": [], 414 | "source": [ 415 | "a0, a1, a2, a3, a4 = symbols('a0:5')" 416 | ] 417 | }, 418 | { 419 | "cell_type": "markdown", 420 | "metadata": {}, 421 | "source": [ 422 | "Determine the list used to create the continued fraction $$\\frac{a_{0} a_{1} a_{2} a_{3} a_{4} + a_{0} a_{1} a_{2} + a_{0} a_{3} a_{4} + a_{0} + a_{1} a_{2} a_{3} + a_{1} a_{3} a_{4} + a_{1} + a_{3}}{a_{0} a_{1} a_{2} a_{4} + a_{0} a_{4} + a_{1} a_{2} + a_{1} a_{4} + 1}.$$" 423 | ] 424 | }, 425 | { 426 | "cell_type": "code", 427 | "execution_count": null, 428 | "metadata": { 429 | "collapsed": false 430 | }, 431 | "outputs": [], 432 | "source": [ 433 | "def continued_frac():\n", 434 | " \"\"\"\n", 435 | " Determine the original list used to create the fraction. \n", 436 | "\n", 437 | " Return the original list from this function.\n", 438 | "\n", 439 | " >>> orig_frac = (a0*a1*a2*a3*a4 + a0*a1*a2 + a0*a3*a4 + a0 + a1*a2*a3 + a1*a3*a4 + a1 + a3)/(a0*a1*a2*a4 + a0*a4 + a1*a2 + a1*a4 + 1)\n", 440 | " >>> pprint(orig_frac)\n", 441 | " a₀⋅a₁⋅a₂⋅a₃⋅a₄ + a₀⋅a₁⋅a₂ + a₀⋅a₃⋅a₄ + a₀ + a₁⋅a₂⋅a₃ + a₁⋅a₃⋅a₄ + a₁ + a₃\n", 442 | " ─────────────────────────────────────────────────────────────────────────\n", 443 | " a₀⋅a₁⋅a₂⋅a₄ + a₀⋅a₄ + a₁⋅a₂ + a₁⋅a₄ + 1\n", 444 | " >>> cancel(list_to_frac(continued_frac())) == orig_frac\n", 445 | " True\n", 446 | " \"\"\"\n", 447 | " return [a3, a4, a0, a2, a1]" 448 | ] 449 | }, 450 | { 451 | "cell_type": "code", 452 | "execution_count": null, 453 | "metadata": { 454 | "collapsed": false 455 | }, 456 | "outputs": [], 457 | "source": [ 458 | "orig_frac = (a0*a1*a2*a3*a4 + a0*a1*a2 + a0*a3*a4 + a0 + a1*a2*a3 + a1*a3*a4 + a1 + a3)/(a0*a1*a2*a4 + a0*a4 + a1*a2 + a1*a4 + 1)" 459 | ] 460 | }, 461 | { 462 | "cell_type": "code", 463 | "execution_count": null, 464 | "metadata": { 465 | "collapsed": false 466 | }, 467 | "outputs": [], 468 | "source": [ 469 | "orig_frac" 470 | ] 471 | }, 472 | { 473 | "cell_type": "code", 474 | "execution_count": null, 475 | "metadata": { 476 | "collapsed": false 477 | }, 478 | "outputs": [], 479 | "source": [ 480 | "cancel(list_to_frac(continued_frac())) == orig_frac" 481 | ] 482 | }, 483 | { 484 | "cell_type": "code", 485 | "execution_count": null, 486 | "metadata": { 487 | "collapsed": false 488 | }, 489 | "outputs": [], 490 | "source": [] 491 | } 492 | ], 493 | "metadata": { 494 | "kernelspec": { 495 | "display_name": "Python 2", 496 | "language": "python", 497 | "name": "python2" 498 | }, 499 | "language_info": { 500 | "codemirror_mode": { 501 | "name": "ipython", 502 | "version": 2 503 | }, 504 | "file_extension": ".py", 505 | "mimetype": "text/x-python", 506 | "name": "python", 507 | "nbconvert_exporter": "python", 508 | "pygments_lexer": "ipython2", 509 | "version": "2.7.11" 510 | } 511 | }, 512 | "nbformat": 4, 513 | "nbformat_minor": 0 514 | } 515 | -------------------------------------------------------------------------------- /tutorial_exercises/Advanced-Solvers.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Solvers" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": null, 13 | "metadata": { 14 | "collapsed": false 15 | }, 16 | "outputs": [], 17 | "source": [ 18 | "from sympy import *\n", 19 | "from sympy.solvers.solveset import solveset\n", 20 | "init_printing()" 21 | ] 22 | }, 23 | { 24 | "cell_type": "markdown", 25 | "metadata": {}, 26 | "source": [ 27 | "For each exercise, fill in the function according to its docstring. " 28 | ] 29 | }, 30 | { 31 | "cell_type": "code", 32 | "execution_count": null, 33 | "metadata": { 34 | "collapsed": false 35 | }, 36 | "outputs": [], 37 | "source": [ 38 | "a, b, c, d, x, y, z, t = symbols('a b c d x y z t')\n", 39 | "f, g, h = symbols('f g h', cls=Function)" 40 | ] 41 | }, 42 | { 43 | "cell_type": "markdown", 44 | "metadata": {}, 45 | "source": [ 46 | "## Algebraic Equations" 47 | ] 48 | }, 49 | { 50 | "cell_type": "markdown", 51 | "metadata": {}, 52 | "source": [ 53 | "Write a function that computes the [quadratic equation](http://en.wikipedia.org/wiki/Quadratic_equation)." 54 | ] 55 | }, 56 | { 57 | "cell_type": "code", 58 | "execution_count": null, 59 | "metadata": { 60 | "collapsed": false 61 | }, 62 | "outputs": [], 63 | "source": [ 64 | "def quadratic():\n", 65 | " return ???\n", 66 | "quadratic()" 67 | ] 68 | }, 69 | { 70 | "cell_type": "markdown", 71 | "metadata": {}, 72 | "source": [ 73 | "Write a function that computes the general solution to the cubic $x^3 + ax^2 + bx + c$." 74 | ] 75 | }, 76 | { 77 | "cell_type": "code", 78 | "execution_count": null, 79 | "metadata": { 80 | "collapsed": false 81 | }, 82 | "outputs": [], 83 | "source": [ 84 | "def cubic():\n", 85 | " return ???\n", 86 | "cubic()" 87 | ] 88 | }, 89 | { 90 | "cell_type": "markdown", 91 | "metadata": {}, 92 | "source": [ 93 | "## Differential Equations" 94 | ] 95 | }, 96 | { 97 | "cell_type": "markdown", 98 | "metadata": {}, 99 | "source": [ 100 | "A population that grows without bound is modeled by the differential equation\n", 101 | "\n", 102 | "$$f'(t)=af(t)$$\n", 103 | "\n", 104 | "Solve this differential equation using SymPy." 105 | ] 106 | }, 107 | { 108 | "cell_type": "code", 109 | "execution_count": null, 110 | "metadata": { 111 | "collapsed": false 112 | }, 113 | "outputs": [], 114 | "source": [] 115 | }, 116 | { 117 | "cell_type": "markdown", 118 | "metadata": {}, 119 | "source": [ 120 | "If the population growth is bounded, it is modeled by \n", 121 | "\n", 122 | "$$f'(t) = f(t)(1 - f(t))$$\n", 123 | "\n", 124 | "Solve this differential equation using SymPy." 125 | ] 126 | }, 127 | { 128 | "cell_type": "code", 129 | "execution_count": null, 130 | "metadata": { 131 | "collapsed": false 132 | }, 133 | "outputs": [], 134 | "source": [] 135 | } 136 | ], 137 | "metadata": { 138 | "kernelspec": { 139 | "display_name": "Python 3", 140 | "language": "python", 141 | "name": "python3" 142 | }, 143 | "language_info": { 144 | "codemirror_mode": { 145 | "name": "ipython", 146 | "version": 3 147 | }, 148 | "file_extension": ".py", 149 | "mimetype": "text/x-python", 150 | "name": "python", 151 | "nbconvert_exporter": "python", 152 | "pygments_lexer": "ipython3", 153 | "version": "3.4.3" 154 | } 155 | }, 156 | "nbformat": 4, 157 | "nbformat_minor": 0 158 | } 159 | -------------------------------------------------------------------------------- /tutorial_exercises/Gotchas.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": null, 6 | "metadata": { 7 | "collapsed": false 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "from sympy import *\n", 12 | "init_printing()" 13 | ] 14 | }, 15 | { 16 | "cell_type": "markdown", 17 | "metadata": {}, 18 | "source": [ 19 | "# 1. Symbols\n", 20 | "Python variables and SymPy Variables" 21 | ] 22 | }, 23 | { 24 | "cell_type": "code", 25 | "execution_count": null, 26 | "metadata": { 27 | "collapsed": true 28 | }, 29 | "outputs": [], 30 | "source": [ 31 | "a = 'stuff' # Python variable" 32 | ] 33 | }, 34 | { 35 | "cell_type": "markdown", 36 | "metadata": {}, 37 | "source": [ 38 | "The `symbols` function creates a SymPy Variable `x` which is assigned to python variable `x`." 39 | ] 40 | }, 41 | { 42 | "cell_type": "code", 43 | "execution_count": null, 44 | "metadata": { 45 | "collapsed": false 46 | }, 47 | "outputs": [], 48 | "source": [ 49 | "x = symbols('x')\n", 50 | "x" 51 | ] 52 | }, 53 | { 54 | "cell_type": "markdown", 55 | "metadata": {}, 56 | "source": [ 57 | "The following works too, but not recommended. The python variable `crazy` is assigned to the SymPy variable `unrelated`. So, its always a good idea to name your variables same as your symbols." 58 | ] 59 | }, 60 | { 61 | "cell_type": "code", 62 | "execution_count": null, 63 | "metadata": { 64 | "collapsed": false 65 | }, 66 | "outputs": [], 67 | "source": [ 68 | "crazy = symbols('unrelated')\n", 69 | "crazy" 70 | ] 71 | }, 72 | { 73 | "cell_type": "markdown", 74 | "metadata": {}, 75 | "source": [ 76 | "# 2. Immutability" 77 | ] 78 | }, 79 | { 80 | "cell_type": "code", 81 | "execution_count": null, 82 | "metadata": { 83 | "collapsed": false 84 | }, 85 | "outputs": [], 86 | "source": [ 87 | "x, y = symbols('x y')\n", 88 | "a = x + y + 1\n", 89 | "a" 90 | ] 91 | }, 92 | { 93 | "cell_type": "code", 94 | "execution_count": null, 95 | "metadata": { 96 | "collapsed": true 97 | }, 98 | "outputs": [], 99 | "source": [ 100 | "x = 3" 101 | ] 102 | }, 103 | { 104 | "cell_type": "markdown", 105 | "metadata": {}, 106 | "source": [ 107 | "What is \"`a`\" now?" 108 | ] 109 | }, 110 | { 111 | "cell_type": "code", 112 | "execution_count": null, 113 | "metadata": { 114 | "collapsed": false 115 | }, 116 | "outputs": [], 117 | "source": [ 118 | "a" 119 | ] 120 | }, 121 | { 122 | "cell_type": "markdown", 123 | "metadata": {}, 124 | "source": [ 125 | "Now, how do I substitute x with 3?" 126 | ] 127 | }, 128 | { 129 | "cell_type": "code", 130 | "execution_count": null, 131 | "metadata": { 132 | "collapsed": true 133 | }, 134 | "outputs": [], 135 | "source": [ 136 | "??" 137 | ] 138 | }, 139 | { 140 | "cell_type": "markdown", 141 | "metadata": {}, 142 | "source": [ 143 | "What is `a` now?" 144 | ] 145 | }, 146 | { 147 | "cell_type": "code", 148 | "execution_count": null, 149 | "metadata": { 150 | "collapsed": false 151 | }, 152 | "outputs": [], 153 | "source": [ 154 | "a" 155 | ] 156 | }, 157 | { 158 | "cell_type": "markdown", 159 | "metadata": {}, 160 | "source": [ 161 | "SymPy expressions are all immutable. They never change in-place. So, whenever you do `subs`, `simplify`, etc it creates a new expression." 162 | ] 163 | }, 164 | { 165 | "cell_type": "markdown", 166 | "metadata": {}, 167 | "source": [ 168 | "# 3. Equals sign\n", 169 | "Checking mathematical inequality." 170 | ] 171 | }, 172 | { 173 | "cell_type": "code", 174 | "execution_count": null, 175 | "metadata": { 176 | "collapsed": false 177 | }, 178 | "outputs": [], 179 | "source": [ 180 | "x = symbols('x')\n", 181 | "a = (x + 1)**2\n", 182 | "a" 183 | ] 184 | }, 185 | { 186 | "cell_type": "code", 187 | "execution_count": null, 188 | "metadata": { 189 | "collapsed": true 190 | }, 191 | "outputs": [], 192 | "source": [ 193 | "b = x**2 + 2*x + 1" 194 | ] 195 | }, 196 | { 197 | "cell_type": "markdown", 198 | "metadata": {}, 199 | "source": [ 200 | "Now, lets check if `a` and `b` are equal or not. What do you think will be the output of the following?" 201 | ] 202 | }, 203 | { 204 | "cell_type": "code", 205 | "execution_count": null, 206 | "metadata": { 207 | "collapsed": false 208 | }, 209 | "outputs": [], 210 | "source": [ 211 | "a == b" 212 | ] 213 | }, 214 | { 215 | "cell_type": "code", 216 | "execution_count": null, 217 | "metadata": { 218 | "collapsed": false 219 | }, 220 | "outputs": [], 221 | "source": [ 222 | "simplify(a - b)" 223 | ] 224 | }, 225 | { 226 | "cell_type": "markdown", 227 | "metadata": {}, 228 | "source": [ 229 | "That's the difference between Structural and Mathematical Equality." 230 | ] 231 | }, 232 | { 233 | "cell_type": "markdown", 234 | "metadata": {}, 235 | "source": [ 236 | "#### Representing a symbolic equality, like say: $$x^2 = y$$" 237 | ] 238 | }, 239 | { 240 | "cell_type": "code", 241 | "execution_count": null, 242 | "metadata": { 243 | "collapsed": false 244 | }, 245 | "outputs": [], 246 | "source": [ 247 | "eq = Eq(x**2, y)" 248 | ] 249 | }, 250 | { 251 | "cell_type": "code", 252 | "execution_count": null, 253 | "metadata": { 254 | "collapsed": false 255 | }, 256 | "outputs": [], 257 | "source": [ 258 | "eq.lhs" 259 | ] 260 | }, 261 | { 262 | "cell_type": "code", 263 | "execution_count": null, 264 | "metadata": { 265 | "collapsed": false 266 | }, 267 | "outputs": [], 268 | "source": [ 269 | "eq.rhs" 270 | ] 271 | }, 272 | { 273 | "cell_type": "code", 274 | "execution_count": null, 275 | "metadata": { 276 | "collapsed": false 277 | }, 278 | "outputs": [], 279 | "source": [ 280 | "solveset(eq, x)" 281 | ] 282 | }, 283 | { 284 | "cell_type": "markdown", 285 | "metadata": {}, 286 | "source": [ 287 | "# 4. Fractions " 288 | ] 289 | }, 290 | { 291 | "cell_type": "code", 292 | "execution_count": null, 293 | "metadata": { 294 | "collapsed": false 295 | }, 296 | "outputs": [], 297 | "source": [ 298 | "# In Python 2\n", 299 | "acos(1/2)" 300 | ] 301 | }, 302 | { 303 | "cell_type": "markdown", 304 | "metadata": {}, 305 | "source": [ 306 | "The arc cosine of Half is π/3, isn't it?" 307 | ] 308 | }, 309 | { 310 | "cell_type": "code", 311 | "execution_count": null, 312 | "metadata": { 313 | "collapsed": false 314 | }, 315 | "outputs": [], 316 | "source": [ 317 | "# Python 2\n", 318 | "1/2" 319 | ] 320 | }, 321 | { 322 | "cell_type": "code", 323 | "execution_count": null, 324 | "metadata": { 325 | "collapsed": false 326 | }, 327 | "outputs": [], 328 | "source": [ 329 | "# Python 3\n", 330 | "from __future__ import division\n", 331 | "1/2" 332 | ] 333 | }, 334 | { 335 | "cell_type": "code", 336 | "execution_count": null, 337 | "metadata": { 338 | "collapsed": false 339 | }, 340 | "outputs": [], 341 | "source": [ 342 | "acos(1/2)" 343 | ] 344 | }, 345 | { 346 | "cell_type": "markdown", 347 | "metadata": {}, 348 | "source": [ 349 | "We are looking for symbolic results, right?" 350 | ] 351 | }, 352 | { 353 | "cell_type": "code", 354 | "execution_count": null, 355 | "metadata": { 356 | "collapsed": false 357 | }, 358 | "outputs": [], 359 | "source": [ 360 | "Rational(1, 2)" 361 | ] 362 | }, 363 | { 364 | "cell_type": "code", 365 | "execution_count": null, 366 | "metadata": { 367 | "collapsed": false 368 | }, 369 | "outputs": [], 370 | "source": [ 371 | "acos(Rational(1, 2))" 372 | ] 373 | }, 374 | { 375 | "cell_type": "code", 376 | "execution_count": null, 377 | "metadata": { 378 | "collapsed": false 379 | }, 380 | "outputs": [], 381 | "source": [ 382 | "from fractions import Fraction\n", 383 | "Fraction(1, 2)" 384 | ] 385 | }, 386 | { 387 | "cell_type": "code", 388 | "execution_count": null, 389 | "metadata": { 390 | "collapsed": false 391 | }, 392 | "outputs": [], 393 | "source": [ 394 | "acos(Fraction(1, 2))" 395 | ] 396 | }, 397 | { 398 | "cell_type": "code", 399 | "execution_count": null, 400 | "metadata": { 401 | "collapsed": false 402 | }, 403 | "outputs": [], 404 | "source": [ 405 | "type(sympify(Fraction(1, 2)))" 406 | ] 407 | }, 408 | { 409 | "cell_type": "markdown", 410 | "metadata": {}, 411 | "source": [ 412 | "# 5. Logical Operator (XOR)" 413 | ] 414 | }, 415 | { 416 | "cell_type": "code", 417 | "execution_count": null, 418 | "metadata": { 419 | "collapsed": false 420 | }, 421 | "outputs": [], 422 | "source": [ 423 | "x^2" 424 | ] 425 | }, 426 | { 427 | "cell_type": "code", 428 | "execution_count": null, 429 | "metadata": { 430 | "collapsed": false 431 | }, 432 | "outputs": [], 433 | "source": [ 434 | "sympify('x^2')" 435 | ] 436 | }, 437 | { 438 | "cell_type": "markdown", 439 | "metadata": {}, 440 | "source": [ 441 | "If you are doing logic, and **don't** want to convert the `XOR` to power operator:" 442 | ] 443 | }, 444 | { 445 | "cell_type": "code", 446 | "execution_count": null, 447 | "metadata": { 448 | "collapsed": false 449 | }, 450 | "outputs": [], 451 | "source": [ 452 | "sympify('x^2', convert_xor=False)" 453 | ] 454 | } 455 | ], 456 | "metadata": { 457 | "kernelspec": { 458 | "display_name": "Python 2", 459 | "language": "python", 460 | "name": "python2" 461 | }, 462 | "language_info": { 463 | "codemirror_mode": { 464 | "name": "ipython", 465 | "version": 2 466 | }, 467 | "file_extension": ".py", 468 | "mimetype": "text/x-python", 469 | "name": "python", 470 | "nbconvert_exporter": "python", 471 | "pygments_lexer": "ipython2", 472 | "version": "2.7.12" 473 | } 474 | }, 475 | "nbformat": 4, 476 | "nbformat_minor": 0 477 | } 478 | -------------------------------------------------------------------------------- /tutorial_exercises/examples-stats.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": null, 6 | "metadata": { 7 | "collapsed": false 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "from sympy import *\n", 12 | "init_printing(use_latex='mathjax')\n", 13 | "x, y, z = symbols('x,y,z')" 14 | ] 15 | }, 16 | { 17 | "cell_type": "markdown", 18 | "metadata": {}, 19 | "source": [ 20 | "# Probability Modeling" 21 | ] 22 | }, 23 | { 24 | "cell_type": "code", 25 | "execution_count": null, 26 | "metadata": { 27 | "collapsed": false 28 | }, 29 | "outputs": [], 30 | "source": [ 31 | "from sympy.stats import *" 32 | ] 33 | }, 34 | { 35 | "cell_type": "code", 36 | "execution_count": null, 37 | "metadata": { 38 | "collapsed": false 39 | }, 40 | "outputs": [], 41 | "source": [ 42 | "X = Normal('X', 0, 1)\n", 43 | "X" 44 | ] 45 | }, 46 | { 47 | "cell_type": "code", 48 | "execution_count": null, 49 | "metadata": { 50 | "collapsed": false 51 | }, 52 | "outputs": [], 53 | "source": [ 54 | "# Density" 55 | ] 56 | }, 57 | { 58 | "cell_type": "code", 59 | "execution_count": null, 60 | "metadata": { 61 | "collapsed": false 62 | }, 63 | "outputs": [], 64 | "source": [ 65 | "# Density of expressions" 66 | ] 67 | }, 68 | { 69 | "cell_type": "code", 70 | "execution_count": null, 71 | "metadata": { 72 | "collapsed": false 73 | }, 74 | "outputs": [], 75 | "source": [ 76 | "# Probability" 77 | ] 78 | }, 79 | { 80 | "cell_type": "code", 81 | "execution_count": null, 82 | "metadata": { 83 | "collapsed": false 84 | }, 85 | "outputs": [], 86 | "source": [ 87 | "# Sampling" 88 | ] 89 | }, 90 | { 91 | "cell_type": "code", 92 | "execution_count": null, 93 | "metadata": { 94 | "collapsed": false 95 | }, 96 | "outputs": [], 97 | "source": [] 98 | }, 99 | { 100 | "cell_type": "markdown", 101 | "metadata": {}, 102 | "source": [ 103 | "## Dice" 104 | ] 105 | }, 106 | { 107 | "cell_type": "code", 108 | "execution_count": null, 109 | "metadata": { 110 | "collapsed": false 111 | }, 112 | "outputs": [], 113 | "source": [ 114 | "A = Die('A', 6)\n", 115 | "B = Die('B', 6)\n", 116 | "\n", 117 | "density(A+B)" 118 | ] 119 | }, 120 | { 121 | "cell_type": "code", 122 | "execution_count": null, 123 | "metadata": { 124 | "collapsed": false 125 | }, 126 | "outputs": [], 127 | "source": [] 128 | }, 129 | { 130 | "cell_type": "markdown", 131 | "metadata": {}, 132 | "source": [ 133 | "### Evaluate = False" 134 | ] 135 | }, 136 | { 137 | "cell_type": "code", 138 | "execution_count": null, 139 | "metadata": { 140 | "collapsed": false 141 | }, 142 | "outputs": [], 143 | "source": [] 144 | }, 145 | { 146 | "cell_type": "code", 147 | "execution_count": null, 148 | "metadata": { 149 | "collapsed": false 150 | }, 151 | "outputs": [], 152 | "source": [] 153 | }, 154 | { 155 | "cell_type": "code", 156 | "execution_count": null, 157 | "metadata": { 158 | "collapsed": false 159 | }, 160 | "outputs": [], 161 | "source": [] 162 | }, 163 | { 164 | "cell_type": "markdown", 165 | "metadata": {}, 166 | "source": [ 167 | "## More distributions" 168 | ] 169 | }, 170 | { 171 | "cell_type": "code", 172 | "execution_count": null, 173 | "metadata": { 174 | "collapsed": false 175 | }, 176 | "outputs": [], 177 | "source": [ 178 | "from sympy.stats import Gamma\n", 179 | "Gamma?" 180 | ] 181 | }, 182 | { 183 | "cell_type": "code", 184 | "execution_count": null, 185 | "metadata": { 186 | "collapsed": false 187 | }, 188 | "outputs": [], 189 | "source": [ 190 | "k = Symbol('k', positive=True)\n", 191 | "theta = Symbol('theta', positive=True)\n", 192 | "A = Gamma('A', k, theta)\n", 193 | "A" 194 | ] 195 | }, 196 | { 197 | "cell_type": "code", 198 | "execution_count": null, 199 | "metadata": { 200 | "collapsed": false 201 | }, 202 | "outputs": [], 203 | "source": [ 204 | "density(A**2)(x)" 205 | ] 206 | } 207 | ], 208 | "metadata": {}, 209 | "nbformat": 4, 210 | "nbformat_minor": 0 211 | } -------------------------------------------------------------------------------- /user_test.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | try: 4 | import sympy 5 | except ImportError: 6 | print("sympy is required") 7 | else: 8 | 9 | if sympy.__version__ < '1.0': 10 | print("SymPy version 1.0 or newer is required. You have", sympy.__version__) 11 | 12 | if sympy.__version__ != '1.0': 13 | print("The stable SymPy version 1.0 is recommended. You have", sympy.__version__) 14 | 15 | try: 16 | import matplotlib 17 | except ImportError: 18 | print("matplotlib is required for the plotting section of the tutorial") 19 | 20 | try: 21 | import IPython 22 | except ImportError: 23 | print("IPython notebook is required.") 24 | else: 25 | if IPython.__version__ < '4.1.2': 26 | print("The latest version of IPython is recommended. You have", IPython.__version__) 27 | 28 | print("""A fortran and/or C compiler is required for the code generation portion 29 | of the tutorial. However, if you do not have one, you should not worry, as it 30 | will not be a large part of the tutorial.""") 31 | --------------------------------------------------------------------------------