CME 193: Introduction to Scientific Python Lecture 8: Unit testing, more modules, wrap up



Similar documents
Web Development with Flask and the Raspberry Pi Leading by Example CUAUHTEMOC CARBAJAL ITESM CEM 22/04/2014

CIS 192: Lecture 10 Web Development with Flask

CS 1133, LAB 2: FUNCTIONS AND TESTING

Intro to scientific programming (with Python) Pietro Berkes, Brandeis University

Big Data Paradigms in Python

CIS 192: Lecture 13 Scientific Computing and Unit Testing

CIS 192: Lecture 10 Web Development with Flask

DATA SCIENCE CURRICULUM WEEK 1 ONLINE PRE-WORK INSTALLING PACKAGES COMMAND LINE CODE EDITOR PYTHON STATISTICS PROJECT O5 PROJECT O3 PROJECT O2

We will learn the Python programming language. Why? Because it is easy to learn and many people write programs in Python so we can share.

CRASH COURSE PYTHON. Het begint met een idee

Python programming Testing

Introduction to Python for Text Analysis

Survey of Unit-Testing Frameworks. by John Szakmeister and Tim Woods

personalkollen fredag 5 juli 13

6.170 Tutorial 3 - Ruby Basics

Introduction to Python

Python Testing with unittest, nose, pytest

Introduction to Python

Installing and Running the Google App Engine On Windows

latest Release 0.2.6

Slides from INF3331 lectures - web programming in Python

Welcome to Introduction to programming in Python

Peach Fuzzer Platform

Wrestling with Python Unit testing. Warren Viant

Exercise 0. Although Python(x,y) comes already with a great variety of scientic Python packages, we might have to install additional dependencies:

Web development... the server side (of the force)

Unlocking the True Value of Hadoop with Open Data Science

Python and Google App Engine

Introduction to Python

Chapter 2 Writing Simple Programs

Computation and Economics - Spring 2012 Assignment #3: File Sharing

depl Documentation Release depl contributors

PHP Debugging. Draft: March 19, Christopher Vickery

So today we shall continue our discussion on the search engines and web crawlers. (Refer Slide Time: 01:02)

Advanced Topics: Biopython

HPC Wales Skills Academy Course Catalogue 2015

Profiling, debugging and testing with Python. Jonathan Bollback, Georg Rieckh and Jose Guzman

AQA GCSE in Computer Science Computer Science Microsoft IT Academy Mapping

2013 Ruby on Rails Exploits. CS 558 Allan Wirth

Car Insurance. Prvák, Tomi, Havri

MACHINE LEARNING IN HIGH ENERGY PHYSICS

ANSA and μeta as a CAE Software Development Platform

Modern Web Application Framework Python, SQL Alchemy, Jinja2 & Flask

SENTIMENT ANALYZER. Manual. Tel & Fax: info@altiliagroup.com Web:

CS 40 Computing for the Web

Flask-SSO Documentation

App Building Guidelines

Django Two-Factor Authentication Documentation

CSCE 110 Programming I Basics of Python: Variables, Expressions, and Input/Output

Chapter 3 Writing Simple Programs. What Is Programming? Internet. Witin the web server we set lots and lots of requests which we need to respond to

Exercise 1: Python Language Basics

Android Setup Phase 2

Introduction to Python

Unit testing using Python nose

Moving beyond hardware

UM Online Practice Programming Contest September 20, 2011

14:440:127 Introduction to Computers for Engineers. Notes for Lecture 06

Algorithms are the threads that tie together most of the subfields of computer science.

A REST API for Arduino & the CC3000 WiFi Chip

CS 2112 Spring Instructions. Assignment 3 Data Structures and Web Filtering. 0.1 Grading. 0.2 Partners. 0.3 Restrictions

Availability of the Program A free version is available of each (see individual programs for links).

Software Engineering Techniques

7 Why Use Perl for CGI?

Scientific Programming in Python

requests_toolbelt Documentation

Fall 2012 Q530. Programming for Cognitive Science

IERG 4080 Building Scalable Internet-based Services

A Python Tour: Just a Brief Introduction CS 303e: Elements of Computers and Programming

Assignment 2: Option Pricing and the Black-Scholes formula The University of British Columbia Science One CS Instructor: Michael Gelbart

DevKey Documentation. Release 0.1. Colm O Connor

Data Mining Applications in Manufacturing

socketio Documentation

Lecture 11 Web Application Security (part 1)

