<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Rob Siegwart - Python</title><link href="https://www.robsiegwart.com/" rel="alternate"/><link href="https://www.robsiegwart.com/feeds/python.atom.xml" rel="self"/><id>https://www.robsiegwart.com/</id><updated>2022-04-11T00:00:00-05:00</updated><entry><title>Python @staticmethod, @classmethod</title><link href="https://www.robsiegwart.com/python-staticmethod-classmethod.html" rel="alternate"/><published>2021-06-09T00:00:00-05:00</published><updated>2021-06-09T00:00:00-05:00</updated><author><name>Rob Siegwart</name></author><id>tag:www.robsiegwart.com,2021-06-09:/python-staticmethod-classmethod.html</id><summary type="html">&lt;p class="first last"&gt;Overview of Python's staticmethod and classmethod decorators.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;While regular class methods take in the class instance as the first parameter,
&lt;tt class="docutils literal"&gt;&amp;#64;classmethod&lt;/tt&gt; and &lt;tt class="docutils literal"&gt;&amp;#64;staticmethod&lt;/tt&gt; are available in Python to create class methods
with different behavior and usage.&lt;/p&gt;
&lt;div class="section" id="staticmethod"&gt;
&lt;h2&gt;&amp;#64;staticmethod&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;does not take in the class or the instance as the implicit first parameter&lt;/li&gt;
&lt;li&gt;can be called on either the class or an instance&lt;/li&gt;
&lt;li&gt;cannot access class or instance properties&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A typical usage might be to store any general utility function to the class,
such as when the arguments have nothing to do with the class or its instances.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;Foo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nd"&gt;@staticmethod&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;

&lt;span class="n"&gt;Foo&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="classmethod"&gt;
&lt;h2&gt;&amp;#64;classmethod&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;takes the class in as the implicit first parameter&lt;/li&gt;
&lt;li&gt;can be called on either the class or an instance&lt;/li&gt;
&lt;li&gt;has access to class properties&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A typical usage might be to create new class instances with some alternative
call signature:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;Foo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;

    &lt;span class="nd"&gt;@classmethod&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;bar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;cls&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;cls&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;standard&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Foo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;alternate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Foo&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</content><category term="Python"/><category term="python"/></entry><entry><title>Easily Zip Ghost Themes with Python</title><link href="https://www.robsiegwart.com/easily-zip-ghost-themes-with-python.html" rel="alternate"/><published>2021-06-01T00:00:00-05:00</published><updated>2022-04-11T00:00:00-05:00</updated><author><name>Rob Siegwart</name></author><id>tag:www.robsiegwart.com,2021-06-01:/easily-zip-ghost-themes-with-python.html</id><summary type="html">&lt;p&gt;Previous iterations of this site used the Ghost blogging platform which utilized
a custom theme. In order to upload it to the Ghost application a zipped folder
of the theme is required. To save mouse clicks and keyboard strokes, I wrote a
Python script to zip the theme files and …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Previous iterations of this site used the Ghost blogging platform which utilized
a custom theme. In order to upload it to the Ghost application a zipped folder
of the theme is required. To save mouse clicks and keyboard strokes, I wrote a
Python script to zip the theme files and save out a .zip file with the version
included in the filename.&lt;/p&gt;
&lt;p&gt;For Ghost, the theme version is set in the &lt;tt class="docutils literal"&gt;package.json&lt;/tt&gt; and &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;package-lock.json&lt;/span&gt;&lt;/tt&gt;
files for it to be recognized in the Ghost admin. The Python script below gets
the version value from &lt;tt class="docutils literal"&gt;package.json&lt;/tt&gt; and includes it in the zipped file name.&lt;/p&gt;
&lt;p&gt;The Python script is placed in the directory to be zipped and some variables are
set:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;BASE_NAME&lt;/tt&gt; - base name of the output zip file with the output name being
&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;[BASE_NAME]-[VERSION].zip&lt;/span&gt;&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;OUTDIR&lt;/tt&gt; - local output directory name for the resulting zip file&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;REMOVE_DIRS&lt;/tt&gt; and &lt;tt class="docutils literal"&gt;REMOVE_FILES&lt;/tt&gt; - lists of directories and files, respectively,
to exclude in the resulting zip file&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Then, running this file compiles the files in the current directory and all
subdirectories with the exceptions listed in &lt;tt class="docutils literal"&gt;REMOVE_DIRS&lt;/tt&gt; and &lt;tt class="docutils literal"&gt;REMOVE_FILES&lt;/tt&gt; and
places an named zip file in the directory specified in &lt;tt class="docutils literal"&gt;OUTDIR&lt;/tt&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;glob&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;zipfile&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;json&lt;/span&gt;

