{ "cells": [ { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "d5862fa652218ed20e203b3e49616312", "grade": false, "grade_id": "cell-eb91677c04f5685a", "locked": true, "schema_version": 1, "solution": false } }, "source": [ "# Overview\n", "This exercise uses the Jupyter and Python you have learned in the tutorials, to manipulate, plot, and then analyse some experimental data. You will be given data for the **vapour pressure** of CO2. This is the pressure of a gas when it is in equilibrium with a condensed phase (solid or liquid). The vapour pressure approximately varies with temperature according to the Clausius-Clapeyron equation. \n", "\n", "If you have not yet seen the derivation of this equation, it is not essential for this exercise, but is included [below](#clausius_clapeyron_derivation) if you are interested. \n", "\n", "Integrating the Clausius-Clapeyron equation gives a **linear** relationship between $\\ln p$ and $1/T$, which means for a given phase equilibrium (i.e. solid—gas or liquid—gas) a plot of $\\ln p$ against $1/T$ gives (approximately) a straight line. Furthermore, as explained below, the **slope** of this line is proportional to the **phase transition enthalpy** for these two phases.\n", "\n", "This means that experimental **vapour pressure** data can used to fit a straight line (linear regression) according to the Clausius-Clapeyron equation. This fitting allows you to describe the range of temperatures and pressures where either solid and gas, or solid and liquid, or all three phases, are in equilibrium, and to calculate various enthalpy changes for phase transitions." ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "f39912a7f5f6ca5c9e4d4f9d56924350", "grade": false, "grade_id": "cell-52b04944a15bdf71", "locked": true, "schema_version": 1, "solution": false } }, "source": [ "
\n", "## Assessment\n", "\n", "When you have finished the exercise, save your completed notebook, using **File > Save and Checkpoint** in the Jupyter menu. Then upload your notebook for assessment using Moodle. Please make sure that you upload the `Exercise.ipynb` file, and that it is not an old version of the notebook (check the modification date and time before you upload).\n", "\n", "This notebook contains cells marked `# TEST CELL`. These contain hidden `assert` statements that will be used to test your code and calculate your mark. The comments in each cell describe what is being tested.\n", "\n", "Because your notebook will be marked by running your code, you should check that everything works as you expect when running from top to bottom. Because notebook cells can be run in any order, it is possible to have code that looks correct, but that gives errors when run by someone else. When you are happy with your notebook, you can test it by selecting **Kernel > Restart & Run All** from the Jupyter menu.\n", "
" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "8a74b7cf737244d646e3c1b37ced5e09", "grade": false, "grade_id": "cell-e104b557b93c229e", "locked": true, "schema_version": 1, "solution": false } }, "source": [ "\n", "# Finding the Triple Point of CO2\n", "\n", "This is the phase diagram of CO2, which shows the ranges of temperature and pressure where different phases are stable.\n", "\n", "\n", "\n", "The solid lines on this diagram are **phase-coexistence lines**, which describe the temperatures and pressures where two phases are in equilibrium. These lines describe the conditions (pressure and temperature) for \n", "(a) solid—gas phase equilibrium. \n", "(b) solid–liquid equilibrium. \n", "(c) liquid–gas equilibrium.\n", "\n", "All three solid lines meet at the point marked in blue. This is the **triple point**, and is the pressure and temperature where all three phases coexist; solid, liquid, and gas are all in equilibrium.\n", "\n", "The phase-coexistence lines have slopes given by the [Clapeyron equation](#clapeyron_derivation),\n", "\n", "\\begin{equation}\n", "\\frac{\\mathrm{d}p}{\\mathrm{d}T}= \\frac{\\Delta H_\\mathrm{m}}{T\\Delta V_\\mathrm{m}} .\n", "\\end{equation}\n", "\n", "For phase coexistence between solid and gas (sublimation) or liquid and gas (vapourisation), the slopes are approximately given by the [Clausius-Clapeyron equation](#clausius_clapeyron_derivation),\n", "\n", "\\begin{equation}\n", "\\frac{\\mathrm{d}p}{\\mathrm{d}T} = \\frac{p \\Delta H_\\mathrm{m}}{RT^2},\n", "\\end{equation}\n", "\n", "which can be [integrated](#integrated_CC_equation) to give\n", "\n", "\\begin{equation}\n", "\\ln p = - \\frac{\\Delta H}{RT} +\\mathrm{constant}\n", "\\end{equation}\n", "\n", "More detailed derivations of these equations are given at the bottom of this notebook." ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "50413dfc3260738d806b3a7531614a7f", "grade": false, "grade_id": "cell-42d65ee570d6c60b", "locked": true, "schema_version": 1, "solution": false } }, "source": [ "## Exercise\n", "\n", "The vapour pressure of CO2 is given in the table below for different temperatures:\n", "\n", "\\begin{array}{cc}\n", "T\\,\\mathrm{[K]} & 196 & 206 & 211 & 221 & 226 & 236 \\\\\n", "p\\,\\mathrm{[}10^5\\,\\mathrm{Pa]} & 1.146 & 2.479 & 3.558 & 6.296 & 7.704 & 11.212\n", "\\end{array}\n", "
\n", "\n", "## 1. Preliminary Data Plotting\n", "\n", "Plot these data in the form $\\ln p$ versus $1/T$.\n", "\n", "Create two `numpy` arrays, called `temperature` and `pressure` to store the data you have been given. Then use these to convert the data into the correct format for plotting, with this stored in two more array, `inverse_temperature` and `log_pressure`. You might need to convert into SI units." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "deletable": false, "editable": false, "nbgrader": { "checksum": "52e8b3ce14825f669e97f77bd09ec6d5", "grade": false, "grade_id": "cell-b91980d68d927641", "locked": true, "schema_version": 1, "solution": false } }, "outputs": [], "source": [ "# importing the modules you will need\n", "\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "temperature = ◽◽◽\n", "pressure = ◽◽◽" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "deletable": false, "editable": false, "nbgrader": { "checksum": "b6d22b6cd93305b4cc03dd5d794be097", "grade": true, "grade_id": "cell-14ed65d32724ed20", "locked": true, "points": 1, "schema_version": 1, "solution": false } }, "outputs": [], "source": [ "# TEST CELL\n", "# - check `temperature` is correct.\n", "# - check `pressure is correct.\n", "# Total marks: 1" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "inverse_temperature = ◽◽◽\n", "log_pressure = ◽◽◽" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "deletable": false, "editable": false, "nbgrader": { "checksum": "d077fc37515c17bb33743e4d5ea595f3", "grade": true, "grade_id": "cell-bda0584c825bc19a", "locked": true, "points": 1, "schema_version": 1, "solution": false } }, "outputs": [], "source": [ "# TEST CELL\n", "# - check `inverse_temperature` is correct.\n", "# - check `log_pressure` is correct.\n", "# Total marks: 1" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "plt.plot( ◽◽◽, ◽◽◽, 'o' )\n", "plt.xlabel( ◽◽◽ )\n", "plt.ylabel( ◽◽◽ )\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true, "deletable": false, "editable": false, "nbgrader": { "checksum": "ac88d0bcf6861b6de441d1ba8fac1bec", "grade": false, "grade_id": "cell-49ff7502822fb68a", "locked": true, "schema_version": 1, "solution": false } }, "source": [ "You should have a plot that shows **two** subsets of the data, each following a different straight line relationship. This means the data collected follow two coexistence lines, corresponding to the solid--gas _and_ liquid-gas phase equilibria. By considering which data are high-temperature, and which are low-temperature, and using the phase diagram above, you should be able to assign one region of the data to the solid--gas coexistence line, and the other to the liquid-gas coexistence line.\n", "\n", "Replot the data so that the high temperature and low temperature data are shown as distinct data sets." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "plt.plot( ◽◽◽, ◽◽◽, 'o', label='high T' ) # High temperature data points\n", "plt.plot( ◽◽◽, ◽◽◽, 's', label='low T' ) # Low temperature data points\n", "plt.xlabel( ◽◽◽ )\n", "plt.ylabel( ◽◽◽ )\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "ce6211acb8800c561fb88ca0ec246bab", "grade": false, "grade_id": "cell-39ffca035bf96d8a", "locked": true, "schema_version": 1, "solution": false } }, "source": [ "## 2. Calculating ΔHsub and ΔHvap\n", "By performing separate [linear regressions](Tutorial%205.ipynb#Linear-Regression) on the low temperature data and high temperature data, calculate\n", "\n", " * the latent heat of sublimation, in J.\n", " * the latent heat of vapourisation, in J.\n", " \n", "Make sure the check which slices of `inverse_temperature` and `log_pressure` correspond to high and low temperature.\n", "\n", "The latent heat of sublimation is the enthalpy change to convert one mole of a substance from solid to gas at constant pressure. \n", "The latent heat of vapourisation is the enthalpy change to convert one mole of a substance from liquid to gas at constant pressure." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from scipy.stats import linregress\n", "\n", "slope_high_T, intercept_high_T, rvalue, pvalue, stderr = linregress( ◽◽◽, ◽◽◽ )\n", "slope_low_T, intercept_low_T, rvalue, pvalue, stderr = linregress( ◽◽◽, ◽◽◽ )" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "deletable": false, "editable": false, "nbgrader": { "checksum": "7ee2100694c91db04fcebd4873b568e0", "grade": true, "grade_id": "cell-2e0054f3344f1f73", "locked": true, "points": 3, "schema_version": 1, "solution": false } }, "outputs": [], "source": [ "# TEST CELL\n", "# - check `slope_high_T` is correct.\n", "# - check `slope_low_T` is correct.\n", "# - check `intercept_high_T` is correct.\n", "# - check `intercept_low_T` is correct.\n", "# Total marks: 3" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "c177eebcfbaa192a7b5f5a757d170205", "grade": false, "grade_id": "cell-b6e3a68d200655ed", "locked": true, "schema_version": 1, "solution": false } }, "source": [ "To calculate $\\Delta H_\\mathrm{sub}$ and $\\Delta H_\\mathrm{vap}$ from the fitted slopes you need the gas constant $R$.\n", "\n", "You could look this up and enter it by hand, but a more reliable option is to use [`scipy.constants`](https://docs.scipy.org/doc/scipy/reference/constants.html), which gives a tabulated list of physical constants and unit conversions." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "deletable": false, "editable": false, "nbgrader": { "checksum": "70d523e7b48acf5f4f95d4ce8d89e72a", "grade": false, "grade_id": "cell-3c9b6fce27613eb7", "locked": true, "schema_version": 1, "solution": false } }, "outputs": [], "source": [ "from scipy.constants import R\n", "\n", "print( R )" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "delta_H_vap = ◽◽◽\n", "delta_H_sub = ◽◽◽" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "deletable": false, "editable": false, "nbgrader": { "checksum": "707fc830b27189a4df614cea4288c17a", "grade": true, "grade_id": "cell-f07c292cfe7b45c7", "locked": true, "points": 4, "schema_version": 1, "solution": false } }, "outputs": [], "source": [ "# TEST CELL\n", "# - check `delta_H_vap` is correct.\n", "# - check `delta_H_sub` is correct.\n", "# Total marks: 4" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "d72c297ea228cada9f53eb607f92b763", "grade": false, "grade_id": "cell-513af5eed3bcc00b", "locked": true, "schema_version": 1, "solution": false } }, "source": [ "## 3. Calculating ΔHfus\n", "\n", "In 2. you calculated the enthalpy changes for converting from solid to gas ($\\Delta H_\\mathrm{sub}$) and from liquid to gas ($\\Delta H_\\mathrm{vap}$).\n", "\n", "The latent heat of fusion, $\\Delta H_\\mathrm{fus}$, is the enthalpy change to convert one mole of a substance from solid to liquid at constant pressure.\n", "\n", "Using your results from 2. (for example, to construct a Hess cycle) calculate the latent heat of fusion, in J." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "delta_H_fus = ◽◽◽" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "deletable": false, "editable": false, "nbgrader": { "checksum": "44032474962b316588ac983aeb4f0178", "grade": true, "grade_id": "cell-947c39e3e90311ef", "locked": true, "points": 1, "schema_version": 1, "solution": false } }, "outputs": [], "source": [ "# TEST CELL\n", "# - check `delta_H_fus` is correct.\n", "# Total marks: 1" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "9e445ed8e00fb267efa5119f7febae6c", "grade": false, "grade_id": "cell-106acd6a0e53d730", "locked": true, "schema_version": 1, "solution": false } }, "source": [ "## 4. Graphically Estimating the Triple Point of CO2\n", "\n", "Using your linear regression results, replot the experimental data, and add lines of best fit. \n", "\n", "Each line follows the integrated Clausius-Clapeyron equation for that particular phase equilibrium: one line describes the temperatures and pressures where liquid and gas are in equilibrium, and the other describes the temperatures and pressures where solid and gas are in equilibrium. At the point where these cross, both these things are true, and all three phases are in equilibrium. This is the **triple point** (the green dot in the phase diagram).\n", "\n", "Estimate the temperature and pressure of the triple point from your graph.\n", "\n", "Because you are interested in where your lines of best fit cross, when you generate data for plotting these you need to use the full (inverse) temperature range." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "ln_p_high_T = ◽◽◽ * inverse_temperature + ◽◽◽\n", "ln_p_low_T = ◽◽◽ * inverse_temperature + ◽◽◽\n", "\n", "plt.plot( ◽◽◽, ◽◽◽, 'o' ) # high T experimental data\n", "plt.plot( ◽◽◽, ◽◽◽, 'o' ) # low T experimental data\n", "plt.plot( ◽◽◽, ◽◽◽, '-' ) # liquid-gas coexistence line\n", "plt.plot( ◽◽◽, ◽◽◽, '-' ) # solid-gas coexistence line\n", "plt.xlabel( ◽◽◽ )\n", "plt.ylabel( ◽◽◽ )\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from math import exp\n", "\n", "estimated_log_pressure = ◽◽◽\n", "estimated_inverse_temperature = ◽◽◽\n", "\n", "estimated_pressure = ◽◽◽\n", "estimated_temperature = ◽◽◽\n", "\n", "print( \"The triple point of CO2 is at P={} Pa and T={} K (estimated).\".format( estimated_pressure, estimated_temperature ) )" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "deletable": false, "editable": false, "nbgrader": { "checksum": "34de7504d7b1e53c02d6ad3d3b0cb945", "grade": true, "grade_id": "cell-4a75b889223ea4ef", "locked": true, "points": 2, "schema_version": 1, "solution": false } }, "outputs": [], "source": [ "# TEST CELL\n", "# - check `estimated_pressure` is approximately correct.\n", "# - check `estimated_temperature` is approximately correct.\n", "# Total marks: 2" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "2c31e9ad4cc11483925c8ebf051d3ada", "grade": false, "grade_id": "cell-053a1b50ebcfdc81", "locked": true, "schema_version": 1, "solution": false } }, "source": [ "The `print` statement in the previous cell uses `\"string {}\".format()` to insert your calculated results into the string for printing. The values stored in these variables are inserted into the `{}` brackets in turn." ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "5f8b31329291d7aab6927760d8dc8bec", "grade": false, "grade_id": "cell-b50903a9114603aa", "locked": true, "schema_version": 1, "solution": false } }, "source": [ "# 5. Directly Calculating the Triple Point of CO2\n", "\n", "Everything you have done to this point you could have been done using a calculator and a graph paper. Because you have done this analysis computationally, however, you are not restricted to estimating the pressure and temperature of the triple point, but can directly calculate it. By solving the pair of simultaneous equations below, (this bit by hand) derive expressions for the temperature and pressure of the triple point. Write these solutions as code, and use the fitted high- low-temperature slopes and intercepts, to calculate the triple point.\n", "\n", "\\begin{equation}\n", "y = m_1 x + c_1\n", "\\end{equation}\n", "\\begin{equation}\n", "y = m_2 x + c_2\n", "\\end{equation}" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "fitted_inverse_temperature = ◽◽◽\n", "fitted_temperature = ◽◽◽\n", "\n", "fitted_log_pressure = ◽◽◽\n", "fitted_pressure = ◽◽◽\n", "\n", "print( \"The triple point of CO2 is at P={:.3f} Pa and T={:.3f} K (estimated).\".format( fitted_pressure, fitted_temperature ) )" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "deletable": false, "editable": false, "nbgrader": { "checksum": "0bed35d710e70d3f25d5729361096915", "grade": true, "grade_id": "cell-b43fc938ed1efd4f", "locked": true, "points": 3, "schema_version": 1, "solution": false } }, "outputs": [], "source": [ "# TEST CELL\n", "# - check `fitted_pressure` is correct.\n", "# - check `fitted_temperature` iscorrect.\n", "# Total marks: 2" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "96a0283b1b7254a781d29f849c11f569", "grade": false, "grade_id": "cell-7a375a299bb22ee8", "locked": true, "schema_version": 1, "solution": false } }, "source": [ "Again, the print statement uses `string.format()` to generate a clean output. This time the curly brackets `{ }` have additional code inside that sets the formatting of the inserted variable. In this case `:.3f` means a floating point number, with three decimal places.\n", "\n", "Check that your calculated values are close to your estimated values. If they are very different (e.g. orders of magnitude), go through and check your code. This is an example of how using two methods to calculate a result, with the first a quick estimation, can help you check your method for the second, more accurate method.\n", "\n", "How well do your estimated and fitted values compare? Are the errors from the graphical estimation similar for both the temperature and pressure, or different in size?" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "1976455476f557d407f772a64044731e", "grade": false, "grade_id": "cell-3ccd2de301b3d37b", "locked": true, "schema_version": 1, "solution": false } }, "source": [ "# Theory\n", "\n", "## Derivation of the Clapeyron equation\n", "\n", "The change in free energy of a pure-phase system due to changes in $P$ and $T$ is given by\n", "\n", "\\begin{equation}\n", "\\Delta G = V\\,\\mathrm{d}p - S\\,\\mathrm{d}T.\n", "\\end{equation}\n", "\n", "For two phases to coexist, they must be in equilibrium. Any change in $P$ or $T$ has an *equal* effect on the free energy of both phases.\n", "\n", "\\begin{equation}\n", "\\Delta G_1 = \\Delta G_2\n", "\\end{equation}\n", "\n", "\\begin{equation}\n", "V_1\\,\\mathrm{d}p - S_1\\,\\mathrm{d}T = V_2\\,\\mathrm{d}P - S_2\\,\\mathrm{T}\n", "\\end{equation}\n", "\n", "\\begin{equation}\n", "\\left(V_1-V_2\\right)\\mathrm{d}p = \\left(S_1-S_2\\right)\\mathrm{d}T.\n", "\\end{equation}\n", "\n", "\\begin{equation}\n", "\\frac{\\mathrm{d}p}{\\mathrm{d}T} = \\frac{\\Delta S}{\\Delta V}.\n", "\\end{equation}\n", "Where $\\Delta S$ and $\\Delta V$ are the changes in entropy and volume respectively, associated with converting one mole of phase 1 to one mole of phase 2.\n", "\n", "Using\n", "\\begin{equation}\n", "\\Delta S = \\frac{\\Delta H}{T},\n", "\\end{equation}\n", "\n", "\\begin{equation}\n", "\\frac{\\mathrm{d}p}{\\mathrm{d}T} = \\frac{\\Delta H}{T\\Delta V}.\\tag{Clapeyron equation}\n", "\\end{equation}\n", "\n", "[↩](#top)\n", "\n", "## Derivation of the Clausius-Clapeyron Equation\n", "\n", "Starting from the Clapeyron equation, if the phase equilibrium is between a gas and a condensed phase, then (e.g. for vapourisation)\n", "\n", "\\begin{equation}\n", "\\Delta H = \\Delta H_\\mathrm{vap},\n", "\\end{equation}\n", "\n", "and\n", "\n", "\\begin{equation}\n", "\\Delta V \\approx V_\\mathrm{(g)},\n", "\\end{equation}\n", "\n", "because $V_\\mathrm{(g)}\\gg\\left\\{V_\\mathrm{(l)}, V_\\mathrm{(s)}\\right\\}$.\n", "\n", "If we assme the gas is ideal,\n", "\n", "\\begin{equation}\n", "V_\\mathrm{m} = \\frac{RT}{p}\n", "\\end{equation}\n", "\n", "and\n", "\n", "\\begin{equation}\n", "\\frac{\\mathrm{d}p}{\\mathrm{d}T} = \\frac{p\\Delta H_\\mathrm{vap}}{RT^2}. \\tag{Clausius-Clapeyron equation}\n", "\\end{equation}\n", "\n", "[↩](#top)\n", "\n", "## The integrated form of the Clausius-Clapeyron equation\n", "\n", "The Clausius-Clapeyron equation can be rearranged to give\n", "\n", "\\begin{equation}\n", "\\frac{\\mathrm{d}p}{p}=\\frac{\\Delta H_\\mathrm{vap}}{R}\\frac{\\mathrm{d}T}{T^2}.\n", "\\end{equation}\n", "\n", "Integrating both sides gives\n", "\n", "\\begin{equation}\n", "\\ln p = - \\frac{\\Delta H_\\mathrm{vap}}{RT} + c.\n", "\\end{equation}\n", "\n", "[↩](#top)" ] } ], "metadata": { "kernelspec": { "display_name": "Python [conda env:python3]", "language": "python", "name": "conda-env-python3-py" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.7" } }, "nbformat": 4, "nbformat_minor": 2 }