ESPResSo Summer School 2012

#mstrworld. No Data Left behind: 20+ new data sources with new data preparation in MicroStrategy 10

Web [Application] Frameworks

Computer Programming for the Social Sciences

MINING DATA FROM TWITTER. Abhishanga Upadhyay Luis Mao Malavika Goda Krishna

Testing Rails. by Josh Steiner. thoughtbot

Using XACML Policies as OAuth Scope

VHDL Test Bench Tutorial

Applications to Computational Financial and GPU Computing. May 16th. Dr. Daniel Egloff

Exercise 4 Learning Python language fundamentals

Server-side Development using Python and SQL

How to Outsource Without Being a Ninnyhammer

Computers. An Introduction to Programming with Python. Programming Languages. Programs and Programming. CCHSG Visit June Dr.-Ing.

HP AppPulse Mobile. Adding HP AppPulse Mobile to Your Android App

WebIOPi. Installation Walk-through Macros

Machine Learning and Data Mining. Fundamentals, robotics, recognition

Product: DQ Order Manager Release Notes

Predicting outcome of soccer matches using machine learning

Programming Languages CIS 443

Chapter 13 - The Preprocessor

MapReduce. MapReduce and SQL Injections. CS 3200 Final Lecture. Introduction. MapReduce. Programming Model. Example

Transcription:

CME 193: Introduction to Scientific Python Lecture 8: Unit testing, more modules, wrap up Sven Schmit stanford.edu/~schmit/cme193 8: Unit testing, more modules, wrap up 8-1

Contents Unit testing More modules Wrap up Exercises 8: Unit testing, more modules, wrap up 8-2

Unit testing Unit tests: test individual pieces of code For example, for factorial function, test 0! = 1 3! = 6 etc. 8: Unit testing, more modules, wrap up 8-3

Test driven development Some write tests before code Reasons: Focus on the requirements Don t write too much Safely refactor code When collaborating: don t break other s code Faster 8: Unit testing, more modules, wrap up 8-4

Test cases How to construct test cases? A test case should answer a single question about the code, A test case should Run by itself, no human input required Determine on its own whether the test has passed or failed Be separate from other tests 8: Unit testing, more modules, wrap up 8-5

What to test Known values Sanity check (for conversion functions for example) Bad input Input is too large? Negative input? String input when expected an integer? etc: very dependent on problem 8: Unit testing, more modules, wrap up 8-6

unittest The standard Python module unittest helps you write unit tests. import unittest from my_script import is_palindrome class KnownInput(unittest.TestCase): knownvalues = (( lego, False), ( radar, True)) def testknownvalues(self): for word, palin in self.knownvalues: result = is_palindrome(word) self.assertequal(result, palin) Not complicated, but hard to get started 8: Unit testing, more modules, wrap up 8-7

Alternatives Nose Pytest 8: Unit testing, more modules, wrap up 8-8

Pytest Easy no-boilerplate testing Automatically discovers tests $ pip install -U pytest Test discovery: (basics) Scans files starting with test_ Run functions starting with test_ 8: Unit testing, more modules, wrap up 8-9

Example: primes Create two files in a directory: primes.py Implementation test_primes.py Tests 8: Unit testing, more modules, wrap up 8-10

Initial code primes.py def is_prime(x): return True test_primes.py from primes import is_prime def test_is_three_prime(): assert is_prime(3) def test_is_four_prime(): assert not is_prime(4) 8: Unit testing, more modules, wrap up 8-11

Pytest output $ py.test ============================= test session starts ============================== platform darwin -- Python 2.7.9 -- py-1.4.27 -- pytest-2.7.1 rootdir: /Users/sps/Dropbox/cc/cme193/demo/unit_testing, inifile: collected 2 items test_primes.py.f =================================== FAILURES =================================== test_is_four_prime def test_is_four_prime(): > assert not is_prime(4) E assert not True E + where True = is_prime(4) test_primes.py:7: AssertionError ====================== 1 failed, 1 passed in 0.03 seconds ===================== 8: Unit testing, more modules, wrap up 8-12

Fixing is_prime Simplest solution that passes tests: primes.py def is_prime(x): for i in xrange(2, x): if x % i == 0: return False return True Premature optimization is the root of all evil - Donald Knuth 8: Unit testing, more modules, wrap up 8-13