&lt;span class="n"&gt;BASE_NAME&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;my_zip_file&amp;#39;&lt;/span&gt;
&lt;span class="n"&gt;OUTDIR&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Zipped&amp;#39;&lt;/span&gt;
&lt;span class="n"&gt;REMOVE_DIRS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Zipped&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;.vscode&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;.git&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;REMOVE_FILES&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;VERSION&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;zip.py&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;routes.yaml&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;package.json&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;packagejson&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;version&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;packagejson&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;version&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;theme_files&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;glob&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;glob&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;*&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;theme_files&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;theme_files&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;REMOVE_DIRS&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;REMOVE_FILES&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;exists&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;OUTDIR&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;mkdir&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;OUTDIR&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nb"&gt;zip&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;zipfile&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ZipFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;OUTDIR&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;BASE_NAME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s1"&gt;-&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;version&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s1"&gt;.zip&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;mode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;w&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;compression&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;zipfile&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ZIP_DEFLATED&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;zipdir&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;directory&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dirs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;files&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;walk&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;directory&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;files&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="nb"&gt;zip&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="nb"&gt;dir&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;dirs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;zipdir&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;dir&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;theme_files&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;isdir&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;zipdir&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nb"&gt;zip&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nb"&gt;zip&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
</content><category term="Python"/><category term="python"/></entry><entry><title>matplotlib Quick Ref</title><link href="https://www.robsiegwart.com/matplotlib-quick-ref.html" rel="alternate"/><published>2021-04-03T00:00:00-05:00</published><updated>2021-05-25T00:00:00-05:00</updated><author><name>Rob Siegwart</name></author><id>tag:www.robsiegwart.com,2021-04-03:/matplotlib-quick-ref.html</id><summary type="html"/><content type="html">&lt;div class="section" id="preliminaries"&gt;
&lt;h2&gt;Preliminaries&lt;/h2&gt;
&lt;p&gt;To import matplotlib, the recommended way is:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;matplotlib.pyplot&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;plt&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="basic-plotting-with-plt"&gt;
&lt;h2&gt;Basic Plotting with plt&lt;/h2&gt;
&lt;p&gt;The imported plt can be used for interactive and basic usage, similar to MATLAB.
A typical workflow might be:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;Assemble your data&lt;/li&gt;
&lt;li&gt;Create a plot using one of the plot types&lt;/li&gt;
&lt;li&gt;Add options, legends, axes configurations, annotations using &lt;tt class="docutils literal"&gt;plt.*&lt;/tt&gt; methods&lt;/li&gt;
&lt;li&gt;Call &lt;tt class="docutils literal"&gt;plt.show()&lt;/tt&gt; to show the plot (may or may not be needed depending on the
environment/software you are using)&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;See &lt;a class="reference external" href="https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.html"&gt;here&lt;/a&gt; for
the full list of methods and API.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="some-common-methods"&gt;
&lt;h2&gt;Some Common Methods&lt;/h2&gt;
&lt;div class="section" id="plot-types"&gt;
&lt;h3&gt;Plot types&lt;/h3&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;plt.plot&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;plt.bar&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;plt.pie&lt;/tt&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="annotations"&gt;
&lt;h3&gt;Annotations&lt;/h3&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;plt.axhline&lt;/tt&gt;, &lt;tt class="docutils literal"&gt;plt.axvline&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;plt.arrow&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;plt.annotate&lt;/tt&gt;, &lt;tt class="docutils literal"&gt;plt.text&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;plt.title&lt;/tt&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="axis"&gt;
&lt;h3&gt;Axis&lt;/h3&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;plt.xlabel&lt;/tt&gt;, &lt;tt class="docutils literal"&gt;plt.ylabel&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;plt.xticks&lt;/tt&gt;, &lt;tt class="docutils literal"&gt;plt.yticks&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;plt.xlim&lt;/tt&gt;, &lt;tt class="docutils literal"&gt;plt.ylim&lt;/tt&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="object-approach"&gt;
&lt;h2&gt;Object Approach&lt;/h2&gt;
&lt;p&gt;This approach is initiated by calling the &lt;a class="reference external" href="https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.subplots.html#matplotlib.pyplot.subplots"&gt;subplots()&lt;/a&gt;
function with returns separated &lt;a class="reference external" href="https://matplotlib.org/stable/api/_as_gen/matplotlib.figure.Figure.html"&gt;Figure&lt;/a&gt; and
&lt;a class="reference external" href="https://matplotlib.org/stable/api/axes_api.html"&gt;Axes&lt;/a&gt; objects, allowing direct access to each respective object:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;fig&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ax&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;subplots&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This function also allows separate figures and multi-axis figures to be created
and assigned to separate variables:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;fig1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ax1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;subplots&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;fig2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ax2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;subplots&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Additionally, multiple axes (i.e. plots) in one figure can be created with &lt;tt class="docutils literal"&gt;ncols&lt;/tt&gt;
and &lt;tt class="docutils literal"&gt;nrows&lt;/tt&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;fig&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ax1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ax2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;subplots&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nrows&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ncols&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Use the &lt;tt class="docutils literal"&gt;sharey&lt;/tt&gt; and &lt;tt class="docutils literal"&gt;sharex&lt;/tt&gt; arguments to share x or y axes between subplots:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;fig&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ax1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ax2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;subplots&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nrows&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ncols&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sharey&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Plot calls may then be used on the &lt;tt class="docutils literal"&gt;Axes&lt;/tt&gt; object:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;ax1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;plot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;To save the plot to a file:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;fig1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;savefig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;my_figure.png&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;To show the plot, call &lt;tt class="docutils literal"&gt;plt.show()&lt;/tt&gt; or &lt;tt class="docutils literal"&gt;fig1.show()&lt;/tt&gt; - which one is preferable
depends on the environment and context you are using as explained
&lt;a class="reference external" href="https://matplotlib.org/stable/api/_as_gen/matplotlib.figure.Figure.html#matplotlib.figure.Figure.show"&gt;here2&lt;/a&gt;.
Also, depending on your environment these may not not be needed at all (such
as in iPython/Jupyter).&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="configuring"&gt;
&lt;h2&gt;Configuring&lt;/h2&gt;
&lt;p&gt;Color, linestyle, linewidth, and other properties of the plot can be specified
in the plot call.&lt;/p&gt;
&lt;p&gt;See &lt;a class="reference external" href="https://matplotlib.org/stable/api/_as_gen/matplotlib.lines.Line2D.html#matplotlib.lines.Line2D"&gt;here3&lt;/a&gt;
for a full list of options.&lt;/p&gt;
&lt;div class="section" id="options"&gt;
&lt;h3&gt;Options&lt;/h3&gt;
&lt;table border="1" class="docutils"&gt;
&lt;colgroup&gt;
&lt;col width="30%" /&gt;
&lt;col width="70%" /&gt;
&lt;/colgroup&gt;
&lt;thead valign="bottom"&gt;
&lt;tr&gt;&lt;th class="head"&gt;Property&lt;/th&gt;
&lt;th class="head"&gt;Keyword argument&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody valign="top"&gt;
&lt;tr&gt;&lt;td&gt;Line color&lt;/td&gt;
&lt;td&gt;&lt;tt class="docutils literal"&gt;color&lt;/tt&gt; or &lt;tt class="docutils literal"&gt;c&lt;/tt&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Line width&lt;/td&gt;
&lt;td&gt;&lt;tt class="docutils literal"&gt;linewidth&lt;/tt&gt; or &lt;tt class="docutils literal"&gt;lw&lt;/tt&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a class="reference external" href="https://matplotlib.org/stable/api/_as_gen/matplotlib.lines.Line2D.html#matplotlib.lines.Line2D.set_linestyle"&gt;Line style&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;tt class="docutils literal"&gt;linestyle&lt;/tt&gt; or &lt;tt class="docutils literal"&gt;ls&lt;/tt&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a class="reference external" href="https://matplotlib.org/stable/api/markers_api.html#module-matplotlib.markers"&gt;Marker style&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;tt class="docutils literal"&gt;marker&lt;/tt&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="section" id="colors"&gt;
&lt;h3&gt;Colors&lt;/h3&gt;
&lt;p&gt;Colors may be entered in a
&lt;a class="reference external" href="https://matplotlib.org/stable/tutorials/colors/colors.html"&gt;variety of ways&lt;/a&gt; - string name,
RGB tuple, HEX string, etc. A range of color names are included in matplotlib by
default. Basic colors are available in addition to those named in the
&lt;a class="reference external" href="https://en.wikipedia.org/wiki/X11_color_names#Color_name_chart"&gt;X window system&lt;/a&gt; and the
&lt;a class="reference external" href="https://xkcd.com/color/rgb/"&gt;xkcd color survey&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Basic colors include: &lt;tt class="docutils literal"&gt;blue&lt;/tt&gt;/ &lt;tt class="docutils literal"&gt;b&lt;/tt&gt;, &lt;tt class="docutils literal"&gt;green&lt;/tt&gt;/ &lt;tt class="docutils literal"&gt;g&lt;/tt&gt;, &lt;tt class="docutils literal"&gt;red&lt;/tt&gt;/&lt;cite&gt;r&lt;/cite&gt;, &lt;tt class="docutils literal"&gt;cyan&lt;/tt&gt;/ &lt;tt class="docutils literal"&gt;c&lt;/tt&gt;,
&lt;tt class="docutils literal"&gt;magenta&lt;/tt&gt;/ &lt;tt class="docutils literal"&gt;m&lt;/tt&gt;, &lt;tt class="docutils literal"&gt;yellow&lt;/tt&gt;/ &lt;tt class="docutils literal"&gt;y&lt;/tt&gt;, &lt;tt class="docutils literal"&gt;black&lt;/tt&gt;/ &lt;tt class="docutils literal"&gt;k&lt;/tt&gt;, &lt;tt class="docutils literal"&gt;white&lt;/tt&gt;/ &lt;tt class="docutils literal"&gt;w&lt;/tt&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="legend"&gt;
&lt;h3&gt;Legend&lt;/h3&gt;
&lt;p&gt;Add a legend by calling &lt;a class="reference external" href="https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.legend.html#matplotlib.axes.Axes.legend"&gt;ax.legend()&lt;/a&gt;.
For the legend to have names, labels are typically first specified in the plot
call with the legend keyword argument:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;ax1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;plot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;legend&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Velocity&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Alternatively, if you store a reference or get the line object from an existing
axes, you can call:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set_label&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Then, when calling &lt;tt class="docutils literal"&gt;ax.legend()&lt;/tt&gt; the legend generator knows names for each line.
These methods are preferred since the names and data are linked together.&lt;/p&gt;
&lt;p&gt;Placement of the legend can be set to 9 points forming a grid pattern over the
axes, by setting the &lt;tt class="docutils literal"&gt;loc&lt;/tt&gt; argument to a combination of &lt;tt class="docutils literal"&gt;upper&lt;/tt&gt;, &lt;tt class="docutils literal"&gt;lower&lt;/tt&gt;, &lt;tt class="docutils literal"&gt;left&lt;/tt&gt;, &lt;tt class="docutils literal"&gt;right&lt;/tt&gt;,
&lt;tt class="docutils literal"&gt;center&lt;/tt&gt; (for example &lt;tt class="docutils literal"&gt;upper left&lt;/tt&gt;). &lt;tt class="docutils literal"&gt;center&lt;/tt&gt; only places it in the middle of both
directions. &lt;tt class="docutils literal"&gt;best&lt;/tt&gt; places the legend in the area with the minimum amount of
overlap with other elements.&lt;/p&gt;
&lt;p&gt;See the API for the many other available options.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="other-things"&gt;
&lt;h2&gt;Other Things&lt;/h2&gt;
&lt;div class="section" id="grids"&gt;
&lt;h3&gt;Grids&lt;/h3&gt;
&lt;p&gt;&lt;a class="reference external" href="https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.grid.html#matplotlib.axes.Axes.grid"&gt;Turning on grids&lt;/a&gt;
can be achieved with:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;grid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;which&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;both&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The which argument specifies which axis to turn them on for (&lt;tt class="docutils literal"&gt;x&lt;/tt&gt;, &lt;tt class="docutils literal"&gt;y&lt;/tt&gt;, or &lt;tt class="docutils literal"&gt;both&lt;/tt&gt;).&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="styles"&gt;
&lt;h3&gt;Styles&lt;/h3&gt;
&lt;p&gt;There are some &lt;a class="reference external" href="https://matplotlib.org/stable/gallery/style_sheets/style_sheets_reference.html"&gt;predefined styles&lt;/a&gt;
to use in your plots. The style names for these include:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;Solarize_Light2&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;_classic_test_patch&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;bmh&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;classic&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;dark_background&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;fast&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;fivethirtyeight&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;ggplot&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;grayscale&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;seaborn&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;seaborn-bright&lt;/span&gt;&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;seaborn-colorblind&lt;/span&gt;&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;seaborn-dark&lt;/span&gt;&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;seaborn-dark-palette&lt;/span&gt;&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;seaborn-darkgrid&lt;/span&gt;&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;seaborn-deep&lt;/span&gt;&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;seaborn-muted&lt;/span&gt;&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;seaborn-notebook&lt;/span&gt;&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;seaborn-paper&lt;/span&gt;&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;seaborn-pastel&lt;/span&gt;&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;seaborn-poster&lt;/span&gt;&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;seaborn-talk&lt;/span&gt;&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;seaborn-ticks&lt;/span&gt;&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;seaborn-white&lt;/span&gt;&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;seaborn-whitegrid&lt;/span&gt;&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;tableau-colorblind10&lt;/span&gt;&lt;/tt&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A style can be turned in your session via:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;style&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;To activate a style for just a specific plot, you can use the with mechanism:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;style&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;plot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Or,&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;style&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;fig&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;ax&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;subplots&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;plot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="square-1-1-plots"&gt;
&lt;h3&gt;Square/1:1 plots&lt;/h3&gt;
&lt;p&gt;Use &lt;a class="reference external" href="https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.set_aspect.html#matplotlib.axes.Axes.set_aspect"&gt;Axes.set_aspect('equal')&lt;/a&gt;
to make the axes scales have a 1:1 ratio.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><category term="Python"/><category term="python"/></entry><entry><title>reStructuredText Elements</title><link href="https://www.robsiegwart.com/restructuredtext-quick-ref.html" rel="alternate"/><published>2020-10-26T00:00:00-05:00</published><updated>2021-05-24T00:00:00-05:00</updated><author><name>Rob Siegwart</name></author><id>tag:www.robsiegwart.com,2020-10-26:/restructuredtext-quick-ref.html</id><summary type="html">&lt;p&gt;&lt;a class="reference external" href="https://docutils.sourceforge.io/docs/ref/rst/restructuredtext.html"&gt;reStructuredText&lt;/a&gt;
is a great markup language used in the Python world but can also be used for general text
activities. It has more specificity in its design and has more functionality
when compared to others in its class such as Markdown.&lt;/p&gt;
&lt;p&gt;It is the format for content for this website …&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;a class="reference external" href="https://docutils.sourceforge.io/docs/ref/rst/restructuredtext.html"&gt;reStructuredText&lt;/a&gt;
is a great markup language used in the Python world but can also be used for general text
activities. It has more specificity in its design and has more functionality
when compared to others in its class such as Markdown.&lt;/p&gt;
&lt;p&gt;It is the format for content for this website since I use the Pelican static
site generator which natively uses RST format for writing content.&lt;/p&gt;
&lt;p&gt;The below is a side-by-side comparison of most of the reStructuredText
elements and their equivalent when processed; in this case pandoc was used to
convert from RST to html. This list also does not include all forms of each
element - for the complete specification see the link above.&lt;/p&gt;
&lt;ul class="rst_quick_ref_links_index"&gt;
  &lt;li&gt;&lt;a href="#inline_markup"&gt;inline markup&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="#paragraph"&gt;paragraph&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="#bullet_list"&gt;bullet list&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="#enumerated_list"&gt;enumerated list&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="#definition_list"&gt;definition list&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="#field_list&lt;"&gt;field list&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="#literal block"&gt;literal block&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="#line_block"&gt;line block&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="#block_quote"&gt;block quote&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="#table_simple"&gt;table (simple)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="#table_grid"&gt;table (grid)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="#footnotes"&gt;footnotes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="#citation"&gt;citation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="#hyperlink_internal"&gt;hyperlink (internal)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="#hyperlink_external"&gt;hyperlink (external)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="#hyperlink_embedded"&gt;hyperlink (embedded)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="#directive_substitution"&gt;directive substitution&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;table class="wide-table"&gt;
    &lt;thead&gt;
        &lt;tr&gt;
            &lt;th&gt;reStructuredText&lt;/th&gt;
            &lt;th&gt;Result&lt;/th&gt;
        &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
        &lt;tr id="inline_markup"&gt;
            &lt;td&gt;
                &lt;p class="rst_label"&gt;&lt;a href="https://docutils.sourceforge.io/docs/ref/rst/restructuredtext.html#inline-markup" target="_blank"&gt;inline markup&lt;/a&gt;&lt;/p&gt;
                &lt;pre&gt;*emphasis*

