Skip to content

ENH: ensure code that is 80 characters wide is visible for code-cell #308

@mmcky

Description

@mmcky

We have adopted an 80 character wide line limit for code in code-cells.

We should update the theme to ensure the 80 character width is always visible so there is no scrolling required right <-> left

Here is some example code

```{code-cell} python
class SamuelsonLSS(LinearStateSpace):
    """
    This subclass creates a Samuelson multiplier-accelerator model
    as a linear state space system.
    """

    def __init__(self, y_0=100, y_1=50, α=0.8, β=0.9, γ=10, σ=1, g=10):

        self.α, self.β = α, β
        self.y_0, self.y_1, self.g = y_0, y_1, g
        self.γ, self.σ = γ, σ

        # Define intial conditions
        self.μ_0 = [1, y_0, y_1]

        self.ρ1 = α + β
        self.ρ2 = -β

        # Define transition matrix
        self.A = [[1, 0, 0], [γ + g, self.ρ1, self.ρ2], [0, 1, 0]]

        # Define output matrix
        self.G = [
            [γ + g, self.ρ1, self.ρ2],  # this is Y_{t+1}
            [γ, α, 0],  # this is C_{t+1}
            [0, β, -β],
        ]  # this is I_{t+1}

        self.C = np.zeros((3, 1))
        self.C[1] = σ  # stochastic

        # Initialize LSS with parameters from Samuelson model
        LinearStateSpace.__init__(self, self.A, self.C, self.G, mu_0=self.μ_0)

    def plot_simulation(self, ts_length=100, stationary=True):

        # Temporarily store original parameters
        temp_mu = self.mu_0
        temp_Sigma = self.Sigma_0

        # Set distribution parameters equal to their stationary
        # values for simulation
        if stationary == True:
            try:
                self.mu_x, self.mu_y, self.Sigma_x, self.Sigma_y, self.Sigma_yx = (
                    self.stationary_distributions()
                )
                self.mu_0 = self.mu_x
                self.Sigma_0 = self.Sigma_x
            # Exception where no convergence achieved when
            # calculating stationary distributions
            except ValueError:
                print("Stationary distribution does not exist")

        x, y = self.simulate(ts_length)

        fig, axes = plt.subplots(3, 1, sharex=True, figsize=(12, 8))
        titles = ["Output ($Y_t$)", "Consumption ($C_t$)", "Investment ($I_t$)"]
        colors = ["darkblue", "red", "purple"]
        for ax, series, title, color in zip(axes, y, titles, colors):
            ax.plot(series, color=color)
            ax.set(title=title, xlim=(0, n))
            ax.grid()

        axes[-1].set_xlabel("Iteration")

        # Reset distribution parameters to their initial values
        self.mu_0 = temp_mu
        self.Sigma_0 = temp_Sigma

        return fig

    def plot_irf(self, j=5):

        x, y = self.impulse_response(j)

        # Reshape into 3 x j matrix for plotting purposes
        yimf = np.array(y).flatten().reshape(j + 1, 3).T

        fig, axes = plt.subplots(3, 1, sharex=True, figsize=(12, 8))
        labels = ["$Y_t$", "$C_t$", "$I_t$"]
        colors = ["darkblue", "red", "purple"]
        for ax, series, label, color in zip(axes, yimf, labels, colors):
            ax.plot(series, color=color)
            ax.set(xlim=(0, j))
            ax.set_ylabel(label, rotation=0, fontsize=14, labelpad=10)
            ax.grid()

        axes[0].set_title("Impulse Response Functions")
        axes[-1].set_xlabel("Iteration")

        return fig

    def multipliers(self, j=5):
        x, y = self.impulse_response(j)
        return np.sum(np.array(y).flatten().reshape(j + 1, 3), axis=0)
```

that Jupyter-book converts to