Pytest output $ py.test ============================= test session starts ============================== platform darwin -- Python 2.7.9 -- py-1.4.27 -- pytest-2.7.1 rootdir: /Users/sps/Dropbox/cc/cme193/demo/unit_testing, inifile: collected 2 items test_primes.py.. =========================== 2 passed in 0.01 seconds ========================== 8: Unit testing, more modules, wrap up 8-14

Add more tests from primes import is_prime def test_is_zero_prime(): assert not is_prime(0) def test_is_one_prime(): assert not is_prime(1) def test_is_two_prime(): assert is_prime(2) def test_is_three_prime(): assert is_prime(3) def test_is_four_prime(): assert not is_prime(4) 8: Unit testing, more modules, wrap up 8-15

Pytest output ============================= test session starts ============================== platform darwin -- Python 2.7.9 -- py-1.4.27 -- pytest-2.7.1 rootdir: /Users/sps/Dropbox/cc/cme193/demo/unit_testing, inifile: collected 5 items test_primes.py FF... =================================== FAILURES =================================== test_is_zero_prime def test_is_zero_prime(): > assert not is_prime(0) E assert not True E + where True = is_prime(0) test_primes.py:4: AssertionError test_is_one_prime def test_is_one_prime(): > assert not is_prime(1) E assert not True E + where True = is_prime(1) test_primes.py:7: AssertionError ====================== 2 failed, 3 passed in 0.05 seconds ====================== 8: Unit testing, more modules, wrap up 8-16

Some more tests Negative numbers Non integers Large prime List of known primes List of non-primes 8: Unit testing, more modules, wrap up 8-17

When all tests pass... First make sure all tests pass Then optimize code, making sure nothing breaks Now you can be confident that whatever algorithm you use, it still works as desired! 8: Unit testing, more modules, wrap up 8-18

Contents Unit testing More modules Wrap up Exercises 8: Unit testing, more modules, wrap up 8-19

More modules Quickly go over some useful modules What else is there? Also, some nice resources to explore 8: Unit testing, more modules, wrap up 8-20

Pickle Module for serializing and deserializing objects in Python. Save Python object to file with dump Load Python object from file load Very simple and extremely useful. cpickle C implementation: faster 8: Unit testing, more modules, wrap up 8-21

Pickle Module for serializing and deserializing objects in Python. Save Python object to file with dump Load Python object from file load Very simple and extremely useful. cpickle C implementation: faster 8: Unit testing, more modules, wrap up 8-22

Regular expressions A regular expression (RE) specify a set of strings to match. This module can be used to check whether a particular string matches the RE I.e.: Find text pattern in string / document see also: https://docs.python.org/2/howto/regex.html#regex-howto Very powerful, and not just for Python 8: Unit testing, more modules, wrap up 8-23

Regular expressions. ^ $ * +? { } [ ] \ ( ) [ and ] are used for specifying a character class, e.g.[aeiou], [A-Z], [A-z], [0-5] is the complement character, e.g. [ 5] matches all except for a 5. \ used to signal various special sequences, including the use of metacharacters, e.g. \ to match. characters usually map to characters: test - test \d matches any decimal digit: \d - [0-9] 8: Unit testing, more modules, wrap up 8-24

Regular expressions Suppose you want to find phone numbers: 1234567890 123-456-7890 (123) 465 7890 (123) 456-7890 etc How to find all these? 8: Unit testing, more modules, wrap up 8-25

Regular expressions Pattern: Maybe a bracket: \(? 3 numbers: \d{3} Maybe a bracket or a hyphen: [-\)]? Maybe a whitespace: \s? 3 numbers: \d{3} Maybe a hyphen or a whitespace: [-\s]? 4 numbers: \d{4} End: $ Extract the numbers by placing brackets: (\d{3}) around numbers \(?(\d{3})[-\)]?\s?(\d{3})[-\s]?(\d{4})$ 8: Unit testing, more modules, wrap up 8-26

Regular expressions Pattern: Maybe a bracket: \(? 3 numbers: \d{3} Maybe a bracket or a hyphen: [-\)]? Maybe a whitespace: \s? 3 numbers: \d{3} Maybe a hyphen or a whitespace: [-\s]? 4 numbers: \d{4} End: $ Extract the numbers by placing brackets: (\d{3}) around numbers \(?(\d{3})[-\)]?\s?(\d{3})[-\s]?(\d{4})$ 8: Unit testing, more modules, wrap up 8-27