**strong emphasis**

`interpreted text`

``inline literal text``&lt;/pre&gt;
            &lt;/td&gt;
            &lt;td&gt;
                &lt;p&gt;&lt;em&gt;emphasis&lt;/em&gt;&lt;/p&gt;
                &lt;p&gt;&lt;strong&gt;strong emphasis&lt;/strong&gt;&lt;/p&gt;
                &lt;p&gt;&lt;span class="title-ref"&gt;interpreted text&lt;/span&gt;&lt;/p&gt;
                &lt;p&gt;&lt;code&gt;inline literal text&lt;/code&gt;&lt;/p&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr id="paragraph"&gt;
            &lt;td&gt;
                &lt;p class="rst_label"&gt;&lt;a href="https://docutils.sourceforge.io/docs/ref/rst/restructuredtext.html#paragraphs" target="_blank"&gt;paragraph&lt;/a&gt;&lt;/p&gt;
                &lt;pre&gt;Lorem ipsum dolor sit amet, consectetur
adipiscing elit. Pellentesque ornare
commodo est eget tempor. Pellentesque
vitae nulla velit.

Praesent non nisl id eros gravida
tempor eget in sapien. Curabitur
vestibulum dapibus placerat.&lt;/pre&gt;
            &lt;/td&gt;
            &lt;td&gt;
                &lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ornare commodo est eget tempor.
                    Pellentesque vitae nulla velit.&lt;/p&gt;

                &lt;p&gt;Praesent non nisl id eros gravida tempor eget in sapien. Curabitur vestibulum dapibus placerat.&lt;/p&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr id="bullet_list"&gt;
            &lt;td&gt;
                &lt;p class="rst_label"&gt;&lt;a href="https://docutils.sourceforge.io/docs/ref/rst/restructuredtext.html#bullet-lists" target="_blank"&gt;bullet list&lt;/a&gt;&lt;/p&gt;
                &lt;pre&gt;- Lorem ipsum dolor sit amet
