Mastering IPython 4.0
()
About this ebook
- Most updated book on Interactive computing with IPython 4.0;
- Detailed, example-rich guide that lets you use the most advanced level interactive programming with IPython;
- Get flexible interactive programming with IPython using this comprehensive guide
This book is for IPython developers who want to make the most of IPython. It is ideal for users who wish to learn about the interactive and parallel computing properties of IPython 4.0, along with its integration with third-party tools and concepts such as testing and documenting results.
Related to Mastering IPython 4.0
Related ebooks
Python Parallel Programming Cookbook Rating: 5 out of 5 stars5/5Learning Python Application Development Rating: 0 out of 5 stars0 ratingsPython Networking 101: Navigating essentials of networking, socket programming, AsyncIO, network testing, simulations and Ansible Rating: 0 out of 5 stars0 ratingsMastering Python Rating: 0 out of 5 stars0 ratingsFlask Blueprints Rating: 0 out of 5 stars0 ratingsMastering matplotlib Rating: 0 out of 5 stars0 ratingsPython: Journey from Novice to Expert Rating: 5 out of 5 stars5/5Python Essentials Rating: 5 out of 5 stars5/5Expert Python Programming - Second Edition Rating: 2 out of 5 stars2/5Getting Started with Julia Rating: 0 out of 5 stars0 ratingsBuilding Web Applications with Python and Neo4j Rating: 0 out of 5 stars0 ratingsModular Programming with Python Rating: 0 out of 5 stars0 ratingsTkinter GUI Application Development Blueprints Rating: 0 out of 5 stars0 ratingsBuilding Python Real-Time Applications with Storm Rating: 0 out of 5 stars0 ratingsPostgreSQL Server Programming - Second Edition Rating: 0 out of 5 stars0 ratingsMastering Python Regular Expressions Rating: 5 out of 5 stars5/5Modern Python Cookbook Rating: 5 out of 5 stars5/5Mastering Objectoriented Python Rating: 5 out of 5 stars5/5Visual Studio Code for Python Programmers Rating: 0 out of 5 stars0 ratingsDistributed Computing with Python Rating: 0 out of 5 stars0 ratingsNumPy: Beginner's Guide - Third Edition Rating: 4 out of 5 stars4/5The Quick Python Book Rating: 0 out of 5 stars0 ratingsNumerical Python: Scientific Computing and Data Science Applications with Numpy, SciPy and Matplotlib Rating: 0 out of 5 stars0 ratingsNumPy Essentials Rating: 0 out of 5 stars0 ratingsKivy Blueprints Rating: 0 out of 5 stars0 ratingsData Science Solutions with Python: Fast and Scalable Models Using Keras, PySpark MLlib, H2O, XGBoost, and Scikit-Learn Rating: 0 out of 5 stars0 ratingsFlask By Example Rating: 0 out of 5 stars0 ratings
Enterprise Applications For You
QuickBooks 2024 All-in-One For Dummies Rating: 0 out of 5 stars0 ratingsQuickBooks 2023 All-in-One For Dummies Rating: 0 out of 5 stars0 ratingsAccess 2019 For Dummies Rating: 0 out of 5 stars0 ratingsQuickBooks Online For Dummies Rating: 0 out of 5 stars0 ratingsExcel : The Ultimate Comprehensive Step-By-Step Guide to the Basics of Excel Programming: 1 Rating: 5 out of 5 stars5/5Excel Formulas That Automate Tasks You No Longer Have Time For Rating: 5 out of 5 stars5/5Creating Online Courses with ChatGPT | A Step-by-Step Guide with Prompt Templates Rating: 4 out of 5 stars4/5Bitcoin For Dummies Rating: 4 out of 5 stars4/5Excel 101: A Beginner's & Intermediate's Guide for Mastering the Quintessence of Microsoft Excel (2010-2019 & 365) in no time! Rating: 0 out of 5 stars0 ratings102 Useful Excel 365 Functions: Excel 365 Essentials, #3 Rating: 0 out of 5 stars0 ratingsExperts' Guide to OneNote Rating: 5 out of 5 stars5/5Excel 2019 Bible Rating: 5 out of 5 stars5/5Managing Humans: Biting and Humorous Tales of a Software Engineering Manager Rating: 4 out of 5 stars4/5Code like a Pro in C# Rating: 0 out of 5 stars0 ratingsLearning Microsoft Endpoint Manager: Unified Endpoint Management with Intune and the Enterprise Mobility + Security Suite Rating: 0 out of 5 stars0 ratingsExcel Tables: A Complete Guide for Creating, Using and Automating Lists and Tables Rating: 5 out of 5 stars5/5Excel Data Analysis For Dummies Rating: 0 out of 5 stars0 ratingsExcel for the Math Classroom Rating: 5 out of 5 stars5/5PowerShell Troubleshooting Guide Rating: 0 out of 5 stars0 ratingsQuickBooks 2021 For Dummies Rating: 0 out of 5 stars0 ratingsLearning Python Rating: 5 out of 5 stars5/5Excel All-in-One For Dummies Rating: 0 out of 5 stars0 ratingsExcel 2019 For Dummies Rating: 3 out of 5 stars3/5Enterprise AI For Dummies Rating: 3 out of 5 stars3/5SharePoint For Dummies Rating: 0 out of 5 stars0 ratingsQuickBooks Online For Dummies Rating: 0 out of 5 stars0 ratings
Reviews for Mastering IPython 4.0
0 ratings0 reviews
Book preview
Mastering IPython 4.0 - Thomas Bitterman
Table of Contents
Mastering IPython 4.0
Credits
About the Author
About the Reviewer
www.PacktPub.com
eBooks, discount offers, and more
Why subscribe?
Preface
What this book covers
What you need for this book
Who this book is for
Conventions
Reader feedback
Customer support
Downloading the example code
Downloading the color images of this book
Errata
Piracy
Questions
1. Using IPython for HPC
The need for speed
FORTRAN to the rescue – the problems FORTRAN addressed
Readability
Portability
Efficiency
The computing environment
Choosing between IPython and Fortran
Fortran
IPython
Object-orientation
Ease of adoption
Popularity – Fortran versus IPython
Useful libraries
The cost of building (and maintaining) software
Requirements and specification gathering
Development
Execution
Testing and maintenance
Alternatives
Cross-language development
Prototyping and exploratory development
An example case – Fast Fourier Transform
Fast Fourier Transform
Fortran
Python
Performance concerns
Software engineering concerns
Complexity-based metrics
Size-based metrics
Where we stand now
High Performance Computing
The HPC learning curve
Cloudy with a chance of parallelism (or Amazon's computer is bigger than yours)
HPC and parallelism
Clouds and HPC
Going parallel
Terminology
A parallel programming example
A serial program
A parallel equivalent
Discussion
Summary
2. Advanced Shell Topics
What is IPython?
Installing IPython
All-in-one distributions
Package management with conda
Canopy Package Manager
What happened to the Notebook?
Starting out with the terminal
IPython beyond Python
Shell integration
History
Magic commands
Creating custom magic commands
Cython
Configuring IPython
Debugging
Post-mortem debugging
Debugging at startup
Debugger commands
Read-Eval-Print Loop (REPL) and IPython architecture
Alternative development environments
Spyder
Canopy
PyDev
Others
Summary
3. Stepping Up to IPython for Parallel Computing
Serial processes
Program counters and address spaces
Batch systems
Multitasking and preemption
Time slicing
Threading
Threading in Python
Example
Limitations of threading
Global Interpreter Lock
What happens in an interpreter?
CPython
Multi-core machines
Kill GIL
Using multiple processors
The IPython parallel architecture
Overview
Components
The IPython Engine
The IPython Controller
The IPython Hub
The IPython Scheduler
Getting started with ipyparallel
ipcluster
Hello world
Using map_sync
Asynchronous calls
Synchronizing imports
Parallel magic commands
%px
%%px
%pxresult
%pxconfig
%autopx
Types of parallelism
SIMD
SPMD
ipcluster and mpiexec/mpirun
ipcluster and PBS
Starting the engines
Starting the controller
Using the scripts
MapReduce
Scatter and gather
A more sophisticated method
MIMD
MPMD
Task farming and load balancing
The @parallel function decorator
Data parallelism
No data dependence
External data dependence
Application steering
Debugging
First to the post
Graceful shutdown
Summary
4. Messaging with ZeroMQ and MPI
The storage hierarchy
Address spaces
Data locality
ZeroMQ
A sample ZeroMQ program
The server
The client
Messaging patterns in ZeroMQ
Pairwise
Server
Client
Discussion
Client/server
Server 1
Server 2
Client
Discussion
Publish/subscribe
Publisher
Subscriber
Discussion
Push/Pull
Ventilator
Worker
Sink
Discussion
Important ZeroMQ features
Issues using ZeroMQ
Startup and shutdown
Discovery
MPI
Hello World
Rank and role
Point-to-point communication
Broadcasting
Reduce
Discussion
Change the configuration
Divide the work
Parcel out the work
Process control
Master
Worker
ZeroMQ and IPython
ZeroMQ socket types
IPython components
Client
Engine(s)
Controller
Hub
Scheduler
Connection diagram
Messaging use cases
Registration
Heartbeat
IOPub
Summary
5. Opening the Toolkit – The IPython API
Performance profiling
Using utils.timing
Using %%timeit
Using %%prun
The AsyncResult class
multiprocessing.pool.Pool
Blocking methods
Nonblocking methods
Obtaining results
An example program using various methods
mp.pool.AsyncResult
Getting results
An example program using various methods
AsyncResultSet metadata
Metadata keys
Other metadata
The Client class
Attributes
Methods
The View class
View attributes
Calling Python functions
Synchronous calls
Asynchronous calls
Configurable calls
Job control
DirectView
Data movement
Dictionary-style data access
Scatter and gather
Push and pull
Imports
Discussion
LoadBalancedView
Data movement
Imports
Summary
6. Works Well with Others – IPython and Third-Party Tools
R
The rpy2 module/extension
Installing rpy2
Using Rmagic
The %R magic
The %%R magic
Pulling and pushing
Graphics
Using rpy2.robjects
The basics
Interpreting a string as R
Octave
The oct2py module/extension
Installing oct2py
Using Octave magic
The %octave magic
Tricky issues
The %%octave magic
Pushing and pulling
Graphics
Using the Octave module
Pushing and pulling
Running Octave code
Hy
The hymagic module/extension
Installing hymagic
Using hymagic
The %hylang magic
The %%hylang magic
A quick introduction to Hy
Hello world!
Get used to parentheses
Arithmetic operations are in the wrong place
Function composition is everywhere
Control structures in Hy
Setting variable values
Defining functions
if statements
Conditionals
Loops
Calling Python
Summary
7. Seeing Is Believing– Visualization
Matplotlib
Starting matplotlib
An initial graph
Modifying the graph
Controlling interactivity
Bokeh
Starting Bokeh
An initial graph
Modifying the graph
Customizing graphs
Interactive plots
An example interactive plot
R
Installing ggplot2 and pandas
Using DataFrames
An initial graph
Modifying the graph
A different view
Python-nvd3
Starting Python-nvd3
An initial graph
Putting some tools together
A different type of plot
Summary
8. But It Worked in the Demo! – Testing
Unit testing
A quick introduction
Assertions
Environmental issues
Before it starts – setup
While it is running – mocks
After it finishes – teardown
Writing to be tested
unittest
Important concepts
A test using setUp and tearDown
One-time setUp and tearDown
Decorators
pytest
Installation
Back compatibility
Test discovery
Organizing test files
Assertions
A test using setUp and tearDown
Classic xUnit-style
Being verbose
Using fixtures
Skipping and failing
Monkeypatching
nose2
Installation
Back compatibility
Test discovery
Running individual tests
Assertions, setup, and teardown
Modified xUnit-style
Using decorators
Plugins
Generating XML with the junitxml plugin
Summary
9. Documentation
Inline comments
Using inline comments
Function annotations
Syntax
Parameters
Return values
Semantics
Type hints
Syntax
Semantics
Docstrings
Example
Inheriting docstrings
Recommended elements
One-line docstrings
Syntax
Semantics
Multiline docstrings
Syntax
Semantics
The API
Inputs
Functionality
Outputs
Error conditions
Relationship with other parts of the system
Example uses
Example
reStructuredText
History and goals
Customers
The solution
Overview
Paragraphs
Text styles
Literal blocks
Lists
Enumerated lists
Bulleted lists
Definition lists
Hyperlinks
Sections
Docutils
Installation
Usage
Documenting source files
Sphinx
Installation and startup
Specifying the source files
Summary
10. Visiting Jupyter
Installation and startup
The Dashboard
Creating a notebook
Interacting with Python scripts
Working with cells
Cell tricks
Cell scoping
Cell execution
Restart & Run All
Magics
Cell structure
Code cells
Markdown cells
Raw cells
Heading cells
Being graphic
Using matplotlib
Using Bokeh
Using R
Using Python-nvd3
Format conversion
Other formats
nbviewer
Summary
11. Into the Future
Some history
The Jupyter project
The Notebook
The console
Jupyter Client
The future of Jupyter
Official roadmap
Official subprojects
Direct creation
Incorporation
Incubation
External incubation
IPython
Current activity
The rise of parallelism
The megahertz wars end
The problem
A parallel with the past
The present
Problems are getting bigger and harder
Computers are becoming more parallel
Clouds are rolling in
There is no Big Idea
Pragmatic evolution of techniques
Better tools
The Next Big Idea
Growing professionalism
The NSF
Software Infrastructure for Sustained Innovation
Summary
Index
Mastering IPython 4.0
Mastering IPython 4.0
Copyright © 2016 Packt Publishing
All rights reserved. No part of this book may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, without the prior written permission of the publisher, except in the case of brief quotations embedded in critical articles or reviews.
Every effort has been made in the preparation of this book to ensure the accuracy of the information presented. However, the information contained in this book is sold without warranty, either express or implied. Neither the author, nor Packt Publishing, and its dealers and distributors will be held liable for any damages caused or alleged to be caused directly or indirectly by this book.
Packt Publishing has endeavored to provide trademark information about all of the companies and products mentioned in this book by the appropriate use of capitals. However, Packt Publishing cannot guarantee the accuracy of this information.
First published: May 2016
Production reference: 1240516
Published by Packt Publishing Ltd.
Livery Place
35 Livery Street
Birmingham B3 2PB, UK.
ISBN 978-1-78588-841-0
www.packtpub.com
Credits
Author
Thomas Bitterman
Reviewers
James Davidheiser
Dipanjan Deb
Commissioning Editor
Veena Pagare
Acquisition Editor
Manish Nainani
Content Development Editor
Deepti Thore
Technical Editor
Tanmayee Patil
Copy Editor
Vikrant Phadke
Project Coordinator
Shweta H. Birwatkar
Proofreader
Safis Editing
Indexer
Monica Ajmera Mehta
Graphics
Disha Haria
Production Coordinator
Nilesh Mohite
Cover Work
Nilesh Mohite
About the Author
Thomas Bitterman has a PhD from Louisiana State University and is currently an assistant professor at Wittenberg University. He previously worked in the industry for many years, including a recent stint at the Ohio Supercomputer Center. Thomas has experience in such diverse areas as electronic commerce, enterprise messaging, wireless networking, supercomputing, and academia. He also likes to keep sharp, writing material for Packt Publishing and O'Reilly in his copious free time.
I would like to thank my girlfriend for putting up with the amount of time this writing has taken away.
The Ohio Supercomputer Center has been very generous with their resources. The AweSim infrastructure (https://awesim.org/en/) is truly years ahead of anything else in the field. The original architect must have been a genius.
And last (but by no means least), I would like to thank Deepti Thore, Manish Nainani, Tanmayee Patil and everyone else at Packt, without whose patience and expertise this project would have never come to fruition.
About the Reviewer
Dipanjan Deb is an experienced analytics professional with about 16 years of cumulative experience in machine/statistical learning, data mining, and predictive analytics across the healthcare, maritime, automotive, energy, CPG, and human resource domains. He is highly proficient in developing cutting-edge analytic solutions using open source and commercial packages to integrate multiple systems to provide massively parallelized and large-scale optimization.
He has extensive experience in building analytics teams of data scientists that deliver high-quality solutions. Dipanjan strategizes and collaborates with industry experts, technical experts, and data scientists to build analytic solutions that shorten the transition from a POC to commercial release.
He is well versed in overarching supervised, semi-supervised, and unsupervised learning algorithm implementations in R, Python, Vowpal Wabbit, Julia, and SAS; and distributed frameworks, including Hadoop and Spark, both in-premise and in cloud environments. He is a part-time Kaggler and IoT/IIoT enthusiast (Raspberry Pi and Arduino prototyping).
www.PacktPub.com
eBooks, discount offers, and more
Did you know that Packt offers eBook versions of every book published, with PDF and ePub files available? You can upgrade to the eBook version at www.PacktPub.com and as a print book customer, you are entitled to a discount on the eBook copy. Get in touch with us at
At www.PacktPub.com, you can also read a collection of free technical articles, sign up for a range of free newsletters and receive exclusive discounts and offers on Packt books and eBooks.
https://www2.packtpub.com/books/subscription/packtlib
Do you need instant solutions to your IT questions? PacktLib is Packt's online digital book library. Here, you can search, access, and read Packt's entire library of books.
Why subscribe?
Fully searchable across every book published by Packt
Copy and paste, print, and bookmark content
On demand and accessible via a web browser
Preface
Welcome to the world of IPython 4.0, which is used in high performance and parallel environments. Python itself has been gaining traction in these areas, and IPython builds on these strengths.
High-performance computing (HPC) has a number of characteristics that make it different from the majority of other computing fields. We will start with a brief overview of what makes HPC different and how IPython can be a game-changing technology.
We will then start on the IPython command line. Now that Jupyter has split from the IPython project, this is the primary means by which the developer will interface with the language. This is an important enough topic to devote two chapters to. In the first, we will concentrate on basic commands and gaining an understanding of how IPython carries them out. The second chapter will cover more advanced commands, leaving the reader with a solid grounding in what the command line has to offer.
After that, we will address some particulars of parallel programming. IPython parallel is a package that contains a great deal of functionality required for parallel computing in IPython. It supports a flexible set of parallel programming models and is critical if you want to harness the power of massively parallel architectures.
Programs running in parallel but on separate processors often need to exchange information despite having separate address spaces. They do so by sending messages. We will cover two messaging systems, ZeroMQ and MPI, and in relation to both how they are used in already existing programs and how they interact with IPython.
We will then take a deeper look at libraries that can enhance your productivity, whether included in IPython itself or provided by third-parties. There are far too many tools to cover in this book, and more are being written all the time, but a few will be particularly applicable to parallel and HPC projects.
An important feature of IPython is its support for visualization of datasets and results. We will cover some of IPython's extensive capabilities, whether built-in to the language or through external tools.
Rounding off the book will be material on testing and documentation. These oft-neglected topics separate truly professional code from also-rans, and we will look at IPython's support for these phases of development. Finally, we will discuss where the field is going. Part of the fun of programming is that everything changes every other year (if not sooner), and we will speculate on what the future might hold.
What this book covers
Chapter 1, Using IPython for HPC, discusses the distinctive features of parallel and HPC computing and how IPython fits in (and how it does not).
Chapter 2, Advanced Shell Topics, introduces the basics of working with the command line including debugging, shell commands, and embedding, and describes the architecture that underlies it.
Chapter 3, Stepping Up to IPython for Parallel Computing, explores the features of IPython that relate directly to parallel computing. Different parallel architectures will be introduced and IPython's support for them will be described.
Chapter 4, Messaging with ZeroMQ and MPI, covers these messaging systems and how they can be used with IPython and parallel architectures.
Chapter 5, Opening the Toolkit – The IPython API, introduces some of the more useful libraries included with IPython, including performance profiling, AsyncResult, and View.
Chapter 6, Works Well with Others – IPython and Third-Party Tools, describes tools created by third-parties, including R, Octave, and Hy. The appropriate magics are introduced, passing data between the languages is demonstrated, and sample programs are examined.
Chapter 7, Seeing Is Believing – Visualization, provides an overview of various tools that can be used to produce visual representations of data and results. Matplotlib, bokeh, R, and Python-nvd3 are covered.
Chapter 8, But It Worked in the Demo! – Testing, covers issues related to unit testing programs and the tools IPython provides to support this process. Frameworks discussed include unittest, pytest, and nose2.
Chapter 9, Documentation, discusses the different audience for documentation and their requirements. The use of docstrings with reStructuredText, docutils, and Sphinx is demonstrated in the context of good documentation standards.
Chapter 10, Visiting Jupyter, introduces the Jupyter notebook and describes its use as a laboratory notebook combining data and calculations.
Chapter 11, Into the Future, reflects on the current rapid rate of change and speculates on what the future may hold, both in terms of the recent split between IPython and the Jupyter project and relative to some emerging trends in scientific computing in general.
What you need for this book
This book was written using the IPython 4.0 and 4.0.1 (stable) releases from August 2015 through March 2016; all examples and functions should work in these versions. When third-party libraries are required, the version used will be noted at that time. Given the rate of change of the IPython 4 implementation, the various third-party libraries, and the field in general, it is an unfortunate fact that getting every example in this book to run on every reader's machine is doubtful. Add to that the differences in machine architecture and configuration and the problem only worsens. Despite efforts to write straightforward, portable code, the reader should not be surprised if some work is required to make the odd example work on their system.
Who this book is for
This book is for IPython developers who want to make the most of IPython and perform advanced scientific computing with IPython, utilizing the ease of interactive computing.
It is ideal for users who wish to learn about the interactive and parallel computing properties of IPython 4.0, along with its integration with third-party tools and concepts such as testing and documenting results.
Conventions
In this book, you will find a number of text styles that distinguish between different kinds of information. Here are some examples of these styles and an explanation of their meaning.
Code words in text, database table names, folder names, filenames, file extensions, pathnames, dummy URLs, user input, and Twitter handles are shown as follows: These methods must be named setUpClass and tearDownClass and must be implemented as class methods.
A block of code is set as follows:
def setUp(self):
print(Doing setUp
)
self.vals = np.zeros((10), dtype=np.int32)
self.randGen = myrand.MyRand( )
Any command-line input or output is written as follows:
pip install pytest
New terms and important words are shown in bold. Words that you see on the screen, for example, in menus or dialog boxes, appear in the text like this: At a finer level of detail are the bugs listed under the Issues tag and the new features under the Pulls tag.
Note
Warnings or important notes appear in a box like this.
Tip
Tips and tricks appear like this.
Reader feedback
Feedback from our readers is always welcome. Let us know what you think about this book—what you liked or disliked. Reader feedback is important for us as it helps us develop titles that you will really get the most out of.
To send us general feedback, simply e-mail <feedback@packtpub.com>, and mention the book's title in the subject of your message.
If there is a topic that you have expertise in and you are interested in either writing or contributing to a book, see our author guide at www.packtpub.com/authors.
Customer support
Now that you are the proud owner of a Packt book, we have a number of things to help you to get the most from your purchase.
Downloading the example code
You can download the example code files for this book from your account at http://www.packtpub.com. If you purchased this book elsewhere, you can visit http://www.packtpub.com/support and register to have the files e-mailed directly to you.
You can download the code files by following these steps:
Log in or register to our website using your e-mail address and password.
Hover the mouse pointer on the SUPPORT tab at the top.
Click on Code Downloads & Errata.
Enter the name of the book in the Search box.
Select the book for which you're looking to download the code files.
Choose from the drop-down menu where you purchased this book from.
Click on Code Download.
You can also download the code files by clicking on the Code Files button on the book's webpage at the Packt Publishing website. This page can be accessed by entering the book's name in the Search box. Please note that you need to be logged in to your Packt account.
Once the file is downloaded, please make sure that you unzip or extract the folder using the latest version of:
WinRAR / 7-Zip for Windows
Zipeg / iZip / UnRarX for Mac
7-Zip / PeaZip for Linux
The code bundle for the book is also hosted on GitHub at https://github.com/PacktPublishing/Mastering-IPython-4. We also have other code bundles from our rich catalog of books and videos available at https://github.com/PacktPublishing/. Check them out!
Downloading the color images of this book
We also provide you with a PDF file that has color images of the screenshots/diagrams used in this book. The color images will help you better understand the changes in the output. You can download this file from https://www.packtpub.com/sites/default/files/downloads/MasteringIPython40_ColorImages.pdf.
Errata
Although we have taken every care to ensure the accuracy of our content, mistakes do happen. If you find a mistake in one of our books—maybe a mistake in the text or the code—we would be grateful if you could report this to us. By doing so, you can save other readers from frustration and help us improve subsequent versions of this book. If you find any errata, please report them by visiting http://www.packtpub.com/submit-errata, selecting your book, clicking on the Errata Submission Form link, and entering the details of your errata. Once your errata are verified, your submission will be accepted and the errata will be uploaded to our website or added to any list of existing errata under the Errata section of that title.
To view the previously submitted errata, go to https://www.packtpub.com/books/content/support and enter the name of the book in the search field. The required information will appear under the Errata section.
Piracy
Piracy of copyrighted material on the Internet is an ongoing problem across all media. At Packt, we take the protection of our copyright and licenses very seriously. If you come across any illegal copies of our works in any form on the Internet, please provide us with the location address or website name immediately so that we can pursue a remedy.
Please contact us at <copyright@packtpub.com> with a link to the suspected pirated material.
We appreciate your help in protecting our authors and our ability to bring you valuable content.
Questions
If you have a problem with any aspect of this book, you can contact us at <questions@packtpub.com>, and we will do our best to address the problem.
Chapter 1. Using IPython for HPC
In this chapter, we are going to look at why IPython should be considered a viable tool for building high-performance and parallel systems.
This chapter covers the following topics:
The need for speed
Fortran as a solution
Choosing between IPython and Fortran
An example case—the Fast Fourier Transform
High-performance computing and the cloud
Going parallel
The need for speed
Computers have never been fast enough. From their very beginnings in antiquity as abaci to the building-sized supercomputers of today, the cry has gone up Why is this taking so long?
This is not an idle complaint. Humanity's ability to control the world depends on its ability to model it and to simulate different courses of action within that model. A medieval trader, before embarking on a trading mission, would pull out his map (his model of the world) and plot a course (a simulation of his journey). To do otherwise was to invite disaster. It took a long period of time and a specialized skill set to use these tools. A good navigator was an important team member. To go where no maps existed was a perilous journey.
The same is true today, except that the models have become larger and the simulations more intricate. Testing a new nuclear missile by actually launching it is ill-advised. Instead, a model of the missile is built in software and a simulation of its launching is run on a computer. Design flaws can be exposed in the computer (where they are harmless), and not in reality.
Modeling a missile is much more complex than modeling the course of a ship. There are more moving parts, the relevant laws of physics are more complicated, the tolerance for error is lower, and so on and so forth. This would not be possible without employing more sophisticated tools than the medieval navigator had access to. In the end, it is our tools' abilities that limit what we can do.
It is the nature of problems to expand to fill the limits of our capability to solve them. When computers were first invented, they seemed like the answer to all our problems. It did not take long before new problems arose.
FORTRAN to the rescue – the problems FORTRAN addressed
After the initial successes of the computer (breaking German codes and calculating logarithms), the field ran into two problems. Firstly, the