%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Tutorial slides on Python.
%
% Author: The FOSSEE Group
% Copyright (c) 2009, The FOSSEE Group, IIT Bombay
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\documentclass[14pt,compress]{beamer}
%\documentclass[draft]{beamer}
%\documentclass[compress,handout]{beamer}
%\usepackage{pgfpages} 
%\pgfpagesuselayout{2 on 1}[a4paper,border shrink=5mm]

% Modified from: generic-ornate-15min-45min.de.tex
\mode<presentation>
{
  \usetheme{Warsaw}
  \useoutertheme{split}
  \setbeamercovered{transparent}
}

\usepackage[english]{babel}
\usepackage[latin1]{inputenc}
%\usepackage{times}
\usepackage[T1]{fontenc}

% Taken from Fernando's slides.
\usepackage{ae,aecompl}
\usepackage{mathpazo,courier,euler}
\usepackage[scaled=.95]{helvet}

\definecolor{darkgreen}{rgb}{0,0.5,0}

\usepackage{listings}
\lstset{language=Python,
    basicstyle=\ttfamily\bfseries,
    commentstyle=\color{red}\itshape,
  stringstyle=\color{darkgreen},
  showstringspaces=false,
  keywordstyle=\color{blue}\bfseries}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Macros
\setbeamercolor{emphbar}{bg=blue!20, fg=black}
\newcommand{\emphbar}[1]
{\begin{beamercolorbox}[rounded=true]{emphbar} 
      {#1}
 \end{beamercolorbox}
}
\newcounter{time}
\setcounter{time}{0}
\newcommand{\inctime}[1]{\addtocounter{time}{#1}{\tiny \thetime\ m}}

\newcommand{\typ}[1]{\texttt{#1}}

\newcommand{\kwrd}[1]{ \texttt{\textbf{\color{blue}{#1}}}  }

%%% This is from Fernando's setup.
% \usepackage{color}
% \definecolor{orange}{cmyk}{0,0.4,0.8,0.2}
% % Use and configure listings package for nicely formatted code
% \usepackage{listings}
% \lstset{
%    language=Python,
%    basicstyle=\small\ttfamily,
%    commentstyle=\ttfamily\color{blue},
%    stringstyle=\ttfamily\color{orange},
%    showstringspaces=false,
%    breaklines=true,
%    postbreak = \space\dots
% }


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Title page
\title[Basic Python]{Python:\\A great programming toolkit}

\author[FOSEE Team] {The FOSSEE Group}

\institute[IIT Bombay] {Department of Aerospace Engineering\\IIT Bombay}
\date[] {31, October 2009\\Day 1, Session 2}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%\pgfdeclareimage[height=0.75cm]{iitmlogo}{iitmlogo}
%\logo{\pgfuseimage{iitmlogo}}


%% Delete this, if you do not want the table of contents to pop up at
%% the beginning of each subsection:
\AtBeginSubsection[]
{
  \begin{frame}<beamer>
    \frametitle{Outline}
    \tableofcontents[currentsection,currentsubsection]
  \end{frame}
}

\AtBeginSection[]
{
  \begin{frame}<beamer>
    \frametitle{Outline}
    \tableofcontents[currentsection,currentsubsection]
  \end{frame}
}

% If you wish to uncover everything in a step-wise fashion, uncomment
% the following command: 
%\beamerdefaultoverlayspecification{<+->}

%\includeonlyframes{current,current1,current2,current3,current4,current5,current6}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% DOCUMENT STARTS
\begin{document}

\begin{frame}
  \titlepage
\end{frame}
\begin{frame}
  {Acknowledgements}
  \begin{center}
  This program is conducted by\\
  IIT, Bombay\\
  as part of  the open source initiatives\\
  under the aegis of\\
  \alert{National Mission on Education through ICT,} \\
  Ministry of HRD.
  \end{center}
\end{frame}

\begin{frame}
  \frametitle{Outline}
  \tableofcontents
  % You might wish to add the option [pausesections]
\end{frame}

\section{Functions}
\begin{frame}{Functions: Definition}
\begin{itemize}
  \item \kwrd{def} keyword
\end{itemize}
\end{frame}

\begin{frame}[fragile]
\frametitle{Functions: Example 1}
  \begin{lstlisting}
In [1]: def plot_sinx():
   ....:     x = linspace(0, 2*pi, 100)
   ....:     plt.plot(x, sin(x))
   ....:     plt.show()
   ....:    

In [2]: plot_sinx()
  \end{lstlisting}
\end{frame}

\begin{frame}[fragile]
\frametitle{Functions: Example 2}
  \begin{lstlisting}
In [3]: def f(x):
   ....:     return sin(x*x*x)+(3*x*x)

In [4]: x = linspace(0,2*pi, 1000)

In [5]: plt.plot(x, f(x))
  \end{lstlisting}
  \inctime{10}
\end{frame}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% TIME: 10 m, running 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\section{Creating and running scripts}
\begin{frame}
  {Creating python files}
  \begin{itemize}
    \item aka scripts
    \item use your editor
    \item extension \typ{.py}
    \item run with \texttt{python hello.py} at the command line
    \item in IPython using \kwrd{\%run}
  \end{itemize}
\inctime{5}
\end{frame}

\section{Files Handling}
\begin{frame}[fragile]
  \frametitle{Basic File Operations}
Opening and Reading files
\begin{lstlisting}
In [6]: f = open('/path/to/file_name')
In [7]: data = f.read() # Read entire file.
In [8]: line = f.readline() # Read one line.
In [9]: f.close() # close the file.
\end{lstlisting}
Writing files
\begin{lstlisting}
In [10]: f = open('/path/to/file_name', 'w')
In [11]: f.write('hello world\n')
In [12]: f.close()
\end{lstlisting}
\begin{itemize}
    \item Everything read or written is a string
\end{itemize}
\end{frame}

\begin{frame}[fragile]
    \frametitle{File and \kwrd{for}}
\begin{lstlisting}
In [13]: f = open('dummyfile')

In [14]: for line in f:
    ...:     print line
    ...:  
\end{lstlisting}
\inctime{10}
\end{frame}

\section{Strings}
\begin{frame}[fragile]
  \frametitle{Strings}
  \begin{lstlisting}
s = 'this is a string'
s = 'This one has "quotes" inside!'
s = "I have 'single-quotes' inside!"
l = "A string spanning many lines\
one more line\
yet another"
t = """A triple quoted string does
not need to be escaped at the end and 
"can have nested quotes" etc."""
  \end{lstlisting}
\end{frame}

\begin{frame}[fragile]\frametitle{Strings and \typ{split()}}
  \begin{lstlisting}
In [15]: a = 'hello world'

In [16]: a.split()
Out[17]: ['hello', 'world']
  \end{lstlisting}
Now try this:
  \begin{lstlisting}
In [18]: b = 'KD, Madhu, Punchagan, Shantanu, Vattam'

In [19]: b.split(',')
Out[20]: ['KD', ' Madhu', ' Punchagan', ' Shantanu', ' Vattam']
  \end{lstlisting}
\inctime{5}
\end{frame}

\section{Plotting points}
\begin{frame}[fragile]
\frametitle{How to plot points?}
We saw how to plot graphs, lets now look at how to plot points.\\
\begin{lstlisting}
In [21]: plt.plot(x, sin(x), 'ro')
Out[22]: [<matplotlib.lines.Line2D object at 0xac17e0c>]
\end{lstlisting}
\begin{itemize}
  \item \kwrd{'r'},\kwrd{'g'},\kwrd{'b'} for red, green and blue
  \item \kwrd{'o'} - Dots
  \item \kwrd{'-'} - Lines
  \item \kwrd{'- -'} - Dashed lines
\end{itemize}
\inctime{5}
\end{frame}

\section{Lists}

\begin{frame}[fragile]
  \frametitle{List creation and indexing}
\begin{lstlisting}
In [23]: lst = [] #Empty list

In [24]: lst = [1,2,3,4] #More useful list

In [25]: len(lst)
Out[26]: 4

In [27]: lst[0]+lst[1]+lst[-1]
Out[27]: 7
\end{lstlisting}
\begin{itemize}
  \item Indices start with ?
  \item Negative indices indicate ?
  \end{itemize}
\end{frame}

\begin{frame}[fragile]
  \frametitle{List: slices}
  \begin{itemize}
  \item Slicing is a basic operation
  \item \typ{list[initial:final:step]}
  \item  The step is optional
  \end{itemize}
\begin{lstlisting}
In [28]: lst[1:3]  # A slice.
Out[28]: [2, 3]

In [29]: lst[1:-1]
Out[29]: [2, 3]

In [30]: lst[1:] == lst[1:-1]
Out[30]: False
\end{lstlisting}
Explain last result
\end{frame}

\begin{frame}[fragile]
  \frametitle{List: more slices}
\begin{lstlisting}
In [31]: lst[0:-1:2] # Notice the step!
Out[31]: [1, 3]

In [31]: lst[::2]
Out[31]: [1, 3]

In [32]: lst[-1::-1]
\end{lstlisting}
What do you think the last one will do?
\end{frame}

\begin{frame}[fragile]
  \frametitle{List methods}
\begin{lstlisting}
In [33]: lst.append(5)

In [34]: lst
Out[34]: [1, 2, 3, 4, 5]

In [35]: lst.append([6,7])

In [36]: lst
Out[36]: [1, 2, 3, 4, 5, [6, 7]]

In [37]: lst.extend([8,9])

In [38]: lst
Out[38]: [1, 2, 3, 4, 5, [6, 7], 8, 9]
\end{lstlisting}
\end{frame}

\begin{frame}[fragile]
  \frametitle{List containership}
  \begin{lstlisting}
In [39]: animals = ['cat', 'dog', 'rat', 'croc']

In [40]: 'dog' in animals
Out[40]: True

In [41]: 'snake' in animals
Out[41]: False
  \end{lstlisting}
  \inctime{10}
\end{frame}

\section{Modules and import}
\begin{frame}{Modules and \typ{import}}
  \begin{itemize}
    \item \kwrd{import} x
    \item \kwrd{from} x \kwrd{import} y
  \end{itemize}
Whats the difference??
\inctime{5}
\end{frame}

\end{document}