- Pellentesque ornare
- Pellentesque vitae nulla
  gravida tempor eget in sapien
- Nunc euismod tellus turpis,
  efficitur non.&lt;/pre&gt;
            &lt;/td&gt;
            &lt;td&gt;
                &lt;ul&gt;
                    &lt;li&gt;Lorem ipsum dolor sit amet&lt;/li&gt;
                    &lt;li&gt;Pellentesque ornare&lt;/li&gt;
                    &lt;li&gt;Pellentesque vitae nulla gravida tempor eget in sapien&lt;/li&gt;
                    &lt;li&gt;Nunc euismod tellus turpis, efficitur non.&lt;/li&gt;
                &lt;/ul&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr id="enumerated_list"&gt;
            &lt;td&gt;
                &lt;p class="rst_label"&gt;&lt;a href="https://docutils.sourceforge.io/docs/ref/rst/restructuredtext.html#enumerated-lists" target="_blank"&gt;enumerated list&lt;/a&gt;&lt;/p&gt;
                &lt;pre&gt;A. Lorem ipsum dolor sit amet,
   consectetur adipiscing elit.
B. Pellentesque ornare commodo
C. Pellentesque vitae nulla
   gravida tempor eget in sapien

a. Lorem ipsum dolor sit amet,
   consectetur adipiscing elit.