<div class="cell docutils container">
<div class="cell_input docutils container">
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre id="codecell42"><span></span><span class="k">class</span><span class="w"> </span><span class="nc">SamuelsonLSS</span><span class="p">(</span><span class="n">LinearStateSpace</span><span class="p">):</span>
<span class="w">    </span><span class="sd">"""</span>
<span class="sd">    This subclass creates a Samuelson multiplier-accelerator model</span>
<span class="sd">    as a linear state space system.</span>
<span class="sd">    """</span>

    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">y_0</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span> <span class="n">y_1</span><span class="o">=</span><span class="mi">50</span><span class="p">,</span> <span class="n">α</span><span class="o">=</span><span class="mf">0.8</span><span class="p">,</span> <span class="n">β</span><span class="o">=</span><span class="mf">0.9</span><span class="p">,</span> <span class="n">γ</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">σ</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">g</span><span class="o">=</span><span class="mi">10</span><span class="p">):</span>

        <span class="bp">self</span><span class="o">.</span><span class="n">α</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">β</span> <span class="o">=</span> <span class="n">α</span><span class="p">,</span> <span class="n">β</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">y_0</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">y_1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">g</span> <span class="o">=</span> <span class="n">y_0</span><span class="p">,</span> <span class="n">y_1</span><span class="p">,</span> <span class="n">g</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">γ</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">σ</span> <span class="o">=</span> <span class="n">γ</span><span class="p">,</span> <span class="n">σ</span>

        <span class="c1"># Define intial conditions</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">μ_0</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="n">y_0</span><span class="p">,</span> <span class="n">y_1</span><span class="p">]</span>

        <span class="bp">self</span><span class="o">.</span><span class="n">ρ1</span> <span class="o">=</span> <span class="n">α</span> <span class="o">+</span> <span class="n">β</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">ρ2</span> <span class="o">=</span> <span class="o">-</span><span class="n">β</span>

        <span class="c1"># Define transition matrix</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">A</span> <span class="o">=</span> <span class="p">[[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="p">[</span><span class="n">γ</span> <span class="o">+</span> <span class="n">g</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">ρ1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">ρ2</span><span class="p">],</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">]]</span>

        <span class="c1"># Define output matrix</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">G</span> <span class="o">=</span> <span class="p">[</span>
            <span class="p">[</span><span class="n">γ</span> <span class="o">+</span> <span class="n">g</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">ρ1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">ρ2</span><span class="p">],</span>  <span class="c1"># this is Y_{t+1}</span>
            <span class="p">[</span><span class="n">γ</span><span class="p">,</span> <span class="n">α</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span>  <span class="c1"># this is C_{t+1}</span>
            <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="n">β</span><span class="p">,</span> <span class="o">-</span><span class="n">β</span><span class="p">],</span>
        <span class="p">]</span>  <span class="c1"># this is I_{t+1}</span>

        <span class="bp">self</span><span class="o">.</span><span class="n">C</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">C</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">σ</span>  <span class="c1"># stochastic</span>

        <span class="c1"># Initialize LSS with parameters from Samuelson model</span>
        <span class="n">LinearStateSpace</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">A</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">C</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">G</span><span class="p">,</span> <span class="n">mu_0</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">μ_0</span><span class="p">)</span>

    <span class="k">def</span><span class="w"> </span><span class="nf">plot_simulation</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ts_length</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span> <span class="n">stationary</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>

        <span class="c1"># Temporarily store original parameters</span>
        <span class="n">temp_mu</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">mu_0</span>
        <span class="n">temp_Sigma</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">Sigma_0</span>

        <span class="c1"># Set distribution parameters equal to their stationary</span>
        <span class="c1"># values for simulation</span>
        <span class="k">if</span> <span class="n">stationary</span> <span class="o">==</span> <span class="kc">True</span><span class="p">:</span>
            <span class="k">try</span><span class="p">:</span>
                <span class="bp">self</span><span class="o">.</span><span class="n">mu_x</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">mu_y</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">Sigma_x</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">Sigma_y</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">Sigma_yx</span> <span class="o">=</span> <span class="p">(</span>
                    <span class="bp">self</span><span class="o">.</span><span class="n">stationary_distributions</span><span class="p">()</span>
                <span class="p">)</span>
                <span class="bp">self</span><span class="o">.</span><span class="n">mu_0</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">mu_x</span>
                <span class="bp">self</span><span class="o">.</span><span class="n">Sigma_0</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">Sigma_x</span>
            <span class="c1"># Exception where no convergence achieved when</span>
            <span class="c1"># calculating stationary distributions</span>
            <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
                <span class="nb">print</span><span class="p">(</span><span class="s2">"Stationary distribution does not exist"</span><span class="p">)</span>

        <span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulate</span><span class="p">(</span><span class="n">ts_length</span><span class="p">)</span>

        <span class="n">fig</span><span class="p">,</span> <span class="n">axes</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">sharex</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">12</span><span class="p">,</span> <span class="mi">8</span><span class="p">))</span>
        <span class="n">titles</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"Output ($Y_t$)"</span><span class="p">,</span> <span class="s2">"Consumption ($C_t$)"</span><span class="p">,</span> <span class="s2">"Investment ($I_t$)"</span><span class="p">]</span>
        <span class="n">colors</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"darkblue"</span><span class="p">,</span> <span class="s2">"red"</span><span class="p">,</span> <span class="s2">"purple"</span><span class="p">]</span>
        <span class="k">for</span> <span class="n">ax</span><span class="p">,</span> <span class="n">series</span><span class="p">,</span> <span class="n">title</span><span class="p">,</span> <span class="n">color</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">axes</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">titles</span><span class="p">,</span> <span class="n">colors</span><span class="p">):</span>
            <span class="n">ax</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">series</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="n">color</span><span class="p">)</span>
            <span class="n">ax</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">title</span><span class="o">=</span><span class="n">title</span><span class="p">,</span> <span class="n">xlim</span><span class="o">=</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">n</span><span class="p">))</span>
            <span class="n">ax</span><span class="o">.</span><span class="n">grid</span><span class="p">()</span>

        <span class="n">axes</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="s2">"Iteration"</span><span class="p">)</span>

        <span class="c1"># Reset distribution parameters to their initial values</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">mu_0</span> <span class="o">=</span> <span class="n">temp_mu</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">Sigma_0</span> <span class="o">=</span> <span class="n">temp_Sigma</span>

        <span class="k">return</span> <span class="n">fig</span>

    <span class="k">def</span><span class="w"> </span><span class="nf">plot_irf</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">j</span><span class="o">=</span><span class="mi">5</span><span class="p">):</span>

        <span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">impulse_response</span><span class="p">(</span><span class="n">j</span><span class="p">)</span>

        <span class="c1"># Reshape into 3 x j matrix for plotting purposes</span>
        <span class="n">yimf</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">y</span><span class="p">)</span><span class="o">.</span><span class="n">flatten</span><span class="p">()</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="n">j</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span><span class="o">.</span><span class="n">T</span>

        <span class="n">fig</span><span class="p">,</span> <span class="n">axes</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">sharex</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">12</span><span class="p">,</span> <span class="mi">8</span><span class="p">))</span>
        <span class="n">labels</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"$Y_t$"</span><span class="p">,</span> <span class="s2">"$C_t$"</span><span class="p">,</span> <span class="s2">"$I_t$"</span><span class="p">]</span>
        <span class="n">colors</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"darkblue"</span><span class="p">,</span> <span class="s2">"red"</span><span class="p">,</span> <span class="s2">"purple"</span><span class="p">]</span>
        <span class="k">for</span> <span class="n">ax</span><span class="p">,</span> <span class="n">series</span><span class="p">,</span> <span class="n">label</span><span class="p">,</span> <span class="n">color</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">axes</span><span class="p">,</span> <span class="n">yimf</span><span class="p">,</span> <span class="n">labels</span><span class="p">,</span> <span class="n">colors</span><span class="p">):</span>
            <span class="n">ax</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">series</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="n">color</span><span class="p">)</span>
            <span class="n">ax</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">xlim</span><span class="o">=</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">j</span><span class="p">))</span>
            <span class="n">ax</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="n">label</span><span class="p">,</span> <span class="n">rotation</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">14</span><span class="p">,</span> <span class="n">labelpad</span><span class="o">=</span><span class="mi">10</span><span class="p">)</span>
            <span class="n">ax</span><span class="o">.</span><span class="n">grid</span><span class="p">()</span>

        <span class="n">axes</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span><span class="s2">"Impulse Response Functions"</span><span class="p">)</span>
        <span class="n">axes</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="s2">"Iteration"</span><span class="p">)</span>

        <span class="k">return</span> <span class="n">fig</span>

    <span class="k">def</span><span class="w"> </span><span class="nf">multipliers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">j</span><span class="o">=</span><span class="mi">5</span><span class="p">):</span>
        <span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">impulse_response</span><span class="p">(</span><span class="n">j</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">y</span><span class="p">)</span><span class="o">.</span><span class="n">flatten</span><span class="p">()</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="n">j</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">3</span><span class="p">),</span> <span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
</pre><button class="copybtn o-tooltip--left" data-tooltip="Copy" data-clipboard-target="#codecell42"><svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-copy" width="44" height="44" viewBox="0 0 24 24" stroke-width="1.5" stroke="#000000" fill="none" stroke-linecap="round" stroke-linejoin="round">
  <title>Copy to clipboard</title>
  <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
  <rect x="8" y="8" width="12" height="12" rx="2"></rect>
  <path d="M16 8v-2a2 2 0 0 0 -2 -2h-8a2 2 0 0 0 -2 2v8a2 2 0 0 0 2 2h2"></path>
</svg></button></div>
</div>
</div>
</div>

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions