{ "cells": [ { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "importDicom ver: 1.0.2\n", "loadDicom ver: 1.0.0\n" ] }, { "ename": "RuntimeError", "evalue": "Failed to load node from file: /data/VM/win10/shared/EMBRACE/LJU001/Transform_R.h5", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mRuntimeError\u001b[0m Traceback (most recent call last)", "In \u001b[0;34m[19]\u001b[0m:\nLine \u001b[0;34m90\u001b[0m: \n", "File \u001b[0;34m/home/studen/software/install/Slicer/bin/Python/slicer/util.py\u001b[0m, in \u001b[0;32mloadTransform\u001b[0m:\nLine \u001b[0;34m749\u001b[0m: \u001b[34mreturn\u001b[39;49;00m loadNodeFromFile(filename, \u001b[33m'\u001b[39;49;00m\u001b[33mTransformFile\u001b[39;49;00m\u001b[33m'\u001b[39;49;00m, {}, returnNode)\n", "File \u001b[0;34m/home/studen/software/install/Slicer/bin/Python/slicer/util.py\u001b[0m, in \u001b[0;32mloadNodeFromFile\u001b[0m:\nLine \u001b[0;34m598\u001b[0m: \u001b[34mraise\u001b[39;49;00m \u001b[36mRuntimeError\u001b[39;49;00m(errorMessage)\n", "\u001b[0;31mRuntimeError\u001b[0m: Failed to load node from file: /data/VM/win10/shared/EMBRACE/LJU001/Transform_R.h5\n\u001b[0;31m---------------------------------------------------------------------------\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Imported a DICOM directory, checking for extensions\n", "Imported a DICOM directory, checking for extensions\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Please install SlicerRT extension to enable loading of DICOM RT Structure Set objects\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loading with imageIOName: GDCM\n", "Imported a DICOM directory, checking for extensions\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Please install SlicerRT extension to enable loading of DICOM RT Structure Set objects\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loading with imageIOName: GDCM\n" ] } ], "source": [ "import sys\n", "import os\n", "import json\n", "import pydicom\n", "import importlib\n", "import numpy\n", "import Elastix \n", "import vtk\n", "import DicomRtImportExportPlugin\n", "import glob\n", "import zipfile\n", "\n", "#just load nix suite\n", "sys.path.append(os.path.join(os.path.expanduser('~'),'software','src','nixSuite','wrapper'))\n", "import nixWrapper\n", "\n", "nixWrapper.loadLibrary('labkeyInterface')\n", "import labkeyInterface\n", "\n", "#DB access at ONKO-NIX\n", "net=labkeyInterface.labkeyInterface()\n", "fconfig=os.path.join(os.path.expanduser('~'),'.labkey','network.json')\n", "net.init(fconfig)\n", "\n", "#DMR are at merlin\n", "netDMR=labkeyInterface.labkeyInterface()\n", "fconfigDMR=os.path.join(os.path.expanduser('~'),'.labkey','merlin.json')\n", "netDMR.init(fconfigDMR)\n", "\n", "import labkeyDatabaseBrowser\n", "db=labkeyDatabaseBrowser.labkeyDB(net)\n", "\n", "import labkeyFileBrowser\n", "fb=labkeyFileBrowser.labkeyFileBrowser(net)\n", "fbDMR=labkeyFileBrowser.labkeyFileBrowser(netDMR)\n", "\n", "#dicom tools\n", "nixWrapper.loadLibrary('DICOMtools')\n", "try:\n", " importlib.reload(importDicom)\n", "except NameError:\n", " import importDicom\n", " \n", "try:\n", " importlib.reload(loadDicom)\n", "except NameError:\n", " import loadDicom\n", "\n", " \n", "nixWrapper.loadLibrary('EMBRACE')\n", "try:\n", " importlib.reload(loadPatient)\n", "except NameError:\n", " import loadPatient\n", "\n", "project='EMBRACE/studija'\n", "iDicom=importDicom.importDicom()\n", "lDicom=loadDicom.loadDicom()\n", "\n", "try:\n", " del elastix\n", "except NameError:\n", " pass\n", "\n", "elastix = Elastix.ElastixLogic()\n", "\n", "registrationIndex = 29 #targeted EMBRACE\n", "registrationIndex = 30 #rigid EMBRACE\n", "RegistrationPresets_ParameterFilenames = 5\n", "parameterFilenames = elastix.getRegistrationPresets()[registrationIndex]\\\n", " [RegistrationPresets_ParameterFilenames]\n", "\n", "ids=range(1,87)\n", "ids=range(1,2)\n", "\n", "baseDir=os.path.join('/data','VM','win10','shared','EMBRACE')\n", "if not os.path.isdir(baseDir):\n", " os.makedirs(baseDir)\n", "\n", "transformLogic = slicer.vtkSlicerTransformLogic()\n", "\n", "exporter = DicomRtImportExportPlugin.DicomRtImportExportPluginClass()\n", "shn = slicer.vtkMRMLSubjectHierarchyNode.GetSubjectHierarchyNode(slicer.mrmlScene)\n", "for id in ids:\n", " loadDicom.clearNodes()\n", " label = 'LJU'+'{:03d}'.format(id)\n", " oDir=os.path.join(baseDir,label)\n", " \n", " files=os.listdir(oDir)\n", " #tf=slicer.util.loadTransform(os.path.join(oDir,'Transform_R.h5'))\n", " vnode=slicer.util.loadVolume(os.path.join(oDir,label+'_DMR.nrrd'))\n", " segNode = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLSegmentationNode')\n", " segNode.SetName(label)\n", " for f in files:\n", " if f.find(label)!=0:\n", " continue\n", " if f.find(label+'_DF')>-1:\n", " continue\n", " if f.find(label+'_CT')>-1:\n", " continue\n", " if f.find(label+'_DMR')>-1:\n", " continue\n", " labelMap=slicer.util.loadVolume(os.path.join(oDir,f),{'labelmap':1})\n", " segment=slicer.vtkSlicerSegmentationsModuleLogic.CreateSegmentFromLabelmapVolumeNode(labelMap,segNode)\n", " g=f.replace(label+'_','')\n", " g=g.replace('.nrrd','')\n", " try:\n", " segment.SetName(g)\n", " segNode.GetSegmentation().AddSegment(segment,g)\n", " except AttributeError:\n", " pass\n", " print('{}'.format(f))\n", " segNode.SetAndObserveTransformNodeID(tf.GetID())\n", " for i in numpy.arange(0,segNode.GetSegmentation().GetNumberOfSegments()):\n", " sId=segNode.GetSegmentation().GetNthSegmentID(int(i))\n", " segment=segNode.GetSegmentation().GetSegment(sId)\n", " print('[{}] {}'.format(sId,segment.GetName()))\n", " repNames=[]\n", " segment.GetContainedRepresentationNames(repNames)\n", " print(repNames)\n", " \n", " exportables=[]\n", " itemId=shn.GetItemByDataNode(vnode)\n", " print('Item id: {}'.format(itemId))\n", " exportables.extend(exporter.examineForExport(itemId))\n", " itemId=shn.GetItemByDataNode(segNode)\n", " print('Item id: {}'.format(itemId))\n", " exportables.extend(exporter.examineForExport(itemId))\n", " \n", " print('Exp size: {}'.format(len(exportables))) \n", " for exp in exportables:\n", " exp.directory=oDir\n", " exp.setTag('PatientID',label)\n", " exp.setTag('PatientName',label)\n", " exp.setTag('StudyDescription','contoursAligned')\n", " exp.setTag('PatientID',label)\n", " #if exp.tag('Modality')=='CT':\n", " # exp.setTag('Modality','MR')\n", " \n", " print(exporter.export(exportables))\n", " " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "s" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "ename": "AttributeError", "evalue": "module 'slicer.util' has no attribute 'getListOfNodes'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", "In \u001b[0;34m[29]\u001b[0m:\nLine \u001b[0;34m1\u001b[0m: \n", "\u001b[0;31mAttributeError\u001b[0m: module 'slicer.util' has no attribute 'getListOfNodes'\n\u001b[0;31m---------------------------------------------------------------------------\u001b[0m" ] }, { "data": { "text/plain": [ "OrderedDict([('Crosshair', (MRMLCorePython.vtkMRMLCrosshairNode)0x7fddbc00fee8), ('Selection', (MRMLCorePython.vtkMRMLSelectionNode)0x7fddbf363708), ('Interaction', (MRMLCorePython.vtkMRMLInteractionNode)0x7fddbf368ee8), ('View1', (MRMLCorePython.vtkMRMLViewNode)0x7fddbf3681c8), ('Red', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf357b88), ('Green', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf357288), ('Yellow', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf357be8), ('Layout', (MRMLCorePython.vtkMRMLLayoutNode)0x7fddbf357348), ('SliceComposite', (MRMLCorePython.vtkMRMLSliceCompositeNode)0x7fddbf3570a8), ('Red Display', (MRMLCorePython.vtkMRMLModelDisplayNode)0x7fddbf3571c8), ('LinearTransform', (MRMLCorePython.vtkMRMLLinearTransformNode)0x7fddbf357108), ('Red Volume Slice', (MRMLCorePython.vtkMRMLModelNode)0x7fddbf357168), ('SliceComposite_1', (MRMLCorePython.vtkMRMLSliceCompositeNode)0x7fddbf3573a8), ('Green Display', (MRMLCorePython.vtkMRMLModelDisplayNode)0x7fddbf357408), ('LinearTransform_1', (MRMLCorePython.vtkMRMLLinearTransformNode)0x7fddbf357468), ('Green Volume Slice', (MRMLCorePython.vtkMRMLModelNode)0x7fddbf3574c8), ('SubjectHierarchy', (MRMLCorePython.vtkMRMLSubjectHierarchyNode)0x7fddbf33cac8), ('SliceComposite_2', (MRMLCorePython.vtkMRMLSliceCompositeNode)0x7fddbf357528), ('Yellow Display', (MRMLCorePython.vtkMRMLModelDisplayNode)0x7fddbf357588), ('LinearTransform_2', (MRMLCorePython.vtkMRMLLinearTransformNode)0x7fddbf3575e8), ('Yellow Volume Slice', (MRMLCorePython.vtkMRMLModelNode)0x7fddbf357648), ('Camera', (MRMLCorePython.vtkMRMLCameraNode)0x7fddbf3576a8), ('Labels', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf357708), ('FullRainbow', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf357768), ('Grey', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf3577c8), ('Iron', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf357828), ('Rainbow', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf357888), ('Ocean', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf3578e8), ('Desert', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf357948), ('InvertedGrey', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf3579a8), ('ReverseRainbow', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf357a08), ('fMRI', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf357a68), ('fMRIPA', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf357ac8), ('Random', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf357b28), ('Blue', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf3572e8), ('Cyan', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf357048), ('Magenta', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf357c48), ('Warm1', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf357ca8), ('Warm2', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf357d08), ('Warm3', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf357d68), ('Cool1', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf357dc8), ('Cool2', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf357e28), ('Cool3', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf357e88), ('WarmShade1', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf357ee8), ('WarmShade2', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf357f48), ('WarmShade3', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf357fa8), ('CoolShade1', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf351048), ('CoolShade2', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf3510a8), ('CoolShade3', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf351108), ('WarmTint1', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf351168), ('WarmTint2', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf3511c8), ('WarmTint3', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf351228), ('CoolTint1', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf351288), ('CoolTint2', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf3512e8), ('CoolTint3', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf351348), ('RandomIntegers', (MRMLCorePython.vtkMRMLProceduralColorNode)0x7fddbf3513a8), ('RedGreenBlue', (MRMLCorePython.vtkMRMLProceduralColorNode)0x7fddbf351468), ('PET-Heat', (MRMLCorePython.vtkMRMLPETProceduralColorNode)0x7fddbf351408), ('PET-Rainbow', (MRMLCorePython.vtkMRMLPETProceduralColorNode)0x7fddbf3514c8), ('PET-MaximumIntensityProjection', (MRMLCorePython.vtkMRMLPETProceduralColorNode)0x7fddbf351588), ('dGEMRIC-1.5T', (MRMLCorePython.vtkMRMLdGEMRICProceduralColorNode)0x7fddbf351528), ('dGEMRIC-3T', (MRMLCorePython.vtkMRMLdGEMRICProceduralColorNode)0x7fddbf351648), ('ColorTableStorage', (MRMLCorePython.vtkMRMLColorTableStorageNode)0x7fddbf3515e8), ('MediumChartColors', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf3516a8), ('ColorTableStorage_1', (MRMLCorePython.vtkMRMLColorTableStorageNode)0x7fddbf351768), ('SPL-BrainAtlas-2012-ColorFile', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf351708), ('ColorTableStorage_2', (MRMLCorePython.vtkMRMLColorTableStorageNode)0x7fddbf3517c8), ('LightPaleChartColors', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf351828), ('ColorTableStorage_3', (MRMLCorePython.vtkMRMLColorTableStorageNode)0x7fddbf351888), ('Cividis', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf3518e8), ('ColorTableStorage_4', (MRMLCorePython.vtkMRMLColorTableStorageNode)0x7fddbf351948), ('DivergingBlueRed', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf3519a8), ('ColorTableStorage_5', (MRMLCorePython.vtkMRMLColorTableStorageNode)0x7fddbf351a68), ('SPL-BrainAtlas-ColorFile', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf351a08), ('ColorTableStorage_6', (MRMLCorePython.vtkMRMLColorTableStorageNode)0x7fddbf351ac8), ('AbdomenColors', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf351b28), ('ColorTableStorage_7', (MRMLCorePython.vtkMRMLColorTableStorageNode)0x7fddbf351be8), ('PelvisColor', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf351b88), ('ColorTableStorage_8', (MRMLCorePython.vtkMRMLColorTableStorageNode)0x7fddbf351ca8), ('GenericAnatomyColors', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf351c48), ('ColorTableStorage_9', (MRMLCorePython.vtkMRMLColorTableStorageNode)0x7fddbf351d08), ('Magma', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf351d68), ('ColorTableStorage_10', (MRMLCorePython.vtkMRMLColorTableStorageNode)0x7fddbf351dc8), ('Slicer3_2010_Label_Colors', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf351e28), ('ColorTableStorage_11', (MRMLCorePython.vtkMRMLColorTableStorageNode)0x7fddbf351e88), ('SPL-BrainAtlas-2009-ColorFile', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf351ee8), ('ColorTableStorage_12', (MRMLCorePython.vtkMRMLColorTableStorageNode)0x7fddbf351f48), ('Plasma', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf351fa8), ('ColorTableStorage_13', (MRMLCorePython.vtkMRMLColorTableStorageNode)0x7fddbf35f048), ('Slicer3_2010_Brain_Labels', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf35f0a8), ('ColorTableStorage_14', (MRMLCorePython.vtkMRMLColorTableStorageNode)0x7fddbf35f108), ('DarkBrightChartColors', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf35f168), ('ColorTableStorage_15', (MRMLCorePython.vtkMRMLColorTableStorageNode)0x7fddbf35f1c8), ('GenericColors', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf35f228), ('ColorTableStorage_16', (MRMLCorePython.vtkMRMLColorTableStorageNode)0x7fddbf35f2e8), ('64Color-Nonsemantic', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf35f288), ('ColorTableStorage_17', (MRMLCorePython.vtkMRMLColorTableStorageNode)0x7fddbf35f348), ('Viridis', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf35f3a8), ('ColorTableStorage_18', (MRMLCorePython.vtkMRMLColorTableStorageNode)0x7fddbf35f408), ('Inferno', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf35f468), ('ColorTableStorage_19', (MRMLCorePython.vtkMRMLColorTableStorageNode)0x7fddbf35f4c8), ('ColdToHotRainbow', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf35f528), ('ColorTableStorage_20', (MRMLCorePython.vtkMRMLColorTableStorageNode)0x7fddbf35f5e8), ('HotToColdRainbow', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf35f588), ('ApplicationLength', (MRMLCorePython.vtkMRMLUnitNode)0x7fddbf35f6a8), ('ApplicationTime', (MRMLCorePython.vtkMRMLUnitNode)0x7fddbf35f648), ('ApplicationFrequency', (MRMLCorePython.vtkMRMLUnitNode)0x7fddbf35f708), ('ApplicationVelocity', (MRMLCorePython.vtkMRMLUnitNode)0x7fddbf35f768), ('ApplicationIntensity', (MRMLCorePython.vtkMRMLUnitNode)0x7fddbf35f7c8), ('ColorTableStorage_21', (MRMLCorePython.vtkMRMLColorTableStorageNode)0x7fddbf35f828), ('Isodose_ColorTable_Default', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf35f888), ('Dose_ColorTable', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf35f8e8), ('Isodose_ColorTable_Relative', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf35f948), ('Dose_ColorTable_Relative', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf35f9a8), ('ClipModels', (MRMLCorePython.vtkMRMLClipModelsNode)0x7fddbf35fa68), ('ColorTableStorage_22', (MRMLCorePython.vtkMRMLColorTableStorageNode)0x7fddbf35fa08), ('Gamma_ColorTable_1', (MRMLCorePython.vtkMRMLColorTableNode)0x7fddbf35fac8), ('ScriptedModule', (MRMLCorePython.vtkMRMLScriptedModuleNode)0x7fddbc016768), ('TransformStorage', (MRMLCorePython.vtkMRMLTransformStorageNode)0x7fddbf35fb28), ('Transform_R', (MRMLCorePython.vtkMRMLLinearTransformNode)0x7fddbf35fb88), ('TransformStorage_1', (MRMLCorePython.vtkMRMLTransformStorageNode)0x7fddbf35fbe8), ('Transform_R_1', (MRMLCorePython.vtkMRMLLinearTransformNode)0x7fddbf35fc48), ('TransformStorage_2', (MRMLCorePython.vtkMRMLTransformStorageNode)0x7fddbf35fca8), ('Transform_R_2', (MRMLCorePython.vtkMRMLLinearTransformNode)0x7fddbf35fd08), ('TransformStorage_3', (MRMLCorePython.vtkMRMLTransformStorageNode)0x7fddbf35fd68), ('Transform_R_3', (MRMLCorePython.vtkMRMLLinearTransformNode)0x7fddbf35fdc8), ('TransformStorage_4', (MRMLCorePython.vtkMRMLTransformStorageNode)0x7fddbf35fe28), ('Transform_R_4', (MRMLCorePython.vtkMRMLLinearTransformNode)0x7fddbf3682e8), ('LJU002_bowel_13_Storage', (MRMLCorePython.vtkMRMLSegmentationStorageNode)0x7fddbf35fe88), ('LJU002', (MRMLCorePython.vtkMRMLSegmentationNode)0x7fddbf363d68), ('SegmentationDisplay_113', (MRMLCorePython.vtkMRMLSegmentationDisplayNode)0x7fddbf35fee8)])" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "(MRMLCorePython.vtkMRMLSegmentationNode)0x7fddbf363d68" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "(MRMLCorePython.vtkMRMLSegmentationStorageNode)0x7fddbf357fa8" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "slicer.util.getListOfNodes()\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Slicer 4.11", "language": "python", "name": "slicer-4.11" }, "language_info": { "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "version": "3.6.7" } }, "nbformat": 4, "nbformat_minor": 4 }