b. Pellentesque ornare commodo

  i. Lorem ipsum dolor sit amet,
      consectetur adipiscing elit.
  ii. Pellentesque ornare commodo
      est eget tempor.&lt;/pre&gt;
            &lt;/td&gt;
            &lt;td&gt;
                &lt;ol type="A"&gt;
                    &lt;li&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit.&lt;/li&gt;
                    &lt;li&gt;Pellentesque ornare commodo&lt;/li&gt;
                    &lt;li&gt;Pellentesque vitae nulla gravida tempor eget in sapien&lt;/li&gt;
                &lt;/ol&gt;
                &lt;br&gt;
                &lt;ol type="a"&gt;
                    &lt;li&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit.&lt;/li&gt;
                    &lt;li&gt;Pellentesque ornare commodo
                        &lt;ol type="i"&gt;
                            &lt;li&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit.&lt;/li&gt;
                            &lt;li&gt;Pellentesque ornare commodo est eget tempor.&lt;/li&gt;
                        &lt;/ol&gt;
                    &lt;/li&gt;
                &lt;/ol&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr id="definition_list"&gt;
            &lt;td&gt;
                &lt;p class="rst_label"&gt;&lt;a href="https://docutils.sourceforge.io/docs/ref/rst/restructuredtext.html#definition-lists" target="_blank"&gt;definition list&lt;/a&gt;&lt;/p&gt;
                &lt;pre&gt;Lorem ipsum
    dolor sit amet

    consectetur adipiscing elit.

Pellentesque
    ornare commodo est eget tempor.&lt;/pre&gt;
            &lt;/td&gt;
            &lt;td&gt;
                &lt;dl&gt;
                    &lt;dt&gt;Lorem ipsum&lt;/dt&gt;
                    &lt;dd&gt;
                        &lt;p&gt;dolor sit amet&lt;/p&gt;
                        &lt;p&gt;consectetur adipiscing elit.&lt;/p&gt;
                    &lt;/dd&gt;
                    &lt;dt&gt;Pellentesque&lt;/dt&gt;
                    &lt;dd&gt;
                        &lt;p&gt;ornare commodo est eget tempor.&lt;/p&gt;
                    &lt;/dd&gt;
                &lt;/dl&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr id="field_list"&gt;
            &lt;td&gt;
                &lt;p class="rst_label"&gt;&lt;a href="https://docutils.sourceforge.io/docs/ref/rst/restructuredtext.html#field-lists" target="_blank"&gt;field list&lt;/a&gt;&lt;/p&gt;
                &lt;pre&gt;:Lorem ipsum:
    dolor sit amet

    consectetur adipiscing elit.

:Pellentesque:
    ornare commodo est eget tempor.

:Vestibulum:
    - vitae arcu ex
    - Fusce aliquet faucibus rutrum
    - Integer at tortor tellus&lt;/pre&gt;
            &lt;/td&gt;
            &lt;td&gt;
                &lt;dl&gt;
                    &lt;dt&gt;Lorem ipsum&lt;/dt&gt;
                    &lt;dd&gt;
                        &lt;p&gt;dolor sit amet&lt;/p&gt;
                        &lt;p&gt;consectetur adipiscing elit.&lt;/p&gt;
                    &lt;/dd&gt;
                    &lt;dt&gt;Pellentesque&lt;/dt&gt;
                    &lt;dd&gt;
                        &lt;p&gt;ornare commodo est eget tempor.&lt;/p&gt;
                    &lt;/dd&gt;
                    &lt;dt&gt;Vestibulum&lt;/dt&gt;
                    &lt;dd&gt;
                        &lt;ul&gt;
                            &lt;li&gt;vitae arcu ex&lt;/li&gt;
                            &lt;li&gt;Fusce aliquet faucibus rutrum&lt;/li&gt;
                            &lt;li&gt;Integer at tortor tellus&lt;/li&gt;
                        &lt;/ul&gt;
                    &lt;/dd&gt;
                &lt;/dl&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr id="literal_block"&gt;
            &lt;td&gt;
                &lt;p class="rst_label"&gt;&lt;a href="https://docutils.sourceforge.io/docs/ref/rst/restructuredtext.html#literal-blocks" target="_blank"&gt;literal block&lt;/a&gt;&lt;/p&gt;
                &lt;pre&gt;Duis imperdiet id orci quis consequat.
Nam in sem consequat, laoreet enim ut,
aliquet nibh. Sed vitae sem ipsum.
Aliquam nec gravida dolor. &lt;span class="highlighted"&gt;::

    Morbi mollis vitae mauris ac interdum.
    Pellentesque id posuere magna, fermentum
    Nam libero lacus, elementum eu faucibus
    aliquet, venenatis quis augue.

    Quisque rutrum arcu elit, sed tempor
    sed. Donec bibendum sit amet libero&lt;/span&gt;&lt;/pre&gt;
            &lt;/td&gt;
            &lt;td&gt;
                &lt;p&gt;Duis imperdiet id orci quis consequat. Nam in sem consequat, laoreet enim ut, aliquet nibh. Sed vitae
                    sem ipsum.
                    Aliquam nec gravida dolor. :&lt;/p&gt;
                &lt;pre&gt;Morbi mollis vitae mauris ac interdum.
