{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Multi-tube design example for orthogonal systems (advanced) "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Design small conditional RNAs (scRNAs) for conditional Dicer substrate formation (Hochrein et al., J Am Chem Soc, 2013; see Figure 3). \n",
"\n",
"See the accompanying design specification (PDF files). See also the LaTeX spec file that you can edit to make your own design specs in a standardized format. \n",
"\n",
"This is a 2-step reaction. To design N orthogonal scRNA systems, there are 3 elementary step tubes per system plus 1 global crosstalk tube. \n",
"\n",
"Target test tubes: \n",
"- (Step 0: Reactants) x N orthogonal systems \n",
"- (Step 1: Intermediates) x N orthogonal systems\n",
"- (Step 2: Products) x N orthogonal systems\n",
"- Global crosstalk \n",
"\n",
"Material: RNA \n",
"Temperature: 23 C"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"# Import Python NUPACK module\n",
"from nupack import *"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"Domain results:\n",
"
\n",
" \n",
" \n",
" Domain | \n",
" Sequence | \n",
"
\n",
" \n",
" \n",
" \n",
" a[0] | \n",
" CACGAU | \n",
"
\n",
" \n",
" a[0]* | \n",
" AUCGUG | \n",
"
\n",
" \n",
" a[1] | \n",
" AACACU | \n",
"
\n",
" \n",
" a[1]* | \n",
" AGUGUU | \n",
"
\n",
" \n",
" b[0] | \n",
" UUAC | \n",
"
\n",
" \n",
" b[0]* | \n",
" GUAA | \n",
"
\n",
" \n",
" b[1] | \n",
" CCGG | \n",
"
\n",
" \n",
" b[1]* | \n",
" CCGG | \n",
"
\n",
" \n",
" c[0] | \n",
" GCUGCACU | \n",
"
\n",
" \n",
" c[0]* | \n",
" AGUGCAGC | \n",
"
\n",
" \n",
" c[1] | \n",
" UCCACAUG | \n",
"
\n",
" \n",
" c[1]* | \n",
" CAUGUGGA | \n",
"
\n",
" \n",
" s[0] | \n",
" AAAUC | \n",
"
\n",
" \n",
" s[0]* | \n",
" GAUUU | \n",
"
\n",
" \n",
" s[1] | \n",
" AGUUG | \n",
"
\n",
" \n",
" s[1]* | \n",
" CAACU | \n",
"
\n",
" \n",
" w[0] | \n",
" CA | \n",
"
\n",
" \n",
" w[0]* | \n",
" UG | \n",
"
\n",
" \n",
" w[1] | \n",
" CA | \n",
"
\n",
" \n",
" w[1]* | \n",
" UG | \n",
"
\n",
" \n",
" x[0] | \n",
" AUACCUCCCAGC | \n",
"
\n",
" \n",
" x[0]* | \n",
" GCUGGGAGGUAU | \n",
"
\n",
" \n",
" x[1] | \n",
" GAACAAUAUAAA | \n",
"
\n",
" \n",
" x[1]* | \n",
" UUUAUAUUGUUC | \n",
"
\n",
" \n",
" y[0] | \n",
" CCAA | \n",
"
\n",
" \n",
" y[0]* | \n",
" UUGG | \n",
"
\n",
" \n",
" y[1] | \n",
" AACA | \n",
"
\n",
" \n",
" y[1]* | \n",
" UGUU | \n",
"
\n",
" \n",
" z[0] | \n",
" UUA | \n",
"
\n",
" \n",
" z[0]* | \n",
" UAA | \n",
"
\n",
" \n",
" z[1] | \n",
" UAC | \n",
"
\n",
" \n",
" z[1]* | \n",
" GUA | \n",
"
\n",
" \n",
"
Strand results:\n",
"\n",
" \n",
" \n",
" Strand | \n",
" Sequence | \n",
"
\n",
" \n",
" \n",
" \n",
" sC[1] | \n",
" CAGAACAAUAUAAAAACAAGUUGAGUGUUGUAUGUUUUUAUAUUGUUCUG | \n",
"
\n",
" \n",
" sA_toe[0] | \n",
" AGUGCAGC | \n",
"
\n",
" \n",
" sC_out[1] | \n",
" CAGAACAAUAUAAAAACAAGUUG | \n",
"
\n",
" \n",
" sC_out[0] | \n",
" CAAUACCUCCCAGCCCAAAAAUC | \n",
"
\n",
" \n",
" sA[0] | \n",
" AGUGCAGCGUAAAUCGUGUAAUUGG | \n",
"
\n",
" \n",
" sC_loop[1] | \n",
" AGUUGAGUGUUGUA | \n",
"
\n",
" \n",
" sC[0] | \n",
" CAAUACCUCCCAGCCCAAAAAUCAUCGUGUAAUUGGGCUGGGAGGUAUUG | \n",
"
\n",
" \n",
" sA[1] | \n",
" CAUGUGGACCGGAGUGUUGUAUGUU | \n",
"
\n",
" \n",
" sX[1] | \n",
" AACACUCCGGUCCACAUG | \n",
"
\n",
" \n",
" sA_toe[1] | \n",
" CAUGUGGA | \n",
"
\n",
" \n",
" sB[1] | \n",
" GAACAAUAUAAAAACAUACAACACUCCGG | \n",
"
\n",
" \n",
" sX[0] | \n",
" CACGAUUUACGCUGCACU | \n",
"
\n",
" \n",
" sC_loop[0] | \n",
" AAAUCAUCGUGUAA | \n",
"
\n",
" \n",
" sB[0] | \n",
" AUACCUCCCAGCCCAAUUACACGAUUUAC | \n",
"
\n",
" \n",
"
Objective function:\n",
" \n",
" \n",
" Objective type | \n",
" Value | \n",
"
\n",
" \n",
" \n",
" \n",
" Weighted ensemble defect | \n",
" 0.0499 | \n",
"
\n",
" \n",
"
Ensemble defect: 0.0435
On-target complex defects:\n",
" \n",
" \n",
" Complex | \n",
" Complex defect (nt) | \n",
" Normalized complex defect | \n",
"
\n",
" \n",
" \n",
" \n",
" BC[1] | \n",
" 2.85 | \n",
" 0.0361 | \n",
"
\n",
" \n",
" C_loop[1] | \n",
" 0.0801 | \n",
" 0.00572 | \n",
"
\n",
" \n",
" C[0] | \n",
" 2.58 | \n",
" 0.0516 | \n",
"
\n",
" \n",
" A_toe[1] | \n",
" 0.0401 | \n",
" 0.00502 | \n",
"
\n",
" \n",
" B[0] | \n",
" 1.45 | \n",
" 0.0500 | \n",
"
\n",
" \n",
" C[1] | \n",
" 2.11 | \n",
" 0.0422 | \n",
"
\n",
" \n",
" C_out[0] | \n",
" 0.115 | \n",
" 0.00501 | \n",
"
\n",
" \n",
" AB[1] | \n",
" 1.03 | \n",
" 0.0190 | \n",
"
\n",
" \n",
" BC[0] | \n",
" 1.76 | \n",
" 0.0223 | \n",
"
\n",
" \n",
" X[1] | \n",
" 0.940 | \n",
" 0.0522 | \n",
"
\n",
" \n",
" XA[1] | \n",
" 1.03 | \n",
" 0.0239 | \n",
"
\n",
" \n",
" A_toe[0] | \n",
" 0.0449 | \n",
" 0.00561 | \n",
"
\n",
" \n",
" B[1] | \n",
" 0.600 | \n",
" 0.0207 | \n",
"
\n",
" \n",
" C_loop[0] | \n",
" 0.198 | \n",
" 0.0141 | \n",
"
\n",
" \n",
" AB[0] | \n",
" 0.635 | \n",
" 0.0118 | \n",
"
\n",
" \n",
" C_out[1] | \n",
" 2.67 | \n",
" 0.116 | \n",
"
\n",
" \n",
" X[0] | \n",
" 1.94 | \n",
" 0.108 | \n",
"
\n",
" \n",
" XA[0] | \n",
" 1.13 | \n",
" 0.0262 | \n",
"
\n",
" \n",
"
Tube defects:\n",
" \n",
" \n",
" Tube | \n",
" Tube defect (M) | \n",
" Normalized tube defect | \n",
"
\n",
" \n",
" \n",
" \n",
" Step_0[0] | \n",
" 6.81e-08 | \n",
" 0.0558 | \n",
"
\n",
" \n",
" Step_1[0] | \n",
" 2.75e-08 | \n",
" 0.0382 | \n",
"
\n",
" \n",
" Step_2[0] | \n",
" 4.31e-08 | \n",
" 0.0545 | \n",
"
\n",
" \n",
" Step_0[1] | \n",
" 4.17e-08 | \n",
" 0.0342 | \n",
"
\n",
" \n",
" Step_1[1] | \n",
" 2.84e-08 | \n",
" 0.0394 | \n",
"
\n",
" \n",
" Step_2[1] | \n",
" 3.03e-08 | \n",
" 0.0384 | \n",
"
\n",
" \n",
" Crosstalk | \n",
" 1.74e-07 | \n",
" 0.0443 | \n",
"
\n",
" \n",
"
Complex contributions to tube defects:\n",
" \n",
" \n",
" Tube | \n",
" On-target complex | \n",
" Structural defect (M) | \n",
" Concentration defect (M) | \n",
" Total defect (M) | \n",
"
\n",
" \n",
" \n",
" \n",
" Step_0[0] | \n",
" C[0] | \n",
" 2.54e-08 | \n",
" 8.30e-09 | \n",
" 3.37e-08 | \n",
"
\n",
" \n",
" Step_0[0] | \n",
" X[0] | \n",
" 1.94e-08 | \n",
" 3.69e-11 | \n",
" 1.95e-08 | \n",
"
\n",
" \n",
" Step_0[0] | \n",
" AB[0] | \n",
" 6.25e-09 | \n",
" 8.73e-09 | \n",
" 1.50e-08 | \n",
"
\n",
" \n",
" Step_1[0] | \n",
" XA[0] | \n",
" 1.13e-08 | \n",
" 1.08e-09 | \n",
" 1.23e-08 | \n",
"
\n",
" \n",
" Step_1[0] | \n",
" B[0] | \n",
" 1.45e-08 | \n",
" 7.28e-10 | \n",
" 1.52e-08 | \n",
"
\n",
" \n",
" Step_2[0] | \n",
" BC[0] | \n",
" 1.70e-08 | \n",
" 2.60e-08 | \n",
" 4.31e-08 | \n",
"
\n",
" \n",
" Step_0[1] | \n",
" C[1] | \n",
" 2.11e-08 | \n",
" 3.03e-10 | \n",
" 2.14e-08 | \n",
"
\n",
" \n",
" Step_0[1] | \n",
" X[1] | \n",
" 9.38e-09 | \n",
" 2.83e-10 | \n",
" 9.67e-09 | \n",
"
\n",
" \n",
" Step_0[1] | \n",
" AB[1] | \n",
" 1.03e-08 | \n",
" 3.27e-10 | \n",
" 1.06e-08 | \n",
"
\n",
" \n",
" Step_1[1] | \n",
" XA[1] | \n",
" 1.01e-08 | \n",
" 7.36e-09 | \n",
" 1.75e-08 | \n",
"
\n",
" \n",
" Step_1[1] | \n",
" B[1] | \n",
" 5.90e-09 | \n",
" 5.00e-09 | \n",
" 1.09e-08 | \n",
"
\n",
" \n",
" Step_2[1] | \n",
" BC[1] | \n",
" 2.85e-08 | \n",
" 1.83e-09 | \n",
" 3.03e-08 | \n",
"
\n",
" \n",
" Crosstalk | \n",
" AB[0] | \n",
" 6.35e-09 | \n",
" 1.64e-13 | \n",
" 6.35e-09 | \n",
"
\n",
" \n",
" Crosstalk | \n",
" C[0] | \n",
" 2.58e-08 | \n",
" 2.28e-10 | \n",
" 2.60e-08 | \n",
"
\n",
" \n",
" Crosstalk | \n",
" X[0] | \n",
" 1.92e-08 | \n",
" 1.59e-09 | \n",
" 2.08e-08 | \n",
"
\n",
" \n",
" Crosstalk | \n",
" B[0] | \n",
" 1.45e-08 | \n",
" 5.40e-10 | \n",
" 1.50e-08 | \n",
"
\n",
" \n",
" Crosstalk | \n",
" C_out[0] | \n",
" 1.15e-09 | \n",
" 9.80e-10 | \n",
" 2.13e-09 | \n",
"
\n",
" \n",
" Crosstalk | \n",
" C_loop[0] | \n",
" 1.97e-09 | \n",
" 3.73e-10 | \n",
" 2.34e-09 | \n",
"
\n",
" \n",
" Crosstalk | \n",
" A_toe[0] | \n",
" 4.49e-10 | \n",
" 1.86e-11 | \n",
" 4.67e-10 | \n",
"
\n",
" \n",
" Crosstalk | \n",
" AB[1] | \n",
" 1.03e-08 | \n",
" 3.21e-18 | \n",
" 1.03e-08 | \n",
"
\n",
" \n",
" Crosstalk | \n",
" C[1] | \n",
" 2.11e-08 | \n",
" 4.54e-10 | \n",
" 2.15e-08 | \n",
"
\n",
" \n",
" Crosstalk | \n",
" X[1] | \n",
" 8.70e-09 | \n",
" 1.35e-08 | \n",
" 2.22e-08 | \n",
"
\n",
" \n",
" Crosstalk | \n",
" B[1] | \n",
" 6.00e-09 | \n",
" 1.64e-10 | \n",
" 6.16e-09 | \n",
"
\n",
" \n",
" Crosstalk | \n",
" C_out[1] | \n",
" 2.66e-08 | \n",
" 6.24e-10 | \n",
" 2.72e-08 | \n",
"
\n",
" \n",
" Crosstalk | \n",
" C_loop[1] | \n",
" 7.32e-10 | \n",
" 1.19e-08 | \n",
" 1.27e-08 | \n",
"
\n",
" \n",
" Crosstalk | \n",
" A_toe[1] | \n",
" 4.01e-10 | \n",
" 2.21e-11 | \n",
" 4.23e-10 | \n",
"
\n",
" \n",
"
On-target complex concentrations:\n",
"\n",
" \n",
" \n",
" Tube | \n",
" Complex | \n",
" Concentration (M) | \n",
" Target concentration (M) | \n",
"
\n",
" \n",
" \n",
" \n",
" Step_0[0] | \n",
" C[0] | \n",
" 9.83e-09 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" Step_0[0] | \n",
" X[0] | \n",
" 1.00e-08 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" Step_0[0] | \n",
" AB[0] | \n",
" 9.84e-09 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" Step_1[0] | \n",
" XA[0] | \n",
" 9.97e-09 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" Step_1[0] | \n",
" B[0] | \n",
" 9.97e-09 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" Step_2[0] | \n",
" BC[0] | \n",
" 9.67e-09 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" Step_0[1] | \n",
" C[1] | \n",
" 9.99e-09 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" Step_0[1] | \n",
" X[1] | \n",
" 9.98e-09 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" Step_0[1] | \n",
" AB[1] | \n",
" 9.99e-09 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" Step_1[1] | \n",
" XA[1] | \n",
" 9.83e-09 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" Step_1[1] | \n",
" B[1] | \n",
" 9.83e-09 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" Step_2[1] | \n",
" BC[1] | \n",
" 9.98e-09 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" Crosstalk | \n",
" AB[0] | \n",
" 1.00e-08 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" Crosstalk | \n",
" C[0] | \n",
" 1.00e-08 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" Crosstalk | \n",
" X[0] | \n",
" 9.91e-09 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" Crosstalk | \n",
" B[0] | \n",
" 9.98e-09 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" Crosstalk | \n",
" C_out[0] | \n",
" 9.96e-09 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" Crosstalk | \n",
" C_loop[0] | \n",
" 9.97e-09 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" Crosstalk | \n",
" A_toe[0] | \n",
" 1.00e-08 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" Crosstalk | \n",
" AB[1] | \n",
" 1.00e-08 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" Crosstalk | \n",
" C[1] | \n",
" 9.99e-09 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" Crosstalk | \n",
" X[1] | \n",
" 9.25e-09 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" Crosstalk | \n",
" B[1] | \n",
" 9.99e-09 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" Crosstalk | \n",
" C_out[1] | \n",
" 9.97e-09 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" Crosstalk | \n",
" C_loop[1] | \n",
" 9.15e-09 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" Crosstalk | \n",
" A_toe[1] | \n",
" 1.00e-08 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
"
\n",
"\n",
"Significant off-target complex concentrations (≥ 1% max complex concentration in tube):\n",
"\n",
" \n",
" \n",
" Tube | \n",
" Complex | \n",
" Concentration (M) | \n",
"
\n",
" \n",
" \n",
" \n",
" Step_0[0] | \n",
" (sA[0]) | \n",
" 1.62e-10 | \n",
"
\n",
" \n",
" Step_0[1] | \n",
" — | \n",
" — | \n",
"
\n",
" \n",
" Step_2[0] | \n",
" B[0] | \n",
" 3.30e-10 | \n",
"
\n",
" \n",
" Step_2[0] | \n",
" C[0] | \n",
" 3.29e-10 | \n",
"
\n",
" \n",
" Step_1[1] | \n",
" AB[1] | \n",
" 1.71e-10 | \n",
"
\n",
" \n",
" Step_1[1] | \n",
" X[1] | \n",
" 1.71e-10 | \n",
"
\n",
" \n",
" Crosstalk | \n",
" (sC_loop[1]+sX[1]) | \n",
" 7.31e-10 | \n",
"
\n",
" \n",
" Step_2[1] | \n",
" — | \n",
" — | \n",
"
\n",
" \n",
"
"
],
"text/plain": [
""
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Define physical model\n",
"my_model = Model(material='rna', celsius=37)\n",
"\n",
"# Set number of orthogonal systems\n",
"systems = 2 \n",
"\n",
"# Initialize working variables\n",
"crosstalk_targets = {} \n",
"crosstalk_excludes = [] \n",
"step_tubes = [] \n",
"\n",
"# Loop over orthogonal systems\n",
"for i in range(systems):\n",
" \n",
" # Define sequence domains\n",
" a = Domain('N6', name=['a', i])\n",
" c = Domain('N8', name=['c', i])\n",
" b = Domain('N4', name=['b', i])\n",
" w = Domain('N2', name=['w', i])\n",
" y = Domain('N4', name=['y', i])\n",
" x = Domain('N12',name=['x', i])\n",
" z = Domain('N3', name=['z', i])\n",
" s = Domain('N5', name=['s', i])\n",
" \n",
" # Define strands containing these domains\n",
" sC_out = TargetStrand([w, x, y, s], name=['sC_out', i])\n",
" sA = TargetStrand([~c, ~b, ~a, ~z, ~y], name=['sA', i])\n",
" sA_toe = TargetStrand([~c], name=['sA_toe', i])\n",
" sC = TargetStrand([w, x, y, s, ~a, ~z, ~y, ~x, ~w], name=['sC', i])\n",
" sC_loop = TargetStrand([s, ~a, ~z], name=['sC_loop', i])\n",
" sB = TargetStrand([x, y, z, a, b], name=['sB', i])\n",
" sX = TargetStrand([a, b, c], name=['sX', i])\n",
" \n",
" # Define target complexes\n",
" C = TargetComplex([sC], 'D2 D12 D4( U5 U6 U3 )', name=['C', i])\n",
" B = TargetComplex([sB], 'U12 U4 U3 U6 U4', name=['B', i])\n",
" C_loop = TargetComplex([sC_loop], 'U14', name=['C_loop', i])\n",
" AB = TargetComplex([sA, sB], 'U8 D4 D6 D3 D4(+ U12)', name=['AB', i])\n",
" X = TargetComplex([sX], 'U18', name=['X', i])\n",
" XA = TargetComplex([sX, sA], 'D6 D4 D8(+) U3 U4', name=['XA', i])\n",
" C_out = TargetComplex([sC_out], 'U23', name=['C_out', i])\n",
" BC = TargetComplex([sB, sC], 'D12 D4 D3 D6 (U4 + U2 U12 U4 U5) U2', name=['BC', i])\n",
" A_toe = TargetComplex([sA_toe], 'U8', name=['A_toe', i])\n",
" \n",
" # Define 3 elementary step tubes for each orthogonal system\n",
" Step_0 = TargetTube({C: 1e-08, X: 1e-08, AB: 1e-08}, \n",
" off_targets=SetSpec(max_size=2, include=[[sA], BC], exclude=[XA]), name=['Step_0', i]) \n",
" Step_1 = TargetTube({XA: 1e-08, B: 1e-08}, \n",
" off_targets=SetSpec(max_size=2, include=[X, AB]), name=['Step_1', i]) \n",
" Step_2 = TargetTube({BC: 1e-08}, \n",
" off_targets=SetSpec(max_size=2, include=[B, C]), name=['Step_2', i])\n",
" step_tubes += [Step_0, Step_1, Step_2]\n",
" \n",
" # Store contributions to global crosstalk tube\n",
" crosstalk_targets.update({\n",
" AB: 1e-08,\n",
" C: 1e-08,\n",
" X: 1e-08,\n",
" B: 1e-08,\n",
" C_out: 1e-08,\n",
" C_loop: 1e-08,\n",
" A_toe: 1e-08,\n",
" }) \n",
" crosstalk_excludes += [XA, BC, [sX, sA_toe], [sB, sC_loop]]\n",
" \n",
"# Define 1 global crosstalk tube \n",
"crosstalk_tube = TargetTube(crosstalk_targets, \n",
" off_targets=SetSpec(max_size=2, exclude=crosstalk_excludes), name='Crosstalk')\n",
"\n",
"# Define tube set\n",
"my_tubes = step_tubes + [crosstalk_tube]\n",
"\n",
"# Define defect weight of N for global crosstalk tube \n",
"# (maintain balance between elementary step tubes and global crosstalk tube as number of \n",
"# orthogonal systems increases) \n",
"my_weights = Weights(my_tubes)\n",
"my_weights[:,:,:,crosstalk_tube] *= systems\n",
"\n",
"# Set a stop condition of 5% \n",
"# Set seed for random number generation to get a reproducible result for this demo\n",
"my_options = DesignOptions(f_stop=0.05, seed=93)\n",
"\n",
"# Define and run the test tube design job\n",
"my_design = tube_design(tubes=my_tubes, defect_weights=my_weights, model=my_model, options=my_options)\n",
"my_results = my_design.run(trials=1)[0]\n",
"\n",
"# Display the design results\n",
"my_results"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"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.7.8"
}
},
"nbformat": 4,
"nbformat_minor": 4
}