Regular expressions import re pat = \(?(\d{3})[-\)]?\s?(\d{3})[-\s]?(\d{4})$ repat = re.compile(pat) string = (123) 456-7890 search = repat.search(string) if search: print search.groups() else: print not found How to test? Unit testing is invented for these kind of problems! 8: Unit testing, more modules, wrap up 8-28

Regular expressions import re pat = \(?(\d{3})[-\)]?\s?(\d{3})[-\s]?(\d{4})$ repat = re.compile(pat) string = (123) 456-7890 search = repat.search(string) if search: print search.groups() else: print not found How to test? Unit testing is invented for these kind of problems! 8: Unit testing, more modules, wrap up 8-29

Regular expressions import re pat = \(?(\d{3})[-\)]?\s?(\d{3})[-\s]?(\d{4})$ repat = re.compile(pat) string = (123) 456-7890 search = repat.search(string) if search: print search.groups() else: print not found How to test? Unit testing is invented for these kind of problems! 8: Unit testing, more modules, wrap up 8-30

Requests HTTP library for Python. import requests r = requests.get( http://google.com ) print r.text Alternative: urllib, urllib2 8: Unit testing, more modules, wrap up 8-31

Speeding up Python Compared to C or Fortran, Python can be slow. Ways to improve execution time: Pypy: no need to change any code, simply run your code using pypy script.py. However, does not work with Numpy etc. Numba: A little more work, but works with numpy Cython: Most work, fastest 8: Unit testing, more modules, wrap up 8-32

Beautiful soup Useful for scraping HTML pages. Such as: finding all links, or specific urls. Get data from poorly designed websites. Alternative: Scrapy 8: Unit testing, more modules, wrap up 8-33

APIs There are several modules that you can use to access APIs of websites Twitter python-twitter, Tweepy Reddit PRAW... Able to get data or create apps for the ambitious. 8: Unit testing, more modules, wrap up 8-34

Scikits Additional packages that extend Scipy: skikit-aero scikit-learn scikit-image cuda odes 8: Unit testing, more modules, wrap up 8-35

Scikit learn Large Scikit package with a lot of functionality. Sponsored by INRIA (and Google sometimes) Classification Regression Clustering Dimensionality reduction Model selection Preprocessing 8: Unit testing, more modules, wrap up 8-36

Flask Flask is a microframework for web development using Python from flask import Flask app = Flask( name ) @app.route("/<name>") @app.route("/") def hello(name="world"): return "Hello {}!".format(name) if name == " main ": app.run() Run the above script, then browse to http://127.0.0.1:5000/ In-depth tutorial: http://blog.miguelgrinberg.com/post/ the-flask-mega-tutorial-part-i-hello-world 8: Unit testing, more modules, wrap up 8-37

Django Another web development framework using Python https://www.djangoproject.com/ 8: Unit testing, more modules, wrap up 8-38

PyMC A framework for Monte Carlo simulations Tutorial: https://camdavidsonpilon.github.io/ Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/ 8: Unit testing, more modules, wrap up 8-39

Contents Unit testing More modules Wrap up Exercises 8: Unit testing, more modules, wrap up 8-40

Zen of Python import this 8: Unit testing, more modules, wrap up 8-41

Have you fallen in love with Python? There s nothing wrong with falling in love with a programming language for her looks. I mean, let s face it - Python does have a rockin body of modules, and a damn good set of utilities and interpreters on various platforms. Her whitespace-sensitive syntax is easy on the eyes, and it s a beautiful sight to wake up to in the morning after a long night of debugging. The way she sways those releases on a consistent cycle - she knows how to treat you right, you know?... https://www.quora.com/ Have-I-have-fallen-in-love-with-Python-because-she-is-beautiful 8: Unit testing, more modules, wrap up 8-42

Project and portfolio Please remember: projects and portfolios due next Thursday at noon. Coursework checklist: Project code (py file(s) or zip). Project write-up (pdf file (no word!)). All scripts you wrote for class (zip with all py files). No write up necessary. 8: Unit testing, more modules, wrap up 8-43

Feedback Thanks a lot! Hope you enjoyed the class and learnt a lot! Another feedback form: or via course website goo.gl/3onacl Questions? 8: Unit testing, more modules, wrap up 8-44

Contents Unit testing More modules Wrap up Exercises 8: Unit testing, more modules, wrap up 8-45

Exercises See course website for exercises for this week. Let me know if you have any question about exercises or project Feel free to email me with questions about project 8: Unit testing, more modules, wrap up 8-46