You are now familiar with **PyAutoLens** and have a clear understanding of lens modeling. In this chapter, we'll
introduce pipelines, a concept we mentioned many times in the previous chapter. Pipelines allow us to generically link
phases together, so that we can seamlessly navigate the complex non-linear parameter spaces that come when fitting
realistic lens models.

In this chapter, every tutorial will come as two files, a Juypter notebook 'pipeline_runner' and a python script which
is the pipeline itself. For each tutorial, begin with the pipeline runner file. Midway through the tutorial, you'll be
told to checkout the pipeline script itself, before finishing the tutorial by returning to the pipeline runner.

In the previous chapter, I preloaded config files so that your non-linear searches ran in a relatively short space
of time. In this chapter, I'm not going to do that. Writing pipelines is all about understanding how to balance
non-linear parameter space complexity with run-time. So, unfortunately, the non-linear searches in this chapter may take
a while to run, but that's the point. Its time you get an intuition for when lens modeling starts to become slow, and
how one can go about speeding it up (we will, of course, be using the tricks I disucssed in the previous chapter).

Also, be sure to checkout the on-the-fly output I discussed in the summary of chapter 2 (checkout this summary now
if you skipped it!)

With these pipelines, you'll be able to:

1) Fit a lens mass model and source light model to an image of a strongly lensed source.
2) Additionally fit the lens galaxy's light, if it is present.
3) Write customized pipelines for strong lens systems with multiple lens galaxies or source galaxies.
4) Customize pipelines such that the priors on parameters during the fit are adjusted to provide a more robust or
   efficient fit.