Pellentesque id posuere magna, fermentum
Nam libero lacus, elementum eu faucibus
aliquet, venenatis quis augue.

Quisque rutrum arcu elit, sed tempor
sed. Donec bibendum sit amet libero&lt;/pre&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr id="line_block"&gt;
            &lt;td&gt;
                &lt;p class="rst_label"&gt;&lt;a href="https://docutils.sourceforge.io/docs/ref/rst/restructuredtext.html#line-blocks" target="_blank"&gt;line block&lt;/a&gt;&lt;/p&gt;
                &lt;pre&gt;| Duis imperdiet id orci quis consequat.
| Nam in sem consequat, laoreet enim ut
|
| Sed vitae sem ipsum. Aliquam nec
| mauris ac interdum. Pellentesque
| fermentum dapibus purus.
| eu faucibus aliquet&lt;/pre&gt;
            &lt;/td&gt;
            &lt;td&gt;
                &lt;div&gt;Duis imperdiet id orci quis consequat.&lt;br /&gt;
                    Nam in sem consequat, laoreet enim ut&lt;br /&gt;
                    &lt;br /&gt;
                    Sed vitae sem ipsum. Aliquam nec&lt;br /&gt;
                    mauris ac interdum. Pellentesque&lt;br /&gt;
                    fermentum dapibus purus.&lt;br /&gt;
                    eu faucibus aliquet
                &lt;/div&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr id="block_quote"&gt;
            &lt;td&gt;
                &lt;p class="rst_label"&gt;&lt;a href="https://docutils.sourceforge.io/docs/ref/rst/restructuredtext.html#block-quotes" target="_blank"&gt;block quote&lt;/a&gt;&lt;/p&gt;
                &lt;pre&gt;Duis imperdiet id orci quis consequat.
Nam in sem consequat, laoreet enim ut,

    &lt;span class="highlighted"&gt;Morbi mollis vitae mauris ac interdum.
    Pellentesque id posuere magna, fermentum dapibus purus.
    Nam libero lacus, elementum eu faucibus
    aliquet, venenatis quis augue.

    -- Morbi mollis&lt;/span&gt;
&lt;/pre&gt;
            &lt;/td&gt;
            &lt;td&gt;
                &lt;p&gt;Duis imperdiet id orci quis consequat. Nam in sem consequat, laoreet enim ut,&lt;/p&gt;
                &lt;blockquote&gt;
                    &lt;p&gt;Morbi mollis vitae mauris ac interdum. Pellentesque id posuere magna, fermentum dapibus purus.
                        Nam libero lacus,
                        elementum eu faucibus aliquet, venenatis quis augue.&lt;/p&gt;
                    &lt;p&gt;-- Morbi mollis&lt;/p&gt;
                &lt;/blockquote&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr id="table_simple"&gt;
            &lt;td&gt;
                &lt;p class="rst_label"&gt;&lt;a href="https://docutils.sourceforge.io/docs/ref/rst/restructuredtext.html#simple-tables" target="_blank"&gt;table (simple)&lt;/a&gt;&lt;/p&gt;
                &lt;pre&gt;================== =======================
Morbi mollis       vitae mauris
================== =======================
Pellentesque
id posuere magna   fermentum dapibus purus
Nam libero         aliquet, venenatis quis
================== =======================&lt;/pre&gt;
            &lt;/td&gt;
            &lt;td&gt;
                &lt;table&gt;
                    &lt;thead&gt;
                        &lt;tr&gt;
                            &lt;th&gt;Morbi mollis&lt;/th&gt;
                            &lt;th&gt;vitae mauris&lt;/th&gt;
                        &lt;/tr&gt;
                    &lt;/thead&gt;
                    &lt;tbody&gt;
                        &lt;tr&gt;
                            &lt;td&gt;Pellentesque&lt;/td&gt;
                            &lt;td&gt;&lt;/td&gt;
                        &lt;/tr&gt;
                        &lt;tr&gt;
                            &lt;td&gt;id posuere magna&lt;/td&gt;
                            &lt;td&gt;fermentum dapibus purus&lt;/td&gt;
                        &lt;/tr&gt;
                        &lt;tr&gt;
                            &lt;td&gt;Nam libero&lt;/td&gt;
                            &lt;td&gt;aliquet, venenatis quis&lt;/td&gt;
                        &lt;/tr&gt;
                    &lt;/tbody&gt;
                &lt;/table&gt;

            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr id="table_grid"&gt;
            &lt;td&gt;
                &lt;p class="rst_label"&gt;&lt;a href="https://docutils.sourceforge.io/docs/ref/rst/restructuredtext.html#grid-tables" target="_blank"&gt;table (grid)&lt;/a&gt;&lt;/p&gt;
                &lt;pre&gt;+------------------+---------------------------+
| Morbi mollis     | vitae mauris              |
+==================+===========================+
| Pellentesque     |                           |
+------------------+---------------------------+
| id posuere magna | fermentum dapibus purus   |
+------------------+---------------------------+
| Nam libero       | aliquet, venenatis quis   |
+------------------+---------------------------+&lt;/pre&gt;
            &lt;/td&gt;
            &lt;td&gt;
                &lt;table&gt;
                    &lt;thead&gt;
                        &lt;tr&gt;
                            &lt;th&gt;Morbi mollis&lt;/th&gt;
                            &lt;th&gt;vitae mauris&lt;/th&gt;
                        &lt;/tr&gt;
                    &lt;/thead&gt;
                    &lt;tbody&gt;
                        &lt;tr&gt;
                            &lt;td&gt;Pellentesque&lt;/td&gt;
                            &lt;td&gt;&lt;/td&gt;
                        &lt;/tr&gt;
                        &lt;tr&gt;
                            &lt;td&gt;id posuere magna,&lt;/td&gt;
                            &lt;td&gt;fermentum dapibus purus&lt;/td&gt;
                        &lt;/tr&gt;
                        &lt;tr&gt;
                            &lt;td&gt;Nam libero&lt;/td&gt;
                            &lt;td&gt;aliquet, venenatis quis&lt;/td&gt;
                        &lt;/tr&gt;
                    &lt;/tbody&gt;
                &lt;/table&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr id="footnotes"&gt;
            &lt;td&gt;
                &lt;p class="rst_label"&gt;&lt;a href="https://docutils.sourceforge.io/docs/ref/rst/restructuredtext.html#footnotes" target="_blank"&gt;footnotes&lt;/a&gt;&lt;/p&gt;
                &lt;pre&gt;Lorem ipsum dolor sit amet, consectetur
