Enthought Custom Courses
Pricing | General Course Information
We provide private training sessions for enterprise customers or academic groups. In addition to the material covered in our standard Intensive Python Training Courses, Custom Courses can include specialized topics, such as those listed below. Pricing reflects the amount of training material developed to meet your team's specific needs.
Signal and Image Processing
SciPy contains many canned routines for doing advanced signal and image processing. In this course we describe both techniques and tools for processing digital signals with NumPy and SciPy.
- Filter_design and filtering (time-domain and frequency-domain, FIR and IIR)
- Block-based (streaming) filtering
- Tools for linear system analysis and simulation
- Waveform generation
- General N-dimensional filtering (median, order, convolution)
- Advanced interpolation and implications of sampling
- Applications of ndimage (morphology, segmentation, filtering, interpolation)
Statistics with Python
With the NumPy and SciPy extensions, Python can be used to do sophisticated statistical calculations. This one-day module will illustrate by example and exercises how to use tools in Python to do statistics. Topics to be covered include:
- An interface to continuous and discrete random variable objects including capability to construct pdf, cdf, and random variates
- How to simulate arbitrary discrete RVs
- Tools and techniques for Monte Carlo simulation
- Regression and curve fitting
- A variety of statistical tests
- Time series analysis
- Bayesian analysis of data
Optimization with Python
Many problems in science and engineering have an optimization step as a core component. In this course, techniques and tips for optimization using Python are taught. Because no optimization method is appropriate for every problem, each optimization method is prefaced by a description of the method and when it is appropriate to use. Methods covered in this course include:
Unconstrained
- Nelder-Mead Simplex
- Powell's level-set
- Polak-Ribiere non-linear conjugate gradient
- Quasi-Newton Broyden-Fletcher-Goldbarg-Shanno (BFGS)
- Line-search Newton CG
- Introduction to Trust Region Methods
- Levenburg-Marquardt
- Line search using strong Wolfe conditions
Constrained
- L-BFGS-B
- Truncated Newton
- Constrained Optimization by Linear Approximation
- Sequential Least Squares Programming
- Non-negative least-squares
Global optimizers
- Brute Force
- Simulated Annealing
- Introduction to Monte Carlo methods
Additional optimization resources
- Root-finding and its relationship to optimization
- CVXOPT
- OpenOpt
Reading and Writing Technical Data
The beginning and end of any data-processing workflow is data input and output. One of the strengths of Python and its many extension modules is that it can be very easy to read and write arbitrary binary and ascii data files. In addition, there are many specialized modules for reading and writing all kinds of data. In this module you will learn best-practice methods for reading and writing both ascii and binary data efficiently. In addition, the reading and writing of specialized data sets will be covered from the following list:
- Excel
- HDF
- Web
- NetCDF
- PyTables
- MATLAB
- SQLite and integration with other databases
Interfacing with C / C++ and Fortran
One of Python's greatest features is its ability to integrate seamlessly with C, C++, and Fortran. In this module you will learn how to use a variety of tools that have emerged for efficiently integrating with legacy code as well as optimizing new code with compiled modules. This module extends the material covered on the third day of the Python for Scientists and Engineers course. Topics to be covered can be modified to suit participants interest but can include:
- Integrating with Fortran using f2py
- Integrating legacy C / C++ code using SWIG
- In-lining C/C++ in a Python application using weave
- Calling arbitrary shared-libraries with ctypes
- Creating new extension modules with Cython
- Overview of other tools
- Use of the NumPy C-API
- Managing memory and dealing with C++ objects
Introduction to UIs and Visualization for Scientific Applications
This one day course is a condensed version of portions of the 3-day course which covers just the basics of Traits and Chaco. Students will learn the basics of Traits and how to build simple interactive visualizations with Chaco. Topics included:
Traits
- Notification
- Visualization
- Validation
- Initialization
- Delegation
Chaco
- Integration into Traits UI
- Scatter and line plots
- Image plots
- Containers for layout
- Simple tool creation for event handling
- Introduction to overlays
MultiProcessing / Parallel Processing
Some approaches to concurrency are not appropriate in Python because of CPython's Global Interpreter Lock. In this 1/2-day course, techniques for creating concurrent programs with Python are discussed particularly as they relate to task parallel (embarassingly parallel) problems. We cover both on-machine as well as cluster-based parallel processing.
- Subprocess
- Multiprocessing
- IPython kernel
- Additional modules
- mpi4py
- parallel python (pp)
- rthread
Linear Algebra
NumPy and SciPy provide a rich array of tools for solving sophisticated linear algebra problems. Tools for small dense systems as well as large sparse systems are available.
- Matrix objects: sparse and dense
- Matrix Decompositions: eigenvector, qr, lu, schur, svd, etc.
- Matrix Functions
- Solving Linear Systems
- Iterative Solvers: cgs, qmr, gmres, bicg, bicgstab
- Raw Interface to LAPACK
- Raw Interface to BLAS
- Speeding up linear algebra with vendor-tuned BLAS
Migrating from MATLAB to Python (1/2-day module + 1/2-day consulting)
With Python's high-level of expressiveness and expanding warehouse of libraries and scientific modules, many scientists and engineers are finding that they can replace their use of Matlab with Python plus extensions. This 1-day course is a combination of 1/2-day of training and 1/2-day of customer specific migration consulting. It provides guidance specific to people transitioning from Matlab to Python. Topics for the 1/2-day of training include:
- Reading and writing .mat files in Python
- Translating typical Matlab commands to Python equivalents
- Toolbox equivalents in Python
- How to manage any gaps in functionality
- Getting the most out of available documentation
- Subtle differences between Matlab's matrices and NumPy's arrays
- Porting .mex extensions
- Tips and tricks
- Understanding and exploiting Python's strengths
- Plotting with matplotlib
- Brief introduction to Python UI construction with the Enthought Tool Suite
Tour of Python Libraries
One of Python's strengths is the vast array of Python libraries that are available both in the standard library and in distributions like the Enthought Python Distribution. This one-day course presents the most commonly used tools such as those in the following incomplete list:
- re: regular expressions
- os, sys, os.path, shutil: system manipulation and filesystem operations
- datetime: date and time manipulations
- math, cmath: math on floats and complex numbers
- decimal, fraction: arbitrary precision float and rational numbers
- urllib2: module for accessing URLs
- struct: module for accessing raw binary data
- httplib, ftplib, socket, poplib, email: modules for internet protocols
- gzip, bz2, zipfile, tarfile: compression and archiving formats
- csv, netrc, json, config, xml: reading and writing basic file formats
- htmlib, BeautifulSoup: parsing HTML
- profile, cProfile, timeit: Python profilers
- collections, heapq, bisect, blist: CS algorithms and data structures
- email, smtplib: email messaging including MIME types
- threading, Queue, subprocess: introduction to concurrency
- pickle, cPickle: object serialization and persistence
- argparse: parsing command line arguments
- sqlite3, SQLAlchemy: database integration
Software Craftmanship in Python
The art of computer programming develops in concert with the tools available for coding. This course reviews important concepts from software engineering and places them in the context of coding in Python. This course can be targeted particularly towards a technical audience or developers who interact with a technical audience. Participants will receive guidance and experience to help improve the quality of their code.
- Coding modes and basic concepts
- Naming variables
- Documenting code
- Coding standards
- Python programming style
- Code evolution
- Testing code
Consultation (1/2-day)
This module provides an opportunity for students to work with experts on a coding project of their choosing. The instructor and/or additional members of the Enthought development team will work with students for half a day to review design ideas, offer suggestions, and even pitch in on development
