{"action":"created","comment":{"url":"https://api.github.com/repos/mila-udem/summerschool2015/pulls/comments/36184551","id":36184551,"diff_hunk":"@@ -0,0 +1,445 @@\n+\\documentclass[utf8x,xcolor=pdftex,dvipsnames,table]{beamer}\n+\\usetheme{Malmoe}  % Now it's a beamer presentation with the lisa theme!\n+\\setbeamertemplate{footline}[page number]\n+\\usecolortheme{beaver}\n+\\usepackage[T1]{fontenc}\n+\\usepackage{amsmath}\n+\\usepackage[utf8x]{inputenc}\n+\\usepackage{listings}\n+\n+\\newcommand{\\superscript}[1]{\\ensuremath{^{\\textrm{#1}}}}\n+\n+\\mode<presentation>\n+\n+\\title{Debugging}\n+\n+\\author{%\n+\\footnotesize\n+Frédéric Bastien \\newline\n+\\newline\n+\\newline\n+Institut des algorithmes d'apprentissage de Montréal \\newline\n+Montreal Institute for Learning Algorithms \\newline\n+Université de Montréal\n+}\n+\n+\\date{August 10th, Deep Learning Summer School 2015, Montréal}\n+\n+\\setbeamertemplate{navigation symbols}{}\n+\\begin{document}\n+\n+\\begin{frame}[plain]\n+ \\titlepage\n+ \\vspace{-2em}\n+ \\includegraphics[width=.8in]{mila.png}\n+ \\hfill\n+ \\includegraphics[width=.8in]{UdeM_logo}\n+\\end{frame}\n+\n+\\section{Introduction}\n+\\begin{frame}{Slides and Exercices}\n+  \\url{http://github.com/mila-udem/summerschool2015/debug}\n+\\end{frame}\n+\n+\\section{Debugging}\n+\\begin{frame}\n+  \\tableofcontents[currentsection]\n+\\end{frame}\n+\n+\n+\\begin{frame}[fragile]\n+  \\frametitle{Error message}\n+  \\begin{itemize}\n+  \\item Very important\n+  \\item Much information in them\n+  \\item Take the time to read them\n+  \\end{itemize}\n+An Error message have 4 parts:\n+  \\begin{itemize}\n+  \\item The stack trace\n+  \\item The error itself (THE MOST IMPORTANT PART!)\n+  \\item Details about the error message\n+  \\item Sometimes, some HINTs at the end.\n+  \\end{itemize}\n+\n+  If multiple errors, check the first one.\n+\\end{frame}\n+\n+\\subsection{Error message}\n+\\begin{frame}[fragile]\n+  \\frametitle{Error message: code}\n+\\lstset{language=Python,\n+        commentstyle=\\itshape\\color{blue},\n+        stringstyle=\\color{violet},\n+        }\n+\\begin{lstlisting}\n+import numpy as np\n+import theano\n+import theano.tensor as T\n+x = T.vector()\n+y = T.vector()\n+z = x + x\n+z = z * y\n+f = theano.function([x, y], z)\n+f(np.ones((2,)), np.ones((3,)))\n+\\end{lstlisting}\n+\\end{frame}\n+\n+\\begin{frame}[fragile]\n+  \\frametitle{Error message: 1st part}\n+\n+\\lstset{language=Python,\n+        commentstyle=\\itshape\\color{blue},\n+        stringstyle=\\color{violet},\n+        basicstyle=\\scriptsize\n+        }\n+\\begin{lstlisting}\n+Traceback (most recent call last):\n+[...]\n+ValueError: Input dimension mis-match.\n+    (input[0].shape[0] = 2, input[1].shape[0] = 3)\n+Apply node that caused the error:\n+     Elemwise{Composite{((i0 + i0) * i1)}}(\n+         <TensorType(float64, vector)>,\n+         <TensorType(float64, vector)>)\n+Toposort index: 0\n+Inputs types: [TensorType(float64, vector),\n+               TensorType(float64, vector)]\n+Inputs shapes: [(2,), (3,)]\n+Inputs strides: [(8,), (8,)]\n+Inputs values: [array([ 1.,  1.]), array([ 1.,  1.,  1.])]\n+Outputs clients: [['output']]\n+\\end{lstlisting}\n+\\end{frame}\n+\n+\\begin{frame}[fragile]\n+  \\frametitle{Error message: 2st part}\n+HINT: Re-running with most Theano optimization\n+disabled could give you a backtrace when this\n+node was created. This can be done with by setting\n+the Theano flags ``optimizer=fast\\_compile''. If that does not\n+work, Theano optimizations can be disabled with\n+``optimizer=None''.\\newline\n+HINT: Use the Theano flag ``exception\\_verbosity=high''\n+for a debugprint of this apply node.\n+\\end{frame}\n+\n+\n+\\begin{frame}[fragile]\n+  \\frametitle{Error message: Traceback}\n+\n+\\lstset{language=Python,\n+        commentstyle=\\itshape\\color{blue},\n+        stringstyle=\\color{violet},\n+        basicstyle=\\footnotesize,\n+        xleftmargin=-1em\n+        }\n+\\begin{lstlisting}\n+Traceback (most recent call last):\n+  File \"test.py\", line 9, in <module>\n+    f(np.ones((2,)), np.ones((3,)))\n+  File \"/u/bastienf/repos/theano/compile/function_module.py\",\n+       line 589, in __call__\n+    self.fn.thunks[self.fn.position_of_error])\n+  File \"/u/bastienf/repos/theano/compile/function_module.py\",\n+       line 579, in __call__\n+    outputs = self.fn()\n+\\end{lstlisting}\n+\\end{frame}\n+\n+\n+\\begin{frame}[fragile]\n+  \\frametitle{Error message: optimizer=fast\\_compile}\n+\n+\\lstset{language=Python,\n+        commentstyle=\\itshape\\color{blue},\n+        stringstyle=\\color{violet},\n+        }\n+\\begin{lstlisting}\n+Backtrace when the node is created:\n+  File \"test.py\", line 7, in <module>\n+    z = z * y\n+\n+\\end{lstlisting}\n+\\end{frame}\n+\n+\\subsection{DebugMode}\n+\\begin{frame}[fragile]\n+  \\frametitle{DebugMode}\n+    Checks and double-checks everything, extremely slow\n+\\begin{itemize}\n+\\item Compare Python, C and GPU implementations.\n+\\item Compare before and after each optimization.\n+\\item By default, raise an error on NaN.\n+\\item Sensitive: so frequently reported errors are ok.\n+\\end{itemize}\n+\\end{frame}\n+\n+\\subsection{Python Debugger (PDB)}\n+\\begin{frame}\n+  \\frametitle{Introduction}\n+  \\begin{itemize}\n+  \\item PDB is similar to GDB\n+  \\item 'n': next, 'c': continue, 'l': list, 'p var': print, 's': step, ...\n+  \\item It only check the first letter, don't forget the 'p'!\n+  \\end{itemize}\n+  To get into PDB:\n+  \\begin{itemize}\n+  \\item import pdb;pdb.set\\_trace()\n+  \\item python -m pdb script.py\n+  \\item Some Theano flags.\n+  \\end{itemize}\n+\\end{frame}\n+\n+\\subsection{Theano}\n+\\begin{frame}\n+  \\frametitle{Theano + PDB}\n+  Can be used with Theano:\n+  \\begin{itemize}\n+    \\item mode=FAST\\_COMPILE \\# Disable most of opt + c code.\n+    \\item linker=py \\# Disable c code.\n+    \\item PdbBreakpoint \\# Breakpoing during execution.\n+    \\item Some Theano flags have a pdb value (ex: warn\\_float64)\n+  \\end{itemize}\n+\\end{frame}\n+\n+\n+\n+\\subsection{Breakpoint}\n+\\begin{frame}[fragile]\n+  \\frametitle{Breakpoint Op} Identity-like op with the side effect of\n+  enforcing a conditional breakpoint in Python Debugger (PDB), inside a theano function, based\n+  on a symbolic scalar condition.\n+\\end{frame}\n+\n+\\begin{frame}[fragile]\n+  \\frametitle{Breakpoint Op: optimization}\n+ Most Theano optimizations don't recognize it except one\n+ optimization that transfer it to the GPU.\n+\\begin{itemize}\n+  \\item Could slow down computation, but not too much.\n+  \\item Could prevent stability optimizations.\n+  \\item Can be moved to the GPU. It does not add extra transfers.\n+  \\item The output of the breakpoint op must be used in the graph.\n+\\end{itemize}\n+\\end{frame}\n+\n+\\begin{frame}[fragile]\n+  \\frametitle{Breakpoint Op: example}\n+\\lstset{language=Python,\n+        commentstyle=\\itshape\\color{blue},\n+        stringstyle=\\color{violet},\n+        basicstyle=\\footnotesize,\n+        xleftmargin=-1em\n+        }\n+\\begin{lstlisting}\n+import theano\n+import theano.tensor as T\n+from theano.tests.breakpoint import PdbBreakpoint\n+input, target = T.fvectors('xy')\n+\n+mse = (input - target) ** 2\n+\n+# Conditional breakpoint to be activated if the total\n+# MSE > 100. The breakpoint will monitor the inputs,\n+# targets as well as the individual error values\n+breakpointOp = PdbBreakpoint(``MSE too high'')\n+condition = T.gt(mse.sum(), 100)\n+mse, monitored_input, monitored_target = breakpointOp(\n+    condition, mse, input, target)\n+\\end{lstlisting}\n+\\end{frame}\n+\n+\\begin{frame}[fragile]\n+  \\frametitle{Breakpoint Op: example}\n+\\lstset{language=Python,\n+        commentstyle=\\itshape\\color{blue},\n+        stringstyle=\\color{violet},\n+        basicstyle=\\footnotesize,\n+        xleftmargin=-1em\n+        }\n+\\begin{lstlisting}\n+# Compile the theano function\n+fct = theano.function([input, target], mse)\n+\n+# Use the function\n+print fct([10, 0], [10, 5]) # Will NOT activate the breakpoint\n+print fct([0, 0], [10, 5]) # Will activate the breakpoint\n+\\end{lstlisting}\n+\n+\\end{frame}\n+\n+\\subsection{PrintOp}\n+\\begin{frame}[fragile]\n+  \\frametitle{PrintOp}\n+Allow to print during execution. The output of the print op must be\n+used in the graph.\n+ \\vspace{1cm}\n+\\lstset{language=Python,\n+        commentstyle=\\itshape\\color{blue},\n+        stringstyle=\\color{violet},\n+        basicstyle=\\footnotesize,\n+        xleftmargin=-1em\n+        }\n+\\begin{lstlisting}\n+import theano\n+x = theano.tensor.vector()\n+o = theano.printing.Print(``a message'')(x)\n+f = theano.function([x], o)\n+d = f([3, 4])\n+a message  __str__ = [ 3.  4.]\n+\\end{lstlisting}\n+\\end{frame}\n+\n+\n+\\subsection{Nan}\n+\\begin{frame}\n+  \\frametitle{Most Frequent NaN Causes}\n+\\begin{itemize}\n+\\item Hyperparameters (ex: learning rate)\n+\\item Initialization of parameters\n+\\item Numerical Stability\n+\\item Algorithm Related\n+\\end{itemize}\n+Run in NanGuardMode, DebugMode, or MonitorMode\n+\\end{frame}\n+\n+\\begin{frame}[fragile]\n+  \\frametitle{NanGuardMode}\n+\\lstset{language=Python,\n+        commentstyle=\\itshape\\color{blue},\n+        stringstyle=\\color{violet},\n+        basicstyle=\\footnotesize,\n+        xleftmargin=-1em\n+        }\n+Can check:\n+\\begin{itemize}\n+\\item Nan\n+\\item Inf\n+\\item Big value (greater than 1e10)\n+\\end{itemize}\n+\\end{frame}\n+\n+\\begin{frame}[fragile]\n+  \\frametitle{NanGuardMode: example}\n+\\lstset{language=Python,\n+        commentstyle=\\itshape\\color{blue},\n+        stringstyle=\\color{violet},\n+        basicstyle=\\footnotesize,\n+        xleftmargin=-1em\n+        }\n+\\begin{lstlisting}\n+x = T.dmatrix()\n+w = theano.shared(numpy.random.randn(5, 7))\n+y = T.dot(x, w)\n+mode=NanGuardMode(nan_is_error=True,\n+                  inf_is_error=True,\n+                  big_is_error=True)\n+fun = theano.function(\n+    [x], y, mode=mode)\n+infa = numpy.tile(\n+    (numpy.asarray(100.) ** 1000000), (3, 5))\n+fun(infa)\n+\\end{lstlisting}\n+\\end{frame}\n+\n+\\subsection{Test Value}\n+\\begin{frame}[fragile]\n+  \\frametitle{Test Value}\n+\n+Give a sample value to symbolic variables and have the graph execution","path":"debug/slides_source/debug.tex","position":350,"original_position":350,"commit_id":"cd6d680977ea1e2c00a3b1985a966be1bc3ff1a7","original_commit_id":"cd6d680977ea1e2c00a3b1985a966be1bc3ff1a7","user":{"login":"carriepl","id":832811,"avatar_url":"https://avatars.githubusercontent.com/u/832811?v=3","gravatar_id":"","url":"https://api.github.com/users/carriepl","html_url":"https://github.com/carriepl","followers_url":"https://api.github.com/users/carriepl/followers","following_url":"https://api.github.com/users/carriepl/following{/other_user}","gists_url":"https://api.github.com/users/carriepl/gists{/gist_id}","starred_url":"https://api.github.com/users/carriepl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/carriepl/subscriptions","organizations_url":"https://api.github.com/users/carriepl/orgs","repos_url":"https://api.github.com/users/carriepl/repos","events_url":"https://api.github.com/users/carriepl/events{/privacy}","received_events_url":"https://api.github.com/users/carriepl/received_events","type":"User","site_admin":false},"body":"'Give sample values'","created_at":"2015-08-04T13:04:00Z","updated_at":"2015-08-04T13:04:00Z","html_url":"https://github.com/mila-udem/summerschool2015/pull/14#discussion_r36184551","pull_request_url":"https://api.github.com/repos/mila-udem/summerschool2015/pulls/14","_links":{"self":{"href":"https://api.github.com/repos/mila-udem/summerschool2015/pulls/comments/36184551"},"html":{"href":"https://github.com/mila-udem/summerschool2015/pull/14#discussion_r36184551"},"pull_request":{"href":"https://api.github.com/repos/mila-udem/summerschool2015/pulls/14"}}},"pull_request":{"url":"https://api.github.com/repos/mila-udem/summerschool2015/pulls/14","id":41394090,"html_url":"https://github.com/mila-udem/summerschool2015/pull/14","diff_url":"https://github.com/mila-udem/summerschool2015/pull/14.diff","patch_url":"https://github.com/mila-udem/summerschool2015/pull/14.patch","issue_url":"https://api.github.com/repos/mila-udem/summerschool2015/issues/14","number":14,"state":"open","locked":false,"title":"Debug tutorial","user":{"login":"nouiz","id":180987,"avatar_url":"https://avatars.githubusercontent.com/u/180987?v=3","gravatar_id":"","url":"https://api.github.com/users/nouiz","html_url":"https://github.com/nouiz","followers_url":"https://api.github.com/users/nouiz/followers","following_url":"https://api.github.com/users/nouiz/following{/other_user}","gists_url":"https://api.github.com/users/nouiz/gists{/gist_id}","starred_url":"https://api.github.com/users/nouiz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nouiz/subscriptions","organizations_url":"https://api.github.com/users/nouiz/orgs","repos_url":"https://api.github.com/users/nouiz/repos","events_url":"https://api.github.com/users/nouiz/events{/privacy}","received_events_url":"https://api.github.com/users/nouiz/received_events","type":"User","site_admin":false},"body":"I don't have yet exercices.","created_at":"2015-08-01T01:42:40Z","updated_at":"2015-08-04T13:04:00Z","closed_at":null,"merged_at":null,"merge_commit_sha":"0b4865cbf0634fc8d65521588bdb3dedea183c62","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/mila-udem/summerschool2015/pulls/14/commits","review_comments_url":"https://api.github.com/repos/mila-udem/summerschool2015/pulls/14/comments","review_comment_url":"https://api.github.com/repos/mila-udem/summerschool2015/pulls/comments{/number}","comments_url":"https://api.github.com/repos/mila-udem/summerschool2015/issues/14/comments","statuses_url":"https://api.github.com/repos/mila-udem/summerschool2015/statuses/cd6d680977ea1e2c00a3b1985a966be1bc3ff1a7","head":{"label":"nouiz:debug","ref":"debug","sha":"cd6d680977ea1e2c00a3b1985a966be1bc3ff1a7","user":{"login":"nouiz","id":180987,"avatar_url":"https://avatars.githubusercontent.com/u/180987?v=3","gravatar_id":"","url":"https://api.github.com/users/nouiz","html_url":"https://github.com/nouiz","followers_url":"https://api.github.com/users/nouiz/followers","following_url":"https://api.github.com/users/nouiz/following{/other_user}","gists_url":"https://api.github.com/users/nouiz/gists{/gist_id}","starred_url":"https://api.github.com/users/nouiz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nouiz/subscriptions","organizations_url":"https://api.github.com/users/nouiz/orgs","repos_url":"https://api.github.com/users/nouiz/repos","events_url":"https://api.github.com/users/nouiz/events{/privacy}","received_events_url":"https://api.github.com/users/nouiz/received_events","type":"User","site_admin":false},"repo":{"id":39969169,"name":"summerschool2015","full_name":"nouiz/summerschool2015","owner":{"login":"nouiz","id":180987,"avatar_url":"https://avatars.githubusercontent.com/u/180987?v=3","gravatar_id":"","url":"https://api.github.com/users/nouiz","html_url":"https://github.com/nouiz","followers_url":"https://api.github.com/users/nouiz/followers","following_url":"https://api.github.com/users/nouiz/following{/other_user}","gists_url":"https://api.github.com/users/nouiz/gists{/gist_id}","starred_url":"https://api.github.com/users/nouiz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nouiz/subscriptions","organizations_url":"https://api.github.com/users/nouiz/orgs","repos_url":"https://api.github.com/users/nouiz/repos","events_url":"https://api.github.com/users/nouiz/events{/privacy}","received_events_url":"https://api.github.com/users/nouiz/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/nouiz/summerschool2015","description":"Slides and exercises for the Deep Learning Summer School 2015 programming tutorials ","fork":true,"url":"https://api.github.com/repos/nouiz/summerschool2015","forks_url":"https://api.github.com/repos/nouiz/summerschool2015/forks","keys_url":"https://api.github.com/repos/nouiz/summerschool2015/keys{/key_id}","collaborators_url":"https://api.github.com/repos/nouiz/summerschool2015/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/nouiz/summerschool2015/teams","hooks_url":"https://api.github.com/repos/nouiz/summerschool2015/hooks","issue_events_url":"https://api.github.com/repos/nouiz/summerschool2015/issues/events{/number}","events_url":"https://api.github.com/repos/nouiz/summerschool2015/events","assignees_url":"https://api.github.com/repos/nouiz/summerschool2015/assignees{/user}","branches_url":"https://api.github.com/repos/nouiz/summerschool2015/branches{/branch}","tags_url":"https://api.github.com/repos/nouiz/summerschool2015/tags","blobs_url":"https://api.github.com/repos/nouiz/summerschool2015/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/nouiz/summerschool2015/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/nouiz/summerschool2015/git/refs{/sha}","trees_url":"https://api.github.com/repos/nouiz/summerschool2015/git/trees{/sha}","statuses_url":"https://api.github.com/repos/nouiz/summerschool2015/statuses/{sha}","languages_url":"https://api.github.com/repos/nouiz/summerschool2015/languages","stargazers_url":"https://api.github.com/repos/nouiz/summerschool2015/stargazers","contributors_url":"https://api.github.com/repos/nouiz/summerschool2015/contributors","subscribers_url":"https://api.github.com/repos/nouiz/summerschool2015/subscribers","subscription_url":"https://api.github.com/repos/nouiz/summerschool2015/subscription","commits_url":"https://api.github.com/repos/nouiz/summerschool2015/commits{/sha}","git_commits_url":"https://api.github.com/repos/nouiz/summerschool2015/git/commits{/sha}","comments_url":"https://api.github.com/repos/nouiz/summerschool2015/comments{/number}","issue_comment_url":"https://api.github.com/repos/nouiz/summerschool2015/issues/comments{/number}","contents_url":"https://api.github.com/repos/nouiz/summerschool2015/contents/{+path}","compare_url":"https://api.github.com/repos/nouiz/summerschool2015/compare/{base}...{head}","merges_url":"https://api.github.com/repos/nouiz/summerschool2015/merges","archive_url":"https://api.github.com/repos/nouiz/summerschool2015/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/nouiz/summerschool2015/downloads","issues_url":"https://api.github.com/repos/nouiz/summerschool2015/issues{/number}","pulls_url":"https://api.github.com/repos/nouiz/summerschool2015/pulls{/number}","milestones_url":"https://api.github.com/repos/nouiz/summerschool2015/milestones{/number}","notifications_url":"https://api.github.com/repos/nouiz/summerschool2015/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/nouiz/summerschool2015/labels{/name}","releases_url":"https://api.github.com/repos/nouiz/summerschool2015/releases{/id}","created_at":"2015-07-30T19:43:27Z","updated_at":"2015-08-01T02:45:46Z","pushed_at":"2015-08-03T23:20:41Z","git_url":"git://github.com/nouiz/summerschool2015.git","ssh_url":"git@github.com:nouiz/summerschool2015.git","clone_url":"https://github.com/nouiz/summerschool2015.git","svn_url":"https://github.com/nouiz/summerschool2015","homepage":null,"size":5766,"stargazers_count":1,"watchers_count":1,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":1,"default_branch":"master"}},"base":{"label":"mila-udem:master","ref":"master","sha":"2ff4486a43ce55b97057dd18276fa6845d4cbf50","user":{"login":"mila-udem","id":11724251,"avatar_url":"https://avatars.githubusercontent.com/u/11724251?v=3","gravatar_id":"","url":"https://api.github.com/users/mila-udem","html_url":"https://github.com/mila-udem","followers_url":"https://api.github.com/users/mila-udem/followers","following_url":"https://api.github.com/users/mila-udem/following{/other_user}","gists_url":"https://api.github.com/users/mila-udem/gists{/gist_id}","starred_url":"https://api.github.com/users/mila-udem/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mila-udem/subscriptions","organizations_url":"https://api.github.com/users/mila-udem/orgs","repos_url":"https://api.github.com/users/mila-udem/repos","events_url":"https://api.github.com/users/mila-udem/events{/privacy}","received_events_url":"https://api.github.com/users/mila-udem/received_events","type":"Organization","site_admin":false},"repo":{"id":38463283,"name":"summerschool2015","full_name":"mila-udem/summerschool2015","owner":{"login":"mila-udem","id":11724251,"avatar_url":"https://avatars.githubusercontent.com/u/11724251?v=3","gravatar_id":"","url":"https://api.github.com/users/mila-udem","html_url":"https://github.com/mila-udem","followers_url":"https://api.github.com/users/mila-udem/followers","following_url":"https://api.github.com/users/mila-udem/following{/other_user}","gists_url":"https://api.github.com/users/mila-udem/gists{/gist_id}","starred_url":"https://api.github.com/users/mila-udem/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mila-udem/subscriptions","organizations_url":"https://api.github.com/users/mila-udem/orgs","repos_url":"https://api.github.com/users/mila-udem/repos","events_url":"https://api.github.com/users/mila-udem/events{/privacy}","received_events_url":"https://api.github.com/users/mila-udem/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/mila-udem/summerschool2015","description":"Slides and exercises for the Deep Learning Summer School 2015 programming tutorials ","fork":false,"url":"https://api.github.com/repos/mila-udem/summerschool2015","forks_url":"https://api.github.com/repos/mila-udem/summerschool2015/forks","keys_url":"https://api.github.com/repos/mila-udem/summerschool2015/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mila-udem/summerschool2015/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mila-udem/summerschool2015/teams","hooks_url":"https://api.github.com/repos/mila-udem/summerschool2015/hooks","issue_events_url":"https://api.github.com/repos/mila-udem/summerschool2015/issues/events{/number}","events_url":"https://api.github.com/repos/mila-udem/summerschool2015/events","assignees_url":"https://api.github.com/repos/mila-udem/summerschool2015/assignees{/user}","branches_url":"https://api.github.com/repos/mila-udem/summerschool2015/branches{/branch}","tags_url":"https://api.github.com/repos/mila-udem/summerschool2015/tags","blobs_url":"https://api.github.com/repos/mila-udem/summerschool2015/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mila-udem/summerschool2015/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mila-udem/summerschool2015/git/refs{/sha}","trees_url":"https://api.github.com/repos/mila-udem/summerschool2015/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mila-udem/summerschool2015/statuses/{sha}","languages_url":"https://api.github.com/repos/mila-udem/summerschool2015/languages","stargazers_url":"https://api.github.com/repos/mila-udem/summerschool2015/stargazers","contributors_url":"https://api.github.com/repos/mila-udem/summerschool2015/contributors","subscribers_url":"https://api.github.com/repos/mila-udem/summerschool2015/subscribers","subscription_url":"https://api.github.com/repos/mila-udem/summerschool2015/subscription","commits_url":"https://api.github.com/repos/mila-udem/summerschool2015/commits{/sha}","git_commits_url":"https://api.github.com/repos/mila-udem/summerschool2015/git/commits{/sha}","comments_url":"https://api.github.com/repos/mila-udem/summerschool2015/comments{/number}","issue_comment_url":"https://api.github.com/repos/mila-udem/summerschool2015/issues/comments{/number}","contents_url":"https://api.github.com/repos/mila-udem/summerschool2015/contents/{+path}","compare_url":"https://api.github.com/repos/mila-udem/summerschool2015/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mila-udem/summerschool2015/merges","archive_url":"https://api.github.com/repos/mila-udem/summerschool2015/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mila-udem/summerschool2015/downloads","issues_url":"https://api.github.com/repos/mila-udem/summerschool2015/issues{/number}","pulls_url":"https://api.github.com/repos/mila-udem/summerschool2015/pulls{/number}","milestones_url":"https://api.github.com/repos/mila-udem/summerschool2015/milestones{/number}","notifications_url":"https://api.github.com/repos/mila-udem/summerschool2015/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mila-udem/summerschool2015/labels{/name}","releases_url":"https://api.github.com/repos/mila-udem/summerschool2015/releases{/id}","created_at":"2015-07-03T00:25:28Z","updated_at":"2015-08-01T19:42:05Z","pushed_at":"2015-08-03T23:56:19Z","git_url":"git://github.com/mila-udem/summerschool2015.git","ssh_url":"git@github.com:mila-udem/summerschool2015.git","clone_url":"https://github.com/mila-udem/summerschool2015.git","svn_url":"https://github.com/mila-udem/summerschool2015","homepage":null,"size":6460,"stargazers_count":20,"watchers_count":20,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":14,"mirror_url":null,"open_issues_count":3,"forks":14,"open_issues":3,"watchers":20,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/mila-udem/summerschool2015/pulls/14"},"html":{"href":"https://github.com/mila-udem/summerschool2015/pull/14"},"issue":{"href":"https://api.github.com/repos/mila-udem/summerschool2015/issues/14"},"comments":{"href":"https://api.github.com/repos/mila-udem/summerschool2015/issues/14/comments"},"review_comments":{"href":"https://api.github.com/repos/mila-udem/summerschool2015/pulls/14/comments"},"review_comment":{"href":"https://api.github.com/repos/mila-udem/summerschool2015/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/mila-udem/summerschool2015/pulls/14/commits"},"statuses":{"href":"https://api.github.com/repos/mila-udem/summerschool2015/statuses/cd6d680977ea1e2c00a3b1985a966be1bc3ff1a7"}}}}