adipiscing elit. Pellentesque ornare
commodo est eget tempor. Pellentesque
vitae nulla velit &lt;span class="highlighted"&gt;[1]_&lt;/span&gt;.

Praesent non nisl id eros gravida
tempor eget in sapien. Curabitur
vestibulum dapibus placerat &lt;span class="highlighted"&gt;[2]_&lt;/span&gt;.


&lt;span class="highlighted"&gt;.. [1] Lorem ipsum dolor sit amet
.. [2] Duis imperdiet id orci quis consequat.&lt;/span&gt;&lt;/pre&gt;
            &lt;/td&gt;
            &lt;td&gt;
                &lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ornare commodo est eget tempor.
                    Pellentesque
                    vitae nulla velit&lt;a href="#fn1" id="fnref1" role="doc-noteref"&gt;&lt;sup&gt;1&lt;/sup&gt;&lt;/a&gt;.&lt;/p&gt;
                &lt;p&gt;Praesent non nisl id eros gravida tempor eget in sapien. Curabitur vestibulum dapibus placerat&lt;a
                        href="#fn2" id="fnref2" role="doc-noteref"&gt;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt;.&lt;/p&gt;
                &lt;section class="footnotes" role="doc-endnotes"&gt;
                    &lt;hr /&gt;
                    &lt;ol&gt;
                        &lt;li id="fn1" role="doc-endnote"&gt;
                            &lt;p&gt;Lorem ipsum dolor sit amet&lt;a href="#fnref1" class="footnote-back"
                                    role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/p&gt;
                        &lt;/li&gt;
                        &lt;li id="fn2" role="doc-endnote"&gt;
                            &lt;p&gt;Duis imperdiet id orci quis consequat.&lt;a href="#fnref2" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/p&gt;
                        &lt;/li&gt;
                    &lt;/ol&gt;
                &lt;/section&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr id="citation"&gt;
            &lt;td&gt;
                &lt;p class="rst_label"&gt;&lt;a href="https://docutils.sourceforge.io/docs/ref/rst/restructuredtext.html#citations" target="_blank"&gt;citations&lt;/a&gt;&lt;/p&gt;
                &lt;pre&gt;Lorem ipsum dolor sit amet, consectetur
adipiscing elit. Pellentesque ornare
commodo est eget tempor. Pellentesque
vitae nulla velit &lt;span class="highlighted"&gt;[Lorem1]_&lt;/span&gt;.

&lt;span class="highlighted"&gt;.. [Lorem1] Lorem ipsum dolor sit amet&lt;/span&gt;&lt;/pre&gt;
            &lt;/td&gt;
            &lt;td&gt;
                &lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ornare commodo est eget tempor.
                    Pellentesque
                    vitae nulla velit &lt;a href="#Lorem1"&gt;[Lorem1]&lt;/a&gt;.&lt;/p&gt;
                &lt;div id="citations"&gt;
                    &lt;dl&gt;
                        &lt;dt&gt;&lt;span id="Lorem1"&gt;Lorem1&lt;/span&gt;&lt;/dt&gt;
                        &lt;dd&gt;
                            &lt;p&gt;Lorem ipsum dolor sit amet&lt;/p&gt;
                        &lt;/dd&gt;
                    &lt;/dl&gt;
                &lt;/div&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr id="hyperlink_internal"&gt;
            &lt;td&gt;
                &lt;p class="rst_label"&gt;&lt;a href="https://docutils.sourceforge.io/docs/ref/rst/restructuredtext.html#hyperlink-targets" target="_blank"&gt;hyperlink (internal)&lt;/a&gt;&lt;/p&gt;
                &lt;pre&gt;Lorem ipsum dolor sit amet, consectetur
adipiscing elit. Pellentesque ornare
commodo est eget tempor. Pellentesque
vitae nulla velit.

&lt;span class="highlighted"&gt;.. _internal1:&lt;/span&gt;

The previous line specifies a hyperlink
target which links to this paragraph by
giving it an id.

Later on to link to this paragraph,
use &lt;span class="highlighted"&gt;internal1_.&lt;/span&gt;&lt;/pre&gt;
            &lt;/td&gt;
            &lt;td&gt;
                &lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ornare commodo est eget tempor.
                    Pellentesque
                    vitae nulla velit.&lt;/p&gt;
                &lt;div id="internal1"&gt;
                    &lt;p&gt;The previous line specifies a hyperlink target which links to this paragraph by giving it an id.
                    &lt;/p&gt;
                &lt;/div&gt;
                &lt;p&gt;Later on to link to this paragraph, use &lt;a href="#internal1"&gt;internal1&lt;/a&gt;.&lt;/p&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr id="hyperlink_external"&gt;
            &lt;td&gt;
                &lt;p class="rst_label"&gt;&lt;a href="https://docutils.sourceforge.io/docs/ref/rst/restructuredtext.html#hyperlink-targets" target="_blank"&gt;hyperlink (external)&lt;/a&gt;&lt;/p&gt;
                &lt;pre&gt;Lorem ipsum dolor sit amet, consectetur
adipiscing elit. Pellentesque ornare
commodo est eget tempor. &lt;span class="highlighted"&gt;python_&lt;/span&gt;
pellentesque vitae nulla velit.

Praesent non nisl id eros gravida
tempor eget in sapien. Curabitur
vestibulum dapibus placerat
&lt;span class="highlighted"&gt;`asme home`_&lt;/span&gt;.

&lt;span class="highlighted"&gt;.. _python: https://python.org
.. _asme home: https://asme.org&lt;/span&gt;&lt;/pre&gt;
            &lt;/td&gt;
            &lt;td&gt;
                &lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ornare commodo est eget tempor.
                    &lt;a href="https://python.org"&gt;python&lt;/a&gt; pellentesque vitae nulla velit.&lt;/p&gt;
                &lt;p&gt;Praesent non nisl id eros gravida tempor eget in sapien. Curabitur vestibulum dapibus placerat &lt;a
                        href="https://asme.org"&gt;asme home&lt;/a&gt;.&lt;/p&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr id="hyperlink_embedded"&gt;
            &lt;td&gt;
                &lt;p class="rst_label"&gt;&lt;a href="https://docutils.sourceforge.io/docs/ref/rst/restructuredtext.html#hyperlink-targets" target="_blank"&gt;hyperlink (embedded)&lt;/a&gt;&lt;/p&gt;
                &lt;pre&gt;Click &lt;span class="highlighted"&gt;`here &amp;lt;https://asme.org&amp;gt;`_&lt;/span&gt; for the ASME
home page.&lt;/pre&gt;
            &lt;/td&gt;
            &lt;td&gt;
                &lt;p&gt;Click &lt;a href="https://asme.org"&gt;here&lt;/a&gt; for the ASME home page.&lt;/p&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr id="directive_substitution"&gt;
            &lt;td&gt;
                &lt;p class="rst_label"&gt;&lt;a href="https://docutils.sourceforge.io/docs/ref/rst/restructuredtext.html#substitution-references" target="_blank"&gt;directive substitution&lt;/a&gt;&lt;/p&gt;
                &lt;pre&gt;Lorem ipsum dolor sit amet, consectetur
adipiscing elit. &lt;span class="highlighted"&gt;|pellentesque|&lt;/span&gt; ornare
commodo est eget tempor. Pellentesque
vitae nulla velit.

Praesent non nisl id eros gravida
tempor eget in sapien. Curabitur
vestibulum dapibus placerat.

&lt;span class="highlighted"&gt;.. |pellentesque| math:: a^2 + xb^3&lt;/span&gt;&lt;/pre&gt;
            &lt;/td&gt;
            &lt;td&gt;
                &lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit.&lt;/p&gt;
                &lt;p&gt;&lt;em&gt;a&lt;/em&gt;&lt;sup&gt;2&lt;/sup&gt; + &lt;em&gt;x&lt;/em&gt;&lt;em&gt;b&lt;/em&gt;&lt;sup&gt;3&lt;/sup&gt;&lt;/p&gt;
                &lt;p&gt;ornare commodo est
                    eget tempor. Pellentesque vitae nulla velit.&lt;/p&gt;
                &lt;p&gt;Praesent non nisl id eros gravida tempor eget in sapien. Curabitur vestibulum dapibus placerat.&lt;/p&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;</content><category term="Python"/><category term="python"/></entry><entry><title>Merging and Watermarking PDF Files with Python</title><link href="https://www.robsiegwart.com/merging-and-watermarking-pdf-files-with-python.html" rel="alternate"/><published>2019-08-25T00:00:00-05:00</published><updated>2020-07-07T00:00:00-05:00</updated><author><name>Rob Siegwart</name></author><id>tag:www.robsiegwart.com,2019-08-25:/merging-and-watermarking-pdf-files-with-python.html</id><summary type="html">&lt;p&gt;There are many Python libraries available for working with PDF files. Here we
will perform merging and watermarking operations with the Python library
&lt;a class="reference external" href="https://github.com/pmaupin/pdfrw"&gt;pdfrw&lt;/a&gt;. This package is bundled in the WinPython
distribution.&lt;/p&gt;
&lt;p&gt;It is assumed that your path has been set to find the correct Python interpreter
such that pdfrw …&lt;/p&gt;</summary><content type="html">&lt;p&gt;There are many Python libraries available for working with PDF files. Here we
will perform merging and watermarking operations with the Python library
&lt;a class="reference external" href="https://github.com/pmaupin/pdfrw"&gt;pdfrw&lt;/a&gt;. This package is bundled in the WinPython
distribution.&lt;/p&gt;
&lt;p&gt;It is assumed that your path has been set to find the correct Python interpreter
such that pdfrw can be imported.&lt;/p&gt;
&lt;div class="section" id="merging"&gt;
&lt;h2&gt;Merging&lt;/h2&gt;
&lt;p&gt;A merging script can be created in only a few lines of code. Let's create a
script that will merge all of the PDF files within a directory, using a command
line argument to specify the output file name. Locate the script in the same
directory as the files, and it will grab all of the files with a .pdf extension
and then combine those (in the same order as if issuing an 'ls' command) into a
single output PDF file.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# merge.py&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;sys&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;glob&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;glob&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;pdfrw&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;PdfReader&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;PdfWriter&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;output_file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;files&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;glob&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;*.pdf&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;writer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;PdfWriter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;each&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;files&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;pdf&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;PdfReader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;each&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;addpages&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pdf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pages&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;output_file&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vm"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;__main__&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This can then be run with:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;python&lt;/span&gt; &lt;span class="n"&gt;merge&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;output&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;in the terminal or command prompt.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="watermarking"&gt;
&lt;h2&gt;Watermarking&lt;/h2&gt;
&lt;p&gt;With watermarking, a separate pdf file (the watermark) is overlaid on top of
another pdf file (the base file). For the watermark to show up at the correct
location the watermark file must be the same size as the base pdf file. With
this script the first argument will be the input file to apply the watermark to,
and a second argument which is the name of the pdf file to use as the watermark.
Again the script is to reside in the same directory as the files.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# watermark.py&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;sys&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;pdfrw&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;PdfReader&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;PdfWriter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;PageMerge&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;input_file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;watermark_file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="n"&gt;input_pdf&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;PdfReader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;input_file&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;watermark&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;PdfReader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;watermark_file&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pages&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;input_pdf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;merger&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;PageMerge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;merger&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;watermark&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;render&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="n"&gt;writer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;PdfWriter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;input_file&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;.pdf&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;_w.pdf&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;input_pdf&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vm"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;__main__&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;To run, in a terminal or command prompt issue:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;python&lt;/span&gt; &lt;span class="n"&gt;watermark&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;watermark&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</content><category term="Python"/><category term="python"/></entry></feed>